From d1c71478626e5648766018d83301dbc8426d5706 Mon Sep 17 00:00:00 2001 From: Ted Senft Date: Sun, 4 Aug 2024 19:12:14 -0400 Subject: [PATCH] FOR REALSIES THIS TIME --- gradle.properties | 2 +- .../loot/BlockLootGenerator.java | 108 ++++++++------- .../machines/CompactMachinesCommon.java | 130 +++++++++--------- .../functions/CopyRoomBindingFunction.java | 36 ----- .../data/functions/LootFunctions.java | 15 -- .../machines/machine/Machines.java | 7 +- .../block/BoundCompactMachineBlockEntity.java | 19 +++ .../block/UnboundCompactMachineEntity.java | 19 +++ .../item/UnboundCompactMachineItem.java | 4 + 9 files changed, 169 insertions(+), 171 deletions(-) delete mode 100644 neoforge-main/src/main/java/dev/compactmods/machines/data/functions/CopyRoomBindingFunction.java delete mode 100644 neoforge-main/src/main/java/dev/compactmods/machines/data/functions/LootFunctions.java diff --git a/gradle.properties b/gradle.properties index 78b6dbcf..8a1da38d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=true org.gradle.parallel=true # org.gradle.caching=true -org.gradle.configuration-cache=true +# org.gradle.configuration-cache=true neoForge.parchment.minecraftVersion=1.20.6 neoForge.parchment.mappingsVersion=2024.05.01 diff --git a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/loot/BlockLootGenerator.java b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/loot/BlockLootGenerator.java index 89a67677..a2c57925 100644 --- a/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/loot/BlockLootGenerator.java +++ b/neoforge-datagen/src/main/java/dev.compactmods.machines.datagen/loot/BlockLootGenerator.java @@ -1,51 +1,57 @@ -package dev.compactmods.machines.datagen.loot; - -import dev.compactmods.machines.data.functions.CopyRoomBindingFunction; -import dev.compactmods.machines.machine.Machines; -import dev.compactmods.machines.room.Rooms; -import net.minecraft.core.HolderLookup; -import net.minecraft.data.loot.BlockLootSubProvider; -import net.minecraft.world.flag.FeatureFlags; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.storage.loot.LootPool; -import net.minecraft.world.level.storage.loot.LootTable; -import net.minecraft.world.level.storage.loot.entries.LootItem; -import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; -import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; - -import java.util.Collections; -import java.util.Set; - -public class BlockLootGenerator extends BlockLootSubProvider { - - public BlockLootGenerator(HolderLookup.Provider holderLookup) { - super(Collections.emptySet(), FeatureFlags.REGISTRY.allFlags(), holderLookup); - } - - @Override - protected Iterable getKnownBlocks() { - return Set.of(Rooms.Blocks.BREAKABLE_WALL.get(), Machines.Blocks.BOUND_MACHINE.get()); - } - - @Override - protected void generate() { - this.add(Rooms.Blocks.BREAKABLE_WALL.get(), LootTable.lootTable().withPool(LootPool - .lootPool() - .name(Rooms.Blocks.BREAKABLE_WALL.getId().toString()) - .setRolls(ConstantValue.exactly(1)) - .when(ExplosionCondition.survivesExplosion()) - .add(LootItem.lootTableItem(Rooms.Items.BREAKABLE_WALL.get())))); - - var drop = LootItem.lootTableItem(Machines.Items.BOUND_MACHINE.get()); - - final var lootPoolCM = LootPool.lootPool() - .setRolls(ConstantValue.exactly(1)) - .when(ExplosionCondition.survivesExplosion()) - .apply(CopyRoomBindingFunction::new) - .add(drop); - - final var cmLootTable = LootTable.lootTable().withPool(lootPoolCM); - - this.add(Machines.Blocks.BOUND_MACHINE.get(), cmLootTable); - } -} +package dev.compactmods.machines.datagen.loot; + +import dev.compactmods.machines.machine.Machines; +import dev.compactmods.machines.room.Rooms; +import net.minecraft.core.HolderLookup; +import net.minecraft.data.loot.BlockLootSubProvider; +import net.minecraft.world.flag.FeatureFlags; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.storage.loot.LootPool; +import net.minecraft.world.level.storage.loot.LootTable; +import net.minecraft.world.level.storage.loot.entries.LootItem; +import net.minecraft.world.level.storage.loot.functions.CopyComponentsFunction; +import net.minecraft.world.level.storage.loot.predicates.ExplosionCondition; +import net.minecraft.world.level.storage.loot.providers.number.ConstantValue; + +import java.util.Collections; +import java.util.Set; + +public class BlockLootGenerator extends BlockLootSubProvider { + + public BlockLootGenerator(HolderLookup.Provider holderLookup) { + super(Collections.emptySet(), FeatureFlags.REGISTRY.allFlags(), holderLookup); + } + + @Override + protected Iterable getKnownBlocks() { + return Set.of(Rooms.Blocks.BREAKABLE_WALL.get(), + Machines.Blocks.BOUND_MACHINE.get(), + Machines.Blocks.UNBOUND_MACHINE.get()); + } + + @Override + protected void generate() { + this.add(Rooms.Blocks.BREAKABLE_WALL.get(), LootTable.lootTable().withPool(LootPool + .lootPool() + .name(Rooms.Blocks.BREAKABLE_WALL.getId().toString()) + .setRolls(ConstantValue.exactly(1)) + .when(ExplosionCondition.survivesExplosion()) + .add(LootItem.lootTableItem(Rooms.Items.BREAKABLE_WALL.get())))); + + this.add(Machines.Blocks.UNBOUND_MACHINE.get(), LootTable.lootTable().withPool(LootPool.lootPool() + .setRolls(ConstantValue.exactly(1)) + .when(ExplosionCondition.survivesExplosion()) + .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .include(Machines.DataComponents.MACHINE_COLOR.get()) + .include(Machines.DataComponents.ROOM_TEMPLATE_ID.get())) + .add(LootItem.lootTableItem(Machines.Items.UNBOUND_MACHINE.get())))); + + this.add(Machines.Blocks.BOUND_MACHINE.get(), LootTable.lootTable().withPool(LootPool.lootPool() + .setRolls(ConstantValue.exactly(1)) + .when(ExplosionCondition.survivesExplosion()) + .apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY) + .include(Machines.DataComponents.MACHINE_COLOR.get()) + .include(Machines.DataComponents.BOUND_ROOM_CODE.get())) + .add(LootItem.lootTableItem(Machines.Items.BOUND_MACHINE.get())))); + } +} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java index b0192f84..8323002c 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/CompactMachinesCommon.java @@ -1,66 +1,64 @@ -package dev.compactmods.machines; - -import dev.compactmods.machines.api.CompactMachines; -import dev.compactmods.machines.command.Commands; -import dev.compactmods.machines.compat.InterModCompat; -import dev.compactmods.machines.config.CommonConfig; -import dev.compactmods.machines.config.ServerConfig; -import dev.compactmods.machines.data.functions.LootFunctions; -import dev.compactmods.machines.dimension.Dimension; -import dev.compactmods.machines.dimension.WorldBorderFixer; -import dev.compactmods.machines.machine.Machines; -import dev.compactmods.machines.network.CMNetworks; -import dev.compactmods.machines.room.Rooms; -import dev.compactmods.machines.room.block.ProtectedBlockEventHandler; -import dev.compactmods.machines.room.upgrade.RoomUpgrades; -import dev.compactmods.machines.shrinking.Shrinking; -import dev.compactmods.machines.villager.Villagers; -import net.minecraft.util.FastColor; -import net.neoforged.bus.api.IEventBus; -import net.neoforged.fml.ModContainer; -import net.neoforged.fml.common.Mod; -import net.neoforged.fml.config.ModConfig; -import net.neoforged.neoforge.common.NeoForge; - -@Mod(CompactMachines.MOD_ID) -public class CompactMachinesCommon { - - public static final int BRAND_MACHINE_COLOR = FastColor.ARGB32.color(255, 248, 246, 76); - - @SuppressWarnings("unused") - public CompactMachinesCommon(IEventBus modBus, ModContainer modContainer) { - initConfigs(modContainer); - prepare(); - registerEvents(modBus); - - CMRegistries.setup(modBus); - } - - private static void initConfigs(ModContainer modContainer) { - modContainer.registerConfig(ModConfig.Type.COMMON, CommonConfig.CONFIG); - modContainer.registerConfig(ModConfig.Type.SERVER, ServerConfig.CONFIG); - } - - private static void prepare() { - Machines.prepare(); - Shrinking.prepare(); - Rooms.prepare(); - RoomUpgrades.prepare(); - Dimension.prepare(); - Commands.prepare(); - LootFunctions.prepare(); - Villagers.prepare(); - } - - private static void registerEvents(IEventBus modBus) { - Rooms.registerEvents(modBus); - RoomUpgrades.registerEvents(modBus); - WorldBorderFixer.registerEvents(); - - modBus.addListener(CMNetworks::onPacketRegistration); - modBus.addListener(InterModCompat::enqueueCompatMessages); - - NeoForge.EVENT_BUS.addListener(Commands::onCommandsRegister); - NeoForge.EVENT_BUS.addListener(ProtectedBlockEventHandler::leftClickBlock); - } -} +package dev.compactmods.machines; + +import dev.compactmods.machines.api.CompactMachines; +import dev.compactmods.machines.command.Commands; +import dev.compactmods.machines.compat.InterModCompat; +import dev.compactmods.machines.config.CommonConfig; +import dev.compactmods.machines.config.ServerConfig; +import dev.compactmods.machines.dimension.Dimension; +import dev.compactmods.machines.dimension.WorldBorderFixer; +import dev.compactmods.machines.machine.Machines; +import dev.compactmods.machines.network.CMNetworks; +import dev.compactmods.machines.room.Rooms; +import dev.compactmods.machines.room.block.ProtectedBlockEventHandler; +import dev.compactmods.machines.room.upgrade.RoomUpgrades; +import dev.compactmods.machines.shrinking.Shrinking; +import dev.compactmods.machines.villager.Villagers; +import net.minecraft.util.FastColor; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModContainer; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.neoforge.common.NeoForge; + +@Mod(CompactMachines.MOD_ID) +public class CompactMachinesCommon { + + public static final int BRAND_MACHINE_COLOR = FastColor.ARGB32.color(255, 248, 246, 76); + + @SuppressWarnings("unused") + public CompactMachinesCommon(IEventBus modBus, ModContainer modContainer) { + initConfigs(modContainer); + prepare(); + registerEvents(modBus); + + CMRegistries.setup(modBus); + } + + private static void initConfigs(ModContainer modContainer) { + modContainer.registerConfig(ModConfig.Type.COMMON, CommonConfig.CONFIG); + modContainer.registerConfig(ModConfig.Type.SERVER, ServerConfig.CONFIG); + } + + private static void prepare() { + Machines.prepare(); + Shrinking.prepare(); + Rooms.prepare(); + RoomUpgrades.prepare(); + Dimension.prepare(); + Commands.prepare(); + Villagers.prepare(); + } + + private static void registerEvents(IEventBus modBus) { + Rooms.registerEvents(modBus); + RoomUpgrades.registerEvents(modBus); + WorldBorderFixer.registerEvents(); + + modBus.addListener(CMNetworks::onPacketRegistration); + modBus.addListener(InterModCompat::enqueueCompatMessages); + + NeoForge.EVENT_BUS.addListener(Commands::onCommandsRegister); + NeoForge.EVENT_BUS.addListener(ProtectedBlockEventHandler::leftClickBlock); + } +} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/CopyRoomBindingFunction.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/CopyRoomBindingFunction.java deleted file mode 100644 index a64e060a..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/CopyRoomBindingFunction.java +++ /dev/null @@ -1,36 +0,0 @@ -package dev.compactmods.machines.data.functions; - -import com.mojang.serialization.MapCodec; -import dev.compactmods.machines.api.machine.MachineConstants; -import dev.compactmods.machines.machine.Machines; -import dev.compactmods.machines.machine.block.BoundCompactMachineBlockEntity; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.level.storage.loot.LootContext; -import net.minecraft.world.level.storage.loot.functions.LootItemFunction; -import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; -import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import org.jetbrains.annotations.NotNull; - -public class CopyRoomBindingFunction implements LootItemFunction { - - public static final MapCodec CODEC = MapCodec.unit(new CopyRoomBindingFunction()); - - @Override - public ItemStack apply(ItemStack stack, LootContext ctx) { - var state = ctx.getParam(LootContextParams.BLOCK_STATE); - if(state.is(MachineConstants.MACHINE_BLOCK)) { - var blockEntity = ctx.getParam(LootContextParams.BLOCK_ENTITY); - if (blockEntity instanceof BoundCompactMachineBlockEntity machine && stack.is(MachineConstants.BOUND_MACHINE_ITEM)) { - stack.set(Machines.DataComponents.MACHINE_COLOR, machine.getData(Machines.Attachments.MACHINE_COLOR)); - stack.set(Machines.DataComponents.BOUND_ROOM_CODE, machine.connectedRoom()); - } - } - - return stack; - } - - @Override - public @NotNull LootItemFunctionType getType() { - return LootFunctions.COPY_ROOM_BINDING.value(); - } -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/LootFunctions.java b/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/LootFunctions.java deleted file mode 100644 index d47a8cfa..00000000 --- a/neoforge-main/src/main/java/dev/compactmods/machines/data/functions/LootFunctions.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.compactmods.machines.data.functions; - -import dev.compactmods.machines.CMRegistries; -import net.minecraft.world.level.storage.loot.functions.LootItemFunctionType; -import net.neoforged.neoforge.registries.DeferredHolder; - -public class LootFunctions { - - public static DeferredHolder, LootItemFunctionType> COPY_ROOM_BINDING = CMRegistries.LOOT_FUNCTIONS - .register("copy_room_binding", () -> new LootItemFunctionType<>(CopyRoomBindingFunction.CODEC)); - - public static void prepare() { - - } -} diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java index c9ef4b88..fa489029 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/Machines.java @@ -111,14 +111,17 @@ static void prepare() { } interface DataComponents { + String KEY_ROOM_TEMPLATE = "room_template"; + String KEY_ROOM_CODE = "room_code"; + DeferredHolder, DataComponentType> BOUND_ROOM_CODE = CMRegistries.DATA_COMPONENTS - .registerComponentType("room_code", MachineComponents.BOUND_ROOM_CODE); + .registerComponentType(KEY_ROOM_CODE, MachineComponents.BOUND_ROOM_CODE); DeferredHolder, DataComponentType> MACHINE_COLOR = CMRegistries.DATA_COMPONENTS .registerComponentType("machine_color", MachineComponents.MACHINE_COLOR); DeferredHolder, DataComponentType> ROOM_TEMPLATE_ID = CMRegistries.DATA_COMPONENTS - .registerComponentType("room_template", MachineComponents.ROOM_TEMPLATE_ID); + .registerComponentType(KEY_ROOM_TEMPLATE, MachineComponents.ROOM_TEMPLATE_ID); static void prepare() { } diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java index 57594c56..b5f5d9e9 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java @@ -8,6 +8,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; @@ -33,6 +34,24 @@ public BoundCompactMachineBlockEntity(BlockPos pos, BlockState state) { super(Machines.BlockEntities.MACHINE.get(), pos, state); } + @Override + protected void applyImplicitComponents(DataComponentInput components) { + super.applyImplicitComponents(components); + this.roomCode = components.get(Machines.DataComponents.BOUND_ROOM_CODE); + } + + @Override + protected void collectImplicitComponents(DataComponentMap.Builder builder) { + super.collectImplicitComponents(builder); + builder.set(Machines.DataComponents.BOUND_ROOM_CODE, this.roomCode); + } + + @Override + public void removeComponentsFromTag(CompoundTag tag) { + super.removeComponentsFromTag(tag); + tag.remove(Machines.DataComponents.KEY_ROOM_CODE); + } + @Override protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider holders) { super.loadAdditional(nbt, holders); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java index f484ddc0..8d398d55 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java @@ -5,6 +5,7 @@ import dev.compactmods.machines.machine.Machines; import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; +import net.minecraft.core.component.DataComponentMap; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.entity.BlockEntity; @@ -23,6 +24,24 @@ public UnboundCompactMachineEntity(BlockPos pos, BlockState state) { this.templateId = null; } + @Override + protected void applyImplicitComponents(DataComponentInput components) { + super.applyImplicitComponents(components); + this.templateId = components.get(Machines.DataComponents.ROOM_TEMPLATE_ID); + } + + @Override + protected void collectImplicitComponents(DataComponentMap.Builder builder) { + super.collectImplicitComponents(builder); + builder.set(Machines.DataComponents.ROOM_TEMPLATE_ID, this.templateId); + } + + @Override + public void removeComponentsFromTag(CompoundTag tag) { + super.removeComponentsFromTag(tag); + tag.remove(Machines.DataComponents.KEY_ROOM_TEMPLATE); + } + @Override public void loadAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) { super.loadAdditional(nbt, holders); diff --git a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java index 7df27dc4..78d93b31 100644 --- a/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java +++ b/neoforge-main/src/main/java/dev/compactmods/machines/machine/item/UnboundCompactMachineItem.java @@ -54,5 +54,9 @@ public void appendHoverText(ItemStack stack, TooltipContext context, List