From c6f28a9ef6343251e2b397a496659b1fbfba5e44 Mon Sep 17 00:00:00 2001 From: Gustavo Date: Mon, 2 Mar 2026 13:57:12 +1100 Subject: [PATCH 1/2] remove usages of ldlib builder util --- .../gtceu/api/machine/MachineDefinition.java | 5 +- .../api/pattern/MultiblockShapeInfo.java | 43 ++++++++++++++--- .../gtceu/common/cover/ConveyorCover.java | 10 ---- .../gtceu/common/cover/RobotArmCover.java | 23 ---------- .../voiding/AdvancedItemVoidingCover.java | 21 --------- .../cover/voiding/ItemVoidingCover.java | 6 --- .../item/behavior/IntCircuitBehaviour.java | 20 -------- .../item/behavior/ItemMagnetBehavior.java | 1 - .../part/MaintenanceHatchPartMachine.java | 2 - .../PrimitiveFancyUIWorkableMachine.java | 1 + .../machine/storage/CreativeChestMachine.java | 2 - .../ShapedEnergyTransferRecipeBuilder.java | 30 ++++++++---- .../recipe/builder/ShapedRecipeBuilder.java | 34 ++++++++++---- .../com/gregtechceu/gtceu/utils/GTUtil.java | 46 +++++++++++++++++++ 14 files changed, 131 insertions(+), 113 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java index dc59324d145..a3f82df3984 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java +++ b/src/main/java/com/gregtechceu/gtceu/api/machine/MachineDefinition.java @@ -12,8 +12,7 @@ import com.gregtechceu.gtceu.api.recipe.GTRecipeType; import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier; import com.gregtechceu.gtceu.client.model.machine.MachineRenderState; - -import com.lowdragmc.lowdraglib.utils.ShapeUtils; +import com.gregtechceu.gtceu.utils.GTUtil; import net.minecraft.core.Direction; import net.minecraft.core.IdMapper; @@ -173,7 +172,7 @@ public ItemStack asStack(int count) { public VoxelShape getShape(Direction direction) { if (shape.isEmpty() || shape == Shapes.block() || direction == Direction.NORTH) return shape; - return this.cache.computeIfAbsent(direction, dir -> ShapeUtils.rotate(shape, dir)); + return this.cache.computeIfAbsent(direction, dir -> GTUtil.rotateVoxelShape(shape, dir)); } @Override diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java index cc1c36353af..46877a41c9c 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java @@ -4,31 +4,42 @@ import com.gregtechceu.gtceu.api.data.RotationState; import com.lowdragmc.lowdraglib.utils.BlockInfo; -import com.lowdragmc.lowdraglib.utils.Builder; +import lombok.Getter; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import java.util.*; import java.util.function.Supplier; public class MultiblockShapeInfo { + @Getter private final BlockInfo[][][] blocks; // [z][y][x] public MultiblockShapeInfo(BlockInfo[][][] blocks) { this.blocks = blocks; } - public BlockInfo[][][] getBlocks() { - return blocks; - } - public static ShapeInfoBuilder builder() { return new ShapeInfoBuilder(); } - public static class ShapeInfoBuilder extends Builder { + public static class ShapeInfoBuilder { + + protected List shape = new ArrayList<>(); + protected Map symbolMap = new LinkedHashMap<>(); + + public ShapeInfoBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapeInfoBuilder where(char symbol, BlockInfo value) { + this.symbolMap.put(symbol, value); + return this; + } public ShapeInfoBuilder where(char symbol, BlockState blockState) { return where(symbol, BlockInfo.fromBlockState(blockState)); @@ -53,11 +64,29 @@ public ShapeInfoBuilder where(char symbol, MetaMachineBlock machine, Direction f } private BlockInfo[][][] bake() { - return this.bakeArray(BlockInfo.class, BlockInfo.EMPTY); + BlockInfo[][][] Ts = new BlockInfo[shape.get(0)[0].length()][shape.get(0).length][shape.size()]; + for (int z = 0; z < shape.size(); z++) { //z + String[] aisleEntry = shape.get(z); + for (int y = 0; y < shape.get(0).length; y++) { + String columnEntry = aisleEntry[y]; + for (int x = 0; x < columnEntry.length(); x++) { + BlockInfo info = symbolMap.getOrDefault(columnEntry.charAt(x), BlockInfo.EMPTY); + Ts[x][y][z] = info; + } + } + } + return Ts; } public MultiblockShapeInfo build() { return new MultiblockShapeInfo(bake()); } + + public ShapeInfoBuilder shallowCopy() { + ShapeInfoBuilder builder= new ShapeInfoBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.symbolMap = new HashMap<>(this.symbolMap); + return builder; + } } } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java index b8d8f77221f..be8639dc960 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/ConveyorCover.java @@ -28,7 +28,6 @@ import com.gregtechceu.gtceu.utils.ItemStackHashStrategy; import com.lowdragmc.lowdraglib.gui.widget.Widget; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; @@ -487,15 +486,6 @@ protected boolean createManualIOModeRow() { return true; } - @NotNull - protected String getUITitle() { - return "cover.conveyor.title"; - } - - protected void buildAdditionalUI(WidgetGroup group) { - // Do nothing in the base implementation. This is intended to be overridden by subclasses. - } - protected void configureFilter() { // Do nothing in the base implementation. This is intended to be overridden by subclasses. } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 47304523c37..6fe1ae07372 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -5,7 +5,6 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; @@ -21,8 +20,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.common.pipelike.item.ItemNetHandler; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -33,7 +30,6 @@ import lombok.Getter; import lombok.Setter; -import org.jetbrains.annotations.NotNull; import java.util.Iterator; import java.util.Map; @@ -167,13 +163,6 @@ public void clearBuffer() { ////////////////////////////////////// // *********** GUI ***********// - ////////////////////////////////////// - - @Override - @NotNull - protected String getUITitle() { - return "cover.robotic_arm.title"; - } @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, @@ -196,18 +185,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .setEnabledIf($ -> shouldShowStackSize())); } - @Override - protected void buildAdditionalUI(WidgetGroup group) { - group.addWidget( - new EnumSelectorWidget<>(146, 45, 20, 20, TransferMode.values(), transferMode, this::setTransferMode)); - - this.stackSizeInput = new IntInputWidget(64, 45, 80, 20, - () -> globalTransferLimit, val -> globalTransferLimit = val); - configureStackSizeInput(); - - group.addWidget(this.stackSizeInput); - } - public void setTransferMode(TransferMode transferMode) { this.transferMode = transferMode; diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java index e0bb8705c01..d15091cedce 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/AdvancedItemVoidingCover.java @@ -4,7 +4,6 @@ import com.gregtechceu.gtceu.api.cover.CoverDefinition; import com.gregtechceu.gtceu.api.cover.filter.ItemFilter; import com.gregtechceu.gtceu.api.cover.filter.SimpleItemFilter; -import com.gregtechceu.gtceu.api.gui.widget.EnumSelectorWidget; import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget; import com.gregtechceu.gtceu.api.mui.base.drawable.IKey; import com.gregtechceu.gtceu.api.mui.factory.SidedPosGuiData; @@ -20,8 +19,6 @@ import com.gregtechceu.gtceu.common.mui.GTGuiTextures; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -32,7 +29,6 @@ import lombok.Getter; import lombok.Setter; -import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -147,23 +143,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .setEnabledIf($ -> shouldShowStackSize())); } - @Override - protected @NotNull String getUITitle() { - return "cover.item.voiding.advanced.title"; - } - - @Override - protected void buildAdditionalUI(WidgetGroup group) { - group.addWidget( - new EnumSelectorWidget<>(146, 20, 20, 20, VoidingMode.values(), voidingMode, this::setVoidingMode)); - - this.stackSizeInput = new IntInputWidget(64, 20, 80, 20, - () -> globalVoidingLimit, val -> globalVoidingLimit = val); - configureStackSizeInput(); - - group.addWidget(this.stackSizeInput); - } - @Override protected void configureFilter() { if (filterHandler.getFilter() instanceof SimpleItemFilter filter) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java index a4bcfdbacbe..71b79c8c72b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/voiding/ItemVoidingCover.java @@ -27,7 +27,6 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraftforge.items.IItemHandler; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Set; @@ -95,11 +94,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage settings)); } - @NotNull - protected String getUITitle() { - return "cover.item.voiding.title"; - } - @Override public InteractionResult onSoftMalletClick(Player playerIn, InteractionHand hand, BlockHitResult hitResult) { if (!isRemote()) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java index a3aed30e864..112b69f65a1 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/IntCircuitBehaviour.java @@ -9,11 +9,8 @@ import com.gregtechceu.gtceu.common.data.GTItems; import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets; -import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory; - import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; -import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; @@ -62,23 +59,6 @@ public static boolean isIntegratedCircuit(ItemStack itemStack) { return isCircuit; } - // deprecated, not needed (for now) - @Deprecated - public static void adjustConfiguration(HeldItemUIFactory.HeldItemHolder holder, int amount) { - adjustConfiguration(holder.getHeld(), amount); - holder.markAsDirty(); - } - - // deprecated, not needed (for now) - @Deprecated - public static void adjustConfiguration(ItemStack stack, int amount) { - if (!isIntegratedCircuit(stack)) return; - int configuration = getCircuitConfiguration(stack); - configuration += amount; - configuration = Mth.clamp(configuration, 0, CIRCUIT_MAX); - setCircuitConfiguration(stack, configuration); - } - @Override public void appendHoverText(ItemStack stack, @Nullable Level level, List tooltipComponents, TooltipFlag isAdvanced) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java index c0af0800eec..32a6e944411 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java @@ -13,7 +13,6 @@ import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.api.item.component.IItemLifeCycle; -import com.gregtechceu.gtceu.api.item.component.IItemUIFactory; import com.gregtechceu.gtceu.common.data.GTItems; import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java index ca374963189..11c998b88c7 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/MaintenanceHatchPartMachine.java @@ -36,8 +36,6 @@ import com.gregtechceu.gtceu.utils.FormattingUtil; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java index 1dc01efe414..5c245a7fd5f 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveFancyUIWorkableMachine.java @@ -3,6 +3,7 @@ import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo; import com.gregtechceu.gtceu.api.machine.feature.IFancyUIMachine; +// TODO figure out how this should work with mui public class PrimitiveFancyUIWorkableMachine extends PrimitiveWorkableMachine implements IFancyUIMachine { public PrimitiveFancyUIWorkableMachine(BlockEntityCreationInfo info) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java index 7242f1f966b..a23f95bedd0 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java +++ b/src/main/java/com/gregtechceu/gtceu/common/machine/storage/CreativeChestMachine.java @@ -6,8 +6,6 @@ import com.gregtechceu.gtceu.api.sync_system.annotations.SaveField; import com.gregtechceu.gtceu.utils.GTUtil; -import com.lowdragmc.lowdraglib.gui.widget.*; - import net.minecraft.MethodsReturnNonnullByDefault; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java index 9fb82764ffd..b7329277676 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedEnergyTransferRecipeBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.ShapedEnergyTransferRecipe; -import com.lowdragmc.lowdraglib.utils.Builder; import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; import net.minecraft.core.registries.BuiltInRegistries; @@ -22,17 +21,21 @@ import com.google.gson.JsonObject; import org.jetbrains.annotations.Nullable; +import java.util.*; import java.util.function.Consumer; -public class ShapedEnergyTransferRecipeBuilder extends Builder { +public class ShapedEnergyTransferRecipeBuilder { protected ItemStack output = ItemStack.EMPTY; protected Ingredient chargeIngredient = Ingredient.EMPTY; - protected ResourceLocation id; - protected String group; + protected @Nullable ResourceLocation id; + protected @Nullable String group; protected boolean transferMaxCharge; protected boolean overrideCharge; + protected List shape = new ArrayList<>(); + protected Map ingredientMap = new LinkedHashMap<>(); + public ShapedEnergyTransferRecipeBuilder(@Nullable ResourceLocation id) { this.id = id; } @@ -41,6 +44,16 @@ public ShapedEnergyTransferRecipeBuilder() { this(null); } + public ShapedEnergyTransferRecipeBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapedEnergyTransferRecipeBuilder where(char symbol, Ingredient value) { + this.ingredientMap.put(symbol, value); + return this; + } + public ShapedEnergyTransferRecipeBuilder pattern(String slice) { return aisle(slice); } @@ -109,9 +122,10 @@ public ShapedEnergyTransferRecipeBuilder group(String group) { return this; } - @Override public ShapedEnergyTransferRecipeBuilder shallowCopy() { - var builder = super.shallowCopy(); + var builder = new ShapedEnergyTransferRecipeBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.ingredientMap = new HashMap<>(this.ingredientMap); builder.output = output.copy(); return builder; } @@ -131,9 +145,9 @@ public void toJson(JsonObject json) { json.add("pattern", pattern); } - if (!symbolMap.isEmpty()) { + if (!ingredientMap.isEmpty()) { JsonObject key = new JsonObject(); - symbolMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); + ingredientMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); json.add("key", key); } diff --git a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java index b871319e325..eb2251f7b55 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java +++ b/src/main/java/com/gregtechceu/gtceu/data/recipe/builder/ShapedRecipeBuilder.java @@ -3,7 +3,6 @@ import com.gregtechceu.gtceu.GTCEu; import com.gregtechceu.gtceu.api.recipe.StrictShapedRecipe; -import com.lowdragmc.lowdraglib.utils.Builder; import com.lowdragmc.lowdraglib.utils.NBTToJsonConverter; import net.minecraft.core.registries.BuiltInRegistries; @@ -22,16 +21,20 @@ import com.google.gson.JsonObject; import org.jetbrains.annotations.Nullable; +import java.util.*; import java.util.function.Consumer; -public class ShapedRecipeBuilder extends Builder { +public class ShapedRecipeBuilder { protected ItemStack output = ItemStack.EMPTY; - protected ResourceLocation id; - protected String group; + protected @Nullable ResourceLocation id; + protected @Nullable String group; protected boolean isStrict; protected boolean matchSize; + protected List shape = new ArrayList<>(); + protected Map ingredientMap = new LinkedHashMap<>(); + public ShapedRecipeBuilder(@Nullable ResourceLocation id) { this.id = id; } @@ -40,6 +43,16 @@ public ShapedRecipeBuilder() { this(null); } + public ShapedRecipeBuilder aisle(String... data) { + this.shape.add(data); + return this; + } + + public ShapedRecipeBuilder where(char symbol, Ingredient value) { + this.ingredientMap.put(symbol, value); + return this; + } + public ShapedRecipeBuilder pattern(String slice) { return aisle(slice); } @@ -62,13 +75,13 @@ public ShapedRecipeBuilder define(char cha, Ingredient ingredient) { public ShapedRecipeBuilder output(ItemStack itemStack) { this.output = itemStack.copy(); - return (ShapedRecipeBuilder) this; + return this; } public ShapedRecipeBuilder output(ItemStack itemStack, int count) { this.output = itemStack.copy(); this.output.setCount(count); - return (ShapedRecipeBuilder) this; + return this; } public ShapedRecipeBuilder output(ItemStack itemStack, int count, CompoundTag nbt) { @@ -104,9 +117,10 @@ public ShapedRecipeBuilder matchSize(boolean matchSize) { return this; } - @Override public ShapedRecipeBuilder shallowCopy() { - var builder = super.shallowCopy(); + ShapedRecipeBuilder builder = new ShapedRecipeBuilder(); + builder.shape = new ArrayList<>(this.shape); + builder.ingredientMap = new HashMap<>(this.ingredientMap); builder.output = output.copy(); return builder; } @@ -126,9 +140,9 @@ public void toJson(JsonObject json) { json.add("pattern", pattern); } - if (!symbolMap.isEmpty()) { + if (!ingredientMap.isEmpty()) { JsonObject key = new JsonObject(); - symbolMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); + ingredientMap.forEach((k, v) -> key.add(k.toString(), v.toJson())); json.add("key", key); } diff --git a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java index 04a9f1fefae..d0b3b6b4940 100644 --- a/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java @@ -41,6 +41,9 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Fluid; import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.Tags; @@ -55,6 +58,7 @@ import org.apache.commons.lang3.ArrayUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; import java.lang.reflect.ParameterizedType; @@ -694,4 +698,46 @@ public static void setOnFire(Level level, BlockPos pos, double additionalFireCha } } } + + public static AABB rotateAABB(AABB AABB, Direction facing) { + switch (facing) { + case SOUTH -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), 180); + } + case EAST -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), -90); + } + case WEST -> { + return rotateAABB(AABB, new Vector3f(0, 1, 0), 90); + } + case UP -> { + return rotateAABB(AABB, new Vector3f(1, 0, 0), 90); + } + case DOWN -> { + return rotateAABB(AABB, new Vector3f(1, 0, 0), -90); + } + } + return AABB; + } + + public static AABB rotateAABB(AABB AABB, Vector3f axis, double degree) { + Vector3f min = new Vector3f((float) AABB.minX, (float) AABB.minY, (float) AABB.minZ).sub(0.5f, 0.5f, 0.5f); + Vector3f max = new Vector3f((float) AABB.minX, (float) AABB.minY, (float) AABB.minZ).sub(0.5f, 0.5f, 0.5f); + float radians = (float) Math.toRadians(degree); + min.rotateAxis(radians, axis.x, axis.y, axis.z); + max.rotateAxis(radians, axis.x, axis.y, axis.z); + min.add(0.5f, 0.5f, 0.5f); + max.add(0.5f, 0.5f, 0.5f); + return new AABB(min.x, min.y, min.z, max.x, max.y, max.z); + } + + public static VoxelShape rotateVoxelShape(VoxelShape shape, Vector3f axis, double degree) { + return shape.toAabbs().stream().map(AABB -> Shapes.create(rotateAABB(AABB, axis, degree))) + .reduce(Shapes.empty(), Shapes::or); + } + + public static VoxelShape rotateVoxelShape(VoxelShape shape, Direction dir) { + return shape.toAabbs().stream().map(AABB -> Shapes.create(rotateAABB(AABB, dir))).reduce(Shapes.empty(), + Shapes::or); + } } From b0370202c82fe56635efc49d183c920df75eb77b Mon Sep 17 00:00:00 2001 From: Gustavo Date: Fri, 6 Mar 2026 21:03:49 +1100 Subject: [PATCH 2/2] cherry-pick fail --- .../gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java | 7 ++++--- .../gtceu/common/item/behavior/ItemMagnetBehavior.java | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java index 46877a41c9c..95e52709df7 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java +++ b/src/main/java/com/gregtechceu/gtceu/api/pattern/MultiblockShapeInfo.java @@ -5,11 +5,12 @@ import com.lowdragmc.lowdraglib.utils.BlockInfo; -import lombok.Getter; import net.minecraft.core.Direction; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; +import lombok.Getter; + import java.util.*; import java.util.function.Supplier; @@ -65,7 +66,7 @@ public ShapeInfoBuilder where(char symbol, MetaMachineBlock machine, Direction f private BlockInfo[][][] bake() { BlockInfo[][][] Ts = new BlockInfo[shape.get(0)[0].length()][shape.get(0).length][shape.size()]; - for (int z = 0; z < shape.size(); z++) { //z + for (int z = 0; z < shape.size(); z++) { // z String[] aisleEntry = shape.get(z); for (int y = 0; y < shape.get(0).length; y++) { String columnEntry = aisleEntry[y]; @@ -83,7 +84,7 @@ public MultiblockShapeInfo build() { } public ShapeInfoBuilder shallowCopy() { - ShapeInfoBuilder builder= new ShapeInfoBuilder(); + ShapeInfoBuilder builder = new ShapeInfoBuilder(); builder.shape = new ArrayList<>(this.shape); builder.symbolMap = new HashMap<>(this.symbolMap); return builder; diff --git a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java index 32a6e944411..c0af0800eec 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java +++ b/src/main/java/com/gregtechceu/gtceu/common/item/behavior/ItemMagnetBehavior.java @@ -13,6 +13,7 @@ import com.gregtechceu.gtceu.api.item.component.IAddInformation; import com.gregtechceu.gtceu.api.item.component.IInteractionItem; import com.gregtechceu.gtceu.api.item.component.IItemLifeCycle; +import com.gregtechceu.gtceu.api.item.component.IItemUIFactory; import com.gregtechceu.gtceu.common.data.GTItems; import com.lowdragmc.lowdraglib.gui.factory.HeldItemUIFactory;