diff options
author | NotAPenguin <michiel.vandeginste@gmail.com> | 2024-08-24 15:12:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-24 15:12:00 +0200 |
commit | c2e8f2754f8b5868e7b2110c6442410ce686ff0a (patch) | |
tree | 3c5b2b33065fdb0578abaebc6384662bb496d8fe /src/main/java/gregtech/loaders/postload | |
parent | f89d122ce4492281981140fd9e1612cea08313cf (diff) | |
download | GT5-Unofficial-c2e8f2754f8b5868e7b2110c6442410ce686ff0a.tar.gz GT5-Unofficial-c2e8f2754f8b5868e7b2110c6442410ce686ff0a.tar.bz2 GT5-Unofficial-c2e8f2754f8b5868e7b2110c6442410ce686ff0a.zip |
Make frame boxes no longer TileEntities (#2799)
* fiddling around with frame boxes
* more fiddling
* am trying
* frames exist
* fix frame rendering in inventory
* Fix in world frame rendering
* Apply cover to dumb frame
* continue work on frames
* apply covers to correct side and fix crash on load
* Test permissions
* fix oredict for new frames and create recipes
* fix waila names and drops (kind of)
* fix drops
* mostly all working
* remove old comment
* fix structurecheck using new frames
* create the TE transformer
* it didnt work
* dont modify tes we dont want to modify (needs future postea update)
* it works!
* item transformer works too
* spotless
* add more method overrides from generic gt block?
* update postea
* fix postea transforming items in reserved frame range that were not frame boxes
* fix tesla tower structurecheck + capacitor hatch crash
* Update src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* Update src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* Update src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* Update src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* Spotless apply for branch dumb-frames for #2799 (#2953)
spotlessApply
Co-authored-by: GitHub GTNH Actions <>
* remove extra null check
* Update src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* remove more messy instanceof checks
* Spotless apply for branch dumb-frames for #2799 (#2954)
spotlessApply
Co-authored-by: GitHub GTNH Actions <>
* remove unnecessary null check
* try fixing facade color
* Update src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
* small cleanup in framebox gen code
* swap material for frame box block
* fix description
* make getMaterial static and add fix AE cover color
* nicer casts + localize tooltip in frame block instead of stealing old localization
* draw grid on cover hover
* add a null check in getTexture() that hopefully fixes crash in full pack when interacting with frame boxes
* also draw grid when hovering with wrench
* add chemical element back to tooltip
* fix breaking frame not causing structure update
---------
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Co-authored-by: Alexander Anishin <14104815+OneEyeMaker@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gregtech/loaders/postload')
-rw-r--r-- | src/main/java/gregtech/loaders/postload/PosteaTransformers.java | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/main/java/gregtech/loaders/postload/PosteaTransformers.java b/src/main/java/gregtech/loaders/postload/PosteaTransformers.java new file mode 100644 index 0000000000..ae24de26e8 --- /dev/null +++ b/src/main/java/gregtech/loaders/postload/PosteaTransformers.java @@ -0,0 +1,76 @@ +package gregtech.loaders.postload; + +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; + +import com.gtnewhorizons.postea.api.ItemStackReplacementManager; +import com.gtnewhorizons.postea.api.TileEntityReplacementManager; +import com.gtnewhorizons.postea.utility.BlockInfo; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; +import vexatos.tgregworks.reference.Mods; + +public class PosteaTransformers implements Runnable { + + @Override + public void run() { + registerFrameboxTransformers(); + } + + private static NBTTagCompound passthrough(NBTTagCompound tag) { + return tag; + } + + private void registerFrameboxTransformers() { + // These are used to convert old TileEntity frame boxes into the new system + // that does not use TEs by default + + TileEntityReplacementManager.tileEntityTransformer("BaseMetaPipeEntity", (tag, world) -> { + // Read the MTE ID from the NBT data and try to figure out if this is a frame box + int id = tag.getInteger("mID"); + // Framebox IDs start at 4096 + int indexInMaterialList = id - 4096; + // The offset from 4096 is the index in the material list, so if this is outside the valid range then this + // is not a valid frame box, and we don't want to modify it + if (indexInMaterialList < 0 || indexInMaterialList >= GregTech_API.sGeneratedMaterials.length) { + // Do not modify this TE, so return null + return null; + } + + // Now we know for sure that the tileentity is a frame box + // If this frame has a cover on it, we need to keep it, but we still need to make sure the block + // is the new frame block. We can make sure to keep the TE using a pass-through transformer. + // This works because between the old and new frame systems, the TileEntity used for covered frames + // is still the same + if (tag.hasKey(GT_Values.NBT.COVERS)) { + return new BlockInfo(GregTech_API.sBlockFrames, indexInMaterialList, PosteaTransformers::passthrough); + } + + // If this frame has no covers, simply return a block and delete the TileEntity + return new BlockInfo(GregTech_API.sBlockFrames, indexInMaterialList); + }); + + ItemStackReplacementManager.addItemReplacement("gregtech:gt.blockmachines", (tag) -> { + // Get item meta id and see if this is a frame box, this works pretty much identically to the TE transformer + int id = tag.getInteger("Damage"); + int indexInMaterialList = id - 4096; + // Not a frame box + if (indexInMaterialList < 0 || indexInMaterialList >= GregTech_API.sGeneratedMaterials.length) { + return tag; + } + // Not a frame box if the material for this id does not have a frame box associated with it. + // Apparently the DEFC ID overlaps with the material ID for a Bastnasite frame box for example + if ((GregTech_API.sGeneratedMaterials[indexInMaterialList].mTypes & 0x2) == 0) { + return tag; + } + Item frameItem = GameRegistry.findItem(Mods.GregTech, "gt.blockframes"); + int itemId = Item.getIdFromItem(frameItem); + // Change this item into the correct frame item (make sure to keep amount) + tag.setInteger("id", itemId); + tag.setInteger("Damage", indexInMaterialList); + return tag; + }); + } +} |