diff options
Diffstat (limited to 'src/main')
18 files changed, 447 insertions, 74 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/network/CustomTileEntityPacket.java b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java new file mode 100644 index 0000000000..9236594647 --- /dev/null +++ b/src/main/java/kubatech/api/network/CustomTileEntityPacket.java @@ -0,0 +1,119 @@ +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 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); + } + + @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..3e20adac1c --- /dev/null +++ b/src/main/java/kubatech/api/utils/MobUtils.java @@ -0,0 +1,57 @@ +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) { + 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 desiredHeight / 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..23f1a6e44a --- /dev/null +++ b/src/main/java/kubatech/client/effect/EntityRenderer.java @@ -0,0 +1,144 @@ +package kubatech.client.effect; + +import static net.minecraft.client.renderer.entity.RenderManager.*; + +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); + 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); + + instance.renderEntityWithPosYaw(entityToRender, 0f, 0f, 0f, f1, p_147936_2_); + + 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 3c087961d9..21c18897f4 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; @@ -39,10 +39,10 @@ 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.common.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; import kubatech.nei.Mob_Handler; -import kubatech.network.LoadConfigPacket; +import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeExterminationChamber; import minetweaker.MineTweakerAPI; import minetweaker.api.entity.IEntityDefinition; import minetweaker.api.item.IItemStack; @@ -102,6 +102,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() { @@ -111,7 +112,8 @@ public class MobRecipeLoader { mMaxDamageChance, infernalityAllowed, alwaysinfernal, - isPeacefulAllowed); + isPeacefulAllowed, + entity); } private MobRecipe( @@ -120,13 +122,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") @@ -185,6 +189,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) { @@ -460,7 +465,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) { @@ -552,6 +557,7 @@ public class MobRecipeLoader { return false; } + @SuppressWarnings("rawtypes") @Override public List getEntitiesWithinAABB(Class p_72872_1_, AxisAlignedBB p_72872_2_) { return new ArrayList(); @@ -727,7 +733,7 @@ public class MobRecipeLoader { try { Class<?> cl = e.getClass(); - boolean detectedException = false; + boolean detectedException; do { detectedException = false; try { @@ -894,6 +900,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 @@ -922,6 +929,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..78294326c9 100644 --- a/src/main/java/kubatech/nei/Mob_Handler.java +++ b/src/main/java/kubatech/nei/Mob_Handler.java @@ -39,9 +39,9 @@ import kubatech.api.LoaderReference; import kubatech.api.utils.FastRandom; import kubatech.api.utils.InfernalHelper; 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; @@ -277,7 +277,6 @@ public class Mob_Handler extends TemplateRecipeHandler { GL11.glPushMatrix(); - ItemStack s = getIngredientStacks(recipe).get(0).item; try { EntityLiving e = currentrecipe.mob; float eheight = e.height; 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..5971731fdd 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,7 +17,7 @@ * */ -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.*; @@ -31,10 +31,13 @@ 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.Textures; @@ -49,11 +52,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 +74,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 +92,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 +104,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"}, + {"cgggc", "g---g", "g---g", "g---g", "cgggc"}, + {"cgggc", "g---g", "g---g", "g---g", "cgggc"}, + {"cgggc", "g---g", "g---g", "g---g", "cgggc"}, + {"cgggc", "g---g", "g---g", "g---g", "cgggc"}, + {"cgggc", "gsssg", "gsssg", "gsssg", "cgggc"}, {"CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC"}, })) .addElement('c', onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 0))) @@ -119,6 +129,11 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber CASING_INDEX, 1))) .addElement( + 'g', + LoaderReference.Bartworks + ? BorosilicateGlass.ofBoroGlassAnyTier() + : ofBlock(Blocks.glass, 0)) + .addElement( 's', LoaderReference.ExtraUtilities ? ofBlock(Block.getBlockFromName("ExtraUtilities:spike_base_diamond"), 0) @@ -130,6 +145,9 @@ public class GT_MetaTileEntity_ExtremeExterminationChamber private boolean isInRitualMode = false; private int mCasing = 0; + @SideOnly(Side.CLIENT) + private EntityRenderer entityRenderer = null; + @Override public void saveNBTData(NBTTagCompound aNBT) { super.saveNBTData(aNBT); @@ -227,9 +245,43 @@ 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 onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide()) { + if (aBaseMetaTileEntity.isActive() && aTick % 40 == 0) { + setupEntityRenderer(aBaseMetaTileEntity, 40); + } + } + } + + @SideOnly(Side.CLIENT) + @Override + public void HandleCustomPacket(CustomTileEntityPacket message) { + 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); } @Override @@ -288,14 +340,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 +358,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 +391,11 @@ 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(mobType); + mobPacket.sendToAllAround(16); + return true; } |