diff options
| author | Glease <4586901+Glease@users.noreply.github.com> | 2022-01-23 21:28:13 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-23 14:28:13 +0100 |
| commit | 0bb36cbb957053d4d91053d152ebddd6f0ed1009 (patch) | |
| tree | 6d967b5509828981e71b20ff78b9996d8534920b /src/main/java/gregtech/common/blocks | |
| parent | b5b8478b20bfd01bc20ff0a175ea53a4da4983a9 (diff) | |
| download | GT5-Unofficial-0bb36cbb957053d4d91053d152ebddd6f0ed1009.tar.gz GT5-Unofficial-0bb36cbb957053d4d91053d152ebddd6f0ed1009.tar.bz2 GT5-Unofficial-0bb36cbb957053d4d91053d152ebddd6f0ed1009.zip | |
AE2 Cable facade as cover (#887)
* initial work on facade covers
* fix colorMultiplier
also removed derp
* Clean up drop cover texture reset code
What was I thinking actually? Send a packet to reset client states?
* Fix cover display stack
Diffstat (limited to 'src/main/java/gregtech/common/blocks')
3 files changed, 69 insertions, 4 deletions
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java index 2bd94c6ccb..cef115f0c0 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java @@ -2,11 +2,13 @@ package gregtech.common.blocks; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GT_Mod; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GT_RenderingWorld; import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -67,6 +69,9 @@ public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { ItemList.Casing_EngineIntake.set(new ItemStack(this, 1, 13)); ItemList.Casing_MiningOsmiridium.set(new ItemStack(this, 1, 14)); ItemList.Casing_Firebricks.set(new ItemStack(this, 1, 15)); + + GT_Mod.gregtechproxy.mCTMBlockCache.put(this, (byte) 6, true); + GT_Mod.gregtechproxy.mCTMBlockCache.put(this, (byte) 8, true); } @Override @@ -148,6 +153,7 @@ public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { @Override @SideOnly(Side.CLIENT) public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int aSide) { + aWorld = GT_RenderingWorld.getInstance(aWorld); int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); if (tMeta != 6 && tMeta != 8 && tMeta != 9 && tMeta != 10 && tMeta != 11 && tMeta != 12 || !mConnectedMachineTextures) { return getIcon(aSide, tMeta); diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java index 2c9254bf28..ad97bb9572 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java @@ -1,5 +1,7 @@ package gregtech.common.blocks; +import com.cricketcraft.chisel.api.IFacade; +import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.GregTech_API; @@ -27,6 +29,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EnumCreatureType; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -47,7 +50,8 @@ import java.util.List; import static gregtech.GT_Mod.GT_FML_LOGGER; import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlock, ITileEntityProvider { +@Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI") +public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlock, ITileEntityProvider, IFacade { private static final ThreadLocal<IGregTechTileEntity> mTemporaryTileEntity = new ThreadLocal<>(); private boolean renderAsNormalBlock; @@ -648,4 +652,51 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo } return false; } + + @Override + public Block getFacade(IBlockAccess aWorld, int aX, int aY, int aZ, int side) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + byte aSide = (byte) side; + IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity; + if (side != -1) { + Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); + if (facadeBlock != null) return facadeBlock; + } else { + // we do not allow more than one type of facade per block, so no need to check every side + // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable + for (byte i = 0; i < 6; i++) { + Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); + if (facadeBlock != null) { + return facadeBlock; + } + } + } + } + return Blocks.air; + } + + @Override + public int getFacadeMetadata(IBlockAccess aWorld, int aX, int aY, int aZ, int side) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + byte aSide = (byte) side; + IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity; + if (side != -1) { + Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); + if (facadeBlock != null) + return tile.getCoverBehaviorAtSideNew(aSide).getFacadeMeta(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); + } else { + // we do not allow more than one type of facade per block, so no need to check every side + // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable + for (byte i = 0; i < 6; i++) { + Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); + if (facadeBlock != null) { + return tile.getCoverBehaviorAtSideNew(i).getFacadeMeta(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); + } + } + } + } + return 0; + } } diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java index bcc6d7e14c..73443006b2 100644 --- a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java @@ -6,15 +6,18 @@ import gregtech.api.enums.Materials; import gregtech.api.interfaces.metatileentity.IConnectable; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.CoverableGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item; +import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.GT_ItsNotMyFaultException; import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; +import gregtech.api.util.ISerializableObject; import gregtech.common.tileentities.storage.*; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -144,9 +147,14 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { if (mCoverSides != null && mCoverSides.length == 6) { for (byte i = 0; i < 6; i++) { int coverId = mCoverSides[i]; - ItemStack coverStack = GT_Utility.intToStack(coverId); - if (coverStack != null) { - aList.add(String.format("Cover on %s side: %s", directionNames[i], coverStack.getDisplayName())); + if (coverId == 0) continue; + GT_CoverBehaviorBase<?> behavior = GregTech_API.getCoverBehaviorNew(coverId); + if (behavior == null || behavior == GregTech_API.sNoBehavior) continue; + if (!aNBT.hasKey(CoverableGregTechTileEntity.COVER_DATA_NBT_KEYS[i])) continue; + ISerializableObject dataObject = behavior.createDataObject(aNBT.getTag(CoverableGregTechTileEntity.COVER_DATA_NBT_KEYS[i])); + ItemStack itemStack = behavior.getDisplayStack(coverId, dataObject); + if (itemStack != null) { + aList.add(String.format("Cover on %s side: %s", directionNames[i], itemStack.getDisplayName())); } } } |
