diff options
author | Sampsa <69092953+S4mpsa@users.noreply.github.com> | 2024-09-12 15:03:41 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-12 14:03:41 +0200 |
commit | c2faa68ac8369db571e8136962b1cac5db206dd0 (patch) | |
tree | a2e6ab7379d32e13ca3a5a8de847e99957bfdf49 /src/main/java/goodgenerator/blocks/tileEntity/render | |
parent | 07cc2ec931b0e479026e78298a7bd926019c9334 (diff) | |
download | GT5-Unofficial-c2faa68ac8369db571e8136962b1cac5db206dd0.tar.gz GT5-Unofficial-c2faa68ac8369db571e8136962b1cac5db206dd0.tar.bz2 GT5-Unofficial-c2faa68ac8369db571e8136962b1cac5db206dd0.zip |
Add Antimatter Power Generation (#3117)
Co-authored-by: BlueWeabo <ilia.iliev2005@gmail.com>
Co-authored-by: Mary <33456283+FourIsTheNumber@users.noreply.github.com>
Co-authored-by: BucketBrigade <138534411+CookieBrigade@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Martin Robertz <dream-master@gmx.net>
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity/render')
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java new file mode 100644 index 0000000000..8e2027b36d --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/render/TileAntimatter.java @@ -0,0 +1,130 @@ + +package goodgenerator.blocks.tileEntity.render; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; + +public class TileAntimatter extends TileEntity { + + public boolean shouldRender = true; + + // Antimatter Core settings + public static final float spikeR = 0.82f, spikeG = 0.92f, spikeB = 1f; + public static final float coreR = 0.43f, coreG = 0.40f, coreB = 1f; + public static final float maximalRadius = 9; // Includes core radius + spike length + // Due to being partially managed by a global timer, rotationSpeedMultiplier shouldn't change + // Otherwise it'll cause a snapping effect + public final float rotationSpeedMultiplier = 1; + + public float coreScale = 1f; + public float coreScaleSnapshot = 1f; + public final float coreScaleTransitionTime = 2.5f; + public float timeSnapshot; + public float spikeFactor = 1f; + + // Protomatter Settings + public static float protoSpiralMaxRadius = .5f; + public static final float protoR = 0.2f, protoG = 0.2f, protoB = 0.2f; + public float protomatterScale = .2f; + public boolean protomatterRender = false; + public float rotX = 0, rotY = 0, rotZ = 0; + public float rotationAngle = 0; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + compound.setFloat("coreScale", coreScale); + compound.setFloat("coreScaleSnapshot", coreScaleSnapshot); + compound.setFloat("currentTime", timeSnapshot); + compound.setFloat("spikeFactor", spikeFactor); + compound.setBoolean("protomatterRender", protomatterRender); + + compound.setFloat("rotX", rotX); + compound.setFloat("rotY", rotY); + compound.setFloat("rotZ", rotZ); + compound.setFloat("rotationAngle", rotationAngle); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + coreScale = compound.getFloat("coreScale"); + coreScaleSnapshot = compound.getFloat("coreScaleSnapshot"); + timeSnapshot = compound.getFloat("currentTime"); + spikeFactor = compound.getFloat("spikeFactor"); + protomatterRender = compound.getBoolean("protomatterRender"); + + rotX = compound.getFloat("rotX"); + rotY = compound.getFloat("rotY"); + rotZ = compound.getFloat("rotZ"); + rotationAngle = compound.getFloat("rotationAngle"); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return AxisAlignedBB.getBoundingBox( + xCoord - maximalRadius - 1, + yCoord - maximalRadius - 1, + zCoord - maximalRadius - 1, + xCoord + maximalRadius + 1, + yCoord + maximalRadius + 1, + zCoord + maximalRadius + 1); + } + + @Override + public double getMaxRenderDistanceSquared() { + return 65536; + } + + public void setProtomatterRender(boolean flag) { + protomatterRender = flag; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public float getSpiralRadius(float normalization) { + return Math.min(coreScale / 2.0f * normalization, protoSpiralMaxRadius); + } + + public void setCoreSize(float diameter) { + coreScaleSnapshot = coreScale; + coreScale = diameter; + timeSnapshot = this.getWorldObj() + .getWorldInfo() + .getWorldTotalTime(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void setRotationFields(Rotation rotation, ForgeDirection direction) { + switch (rotation) { + case NORMAL -> rotationAngle = 0; + case CLOCKWISE -> rotationAngle = 90; + case COUNTER_CLOCKWISE -> rotationAngle = -90; + case UPSIDE_DOWN -> rotationAngle = 180; + } + rotX = direction.offsetX; + rotY = direction.offsetY; + rotZ = direction.offsetZ; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + +} |