Skip to content

Commit

Permalink
Support persisting logic adapter settings and copying them with a con…
Browse files Browse the repository at this point in the history
…figuration card
  • Loading branch information
pupnewfster committed Feb 28, 2024
1 parent 53eb881 commit f385fc3
Show file tree
Hide file tree
Showing 11 changed files with 167 additions and 14 deletions.
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// 1.20.4 2024-02-20T18:43:27.3767888 Loot Tables
// 1.20.4 2024-02-28T12:27:00.9754166 Loot Tables
e5d21e85c4dd5c9f4d140c51718a0a99265ac14c data/mekanismgenerators/loot_tables/blocks/advanced_solar_generator.json
4cd72dabef55180f932177314c8ed4852e684ea6 data/mekanismgenerators/loot_tables/blocks/bio_generator.json
44cc1f117a05e901fd25e0de114bc408323d8567 data/mekanismgenerators/loot_tables/blocks/control_rod_assembly.json
aa14a95e7cb74636a182fb26e2ee4900f4296de9 data/mekanismgenerators/loot_tables/blocks/electromagnetic_coil.json
127e1ac17eb057256e58c681733a341860e6312b data/mekanismgenerators/loot_tables/blocks/fission_fuel_assembly.json
b5f210dec7a552b685892b1e0c832ba4c70a98b5 data/mekanismgenerators/loot_tables/blocks/fission_reactor_casing.json
690c08a1254c2bf15a91d1b1277b8f2457d86943 data/mekanismgenerators/loot_tables/blocks/fission_reactor_logic_adapter.json
e7fe8c1bae55ba9326095040d8b626c3511dda1c data/mekanismgenerators/loot_tables/blocks/fission_reactor_logic_adapter.json
37387eeaf73dd1eeabcbbcc4350829fd5558e752 data/mekanismgenerators/loot_tables/blocks/fission_reactor_port.json
bb8d958aa826f154babe9c7c0000dcd431f4de68 data/mekanismgenerators/loot_tables/blocks/fusion_reactor_controller.json
e50e3d0984e3e9dd533f2db79fb815a208b5e683 data/mekanismgenerators/loot_tables/blocks/fusion_reactor_frame.json
0fbbebdaddf070659e3db9f54f61e5e5516b21a8 data/mekanismgenerators/loot_tables/blocks/fusion_reactor_logic_adapter.json
a040c58c9070b158730f9b9cf20865257aaef83d data/mekanismgenerators/loot_tables/blocks/fusion_reactor_logic_adapter.json
bc55bd4780eb79f15464d7e9083595fc4ac26e03 data/mekanismgenerators/loot_tables/blocks/fusion_reactor_port.json
1d62fcc7a8d3d9c6312a895f8ede57460b86eb47 data/mekanismgenerators/loot_tables/blocks/gas_burning_generator.json
bddc9661224bd7b74842836f7af9e515d4852e44 data/mekanismgenerators/loot_tables/blocks/heat_generator.json
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@
{
"source": "controlType",
"target": "mekanism:redstone_control"
},
{
"source": "logicType",
"target": "mekanismgenerators:fission_logic"
}
],
"source": "block_entity"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,20 @@
{
"function": "minecraft:copy_name",
"source": "block_entity"
},
{
"function": "mekanism:copy_to_attachments",
"ops": [
{
"source": "activeCooled",
"target": "mekanismgenerators:active_cooled"
},
{
"source": "logicType",
"target": "mekanismgenerators:fusion_logic"
}
],
"source": "block_entity"
}
],
"name": "mekanismgenerators:fusion_reactor_logic_adapter"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import mekanism.generators.common.content.turbine.TurbineMultiblockData;
import mekanism.generators.common.content.turbine.TurbineValidator;
import mekanism.generators.common.network.GeneratorsPacketHandler;
import mekanism.generators.common.registries.GeneratorsAttachmentTypes;
import mekanism.generators.common.registries.GeneratorsBlocks;
import mekanism.generators.common.registries.GeneratorsBuilders.FissionReactorBuilder;
import mekanism.generators.common.registries.GeneratorsBuilders.FusionReactorBuilder;
Expand Down Expand Up @@ -76,6 +77,7 @@ public MekanismGenerators(ModContainer modContainer, IEventBus modEventBus) {
modEventBus.addListener(this::onConfigLoad);
modEventBus.addListener(this::imcQueue);

GeneratorsAttachmentTypes.ATTACHMENT_TYPES.register(modEventBus);
GeneratorsItems.ITEMS.register(modEventBus);
GeneratorsBlocks.BLOCKS.register(modEventBus);
GeneratorsFluids.FLUIDS.register(modEventBus);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package mekanism.generators.common.item;

import java.util.List;
import mekanism.common.block.prefab.BlockBasicMultiblock;
import mekanism.common.item.block.ItemBlockTooltip;
import mekanism.generators.common.GeneratorsLang;
import mekanism.generators.common.registries.GeneratorsAttachmentTypes;
import mekanism.generators.common.tile.fission.TileEntityFissionReactorLogicAdapter;
import mekanism.generators.common.tile.fission.TileEntityFissionReactorLogicAdapter.FissionReactorLogic;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;

public class ItemBlockFissionLogicAdapter extends ItemBlockTooltip<BlockBasicMultiblock<TileEntityFissionReactorLogicAdapter>> {

public ItemBlockFissionLogicAdapter(BlockBasicMultiblock<TileEntityFissionReactorLogicAdapter> block, Item.Properties properties) {
super(block, true, properties);
}

@Override
protected void addDetails(@NotNull ItemStack stack, Level world, @NotNull List<Component> tooltip, @NotNull TooltipFlag flag) {
super.addDetails(stack, world, tooltip, flag);
FissionReactorLogic logicType = stack.getData(GeneratorsAttachmentTypes.FISSION_LOGIC_TYPE);
tooltip.add(GeneratorsLang.REACTOR_LOGIC_REDSTONE_MODE.translate(logicType.getColor(), logicType));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package mekanism.generators.common.item;

import java.util.List;
import mekanism.api.text.EnumColor;
import mekanism.common.block.prefab.BlockBasicMultiblock;
import mekanism.common.item.block.ItemBlockTooltip;
import mekanism.common.util.text.BooleanStateDisplay.OnOff;
import mekanism.generators.common.GeneratorsLang;
import mekanism.generators.common.registries.GeneratorsAttachmentTypes;
import mekanism.generators.common.tile.fusion.TileEntityFusionReactorLogicAdapter;
import mekanism.generators.common.tile.fusion.TileEntityFusionReactorLogicAdapter.FusionReactorLogic;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;

public class ItemBlockFusionLogicAdapter extends ItemBlockTooltip<BlockBasicMultiblock<TileEntityFusionReactorLogicAdapter>> {

public ItemBlockFusionLogicAdapter(BlockBasicMultiblock<TileEntityFusionReactorLogicAdapter> block, Properties properties) {
super(block, true, properties);
}

@Override
protected void addDetails(@NotNull ItemStack stack, Level world, @NotNull List<Component> tooltip, @NotNull TooltipFlag flag) {
super.addDetails(stack, world, tooltip, flag);
FusionReactorLogic logicType = stack.getData(GeneratorsAttachmentTypes.FUSION_LOGIC_TYPE);
tooltip.add(GeneratorsLang.REACTOR_LOGIC_REDSTONE_MODE.translate(logicType.getColor(), logicType));
tooltip.add(GeneratorsLang.REACTOR_LOGIC_ACTIVE_COOLING.translate(EnumColor.RED, OnOff.of(stack.getData(GeneratorsAttachmentTypes.ACTIVE_COOLED))));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package mekanism.generators.common.registries;

import mekanism.common.registration.MekanismDeferredHolder;
import mekanism.common.registration.impl.AttachmentTypeDeferredRegister;
import mekanism.generators.common.MekanismGenerators;
import mekanism.generators.common.tile.fission.TileEntityFissionReactorLogicAdapter.FissionReactorLogic;
import mekanism.generators.common.tile.fusion.TileEntityFusionReactorLogicAdapter.FusionReactorLogic;
import net.neoforged.neoforge.attachment.AttachmentType;

public class GeneratorsAttachmentTypes {

private GeneratorsAttachmentTypes() {
}

public static final AttachmentTypeDeferredRegister ATTACHMENT_TYPES = new AttachmentTypeDeferredRegister(MekanismGenerators.MODID);

public static final MekanismDeferredHolder<AttachmentType<?>, AttachmentType<FissionReactorLogic>> FISSION_LOGIC_TYPE = ATTACHMENT_TYPES.register("fission_logic", FissionReactorLogic.class);
public static final MekanismDeferredHolder<AttachmentType<?>, AttachmentType<FusionReactorLogic>> FUSION_LOGIC_TYPE = ATTACHMENT_TYPES.register("fusion_logic", FusionReactorLogic.class);

public static final MekanismDeferredHolder<AttachmentType<?>, AttachmentType<Boolean>> ACTIVE_COOLED = ATTACHMENT_TYPES.registerBoolean("active_cooled", false);
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import mekanism.generators.common.block.turbine.BlockTurbineRotor;
import mekanism.generators.common.config.MekanismGeneratorsConfig;
import mekanism.generators.common.content.blocktype.Generator;
import mekanism.generators.common.item.ItemBlockFissionLogicAdapter;
import mekanism.generators.common.item.ItemBlockFusionLogicAdapter;
import mekanism.generators.common.item.generator.ItemBlockWindGenerator;
import mekanism.generators.common.slot.FluidFuelInventorySlot;
import mekanism.generators.common.tile.TileEntityAdvancedSolarGenerator;
Expand Down Expand Up @@ -129,14 +131,14 @@ private GeneratorsBlocks() {

public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFissionReactorCasing>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFissionReactorCasing>>> FISSION_REACTOR_CASING = registerTooltipBlock("fission_reactor_casing", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FISSION_REACTOR_CASING, properties -> properties.mapColor(MapColor.COLOR_LIGHT_GRAY)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFissionReactorPort>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFissionReactorPort>>> FISSION_REACTOR_PORT = registerTooltipBlock("fission_reactor_port", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FISSION_REACTOR_PORT, properties -> properties.mapColor(MapColor.COLOR_LIGHT_GRAY)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFissionReactorLogicAdapter>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFissionReactorLogicAdapter>>> FISSION_REACTOR_LOGIC_ADAPTER = registerTooltipBlock("fission_reactor_logic_adapter", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FISSION_REACTOR_LOGIC_ADAPTER, properties -> properties.mapColor(MapColor.COLOR_LIGHT_GRAY)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFissionReactorLogicAdapter>, ItemBlockFissionLogicAdapter> FISSION_REACTOR_LOGIC_ADAPTER = BLOCKS.registerDefaultProperties("fission_reactor_logic_adapter", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FISSION_REACTOR_LOGIC_ADAPTER, properties -> properties.mapColor(MapColor.COLOR_LIGHT_GRAY)), ItemBlockFissionLogicAdapter::new);
public static final BlockRegistryObject<BlockTileModel<TileEntityFissionFuelAssembly, BlockTypeTile<TileEntityFissionFuelAssembly>>, ItemBlockTooltip<BlockTileModel<TileEntityFissionFuelAssembly, BlockTypeTile<TileEntityFissionFuelAssembly>>>> FISSION_FUEL_ASSEMBLY = registerTooltipBlock("fission_fuel_assembly", () -> new BlockTileModel<>(GeneratorsBlockTypes.FISSION_FUEL_ASSEMBLY, properties -> properties.mapColor(BlockResourceInfo.STEEL.getMapColor())));
public static final BlockRegistryObject<BlockTileModel<TileEntityControlRodAssembly, BlockTypeTile<TileEntityControlRodAssembly>>, ItemBlockTooltip<BlockTileModel<TileEntityControlRodAssembly, BlockTypeTile<TileEntityControlRodAssembly>>>> CONTROL_ROD_ASSEMBLY = registerTooltipBlock("control_rod_assembly", () -> new BlockTileModel<>(GeneratorsBlockTypes.CONTROL_ROD_ASSEMBLY, properties -> properties.mapColor(MapColor.METAL)));

public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFusionReactorController>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFusionReactorController>>> FUSION_REACTOR_CONTROLLER = registerTooltipBlock("fusion_reactor_controller", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FUSION_REACTOR_CONTROLLER, properties -> properties.mapColor(MapColor.COLOR_ORANGE)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFusionReactorBlock>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFusionReactorBlock>>> FUSION_REACTOR_FRAME = registerTooltipBlock("fusion_reactor_frame", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FUSION_REACTOR_FRAME, properties -> properties.mapColor(MapColor.TERRACOTTA_BROWN)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFusionReactorPort>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFusionReactorPort>>> FUSION_REACTOR_PORT = registerTooltipBlock("fusion_reactor_port", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FUSION_REACTOR_PORT, properties -> properties.mapColor(MapColor.TERRACOTTA_BROWN)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFusionReactorLogicAdapter>, ItemBlockTooltip<BlockBasicMultiblock<TileEntityFusionReactorLogicAdapter>>> FUSION_REACTOR_LOGIC_ADAPTER = registerTooltipBlock("fusion_reactor_logic_adapter", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FUSION_REACTOR_LOGIC_ADAPTER, properties -> properties.mapColor(MapColor.TERRACOTTA_BROWN)));
public static final BlockRegistryObject<BlockBasicMultiblock<TileEntityFusionReactorLogicAdapter>, ItemBlockFusionLogicAdapter> FUSION_REACTOR_LOGIC_ADAPTER = BLOCKS.registerDefaultProperties("fusion_reactor_logic_adapter", () -> new BlockBasicMultiblock<>(GeneratorsBlockTypes.FUSION_REACTOR_LOGIC_ADAPTER, properties -> properties.mapColor(MapColor.TERRACOTTA_BROWN)), ItemBlockFusionLogicAdapter::new);
public static final BlockRegistryObject<BlockLaserFocusMatrix, ItemBlockTooltip<BlockLaserFocusMatrix>> LASER_FOCUS_MATRIX = registerTooltipBlock("laser_focus_matrix", BlockLaserFocusMatrix::new);

private static <BLOCK extends Block & IHasDescription> BlockRegistryObject<BLOCK, ItemBlockTooltip<BLOCK>> registerTooltipBlock(String name, Supplier<BLOCK> blockCreator) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ private GeneratorsTileEntityTypes() {
public static final TileEntityTypeRegistryObject<TileEntityFissionReactorLogicAdapter> FISSION_REACTOR_LOGIC_ADAPTER = TILE_ENTITY_TYPES
.mekBuilder(GeneratorsBlocks.FISSION_REACTOR_LOGIC_ADAPTER, TileEntityFissionReactorLogicAdapter::new)
.withSimple(Capabilities.CONFIGURABLE)
.withSimple(Capabilities.CONFIG_CARD)
.build();
public static final TileEntityTypeRegistryObject<TileEntityFissionFuelAssembly> FISSION_FUEL_ASSEMBLY = TILE_ENTITY_TYPES.register(GeneratorsBlocks.FISSION_FUEL_ASSEMBLY, TileEntityFissionFuelAssembly::new);
public static final TileEntityTypeRegistryObject<TileEntityControlRodAssembly> CONTROL_ROD_ASSEMBLY = TILE_ENTITY_TYPES.register(GeneratorsBlocks.CONTROL_ROD_ASSEMBLY, TileEntityControlRodAssembly::new);
Expand All @@ -98,6 +99,7 @@ private GeneratorsTileEntityTypes() {
public static final TileEntityTypeRegistryObject<TileEntityFusionReactorLogicAdapter> FUSION_REACTOR_LOGIC_ADAPTER = TILE_ENTITY_TYPES
.mekBuilder(GeneratorsBlocks.FUSION_REACTOR_LOGIC_ADAPTER, TileEntityFusionReactorLogicAdapter::new)
.withSimple(Capabilities.CONFIGURABLE)
.withSimple(Capabilities.CONFIG_CARD)
.build();
public static final TileEntityTypeRegistryObject<TileEntityFusionReactorPort> FUSION_REACTOR_PORT = TILE_ENTITY_TYPES
.mekBuilder(GeneratorsBlocks.FUSION_REACTOR_PORT, TileEntityFusionReactorPort::new)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package mekanism.generators.common.tile.fission;

import java.util.EnumSet;
import java.util.Map;
import mekanism.api.NBTConstants;
import mekanism.api.annotations.NothingNullByDefault;
import mekanism.api.math.MathUtils;
Expand All @@ -17,16 +18,19 @@
import mekanism.generators.common.base.IReactorLogic;
import mekanism.generators.common.base.IReactorLogicMode;
import mekanism.generators.common.content.fission.FissionReactorMultiblockData;
import mekanism.generators.common.registries.GeneratorsAttachmentTypes;
import mekanism.generators.common.registries.GeneratorsBlocks;
import mekanism.generators.common.tile.fission.TileEntityFissionReactorLogicAdapter.FissionReactorLogic;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.Holder;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.Component;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.attachment.AttachmentType;
import net.neoforged.neoforge.event.EventHooks;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -141,17 +145,36 @@ public void onPowerChange() {
}

@Override
public void load(@NotNull CompoundTag nbt) {
super.load(nbt);
public void readSustainedData(@NotNull CompoundTag nbt) {
super.readSustainedData(nbt);
NBTUtils.setEnumIfPresent(nbt, NBTConstants.LOGIC_TYPE, FissionReactorLogic::byIndexStatic, logicType -> this.logicType = logicType);
}

@Override
public void saveAdditional(@NotNull CompoundTag nbtTags) {
super.saveAdditional(nbtTags);
public void writeSustainedData(@NotNull CompoundTag nbtTags) {
super.writeSustainedData(nbtTags);
NBTUtils.writeEnum(nbtTags, NBTConstants.LOGIC_TYPE, logicType);
}

@Override
public Map<String, Holder<AttachmentType<?>>> getTileDataAttachmentRemap() {
Map<String, Holder<AttachmentType<?>>> remap = super.getTileDataAttachmentRemap();
remap.put(NBTConstants.LOGIC_TYPE, GeneratorsAttachmentTypes.FISSION_LOGIC_TYPE);
return remap;
}

@Override
public void writeToStack(ItemStack stack) {
super.writeToStack(stack);
stack.setData(GeneratorsAttachmentTypes.FISSION_LOGIC_TYPE, logicType);
}

@Override
public void readFromStack(ItemStack stack) {
super.readFromStack(stack);
logicType = stack.getData(GeneratorsAttachmentTypes.FISSION_LOGIC_TYPE);
}

@Override
public void addContainerTrackers(MekanismContainer container) {
super.addContainerTrackers(container);
Expand Down
Loading

0 comments on commit f385fc3

Please sign in to comment.