aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/goodgenerator/blocks/tileEntity/render
diff options
context:
space:
mode:
authorSampsa <69092953+S4mpsa@users.noreply.github.com>2024-09-12 15:03:41 +0300
committerGitHub <noreply@github.com>2024-09-12 14:03:41 +0200
commitc2faa68ac8369db571e8136962b1cac5db206dd0 (patch)
treea2e6ab7379d32e13ca3a5a8de847e99957bfdf49 /src/main/java/goodgenerator/blocks/tileEntity/render
parent07cc2ec931b0e479026e78298a7bd926019c9334 (diff)
downloadGT5-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.java130
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);
+ }
+
+}