diff --git a/src/main/java/com/extendedae_plus/content/matrix/PatternCorePlusBlockEntity.java b/src/main/java/com/extendedae_plus/content/matrix/PatternCorePlusBlockEntity.java index b319c6d..0fc9c1c 100644 --- a/src/main/java/com/extendedae_plus/content/matrix/PatternCorePlusBlockEntity.java +++ b/src/main/java/com/extendedae_plus/content/matrix/PatternCorePlusBlockEntity.java @@ -1,176 +1,54 @@ package com.extendedae_plus.content.matrix; -import appeng.api.config.Settings; -import appeng.api.config.YesNo; -import appeng.api.crafting.IPatternDetails; -import appeng.api.crafting.PatternDetailsHelper; import appeng.api.implementations.blockentities.PatternContainerGroup; import appeng.api.inventories.InternalInventory; -import appeng.api.networking.IGrid; -import appeng.api.networking.crafting.ICraftingProvider; import appeng.api.stacks.AEItemKey; -import appeng.api.stacks.KeyCounter; import appeng.blockentity.crafting.IMolecularAssemblerSupportedPattern; import appeng.crafting.pattern.EncodedPatternItem; -import appeng.helpers.patternprovider.PatternContainer; import appeng.util.inv.AppEngInternalInventory; -import appeng.util.inv.FilteredInternalInventory; -import appeng.util.inv.filter.AEItemFilters; import appeng.util.inv.filter.IAEItemFilter; import com.extendedae_plus.init.ModBlockEntities; import com.extendedae_plus.init.ModItems; -import com.glodblock.github.extendedae.common.me.matrix.ClusterAssemblerMatrix; +import com.extendedae_plus.mixin.extendedae.accessor.TileAssemblerMatrixPatternAccessor; +import com.extendedae_plus.mixin.minecraft.accessor.BlockEntityAccessor; import com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerMatrixPattern; import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; +import appeng.api.crafting.PatternDetailsHelper; + public class PatternCorePlusBlockEntity extends TileAssemblerMatrixPattern { public static final int INV_SIZE = 72; - private final AppEngInternalInventory patternInventory; - private final FilteredInternalInventory insertOnlyInventory; - private final List patterns = new ArrayList<>(); - public PatternCorePlusBlockEntity(BlockPos pos, BlockState blockState) { super(pos, blockState); - this.patternInventory = new AppEngInternalInventory(this, INV_SIZE, 1); - this.patternInventory.setFilter(new Filter(this::getLevel)); - this.insertOnlyInventory = new FilteredInternalInventory(this.patternInventory, AEItemFilters.INSERT_ONLY); - this.getMainNode().addService(ICraftingProvider.class, this); - } - @Override - public void saveAdditional(CompoundTag data, HolderLookup.Provider registries) { - super.saveAdditional(data, registries); - this.patternInventory.writeToNBT(data, "pattern", registries); - } + ((BlockEntityAccessor) (Object) this) + .extendedae_plus$setType(ModBlockEntities.ASSEMBLER_MATRIX_PATTERN_PLUS_BE.get()); - @Override - public void loadTag(CompoundTag data, HolderLookup.Provider registries) { - super.loadTag(data, registries); - this.patternInventory.readFromNBT(data, "pattern", registries); - } - - public AppEngInternalInventory getPatternInventory() { - return this.patternInventory; - } - - @Override - public AppEngInternalInventory getExposedInventory() { - return this.patternInventory; - } - - - public InternalInventory getInsertOnlyInventory() { - return this.insertOnlyInventory; - } - - public long getLocateID() { - return this.worldPosition.asLong(); - } - - public void updatePatterns() { - this.patterns.clear(); - for (var stack : this.patternInventory) { - var details = PatternDetailsHelper.decodePattern(stack, this.getLevel()); - if (details != null) { - this.patterns.add(details); - } - } - ICraftingProvider.requestUpdate(this.getMainNode()); - } - - @Override - public void addAdditionalDrops(Level level, BlockPos pos, List drops) { - super.addAdditionalDrops(level, pos, drops); - for (var pattern : this.patternInventory) { - drops.add(pattern); - } - } - - @Override - public void clearContent() { - super.clearContent(); - this.patternInventory.clear(); - } - - @Override - public void add(ClusterAssemblerMatrix cluster) { - cluster.addPattern(this); - } - - public void onChangeInventory(InternalInventory inv, int slot) { - this.saveChanges(); - this.updatePatterns(); - } - - @Override - public void saveChangedInventory(AppEngInternalInventory inv) { - this.saveChanges(); - this.updatePatterns(); - } - - @Override - public void onReady() { - super.onReady(); - this.updatePatterns(); - } - - @Override - public List getAvailablePatterns() { - return this.patterns; - } - - @Override - public boolean pushPattern(IPatternDetails patternDetails, KeyCounter[] inputHolder) { - if (!isFormed() || !this.getMainNode().isActive() || !this.patterns.contains(patternDetails)) { - return false; - } - return this.cluster.pushCraftingJob(patternDetails, inputHolder); - } - - @Override - public boolean isBusy() { - return this.cluster == null || this.cluster.isBusy(); - } - - @Override - public @Nullable IGrid getGrid() { - return this.getMainNode().getGrid(); - } - - @Override - public InternalInventory getTerminalPatternInventory() { - return this.patternInventory; - } - - @Override - public boolean isVisibleInTerminal() { - return this.manager.getSetting(Settings.PATTERN_ACCESS_TERMINAL) == YesNo.YES; + var inventory = new AppEngInternalInventory(this, INV_SIZE, 1); + inventory.setFilter(new Filter(this::getLevel)); + ((TileAssemblerMatrixPatternAccessor) (Object) this).extendedae_plus$setPatternInventory(inventory); } @Override public PatternContainerGroup getTerminalGroup() { var icon = AEItemKey.of(ModItems.ASSEMBLER_MATRIX_PATTERN_PLUS.get()); - return new PatternContainerGroup(icon, icon.getDisplayName(), List.of(Component.translatable("gui.expatternprovider.assembler_matrix.pattern"))); - } - - @Override - public long getTerminalSortOrder() { - return this.getLocateID(); + var name = this.hasCustomName() ? this.getCustomName() : icon.getDisplayName(); + return new PatternContainerGroup( + icon, + name, + List.of(Component.translatable("gui.extendedae_plus.assembler_matrix.pattern")) + ); } @Override @@ -182,8 +60,9 @@ public class PatternCorePlusBlockEntity extends TileAssemblerMatrixPattern { @Override public boolean allowInsert(InternalInventory inv, int slot, ItemStack stack) { - if (stack.getItem() instanceof EncodedPatternItem) { - return PatternDetailsHelper.decodePattern(stack, world.get()) instanceof IMolecularAssemblerSupportedPattern; + if (stack.getItem() instanceof EncodedPatternItem) { + return PatternDetailsHelper.decodePattern(stack, world.get()) + instanceof IMolecularAssemblerSupportedPattern; } return false; } diff --git a/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java new file mode 100644 index 0000000..ff82b40 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/extendedae/accessor/TileAssemblerMatrixPatternAccessor.java @@ -0,0 +1,15 @@ +package com.extendedae_plus.mixin.extendedae.accessor; + +import appeng.util.inv.AppEngInternalInventory; +import com.glodblock.github.extendedae.common.tileentities.matrix.TileAssemblerMatrixPattern; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(TileAssemblerMatrixPattern.class) +public interface TileAssemblerMatrixPatternAccessor { + + @Accessor("patternInventory") + @Mutable + void extendedae_plus$setPatternInventory(AppEngInternalInventory inventory); +} diff --git a/src/main/java/com/extendedae_plus/mixin/minecraft/accessor/BlockEntityAccessor.java b/src/main/java/com/extendedae_plus/mixin/minecraft/accessor/BlockEntityAccessor.java new file mode 100644 index 0000000..98fd066 --- /dev/null +++ b/src/main/java/com/extendedae_plus/mixin/minecraft/accessor/BlockEntityAccessor.java @@ -0,0 +1,15 @@ +package com.extendedae_plus.mixin.minecraft.accessor; + +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(BlockEntity.class) +public interface BlockEntityAccessor { + + @Accessor("type") + @Mutable + void extendedae_plus$setType(BlockEntityType type); +} diff --git a/src/main/resources/assets/extendedae_plus/lang/en_us.json b/src/main/resources/assets/extendedae_plus/lang/en_us.json index c675a17..3e67268 100644 --- a/src/main/resources/assets/extendedae_plus/lang/en_us.json +++ b/src/main/resources/assets/extendedae_plus/lang/en_us.json @@ -50,6 +50,7 @@ "block.extendedae_plus.assembler_matrix_speed_plus": "Assembler Matrix Speed Core Plus", "block.extendedae_plus.assembler_matrix_crafter_plus": "Assembler Matrix Crafter Core Plus", "block.extendedae_plus.assembler_matrix_pattern_plus": "Assembler Matrix Pattern Core Plus", + "gui.extendedae_plus.assembler_matrix.pattern": "Assembler Matrix Pattern Core Plus", "extendedae_plus.upload_to_matrix": "Upload to Assembly Matrix", "extendedae_plus.upload_to_matrix.success": "Pattern Uploaded to Assembly Matrix", diff --git a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json index 52d65eb..783796d 100644 --- a/src/main/resources/assets/extendedae_plus/lang/zh_cn.json +++ b/src/main/resources/assets/extendedae_plus/lang/zh_cn.json @@ -50,6 +50,7 @@ "block.extendedae_plus.assembler_matrix_speed_plus": "超级装配矩阵速度核心", "block.extendedae_plus.assembler_matrix_crafter_plus": "超级装配矩阵合成核心", "block.extendedae_plus.assembler_matrix_pattern_plus": "超级装配矩阵样板核心", + "gui.extendedae_plus.assembler_matrix.pattern": "超级装配矩阵样板核心", "extendedae_plus.upload_to_matrix": "上传到装配矩阵", "extendedae_plus.upload_to_matrix.success": "样板已上传到装配矩阵", diff --git a/src/main/resources/extendedae_plus.mixins.json b/src/main/resources/extendedae_plus.mixins.json index a36ae72..0ebd288 100644 --- a/src/main/resources/extendedae_plus.mixins.json +++ b/src/main/resources/extendedae_plus.mixins.json @@ -53,6 +53,7 @@ "ae2.parts.automation.IOBusPartChannelCardMixin", "ae2.parts.storagebus.StorageBusPartChannelCardMixin", "ae2WTlib.ContainerUWirelessExPatternTerminalMixin", + "extendedae.accessor.TileAssemblerMatrixPatternAccessor", "extendedae.common.PartExPatternProviderMixin", "extendedae.common.TileExPatternProviderMixin", "extendedae.common.matrix.ClusterAssemblerMatrixMixin", @@ -60,7 +61,8 @@ "extendedae.container.ContainerAssemblerMatrixPatternSlotTrackerMixin", "extendedae.container.ContainerExPatternProviderMixin", "extendedae.container.ContainerExPatternTerminalMixin", - "extendedae.container.ContainerWirelessExPatternTerminalMixin" + "extendedae.container.ContainerWirelessExPatternTerminalMixin", + "minecraft.accessor.BlockEntityAccessor" ], "client": [ "accessor.AbstractContainerScreenAccessor",