aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMartin Robertz <dream-master@gmx.net>2022-08-19 14:13:14 +0200
committerGitHub <noreply@github.com>2022-08-19 14:13:14 +0200
commit3fd8c269616b598d3647886b33b48a1656638ff4 (patch)
treec8cdd43785cc1bf27bdda56b0ce13ead64e3d6bc /src/main/java
parent40590e12a74d38160229ac714e852a64705bc1b5 (diff)
parente047655eac4bf51bb5f72f36b8d1c5795cb4c817 (diff)
downloadGT5-Unofficial-3fd8c269616b598d3647886b33b48a1656638ff4.tar.gz
GT5-Unofficial-3fd8c269616b598d3647886b33b48a1656638ff4.tar.bz2
GT5-Unofficial-3fd8c269616b598d3647886b33b48a1656638ff4.zip
Merge pull request #4 from GTNewHorizons/structure
New Extreme Extermination Chamber structure
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/kubatech/FMLEventHandler.java2
-rw-r--r--src/main/java/kubatech/api/LoaderReference.java1
-rw-r--r--src/main/java/kubatech/api/Variables.java4
-rw-r--r--src/main/java/kubatech/api/network/CustomTileEntityPacket.java127
-rw-r--r--src/main/java/kubatech/api/network/LoadConfigPacket.java (renamed from src/main/java/kubatech/network/LoadConfigPacket.java)19
-rw-r--r--src/main/java/kubatech/api/tileentity/CustomTileEntityPacketHandler.java7
-rw-r--r--src/main/java/kubatech/api/utils/InfernalHelper.java1
-rw-r--r--src/main/java/kubatech/api/utils/MobUtils.java67
-rw-r--r--src/main/java/kubatech/api/utils/ReflectionHelper.java9
-rw-r--r--src/main/java/kubatech/client/effect/EntityRenderer.java154
-rw-r--r--src/main/java/kubatech/commands/CommandConfig.java2
-rw-r--r--src/main/java/kubatech/commands/CommandHandler.java1
-rw-r--r--src/main/java/kubatech/commands/CommandHelp.java7
-rw-r--r--src/main/java/kubatech/kubatech.java7
-rw-r--r--src/main/java/kubatech/loaders/MobRecipeLoader.java22
-rw-r--r--src/main/java/kubatech/loaders/RecipeLoader.java2
-rw-r--r--src/main/java/kubatech/nei/Mob_Handler.java47
-rw-r--r--src/main/java/kubatech/network/LoadConfigHandler.java36
-rw-r--r--src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java (renamed from src/main/java/kubatech/common/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java)123
19 files changed, 528 insertions, 110 deletions
diff --git a/src/main/java/kubatech/FMLEventHandler.java b/src/main/java/kubatech/FMLEventHandler.java
index 6e4bfad541..e74e7eeee0 100644
--- a/src/main/java/kubatech/FMLEventHandler.java
+++ b/src/main/java/kubatech/FMLEventHandler.java
@@ -21,7 +21,7 @@ package kubatech;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.PlayerEvent;
-import kubatech.network.LoadConfigPacket;
+import kubatech.api.network.LoadConfigPacket;
import net.minecraft.entity.player.EntityPlayerMP;
public class FMLEventHandler {
diff --git a/src/main/java/kubatech/api/LoaderReference.java b/src/main/java/kubatech/api/LoaderReference.java
index aef8930905..418fe4a7ab 100644
--- a/src/main/java/kubatech/api/LoaderReference.java
+++ b/src/main/java/kubatech/api/LoaderReference.java
@@ -9,4 +9,5 @@ public class LoaderReference {
public static final boolean InfernalMobs = Loader.isModLoaded("InfernalMobs");
public static final boolean Thaumcraft = Loader.isModLoaded("Thaumcraft");
public static final boolean MineTweaker = Loader.isModLoaded("MineTweaker3");
+ public static final boolean Bartworks = Loader.isModLoaded("bartworks");
}
diff --git a/src/main/java/kubatech/api/Variables.java b/src/main/java/kubatech/api/Variables.java
index 9dba10f6a6..c8d551a44e 100644
--- a/src/main/java/kubatech/api/Variables.java
+++ b/src/main/java/kubatech/api/Variables.java
@@ -23,4 +23,8 @@ import net.minecraft.util.EnumChatFormatting;
public class Variables {
public static final String Author = "Author: " + EnumChatFormatting.GOLD + "kuba6000";
+ public static final String StructureHologram =
+ "To see the structure, use a " + EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech"
+ + EnumChatFormatting.RESET + "" + EnumChatFormatting.GRAY + " Blueprint on the Controller!";
+ ;
}
diff --git a/src/main/java/kubatech/api/network/CustomTileEntityPacket.java b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
new file mode 100644
index 0000000000..cd7bfd3389
--- /dev/null
+++ b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java
@@ -0,0 +1,127 @@
+package kubatech.api.network;
+
+import cpw.mods.fml.common.network.NetworkRegistry;
+import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import java.nio.charset.StandardCharsets;
+import kubatech.api.tileentity.CustomTileEntityPacketHandler;
+import kubatech.api.utils.ModUtils;
+import kubatech.kubatech;
+import net.minecraft.client.Minecraft;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+
+public class CustomTileEntityPacket implements IMessage {
+ public int w, x, y, z;
+ public ByteBuf customdata = Unpooled.buffer();
+
+ @SuppressWarnings("unused")
+ public CustomTileEntityPacket() {}
+
+ public CustomTileEntityPacket(TileEntity te, byte[] customdata) {
+ this.w = te.getWorldObj().provider.dimensionId;
+ this.x = te.xCoord;
+ this.y = te.yCoord;
+ this.z = te.zCoord;
+ if (customdata != null && customdata.length > 0) this.customdata.writeBytes(customdata);
+ }
+
+ public void sendToAllAround(int range) {
+ kubatech.NETWORK.sendToAllAround(this, new NetworkRegistry.TargetPoint(w, x, y, z, range));
+ }
+
+ // Helper methods
+
+ public void resetHelperData() {
+ customdata.clear();
+ }
+
+ public void addData(byte[] data) {
+ customdata.writeBytes(data);
+ }
+
+ public void addData(byte data) {
+ customdata.writeByte(data);
+ }
+
+ public void addData(int data) {
+ customdata.writeInt(data);
+ }
+
+ public void addData(String data) {
+ byte[] bytes = data.getBytes(StandardCharsets.UTF_8);
+ addData(bytes.length);
+ addData(bytes);
+ }
+
+ public void addData(boolean data) {
+ customdata.writeBoolean(data);
+ }
+
+ public void getData(byte[] bytes) {
+ customdata.readBytes(bytes);
+ }
+
+ public byte[] getData(int len) {
+ byte[] bytes = new byte[len];
+ getData(bytes);
+ return bytes;
+ }
+
+ public int getDataInt() {
+ return customdata.readInt();
+ }
+
+ public String getDataString() {
+ return new String(getData(getDataInt()), StandardCharsets.UTF_8);
+ }
+
+ public boolean getDataBoolean() {
+ return customdata.readBoolean();
+ }
+
+ @Override
+ public void fromBytes(ByteBuf buf) {
+ w = buf.readInt();
+ x = buf.readInt();
+ y = buf.readInt();
+ z = buf.readInt();
+ customdata.clear();
+ buf.readBytes(customdata, buf.readInt());
+ }
+
+ @Override
+ public void toBytes(ByteBuf buf) {
+ buf.writeInt(w);
+ buf.writeInt(x);
+ buf.writeInt(y);
+ buf.writeInt(z);
+ buf.writeInt(customdata.readableBytes());
+ buf.writeBytes(customdata);
+ }
+
+ public static class Handler implements IMessageHandler<CustomTileEntityPacket, IMessage> {
+ @Override
+ public IMessage onMessage(CustomTileEntityPacket message, MessageContext ctx) {
+ if (!ModUtils.isClientSided) return null;
+ World w = Minecraft.getMinecraft().thePlayer.getEntityWorld();
+ if (message.w != w.provider.dimensionId) return null;
+ TileEntity e = w.getTileEntity(message.x, message.y, message.z);
+ if (e == null || e.isInvalid()) return null;
+ if (e instanceof IGregTechTileEntity && !((IGregTechTileEntity) e).isInvalidTileEntity()) {
+ IMetaTileEntity mte = ((IGregTechTileEntity) e).getMetaTileEntity();
+ if (mte == null) return null;
+ if (!(mte instanceof CustomTileEntityPacketHandler)) return null;
+ ((CustomTileEntityPacketHandler) mte).HandleCustomPacket(message);
+ return null;
+ } else if (!(e instanceof CustomTileEntityPacketHandler)) return null;
+ ((CustomTileEntityPacketHandler) e).HandleCustomPacket(message);
+ return null;
+ }
+ }
+}
diff --git a/src/main/java/kubatech/network/LoadConfigPacket.java b/src/main/java/kubatech/api/network/LoadConfigPacket.java
index 48f3342486..f38293642e 100644
--- a/src/main/java/kubatech/network/LoadConfigPacket.java
+++ b/src/main/java/kubatech/api/network/LoadConfigPacket.java
@@ -17,19 +17,23 @@
*
*/
-package kubatech.network;
+package kubatech.api.network;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
+import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
+import cpw.mods.fml.common.network.simpleimpl.MessageContext;
import io.netty.buffer.ByteBuf;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import kubatech.Config;
+import kubatech.kubatech;
+import kubatech.loaders.MobRecipeLoader;
public class LoadConfigPacket implements IMessage {
- public static LoadConfigPacket instance = new LoadConfigPacket();
+ public static final LoadConfigPacket instance = new LoadConfigPacket();
- public HashSet<String> mobsToLoad = new HashSet<>();
+ public final HashSet<String> mobsToLoad = new HashSet<>();
@Override
public void fromBytes(ByteBuf buf) {
@@ -58,4 +62,13 @@ public class LoadConfigPacket implements IMessage {
});
}
}
+
+ public static class Handler implements IMessageHandler<LoadConfigPacket, IMessage> {
+ @Override
+ public IMessage onMessage(LoadConfigPacket message, MessageContext ctx) {
+ kubatech.info("Received Mob Handler config, parsing");
+ MobRecipeLoader.processMobRecipeMap(message.mobsToLoad);
+ return null;
+ }
+ }
}
diff --git a/src/main/java/kubatech/api/tileentity/CustomTileEntityPacketHandler.java b/src/main/java/kubatech/api/tileentity/CustomTileEntityPacketHandler.java
new file mode 100644
index 0000000000..643ca70d0f
--- /dev/null
+++ b/src/main/java/kubatech/api/tileentity/CustomTileEntityPacketHandler.java
@@ -0,0 +1,7 @@
+package kubatech.api.tileentity;
+
+import kubatech.api.network.CustomTileEntityPacket;
+
+public interface CustomTileEntityPacketHandler {
+ void HandleCustomPacket(CustomTileEntityPacket customdata);
+}
diff --git a/src/main/java/kubatech/api/utils/InfernalHelper.java b/src/main/java/kubatech/api/utils/InfernalHelper.java
index 60263b0a17..4bd48274f3 100644
--- a/src/main/java/kubatech/api/utils/InfernalHelper.java
+++ b/src/main/java/kubatech/api/utils/InfernalHelper.java
@@ -27,6 +27,7 @@ import java.util.ArrayList;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
+@SuppressWarnings("unchecked")
public class InfernalHelper {
private static Method isClassAllowed = null;
diff --git a/src/main/java/kubatech/api/utils/MobUtils.java b/src/main/java/kubatech/api/utils/MobUtils.java
new file mode 100644
index 0000000000..0b20364484
--- /dev/null
+++ b/src/main/java/kubatech/api/utils/MobUtils.java
@@ -0,0 +1,67 @@
+package kubatech.api.utils;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import java.lang.reflect.Field;
+import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelBox;
+import net.minecraft.client.model.ModelRenderer;
+import net.minecraft.client.renderer.entity.Render;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.entity.RendererLivingEntity;
+import net.minecraft.entity.EntityLiving;
+
+public class MobUtils {
+
+ private static Field mainmodelfield = null;
+
+ @SideOnly(Side.CLIENT)
+ public static float getDesiredScale(EntityLiving e, float desiredHeight) {
+ return getDesiredScale(getMobHeight(e), desiredHeight);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public static float getDesiredScale(float entityHeight, float desiredHeight) {
+ return desiredHeight / entityHeight;
+ }
+
+ @SideOnly(Side.CLIENT)
+ public static float getMobHeight(EntityLiving e) {
+ try {
+ if (mainmodelfield == null) {
+ mainmodelfield = RendererLivingEntity.class.getDeclaredField(
+ ModUtils.isDeobfuscatedEnvironment ? "mainModel" : "field_77045_g");
+ mainmodelfield.setAccessible(true);
+ }
+ float eheight = e.height;
+ float ewidth = e.width;
+ Render r = RenderManager.instance.getEntityRenderObject(e);
+ if (r instanceof RendererLivingEntity && mainmodelfield != null) {
+ ModelBase mainmodel = (ModelBase) mainmodelfield.get(r);
+ for (Object box : mainmodel.boxList) {
+ if (box instanceof ModelRenderer) {
+ float minY = 999f;
+ float minX = 999f;
+ float maxY = -999f;
+ float maxX = -999f;
+ for (Object cube : ((ModelRenderer) box).cubeList) {
+ if (cube instanceof ModelBox) {
+ if (minY > ((ModelBox) cube).posY1) minY = ((ModelBox) cube).posY1;
+ if (minX > ((ModelBox) cube).posX1) minX = ((ModelBox) cube).posX1;
+ if (maxY < ((ModelBox) cube).posY2) maxY = ((ModelBox) cube).posY2;
+ if (maxX < ((ModelBox) cube).posX2) maxX = ((ModelBox) cube).posX2;
+ }
+ }
+ float cubeheight = (maxY - minY) / 10f;
+ float cubewidth = (maxX - minX) / 10f;
+ if (eheight < cubeheight) eheight = cubeheight;
+ if (ewidth < cubewidth) ewidth = cubewidth;
+ }
+ }
+ }
+ return eheight;
+ } catch (Exception ex) {
+ return 1f;
+ }
+ }
+}
diff --git a/src/main/java/kubatech/api/utils/ReflectionHelper.java b/src/main/java/kubatech/api/utils/ReflectionHelper.java
index 7c7301c1c8..48d07c6eee 100644
--- a/src/main/java/kubatech/api/utils/ReflectionHelper.java
+++ b/src/main/java/kubatech/api/utils/ReflectionHelper.java
@@ -25,7 +25,8 @@ import java.util.HashMap;
public class ReflectionHelper {
private static final HashMap<String, HashMap<String, Field>> fields = new HashMap<>();
- public static <T> T getField(Object obj, String fieldName, boolean useBasicTypes, T defaultvalue) {
+ @SuppressWarnings("unchecked")
+ public static <T> T getField(Object obj, String fieldName, T defaultvalue) {
Class<?> cl = obj.getClass();
String clName = cl.getName();
HashMap<String, Field> classmap = fields.computeIfAbsent(clName, s -> new HashMap<>());
@@ -52,11 +53,7 @@ public class ReflectionHelper {
}
}
- public static <T> T getField(Object obj, String fieldName, boolean useBasicTypes) {
- return getField(obj, fieldName, useBasicTypes, null);
- }
-
public static <T> T getField(Object obj, String fieldName) {
- return getField(obj, fieldName, true, null);
+ return getField(obj, fieldName, null);
}
}
diff --git a/src/main/java/kubatech/client/effect/EntityRenderer.java b/src/main/java/kubatech/client/effect/EntityRenderer.java
new file mode 100644
index 0000000000..ed545b3cb6
--- /dev/null
+++ b/src/main/java/kubatech/client/effect/EntityRenderer.java
@@ -0,0 +1,154 @@
+package kubatech.client.effect;
+
+import static net.minecraft.client.renderer.entity.RenderManager.*;
+import static org.lwjgl.opengl.GL11.GL_MODELVIEW_STACK_DEPTH;
+
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import kubatech.api.utils.MobUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.particle.EntityFX;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.RenderHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.world.World;
+import org.lwjgl.opengl.GL11;
+import org.lwjgl.opengl.GL12;
+
+@SideOnly(Side.CLIENT)
+public class EntityRenderer extends EntityFX {
+ private EntityLiving entityToRender = null;
+
+ public EntityRenderer(World p_i1218_1_, double x, double y, double z, int age) {
+ super(p_i1218_1_, x + 0.5d, y, z + 0.5d);
+ this.particleMaxAge = age;
+ this.particleAge = 0;
+ }
+
+ public EntityRenderer(EntityRenderer r, int age) {
+ super(r.worldObj, r.posX, r.posY, r.posZ);
+ this.particleMaxAge = age;
+ this.particleAge = 0;
+ this.ticksExisted = r.ticksExisted;
+ this.entityToRender = r.entityToRender;
+ }
+
+ @Override
+ protected void entityInit() {}
+
+ @Override
+ public void onUpdate() {
+ if (this.entityToRender == null) return;
+ this.ticksExisted++;
+ if (ticksExisted % 20 == 0) entityToRender.hurtTime = 10;
+ else if (entityToRender.hurtTime > 0) entityToRender.hurtTime--;
+ if (this.particleAge++ == this.particleMaxAge) {
+ this.setDead();
+ }
+ }
+
+ @Override
+ public boolean shouldRenderInPass(int pass) {
+ return pass == 3;
+ }
+
+ @Override
+ public int getFXLayer() {
+ return 3;
+ }
+
+ public void setEntity(EntityLiving entity) {
+ this.entityToRender = entity;
+ }
+
+ @Override
+ public void renderParticle(
+ Tessellator p_70539_1_,
+ float p_70539_2_,
+ float p_70539_3_,
+ float p_70539_4_,
+ float p_70539_5_,
+ float p_70539_6_,
+ float p_70539_7_) {
+ if (entityToRender == null) return;
+
+ GL11.glEnable(GL11.GL_LIGHTING);
+ GL11.glEnable(GL11.GL_COLOR_MATERIAL);
+
+ entityToRender.worldObj = this.worldObj;
+ entityToRender.setPosition(this.posX, this.posY, this.posZ);
+
+ double rotation;
+ // double headrotation;
+ {
+ double x1 = this.posX;
+ double x2 = Minecraft.getMinecraft().thePlayer.posX;
+ double y1 = this.posZ;
+ double y2 = Minecraft.getMinecraft().thePlayer.posZ;
+ double k = Math.toDegrees(Math.atan2(x2 - x1, y1 - y2));
+ if (k < 0d) k += 360d;
+ k -= 180d;
+ rotation = k;
+ }
+ /*
+ {
+ double y1 = this.posY;
+ double y2 = Minecraft.getMinecraft().thePlayer.posY;
+ double d = Minecraft.getMinecraft()
+ .thePlayer
+ .getDistance(this.posX, Minecraft.getMinecraft().thePlayer.posY, this.posZ);
+ double k = Math.toDegrees(Math.atan2(y1 - y2, d));
+ if (k < 0d) k += 360d;
+ headrotation = k;
+ }
+
+ */
+
+ entityToRender.prevRotationYawHead = entityToRender.rotationYawHead;
+ entityToRender.prevRenderYawOffset = entityToRender.renderYawOffset;
+ // entityToRender.prevRotationPitch = entityToRender.rotationPitch;
+ entityToRender.renderYawOffset = (float) rotation;
+ entityToRender.rotationYawHead = (float) rotation;
+ // entityToRender.rotationPitch = (float)headrotation;
+
+ float p_147936_2_ = 0.5f;
+
+ float f1 = entityToRender.prevRotationYaw
+ + (entityToRender.rotationYaw - entityToRender.prevRotationYaw) * p_147936_2_;
+ int i = entityToRender.getBrightnessForRender(p_147936_2_);
+
+ if (entityToRender.isBurning()) {
+ i = 15728880;
+ }
+
+ int j = i % 65536;
+ int k = i / 65536;
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float) j, (float) k);
+ GL11.glColor4f(1f, 1f, 1f, 1F);
+ RenderHelper.enableStandardItemLighting();
+ GL11.glMatrixMode(GL11.GL_MODELVIEW);
+ int stackdepth = GL11.glGetInteger(GL_MODELVIEW_STACK_DEPTH);
+ GL11.glPushMatrix();
+ GL11.glTranslatef(
+ (float) (this.posX - renderPosX), (float) (this.posY - renderPosY), (float) (this.posZ - renderPosZ));
+ GL11.glEnable(GL12.GL_RESCALE_NORMAL);
+ float desiredScale = MobUtils.getDesiredScale(entityToRender, 2f);
+ if (desiredScale < 1f) GL11.glScalef(desiredScale, desiredScale, desiredScale);
+ try {
+ instance.renderEntityWithPosYaw(entityToRender, 0f, 0f, 0f, f1, p_147936_2_);
+ } catch (Throwable ex) {
+ Tessellator tes = Tessellator.instance;
+ try {
+ tes.draw();
+ } catch (Exception ignored) {
+ }
+ }
+
+ stackdepth -= GL11.glGetInteger(GL_MODELVIEW_STACK_DEPTH);
+ if (stackdepth < 0) for (; stackdepth < 0; stackdepth++) GL11.glPopMatrix();
+
+ GL11.glDisable(GL11.GL_LIGHTING);
+ GL11.glDisable(GL11.GL_COLOR_MATERIAL);
+ }
+}
diff --git a/src/main/java/kubatech/commands/CommandConfig.java b/src/main/java/kubatech/commands/CommandConfig.java
index e892ac885b..a1c3659165 100644
--- a/src/main/java/kubatech/commands/CommandConfig.java
+++ b/src/main/java/kubatech/commands/CommandConfig.java
@@ -22,9 +22,9 @@ package kubatech.commands;
import static kubatech.commands.CommandConfig.Translations.*;
import kubatech.Config;
+import kubatech.api.network.LoadConfigPacket;
import kubatech.kubatech;
import kubatech.loaders.MobRecipeLoader;
-import kubatech.network.LoadConfigPacket;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
diff --git a/src/main/java/kubatech/commands/CommandHandler.java b/src/main/java/kubatech/commands/CommandHandler.java
index 3bcfb352b2..d1822a1ff8 100644
--- a/src/main/java/kubatech/commands/CommandHandler.java
+++ b/src/main/java/kubatech/commands/CommandHandler.java
@@ -74,6 +74,7 @@ public class CommandHandler extends CommandBase {
return "kubatech " + USAGE.get();
}
+ @SuppressWarnings("rawtypes")
@Override
public List getCommandAliases() {
return aliases;
diff --git a/src/main/java/kubatech/commands/CommandHelp.java b/src/main/java/kubatech/commands/CommandHelp.java
index 2ea9b00d76..dba8ab622d 100644
--- a/src/main/java/kubatech/commands/CommandHelp.java
+++ b/src/main/java/kubatech/commands/CommandHelp.java
@@ -73,8 +73,9 @@ public class CommandHelp extends CommandBase {
@Override
public void processCommand(ICommandSender p_71515_1_, String[] p_71515_2_) {
p_71515_1_.addChatMessage(new ChatComponentText(POSSIBLE_COMMANDS.get()));
- CommandHandler.commands.values().forEach(c -> {
- p_71515_1_.addChatMessage(new ChatComponentText("/kubatech " + c.getCommandUsage(p_71515_1_)));
- });
+ CommandHandler.commands
+ .values()
+ .forEach(c ->
+ p_71515_1_.addChatMessage(new ChatComponentText("/kubatech " + c.getCommandUsage(p_71515_1_))));
}
}
diff --git a/src/main/java/kubatech/kubatech.java b/src/main/java/kubatech/kubatech.java
index d5407ff357..6973c281b4 100644
--- a/src/main/java/kubatech/kubatech.java
+++ b/src/main/java/kubatech/kubatech.java
@@ -24,8 +24,8 @@ import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.*;
import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper;
import cpw.mods.fml.relauncher.Side;
-import kubatech.network.LoadConfigHandler;
-import kubatech.network.LoadConfigPacket;
+import kubatech.api.network.CustomTileEntityPacket;
+import kubatech.api.network.LoadConfigPacket;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -44,7 +44,8 @@ public class kubatech {
public static final SimpleNetworkWrapper NETWORK = new SimpleNetworkWrapper(Tags.MODID);
static {
- NETWORK.registerMessage(new LoadConfigHandler(), LoadConfigPacket.class, 0, Side.CLIENT);
+ NETWORK.registerMessage(new LoadConfigPacket.Handler(), LoadConfigPacket.class, 0, Side.CLIENT);
+ NETWORK.registerMessage(new CustomTileEntityPacket.Handler(), CustomTileEntityPacket.class, 1, Side.CLIENT);
}
private static final Logger LOG = LogManager.getLogger(Tags.MODID);
diff --git a/src/main/java/kubatech/loaders/MobRecipeLoader.java b/src/main/java/kubatech/loaders/MobRecipeLoader.java
index 283c75391a..d3b02083e9 100644
--- a/src/main/java/kubatech/loaders/MobRecipeLoader.java
+++ b/src/main/java/kubatech/loaders/MobRecipeLoader.java
@@ -21,7 +21,7 @@ package kubatech.loaders;
import static kubatech.api.utils.ModUtils.isClientSided;
import static kubatech.api.utils.ModUtils.isDeobfuscatedEnvironment;
-import static kubatech.common.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.MobNameToRecipeMap;
+import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber.MobNameToRecipeMap;
import atomicstryker.infernalmobs.common.InfernalMobsCore;
import atomicstryker.infernalmobs.common.MobModifier;
@@ -45,12 +45,12 @@ import java.util.stream.Collectors;
import kubatech.Config;
import kubatech.Tags;
import kubatech.api.LoaderReference;
+import kubatech.api.network.LoadConfigPacket;
+import kubatech.api.utils.InfernalHelper;
import kubatech.api.utils.GSONUtils;
import kubatech.api.utils.InfernalHelper;
import kubatech.api.utils.ModUtils;
-import kubatech.common.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber;
import kubatech.nei.Mob_Handler;
-import kubatech.network.LoadConfigPacket;
import minetweaker.MineTweakerAPI;
import minetweaker.api.entity.IEntityDefinition;
import minetweaker.api.item.IItemStack;
@@ -110,6 +110,7 @@ public class MobRecipeLoader {
public final boolean alwaysinfernal;
public static droplist infernaldrops;
public final boolean isPeacefulAllowed;
+ public final EntityLiving entity;
@SuppressWarnings("unchecked")
public MobRecipe copy() {
@@ -119,7 +120,8 @@ public class MobRecipeLoader {
mMaxDamageChance,
infernalityAllowed,
alwaysinfernal,
- isPeacefulAllowed);
+ isPeacefulAllowed,
+ entity);
}
private MobRecipe(
@@ -128,13 +130,15 @@ public class MobRecipeLoader {
int mMaxDamageChance,
boolean infernalityAllowed,
boolean alwaysinfernal,
- boolean isPeacefulAllowed) {
+ boolean isPeacefulAllowed,
+ EntityLiving entity) {
this.mOutputs = mOutputs;
this.mDuration = mDuration;
this.mMaxDamageChance = mMaxDamageChance;
this.infernalityAllowed = infernalityAllowed;
this.alwaysinfernal = alwaysinfernal;
this.isPeacefulAllowed = isPeacefulAllowed;
+ this.entity = entity;
}
@SuppressWarnings("unchecked")
@@ -193,6 +197,7 @@ public class MobRecipeLoader {
mMaxDamageChance = maxdamagechance;
// Powered spawner with octadic capacitor spawns ~22/min ~= 0.366/sec ~= 2.72s/spawn ~= 54.54t/spawn
mDuration = 55 + 10 + (((int) e.getMaxHealth() / 5) * 10);
+ entity = e;
}
public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeExterminationChamber MTE) {
@@ -476,7 +481,7 @@ public class MobRecipeLoader {
}
private static class dropCollector {
- HashMap<GT_Utility.ItemId, Integer> damagableChecker = new HashMap<>();
+ final HashMap<GT_Utility.ItemId, Integer> damagableChecker = new HashMap<>();
private boolean booksAlwaysRandomlyEnchanted = false;
public void addDrop(droplist fdrops, ArrayList<EntityItem> listToParse, double chance) {
@@ -573,6 +578,7 @@ public class MobRecipeLoader {
return false;
}
+ @SuppressWarnings("rawtypes")
@Override
public List getEntitiesWithinAABB(Class p_72872_1_, AxisAlignedBB p_72872_2_) {
return new ArrayList();
@@ -790,7 +796,7 @@ public class MobRecipeLoader {
try {
Class<?> cl = e.getClass();
- boolean detectedException = false;
+ boolean detectedException;
do {
detectedException = false;
try {
@@ -978,6 +984,7 @@ public class MobRecipeLoader {
MobRecipe recipe = v.recipe;
if (recipe != null) recipe = recipe.copy();
+ @SuppressWarnings("unchecked")
ArrayList<MobDrop> drops = (ArrayList<MobDrop>) v.drops.clone();
// MT Scripts should already be loaded here
@@ -1006,6 +1013,7 @@ public class MobRecipeLoader {
GeneralMappedMob v = GeneralMobList.get(k);
MobRecipe recipe = v.recipe;
if (recipe != null) recipe = recipe.copy();
+ @SuppressWarnings("unchecked")
ArrayList<MobDrop> drops = (ArrayList<MobDrop>) v.drops.clone();
// MT Scripts should already be loaded here
diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java
index ba6cbb7a1f..84c3603225 100644
--- a/src/main/java/kubatech/loaders/RecipeLoader.java
+++ b/src/main/java/kubatech/loaders/RecipeLoader.java
@@ -25,7 +25,7 @@ import gregtech.api.util.GT_ModHandler;
import kubatech.Tags;
import kubatech.api.LoaderReference;
import kubatech.api.enums.ItemList;
-import kubatech.common.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber;
+import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import org.apache.logging.log4j.LogManager;
diff --git a/src/main/java/kubatech/nei/Mob_Handler.java b/src/main/java/kubatech/nei/Mob_Handler.java
index a231eceffc..5418aa1488 100644
--- a/src/main/java/kubatech/nei/Mob_Handler.java
+++ b/src/main/java/kubatech/nei/Mob_Handler.java
@@ -38,19 +38,15 @@ import java.util.List;
import kubatech.api.LoaderReference;
import kubatech.api.utils.FastRandom;
import kubatech.api.utils.InfernalHelper;
+import kubatech.api.utils.MobUtils;
import kubatech.api.utils.ModUtils;
-import kubatech.common.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber;
import kubatech.kubatech;
import kubatech.loaders.MobRecipeLoader;
+import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.gui.inventory.GuiInventory;
-import net.minecraft.client.model.ModelBase;
-import net.minecraft.client.model.ModelBox;
-import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.entity.Render;
-import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.entity.RendererLivingEntity;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.EntityList;
@@ -277,39 +273,11 @@ public class Mob_Handler extends TemplateRecipeHandler {
GL11.glPushMatrix();
- ItemStack s = getIngredientStacks(recipe).get(0).item;
try {
EntityLiving e = currentrecipe.mob;
- float eheight = e.height;
- float ewidth = e.width;
-
- Render r = RenderManager.instance.getEntityRenderObject(e);
- if (r instanceof RendererLivingEntity && mainmodelfield != null) {
- ModelBase mainmodel = (ModelBase) mainmodelfield.get(r);
- for (Object box : mainmodel.boxList) {
- if (box instanceof ModelRenderer) {
- float minY = 999f;
- float minX = 999f;
- float maxY = -999f;
- float maxX = -999f;
- for (Object cube : ((ModelRenderer) box).cubeList) {
- if (cube instanceof ModelBox) {
- if (minY > ((ModelBox) cube).posY1) minY = ((ModelBox) cube).posY1;
- if (minX > ((ModelBox) cube).posX1) minX = ((ModelBox) cube).posX1;
- if (maxY < ((ModelBox) cube).posY2) maxY = ((ModelBox) cube).posY2;
- if (maxX < ((ModelBox) cube).posX2) maxX = ((ModelBox) cube).posX2;
- }
- }
- float cubeheight = (maxY - minY) / 10f;
- float cubewidth = (maxX - minX) / 10f;
- if (eheight < cubeheight) eheight = cubeheight;
- if (ewidth < cubewidth) ewidth = cubewidth;
- }
- }
- }
- int desiredheight = 27;
- int scaled = (int) (desiredheight / eheight);
+ float eheight = MobUtils.getMobHeight(e);
+ float scaled = MobUtils.getDesiredScale(eheight, 27);
//
// int maxwidth = 15;
// scaled = (int) Math.min(scaled, maxwidth / ewidth);
@@ -318,7 +286,12 @@ public class Mob_Handler extends TemplateRecipeHandler {
e.setPosition(mc.thePlayer.posX + 5, mc.thePlayer.posY, mc.thePlayer.posZ);
// ARGS: x, y, scale, rot, rot, entity
GuiInventory.func_147046_a(
- mobx, moby, scaled, (float) (x + mobx) - mouseX, (float) (y + moby - eheight * scaled) - mouseZ, e);
+ mobx,
+ moby,
+ Math.round(scaled),
+ (float) (x + mobx) - mouseX,
+ (float) (y + moby - eheight * scaled) - mouseZ,
+ e);
} catch (Throwable ex) {
Tessellator tes = Tessellator.instance;
try {
diff --git a/src/main/java/kubatech/network/LoadConfigHandler.java b/src/main/java/kubatech/network/LoadConfigHandler.java
deleted file mode 100644
index 7bf8bd9756..0000000000
--- a/src/main/java/kubatech/network/LoadConfigHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * KubaTech - Gregtech Addon
- * Copyright (C) 2022 kuba6000
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this library. If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-package kubatech.network;
-
-import cpw.mods.fml.common.network.simpleimpl.IMessage;
-import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
-import cpw.mods.fml.common.network.simpleimpl.MessageContext;
-import kubatech.kubatech;
-import kubatech.loaders.MobRecipeLoader;
-
-public class LoadConfigHandler implements IMessageHandler<LoadConfigPacket, IMessage> {
-
- @Override
- public IMessage onMessage(LoadConfigPacket message, MessageContext ctx) {
- kubatech.info("Received Mob Handler config, parsing");
- MobRecipeLoader.processMobRecipeMap(message.mobsToLoad);
- return null;
- }
-}
diff --git a/src/main/java/kubatech/common/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
index ff6ed02363..77f51ddc38 100644
--- a/src/main/java/kubatech/common/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
+++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeExterminationChamber.java
@@ -17,12 +17,14 @@
*
*/
-package kubatech.common.tileentity.gregtech.multiblock;
+package kubatech.tileentity.gregtech.multiblock;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
import static gregtech.api.enums.Textures.BlockIcons.*;
+import static gregtech.api.util.GT_StructureUtility.ofFrame;
import static gregtech.api.util.GT_StructureUtility.ofHatchAdder;
import static kubatech.api.Variables.Author;
+import static kubatech.api.Variables.StructureHologram;
import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry;
import WayofTime.alchemicalWizardry.api.event.RitualRunEvent;
@@ -31,17 +33,22 @@ import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler;
import WayofTime.alchemicalWizardry.api.tile.IBloodAltar;
import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering;
import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone;
+import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.StructureDefinition;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import gregtech.api.GregTech_API;
+import gregtech.api.enums.Materials;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
@@ -49,11 +56,16 @@ import java.util.HashMap;
import java.util.Random;
import kubatech.Tags;
import kubatech.api.LoaderReference;
+import kubatech.api.network.CustomTileEntityPacket;
+import kubatech.api.tileentity.CustomTileEntityPacketHandler;
import kubatech.api.utils.FastRandom;
import kubatech.api.utils.ReflectionHelper;
+import kubatech.client.effect.EntityRenderer;
import kubatech.loaders.MobRecipeLoader;
import net.minecraft.block.Block;
+import net.minecraft.client.Minecraft;
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;
@@ -66,7 +78,8 @@ import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
public class GT_MetaTileEntity_ExtremeExterminationChamber
- extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_ExtremeExterminationChamber> {
+ extends GT_MetaTileEntity_EnhancedMultiBlockBase<GT_MetaTileEntity_ExtremeExterminationChamber>
+ implements CustomTileEntityPacketHandler {
public static final HashMap<String, MobRecipeLoader.MobRecipe> MobNameToRecipeMap = new HashMap<>();
public final Random rand = new FastRandom();
@@ -83,6 +96,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
@Override
public void onRemoval() {
if (LoaderReference.BloodMagic) MinecraftForge.EVENT_BUS.unregister(this);
+ if (getBaseMetaTileEntity().isClientSide()) entityRenderer.setDead();
}
private static final String WellOfSufferingRitualName = "AW013Suffering";
@@ -94,11 +108,11 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
StructureDefinition.<GT_MetaTileEntity_ExtremeExterminationChamber>builder()
.addShape(STRUCTURE_PIECE_MAIN, transpose(new String[][] {
{"ccccc", "ccccc", "ccccc", "ccccc", "ccccc"},
- {"ccccc", "c---c", "c---c", "c---c", "ccccc"},
- {"ccccc", "c---c", "c---c", "c---c", "ccccc"},
- {"ccccc", "c---c", "c---c", "c---c", "ccccc"},
- {"ccccc", "c---c", "c---c", "c---c", "ccccc"},
- {"ccccc", "csssc", "csssc", "csssc", "ccccc"},
+ {"fgggf", "g---g", "g---g", "g---g", "fgggf"},
+ {"fgggf", "g---g", "g---g", "g---g", "fgggf"},
+ {"fgggf", "g---g", "g---g", "g---g", "fgggf"},
+ {"fgggf", "g---g", "g---g", "g---g", "fgggf"},
+ {"fgggf", "gsssg", "gsssg", "gsssg", "fgggf"},
{"CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC"},
}))
.addElement('c', onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 0)))
@@ -119,6 +133,13 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
CASING_INDEX,
1)))
.addElement(
+ 'g',
+ LoaderReference.Bartworks
+ ? BorosilicateGlass.ofBoroGlass(
+ (byte) 0, (t, v) -> t.mGlassTier = v, t -> t.mGlassTier)
+ : onElementPass(t -> t.mGlassTier = 100, ofBlock(Blocks.glass, 0)))
+ .addElement('f', ofFrame(Materials.Steel))
+ .addElement(
's',
LoaderReference.ExtraUtilities
? ofBlock(Block.getBlockFromName("ExtraUtilities:spike_base_diamond"), 0)
@@ -129,17 +150,26 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
private TileEntity tileAltar = null;
private boolean isInRitualMode = false;
private int mCasing = 0;
+ private byte mGlassTier = 0;
+ private boolean mAnimationEnabled = false;
+
+ private EntityRenderer entityRenderer = null;
+ private boolean renderEntity = false;
@Override
public void saveNBTData(NBTTagCompound aNBT) {
super.saveNBTData(aNBT);
aNBT.setBoolean("isInRitualMode", isInRitualMode);
+ aNBT.setBoolean("mAnimationEnabled", mAnimationEnabled);
+ aNBT.setByte("mGlassTier", mGlassTier);
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
isInRitualMode = aNBT.getBoolean("isInRitualMode");
+ mAnimationEnabled = aNBT.getBoolean("mAnimationEnabled");
+ mGlassTier = aNBT.getByte("mGlassTier");
}
@Override
@@ -152,6 +182,7 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
tt.addMachineType("Powered Spawner")
.addInfo("Controller block for Extreme Extermination Chamber")
+ .addInfo(Author)
.addInfo("Spawns and Exterminates monsters for you")
.addInfo("Base energy usage: 2,000 EU/t")
.addInfo("Recipe time is based on mob health")
@@ -161,11 +192,15 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
.addInfo("You can enable ritual mode with a screwdriver")
.addInfo("When in ritual mode and Well Of Suffering ritual is built directly on the machine in center")
.addInfo("The mobs will start to buffer and die very slowly by a ritual")
- .addInfo(Author)
+ .addInfo("You can disable mob animation with a soldering iron")
+ .addInfo(StructureHologram)
.addSeparator()
.beginStructureBlock(5, 7, 5, true)
.addController("Front Bottom Center")
.addCasingInfo("Solid Steel Machine Casing", 10)
+ .addOtherStructurePart("Borosilicate Glass", "All walls without corners")
+ .addStructureInfo("The glass tier limits the Energy Input tier")
+ .addOtherStructurePart("Steel Frame Box", "All vertical corners (except top and bottom)")
.addOutputBus("Any casing", 1)
.addOutputHatch("Any casing", 1)
.addEnergyHatch("Any casing", 1)
@@ -227,9 +262,52 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
return true;
}
+ @SideOnly(Side.CLIENT)
+ private void setupEntityRenderer(IGregTechTileEntity aBaseMetaTileEntity, int time) {
+ if (entityRenderer == null) {
+ ChunkCoordinates coords = this.getBaseMetaTileEntity().getCoords();
+ int[] abc = new int[] {0, -2, 2};
+ int[] xyz = new int[] {0, 0, 0};
+ this.getExtendedFacing().getWorldOffset(abc, xyz);
+ xyz[0] += coords.posX;
+ xyz[1] += coords.posY;
+ xyz[2] += coords.posZ;
+ entityRenderer = new EntityRenderer(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], time);
+ } else {
+ entityRenderer.setDead();
+ entityRenderer = new EntityRenderer(entityRenderer, time);
+ }
+ Minecraft.getMinecraft().effectRenderer.addEffect(entityRenderer);
+ }
+
+ @Override
+ public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
+ super.onPostTick(aBaseMetaTileEntity, aTick);
+ if (aBaseMetaTileEntity.isClientSide()) {
+ if (renderEntity && aBaseMetaTileEntity.isActive() && aTick % 40 == 0) {
+ setupEntityRenderer(aBaseMetaTileEntity, 40);
+ }
+ }
+ }
+
+ @SideOnly(Side.CLIENT)
@Override
- public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
- super.onFirstTick(aBaseMetaTileEntity);
+ public void HandleCustomPacket(CustomTileEntityPacket message) {
+ if (message.getDataBoolean()) {
+ renderEntity = true;
+ String mobType = message.getDataString();
+ MobRecipeLoader.MobRecipe r = MobNameToRecipeMap.get(mobType);
+ if (r != null) {
+ if (entityRenderer == null) setupEntityRenderer(getBaseMetaTileEntity(), 40);
+ entityRenderer.setEntity(r.entity);
+ } else entityRenderer.setEntity(null);
+ } else {
+ renderEntity = false;
+ if (entityRenderer != null) {
+ entityRenderer.setDead();
+ entityRenderer = null;
+ }
+ }
}
@Override
@@ -249,6 +327,15 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
}
}
+ @Override
+ public boolean onSolderingToolRightClick(
+ byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ if (super.onSolderingToolRightClick(aSide, aWrenchingSide, aPlayer, aX, aY, aZ)) return true;
+ mAnimationEnabled = !mAnimationEnabled;
+ GT_Utility.sendChatToPlayer(aPlayer, "Animations are " + (mAnimationEnabled ? "enabled" : "disableds"));
+ return true;
+ }
+
@SuppressWarnings("unused")
@SubscribeEvent(priority = EventPriority.LOWEST)
public void onRitualPerform(RitualRunEvent event) {
@@ -288,14 +375,14 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
* (effect.canDrainReagent(
event.mrs,
ReagentRegistry.offensaReagent,
- ReflectionHelper.getField(effect, "offensaDrain", true, 3),
+ ReflectionHelper.getField(effect, "offensaDrain", 3),
true)
? 2
: 1)
* (effect.canDrainReagent(
event.mrs,
ReagentRegistry.tenebraeReagent,
- ReflectionHelper.getField(effect, "tennebraeDrain", true, 5),
+ ReflectionHelper.getField(effect, "tennebraeDrain", 5),
true)
? 2
: 1),
@@ -306,8 +393,11 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
}
}
+ private CustomTileEntityPacket mobPacket = null;
+
@Override
public boolean checkRecipe(ItemStack aStack) {
+ if (getBaseMetaTileEntity().isClientSide()) return false;
if (aStack == null) return false;
if (aStack.getItem() != poweredSpawnerItem) return false;
@@ -336,6 +426,12 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000);
this.mEfficiencyIncrease = 10000;
+ if (mobPacket == null) mobPacket = new CustomTileEntityPacket((TileEntity) this.getBaseMetaTileEntity(), null);
+ mobPacket.resetHelperData();
+ mobPacket.addData(mAnimationEnabled);
+ if (mAnimationEnabled) mobPacket.addData(mobType);
+ mobPacket.sendToAllAround(16);
+
return true;
}
@@ -371,8 +467,11 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
+ mGlassTier = 0;
if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 6, 0)) return false;
if (mCasing < 10 || mMaintenanceHatches.size() != 1 || mEnergyHatches.size() == 0) return false;
+ if (mGlassTier < 8)
+ for (GT_MetaTileEntity_Hatch_Energy hatch : mEnergyHatches) if (hatch.mTier > mGlassTier) return false;
if (isInRitualMode) connectToRitual();
return true;
}