超级装配矩阵样板核心
This commit is contained in:
parent
6580173e71
commit
1b487fb1af
|
|
@ -10,6 +10,7 @@ import com.extendedae_plus.api.ids.EAPComponents;
|
||||||
import com.extendedae_plus.api.storage.InfinityBigIntegerCellHandler;
|
import com.extendedae_plus.api.storage.InfinityBigIntegerCellHandler;
|
||||||
import com.extendedae_plus.config.ModConfigs;
|
import com.extendedae_plus.config.ModConfigs;
|
||||||
import com.extendedae_plus.content.matrix.CrafterCorePlusBlockEntity;
|
import com.extendedae_plus.content.matrix.CrafterCorePlusBlockEntity;
|
||||||
|
import com.extendedae_plus.content.matrix.PatternCorePlusBlockEntity;
|
||||||
import com.extendedae_plus.content.matrix.SpeedCorePlusBlockEntity;
|
import com.extendedae_plus.content.matrix.SpeedCorePlusBlockEntity;
|
||||||
import com.extendedae_plus.init.*;
|
import com.extendedae_plus.init.*;
|
||||||
import com.extendedae_plus.util.storage.InfinityStorageManager;
|
import com.extendedae_plus.util.storage.InfinityStorageManager;
|
||||||
|
|
@ -167,6 +168,13 @@ public class ExtendedAEPlus {
|
||||||
null
|
null
|
||||||
);
|
);
|
||||||
|
|
||||||
|
ModBlocks.ASSEMBLER_MATRIX_PATTERN_PLUS.get().setBlockEntity(
|
||||||
|
PatternCorePlusBlockEntity.class,
|
||||||
|
ModBlockEntities.ASSEMBLER_MATRIX_PATTERN_PLUS_BE.get(),
|
||||||
|
null,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
LOGGER.info("Bound UploadCoreBlockEntity to assembler matrix upload core block.");
|
LOGGER.info("Bound UploadCoreBlockEntity to assembler matrix upload core block.");
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
LOGGER.warn("Failed to bind block entities: {}", t.toString());
|
LOGGER.warn("Failed to bind block entities: {}", t.toString());
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.extendedae_plus.content.matrix;
|
||||||
|
|
||||||
|
import com.extendedae_plus.init.ModItems;
|
||||||
|
import com.glodblock.github.extendedae.common.blocks.matrix.BlockAssemblerMatrixBase;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
|
|
||||||
|
public class PatternCorePlusBlock extends BlockAssemblerMatrixBase<PatternCorePlusBlockEntity> {
|
||||||
|
|
||||||
|
public PatternCorePlusBlock(Properties props) {
|
||||||
|
super(props);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Item getPresentItem() {
|
||||||
|
return ModItems.ASSEMBLER_MATRIX_PATTERN_PLUS.get();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,181 @@
|
||||||
|
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.InternalInventoryHost;
|
||||||
|
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.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;
|
||||||
|
|
||||||
|
public class PatternCorePlusBlockEntity extends TileAssemblerMatrixPattern {
|
||||||
|
|
||||||
|
public static final int INV_SIZE = 72;
|
||||||
|
|
||||||
|
private final AppEngInternalInventory patternInventory;
|
||||||
|
private final List<IPatternDetails> 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.getMainNode().addService(ICraftingProvider.class, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveAdditional(CompoundTag data, HolderLookup.Provider registries) {
|
||||||
|
super.saveAdditional(data, registries);
|
||||||
|
this.patternInventory.writeToNBT(data, "pattern", registries);
|
||||||
|
}
|
||||||
|
|
||||||
|
@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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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<ItemStack> 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void saveChangedInventory(AppEngInternalInventory inv) {
|
||||||
|
this.saveChanges();
|
||||||
|
this.updatePatterns();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReady() {
|
||||||
|
super.onReady();
|
||||||
|
this.updatePatterns();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onChangeInventory(AppEngInternalInventory inv, int slot) {
|
||||||
|
this.saveChanges();
|
||||||
|
this.updatePatterns();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<IPatternDetails> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
@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();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull BlockEntityType<?> getType() {
|
||||||
|
return ModBlockEntities.ASSEMBLER_MATRIX_PATTERN_PLUS_BE.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
public record Filter(Supplier<Level> world) implements IAEItemFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean allowInsert(InternalInventory inv, int slot, ItemStack stack) {
|
||||||
|
if (stack.getItem() instanceof EncodedPatternItem) {
|
||||||
|
return PatternDetailsHelper.decodePattern(stack, world.get()) instanceof IMolecularAssemblerSupportedPattern;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ package com.extendedae_plus.init;
|
||||||
|
|
||||||
import com.extendedae_plus.ExtendedAEPlus;
|
import com.extendedae_plus.ExtendedAEPlus;
|
||||||
import com.extendedae_plus.content.matrix.CrafterCorePlusBlockEntity;
|
import com.extendedae_plus.content.matrix.CrafterCorePlusBlockEntity;
|
||||||
|
import com.extendedae_plus.content.matrix.PatternCorePlusBlockEntity;
|
||||||
import com.extendedae_plus.content.matrix.SpeedCorePlusBlockEntity;
|
import com.extendedae_plus.content.matrix.SpeedCorePlusBlockEntity;
|
||||||
import com.extendedae_plus.content.wireless.WirelessTransceiverBlockEntity;
|
import com.extendedae_plus.content.wireless.WirelessTransceiverBlockEntity;
|
||||||
import com.extendedae_plus.content.controller.NetworkPatternControllerBlockEntity;
|
import com.extendedae_plus.content.controller.NetworkPatternControllerBlockEntity;
|
||||||
|
|
@ -64,4 +65,10 @@ public final class ModBlockEntities {
|
||||||
BLOCK_ENTITY_TYPES.register("assembler_matrix_crafter_plus",
|
BLOCK_ENTITY_TYPES.register("assembler_matrix_crafter_plus",
|
||||||
()-> BlockEntityType.Builder.of(CrafterCorePlusBlockEntity::new,
|
()-> BlockEntityType.Builder.of(CrafterCorePlusBlockEntity::new,
|
||||||
ModBlocks.ASSEMBLER_MATRIX_CRAFTER_PLUS.get()).build(null));
|
ModBlocks.ASSEMBLER_MATRIX_CRAFTER_PLUS.get()).build(null));
|
||||||
|
|
||||||
|
//超级装配矩阵样板核心
|
||||||
|
public static final DeferredHolder<BlockEntityType<?>,BlockEntityType<PatternCorePlusBlockEntity>> ASSEMBLER_MATRIX_PATTERN_PLUS_BE=
|
||||||
|
BLOCK_ENTITY_TYPES.register("assembler_matrix_pattern_plus",
|
||||||
|
()-> BlockEntityType.Builder.of(PatternCorePlusBlockEntity::new,
|
||||||
|
ModBlocks.ASSEMBLER_MATRIX_PATTERN_PLUS.get()).build(null));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,11 @@ package com.extendedae_plus.init;
|
||||||
import com.extendedae_plus.ExtendedAEPlus;
|
import com.extendedae_plus.ExtendedAEPlus;
|
||||||
import com.extendedae_plus.content.controller.NetworkPatternControllerBlock;
|
import com.extendedae_plus.content.controller.NetworkPatternControllerBlock;
|
||||||
import com.extendedae_plus.content.matrix.CrafterCorePlusBlock;
|
import com.extendedae_plus.content.matrix.CrafterCorePlusBlock;
|
||||||
|
import com.extendedae_plus.content.matrix.PatternCorePlusBlock;
|
||||||
import com.extendedae_plus.content.matrix.SpeedCorePlusBlock;
|
import com.extendedae_plus.content.matrix.SpeedCorePlusBlock;
|
||||||
|
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
||||||
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
import com.extendedae_plus.content.wireless.WirelessTransceiverBlock;
|
||||||
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
import com.extendedae_plus.content.crafting.EPlusCraftingUnitType;
|
||||||
import com.extendedae_plus.content.matrix.UploadCoreBlock;
|
|
||||||
import appeng.block.crafting.CraftingUnitBlock;
|
import appeng.block.crafting.CraftingUnitBlock;
|
||||||
import appeng.blockentity.crafting.CraftingBlockEntity;
|
import appeng.blockentity.crafting.CraftingBlockEntity;
|
||||||
import appeng.core.definitions.AEBlockEntities;
|
import appeng.core.definitions.AEBlockEntities;
|
||||||
|
|
@ -104,4 +105,13 @@ public final class ModBlocks {
|
||||||
.requiresCorrectToolForDrops()
|
.requiresCorrectToolForDrops()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
public static final DeferredBlock<PatternCorePlusBlock> ASSEMBLER_MATRIX_PATTERN_PLUS = BLOCKS.register(
|
||||||
|
"assembler_matrix_pattern_plus",
|
||||||
|
() -> new PatternCorePlusBlock(
|
||||||
|
BlockBehaviour.Properties.of()
|
||||||
|
.strength(1.5F, 6.0F)
|
||||||
|
.requiresCorrectToolForDrops()
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,8 @@ public final class ModCreativeTabs {
|
||||||
ModItems.ENTITY_TICKER_PART_ITEM.get().getDefaultInstance(),
|
ModItems.ENTITY_TICKER_PART_ITEM.get().getDefaultInstance(),
|
||||||
ModItems.INFINITY_BIGINTEGER_CELL_ITEM.get().getDefaultInstance(),
|
ModItems.INFINITY_BIGINTEGER_CELL_ITEM.get().getDefaultInstance(),
|
||||||
ModItems.ASSEMBLER_MATRIX_SPEED_PLUS.get().getDefaultInstance(),
|
ModItems.ASSEMBLER_MATRIX_SPEED_PLUS.get().getDefaultInstance(),
|
||||||
ModItems.ASSEMBLER_MATRIX_CRAFTER_PLUS.get().getDefaultInstance()
|
ModItems.ASSEMBLER_MATRIX_CRAFTER_PLUS.get().getDefaultInstance(),
|
||||||
|
ModItems.ASSEMBLER_MATRIX_PATTERN_PLUS.get().getDefaultInstance()
|
||||||
).forEach(output::accept);
|
).forEach(output::accept);
|
||||||
|
|
||||||
// 放入四个预设的 stacks(x2,x4,x8,x16),使用 ModItems 工厂创建
|
// 放入四个预设的 stacks(x2,x4,x8,x16),使用 ModItems 工厂创建
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,10 @@ public final class ModItems {
|
||||||
"assembler_matrix_crafter_plus",
|
"assembler_matrix_crafter_plus",
|
||||||
()->new BlockItem(ModBlocks.ASSEMBLER_MATRIX_CRAFTER_PLUS.get(), new Item.Properties())
|
()->new BlockItem(ModBlocks.ASSEMBLER_MATRIX_CRAFTER_PLUS.get(), new Item.Properties())
|
||||||
);
|
);
|
||||||
|
public static final DeferredItem<Item> ASSEMBLER_MATRIX_PATTERN_PLUS = ITEMS.register(
|
||||||
|
"assembler_matrix_pattern_plus",
|
||||||
|
() -> new BlockItem(ModBlocks.ASSEMBLER_MATRIX_PATTERN_PLUS.get(), new Item.Properties())
|
||||||
|
);
|
||||||
static final DeferredItem<Item> NETWORK_PATTERN_CONTROLLER = ITEMS.register(
|
static final DeferredItem<Item> NETWORK_PATTERN_CONTROLLER = ITEMS.register(
|
||||||
"network_pattern_controller",
|
"network_pattern_controller",
|
||||||
() -> new BlockItem(ModBlocks.NETWORK_PATTERN_CONTROLLER.get(), new Item.Properties())
|
() -> new BlockItem(ModBlocks.NETWORK_PATTERN_CONTROLLER.get(), new Item.Properties())
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
"extendedae_plus:256x_crafting_accelerator",
|
"extendedae_plus:256x_crafting_accelerator",
|
||||||
"extendedae_plus:1024x_crafting_accelerator",
|
"extendedae_plus:1024x_crafting_accelerator",
|
||||||
"extendedae_plus:assembler_matrix_speed_plus",
|
"extendedae_plus:assembler_matrix_speed_plus",
|
||||||
"extendedae_plus:assembler_matrix_crafter_plus"
|
"extendedae_plus:assembler_matrix_crafter_plus",
|
||||||
|
"extendedae_plus:assembler_matrix_pattern_plus"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
"extendedae_plus:256x_crafting_accelerator",
|
"extendedae_plus:256x_crafting_accelerator",
|
||||||
"extendedae_plus:1024x_crafting_accelerator",
|
"extendedae_plus:1024x_crafting_accelerator",
|
||||||
"extendedae_plus:assembler_matrix_speed_plus",
|
"extendedae_plus:assembler_matrix_speed_plus",
|
||||||
"extendedae_plus:assembler_matrix_crafter_plus"
|
"extendedae_plus:assembler_matrix_crafter_plus",
|
||||||
|
"extendedae_plus:assembler_matrix_pattern_plus"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user