From 645cca6ecf63a9d0f7af6eb58de46f8a799a4690 Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Tue, 4 Feb 2025 12:45:07 -0500 Subject: [PATCH] Fix covers (due to api change) & facades --- .../common/building/AbstractBuildable.java | 3 +- .../common/building/CoverData.java | 28 ++--------- .../common/building/GTAnalysisResult.java | 47 ++++++++++--------- 3 files changed, 30 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/AbstractBuildable.java b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/AbstractBuildable.java index 75fe593..b04475a 100644 --- a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/AbstractBuildable.java +++ b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/AbstractBuildable.java @@ -243,9 +243,10 @@ protected void removeCovers(TileEntity te) { if (te instanceof ICoverable coverable) { for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { if (coverable.getCoverIDAtSide(side) != 0) { - ItemStack cover = coverable.removeCoverAtSide(side, true); + ItemStack cover = coverable.getCoverInfoAtSide(side).getDrop(); if (cover != null && cover.getItem() != null) { + coverable.setCoverItemAtSide(side, null); givePlayerItems(cover); } } diff --git a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/CoverData.java b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/CoverData.java index 5427dfb..142eddf 100644 --- a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/CoverData.java +++ b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/CoverData.java @@ -1,7 +1,5 @@ package com.recursive_pineapple.matter_manipulator.common.building; -import net.minecraft.init.Items; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; @@ -19,7 +17,6 @@ public class CoverData { public NBTBase coverData; public Integer tickRateAddition; - public transient Integer coverID; public transient CoverBehaviorBase behaviour; public transient ISerializableObject coverDataObject; @@ -35,19 +32,9 @@ public ItemStack getCover() { return cover.toStack(); } - public int getCoverID() { - if (coverID == null) { - ItemStack stack = getCover(); - - coverID = (Item.getIdFromItem(stack.getItem()) & 0xFFFF) | ((Items.feather.getDamage(stack) & 0xFFFF) << 16); - } - - return coverID; - } - public CoverBehaviorBase getCoverBehaviour() { if (behaviour == null) { - behaviour = GregTechAPI.getCoverBehaviorNew(getCoverID()); + behaviour = GregTechAPI.getCoverBehaviorNew(getCover()); } return behaviour; @@ -68,7 +55,6 @@ public CoverData clone() { dup.cover = cover.clone(); dup.coverData = coverData.copy(); dup.tickRateAddition = tickRateAddition; - dup.coverID = coverID; return dup; } @@ -79,17 +65,11 @@ public CoverData clone() { * @return The CoverData, or null if there's no cover. */ public static CoverData fromInfo(CoverInfo info) { - if (info.getCoverID() == 0) return null; - - int itemId = info.getCoverID() & 0xFFFF; - int metadata = (info.getCoverID() >> 16) & 0xFFFF; - - Item item = Item.getItemById(itemId); + if (info == null || info.getDrop() == null) return null; return new CoverData( - new PortableItemStack(item, metadata), - info.getCoverData() - .saveDataToNBT(), + PortableItemStack.withNBT(info.getDrop()), + info.getCoverData().saveDataToNBT(), info.getTickRateAddition() ); } diff --git a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/GTAnalysisResult.java b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/GTAnalysisResult.java index 2cf034c..5a64aae 100644 --- a/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/GTAnalysisResult.java +++ b/src/main/java/com/recursive_pineapple/matter_manipulator/common/building/GTAnalysisResult.java @@ -27,6 +27,7 @@ import gregtech.api.metatileentity.implementations.MTEHatchInputBus; import gregtech.api.metatileentity.implementations.MTEHatchOutput; import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.objects.GTItemStack; import gregtech.common.covers.CoverInfo; import gregtech.common.tileentities.machines.MTEHatchOutputBusME; import gregtech.common.tileentities.machines.MTEHatchOutputME; @@ -315,16 +316,14 @@ public boolean apply(IBlockApplyContext ctx) { // install/remove/update the covers for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { CoverData expected = mCovers == null ? null : mCovers[dir.ordinal()]; - CoverInfo actual = gte.getCoverIDAtSide(dir) == 0 ? - null : - new CoverInfo(dir, gte.getCoverIDAtSide(dir), gte, gte.getComplexCoverDataAtSide(dir)); + CoverInfo actual = gte.getCoverInfoAtSide(dir); if (actual == null && expected != null) { installCover(ctx, gte, dir, expected); } else if (actual != null && expected == null) { removeCover(ctx, gte, dir); } else if (actual != null && expected != null) { - if (actual.getCoverID() != expected.getCoverID()) { + if (!ItemStack.areItemStacksEqual(expected.getCover(), actual.getDrop())) { removeCover(ctx, gte, dir); installCover(ctx, gte, dir, expected); } else if (!Objects.equals(actual.getCoverData(), expected.getCoverData())) { @@ -453,14 +452,15 @@ public boolean apply(IBlockApplyContext ctx) { private void removeCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side) { if (gte.getCoverIDAtSide(side) != 0) { - context.givePlayerItems(gte.removeCoverAtSide(side, true)); + context.givePlayerItems(gte.getCoverInfoAtSide(side).getDrop()); + gte.setCoverItemAtSide(side, null); } } private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, ForgeDirection side, CoverData cover) { ItemStack stack = cover.getCover(); - if (!gte.canPlaceCoverItemAtSide(side, stack)) { + if (!canPlace(gte, side, cover)) { context.error("Was not allowed to put cover on " + side.name().toLowerCase() + "side: " + stack.getDisplayName()); return; } @@ -470,11 +470,8 @@ private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, F return; } - gte.setCoverIdAndDataAtSide( - side, - cover.getCoverID(), - cover.getCoverBehaviour().allowsCopyPasteTool() ? cover.getCoverData() : null - ); + gte.setCoverItemAtSide(side, stack); + gte.setCoverDataAtSide(side, cover.getCoverBehaviour().allowsCopyPasteTool() ? cover.getCoverData() : null); } private void updateCover( @@ -483,8 +480,8 @@ private void updateCover( ForgeDirection side, CoverData target ) { - if (gte.getCoverIDAtSide(side) == target.getCoverID()) { - if (gte.getCoverBehaviorAtSideNew(side).allowsCopyPasteTool()) { + if (ItemStack.areItemStacksEqual(gte.getCoverItemAtSide(side), target.getCover())) { + if (gte.getCoverInfoAtSide(side).allowsCopyPasteTool()) { gte.setCoverDataAtSide(side, target.getCoverData()); } } @@ -497,20 +494,15 @@ public boolean getRequiredItemsForExistingBlock(IBlockApplyContext context) { if (te instanceof IGregTechTileEntity gte) { for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { CoverData target = mCovers == null ? null : mCovers[side.ordinal()]; - CoverInfo actual = gte.getCoverIDAtSide(side) == 0 ? - null : - new CoverInfo(side, gte.getCoverIDAtSide(side), gte, gte.getComplexCoverDataAtSide(side)); - - if (actual != null && (target == null || actual.getCoverID() != target.getCoverID())) { - context.givePlayerItems( - gte.getCoverItemAtSide(side) - .copy() - ); + CoverInfo actual = gte.getCoverInfoAtSide(side); + + if (actual != null && (target == null || ItemStack.areItemStacksEqual(actual.getDrop(), target.getCover()))) { + context.givePlayerItems(gte.getCoverItemAtSide(side)); actual = null; } if (actual == null && target != null) { - if (gte.canPlaceCoverItemAtSide(side, target.getCover())) { + if (canPlace(gte, side, target)) { context.tryConsumeItems(target.getCover()); } } @@ -533,6 +525,15 @@ public boolean getRequiredItemsForNewBlock(IBlockApplyContext context) { return true; } + private boolean canPlace(IGregTechTileEntity gte, ForgeDirection side, CoverData cover) { + ItemStack stack = cover.getCover(); + + if (!cover.getCoverBehaviour().isCoverPlaceable(side, stack, gte)) return false; + if (!gte.getMetaTileEntity().allowCoverOnSide(side, new GTItemStack(stack))) return false; + + return true; + } + @Override public void getItemTag(NBTTagCompound tag) { if (mGTMEBusCapacity != 0) {