From c7aff74bcf9642072850eab064183426e359b0ee Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Sun, 4 Apr 2021 16:10:26 +0200 Subject: [PATCH] Add Force Flasks --- .../java/ley/modding/dartcraft/Dartcraft.java | 18 +- .../modding/dartcraft/DartcraftClient.java | 22 - .../dartcraft/api/IBottleRenderable.java | 1 - .../renderer/entity/RenderEntityBottle.java | 44 + .../renderer/item/RenderItemForceFlask.java | 230 ++ .../dartcraft/entity/EntityBottle.java | 185 ++ .../dartcraft/entity/EntityFlyingFlask.java | 147 ++ .../dartcraft/event/EntityBottleHandler.java | 118 + .../dartcraft/item/ItemEntityBottle.java | 249 +++ .../dartcraft/item/ItemForceFlask.java | 294 +++ .../ley/modding/dartcraft/item/Items.java | 2 + .../modding/dartcraft/proxy/ClientProxy.java | 29 + .../modding/dartcraft/proxy/CommonProxy.java | 17 + .../modding/dartcraft/util/EntityUtils.java | 84 + .../ley/modding/dartcraft/util/ItemUtils.java | 40 + .../resources/assets/dartcraft/bottle.png | Bin 0 -> 23453 bytes .../assets/dartcraft/lang/en_US.lang | 6 + .../resources/assets/dartcraft/liquid.png | Bin 0 -> 53211 bytes .../assets/dartcraft/models/bottle.obj | 1924 +++++++++++++++++ .../assets/dartcraft/models/liquid.obj | 330 +++ .../resources/assets/dartcraft/sounds.json | 5 + .../assets/dartcraft/sounds/bottle.ogg | Bin 0 -> 4716 bytes .../assets/dartcraft/sounds/nope.ogg | Bin 0 -> 7014 bytes .../assets/dartcraft/sounds/swipe.ogg | Bin 0 -> 5463 bytes 24 files changed, 3712 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/ley/modding/dartcraft/DartcraftClient.java create mode 100644 src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java create mode 100644 src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java create mode 100644 src/main/java/ley/modding/dartcraft/entity/EntityBottle.java create mode 100644 src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java create mode 100644 src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java create mode 100644 src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java create mode 100644 src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java create mode 100644 src/main/java/ley/modding/dartcraft/util/EntityUtils.java create mode 100644 src/main/java/ley/modding/dartcraft/util/ItemUtils.java create mode 100644 src/main/resources/assets/dartcraft/bottle.png create mode 100644 src/main/resources/assets/dartcraft/liquid.png create mode 100644 src/main/resources/assets/dartcraft/models/bottle.obj create mode 100644 src/main/resources/assets/dartcraft/models/liquid.obj create mode 100644 src/main/resources/assets/dartcraft/sounds.json create mode 100644 src/main/resources/assets/dartcraft/sounds/bottle.ogg create mode 100644 src/main/resources/assets/dartcraft/sounds/nope.ogg create mode 100644 src/main/resources/assets/dartcraft/sounds/swipe.ogg diff --git a/src/main/java/ley/modding/dartcraft/Dartcraft.java b/src/main/java/ley/modding/dartcraft/Dartcraft.java index 7d1498d..b320b8f 100644 --- a/src/main/java/ley/modding/dartcraft/Dartcraft.java +++ b/src/main/java/ley/modding/dartcraft/Dartcraft.java @@ -6,15 +6,14 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.EntityRegistry; -import cpw.mods.fml.relauncher.Side; import ley.modding.dartcraft.block.BlockPowerOre; import ley.modding.dartcraft.block.Blocks; +import ley.modding.dartcraft.entity.*; import ley.modding.dartcraft.event.EventHandler; import ley.modding.dartcraft.internal.Registry; -import ley.modding.dartcraft.entity.EntityColdChicken; -import ley.modding.dartcraft.entity.EntityColdCow; -import ley.modding.dartcraft.entity.EntityColdPig; import ley.modding.dartcraft.item.BaseItem; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.item.ItemForceFlask; import ley.modding.dartcraft.item.Items; import ley.modding.dartcraft.item.tool.ItemForceMitts; import ley.modding.dartcraft.item.tool.ItemForcePickaxe; @@ -33,7 +32,6 @@ public class Dartcraft { @Mod.Instance public static Dartcraft instance = new Dartcraft(); - public static DartcraftClient client = new DartcraftClient(); public static IRegistry registry; @SidedProxy(serverSide = "ley.modding.dartcraft.proxy.CommonProxy", clientSide = "ley.modding.dartcraft.proxy.ClientProxy") public static CommonProxy proxy; @@ -47,10 +45,6 @@ public class Dartcraft { @Mod.EventHandler public void init(FMLInitializationEvent e) { - // TODO: use proxys - if (e.getSide() == Side.CLIENT) - client.init(); - registry = new Registry(); Items.forcegem = registry.registerItem(new BaseItem("forcegem")); Items.forceingot = registry.registerItem(new BaseItem("forceingot")); @@ -60,12 +54,16 @@ public class Dartcraft { Items.forcemitts = registry.registerItem(new ItemForceMitts()); Items.forcepickaxe = registry.registerItem(new ItemForcePickaxe()); Items.forceshears = registry.registerItem(new ItemForceShears()); + Items.forceflask = registry.registerItem(new ItemForceFlask()); + Items.entitybottle = registry.registerItem(new ItemEntityBottle()); Blocks.powerore = registry.registerBlock(new BlockPowerOre()); - + proxy.init(); int entityId = 0; EntityRegistry.registerModEntity(EntityColdChicken.class, "coldChicken", entityId++, Dartcraft.instance, 40, 1, true); EntityRegistry.registerModEntity(EntityColdCow.class, "coldCow", entityId++, Dartcraft.instance, 40, 1, true); EntityRegistry.registerModEntity(EntityColdPig.class, "coldPig", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityBottle.class, "entityBottleItem", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityFlyingFlask.class, "entityFlyingFlask", entityId++, Dartcraft.instance, 40, 1, true); } @Mod.EventHandler diff --git a/src/main/java/ley/modding/dartcraft/DartcraftClient.java b/src/main/java/ley/modding/dartcraft/DartcraftClient.java deleted file mode 100644 index a044585..0000000 --- a/src/main/java/ley/modding/dartcraft/DartcraftClient.java +++ /dev/null @@ -1,22 +0,0 @@ -package ley.modding.dartcraft; - -import cpw.mods.fml.client.registry.RenderingRegistry; -import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal; -import ley.modding.dartcraft.entity.EntityColdChicken; -import ley.modding.dartcraft.entity.EntityColdCow; -import ley.modding.dartcraft.entity.EntityColdPig; -import net.minecraft.client.model.ModelChicken; -import net.minecraft.client.model.ModelCow; -import net.minecraft.client.model.ModelPig; - -class DartcraftClient { - public void init() { - renderEntities(); - } - - public void renderEntities() { - RenderingRegistry.registerEntityRenderingHandler(EntityColdChicken.class, new RenderColdAnimal(new ModelChicken(), 0.6f, "textures/entity/coldChicken.png")); - RenderingRegistry.registerEntityRenderingHandler(EntityColdCow.class, new RenderColdAnimal(new ModelCow(), 0.6f, "textures/entity/coldCow.png")); - RenderingRegistry.registerEntityRenderingHandler(EntityColdPig.class, new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")); - } -} diff --git a/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java b/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java index 139bfc1..04b3d84 100644 --- a/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java +++ b/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java @@ -8,5 +8,4 @@ public interface IBottleRenderable { void setEntityItem(ItemStack var1); - void sendDescriptionPacket(); } diff --git a/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java new file mode 100644 index 0000000..f2ac280 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java @@ -0,0 +1,44 @@ +package ley.modding.dartcraft.client.renderer.entity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.client.renderer.item.RenderItemForceFlask; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEntityBottle extends RenderLiving { + + private static final ResourceLocation texture = new ResourceLocation(Dartcraft.MODID, "bottle.png"); + + private static IModelCustom bottle = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/bottle.obj")); + + public RenderEntityBottle() { + super(null, 0.2F); + } + + @Override + public void doRender(Entity entity, double par2, double par4, double par6, float par8, float par9) { + if (entity instanceof IBottleRenderable) { + ItemStack stack = ((IBottleRenderable)entity).getEntityItem(); + GL11.glPushMatrix(); + GL11.glTranslated(par2, par4 + 0.25D, par6); + GL11.glScalef(0.5F, 0.5F, 0.5F); + RenderItemForceFlask.instance.renderItem(IItemRenderer.ItemRenderType.ENTITY, stack, new Object[0]); + GL11.glPopMatrix(); + } + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return texture; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java b/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java new file mode 100644 index 0000000..81eeb04 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java @@ -0,0 +1,230 @@ +package ley.modding.dartcraft.client.renderer.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.util.EntityUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderItemForceFlask implements IItemRenderer { + + private static RenderItem renderer = new RenderItem(); + + private IModelCustom bottle = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/bottle.obj")); + + private IModelCustom liquid = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/liquid.obj")); + + public static RenderItemForceFlask instance = new RenderItemForceFlask(); + + public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { + return true; + } + + public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { + return (type == IItemRenderer.ItemRenderType.INVENTORY || type == IItemRenderer.ItemRenderType.ENTITY); + } + + public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) { + FontRenderer fontRenderer = (Minecraft.getMinecraft()).fontRenderer; + Entity entity = null; + GL11.glPushMatrix(); + if (item != null && item.getItem() instanceof ItemEntityBottle && item.hasTagCompound()) + try { + if (item.getItemDamage() == 0) { + EntityLivingBase entityLivingBase = null; + NBTTagCompound comp = (NBTTagCompound)item.getTagCompound().copy(); + Entity temp = null; + if (comp.hasKey("CanPickUpLoot")) { + temp = EntityList.createEntityFromNBT(comp, (World)(Minecraft.getMinecraft()).theWorld); + } else { + temp = EntityUtils.getEntity(comp.getString("id")); + } + if (temp instanceof EntityLivingBase) + entityLivingBase = (EntityLivingBase)temp; + if (entityLivingBase != null && (Dartcraft.proxy.getClientInstance()).theWorld != null) { + entityLivingBase.setWorld((World)(Dartcraft.proxy.getClientInstance()).theWorld); + entityLivingBase.setLocationAndAngles(0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + } + entity = entityLivingBase; + } else if (item.getItemDamage() == 1) { + EntityItem entityItem = new EntityItem((World)(Dartcraft.proxy.getClientInstance()).theWorld); + entityItem.setLocationAndAngles(0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + entityItem.hoverStart = 1.0F; + entityItem.setEntityItemStack(new ItemStack(Blocks.brick_block)); + entity = entityItem; + } + } catch (Exception e) {} + float value = 0.0F; + float angle = 0.0F; + float scale = 0.0F; + scale(type); + if (type == IItemRenderer.ItemRenderType.INVENTORY && (entity instanceof net.minecraft.entity.monster.EntityEnderman || entity instanceof net.minecraft.entity.monster.EntitySpider || entity instanceof net.minecraft.entity.monster.EntityCaveSpider)) + entity = null; + if (entity != null) { + float coef = 1.0F; + if (entity instanceof net.minecraft.entity.monster.EntitySilverfish || entity instanceof net.minecraft.entity.passive.EntityOcelot || entity instanceof net.minecraft.entity.passive.EntityWolf) + coef = 2.5F; + scale = 8.0F * ((((Entity)entity).height > ((Entity)entity).width * coef) ? (1.3F / ((Entity)entity).height) : (0.5F / ((Entity)entity).width)); + value = -((Entity)entity).height; + angle = 0.0F; + if (entity instanceof net.minecraft.entity.passive.EntityPig) + scale = 6.5F / ((Entity)entity).height; + if (entity instanceof EntityBottle) { + scale = 30.0F; + value += 1.5F; + } + if (entity instanceof net.minecraft.entity.passive.EntityAnimal) { + int age = item.getTagCompound().getInteger("Age"); + if (age < 0) { + scale /= 2.0F; + value -= ((Entity)entity).height * 0.5F; + } + } + if (type == IItemRenderer.ItemRenderType.INVENTORY) + angle = 45.0F; + if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) + angle = 90.0F; + GL11.glScalef(scale, scale, scale); + GL11.glTranslatef(0.0F, value, 0.0F); + GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + try { + boolean shouldRender = (type != IItemRenderer.ItemRenderType.INVENTORY); + if (!shouldRender) { + Minecraft mc = Dartcraft.proxy.getClientInstance(); + EntityClientPlayerMP entityClientPlayerMP = (mc != null) ? mc.thePlayer : null; + boolean found = false; + if (entityClientPlayerMP != null && ((EntityPlayer)entityClientPlayerMP).inventory != null && ((EntityPlayer)entityClientPlayerMP).inventory.mainInventory != null) + for (int i = 0; i < 9; i++) { + ItemStack invStack = ((EntityPlayer)entityClientPlayerMP).inventory.mainInventory[i]; + if (invStack != null && invStack == item) { + found = true; + break; + } + } + if (!found) + shouldRender = true; + } + if (shouldRender) { + Render render = RenderManager.instance.getEntityRenderObject((Entity)entity); + if (render != null && entity != null) + render.doRender((Entity)entity, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + } + } catch (Exception e) {} + GL11.glPopMatrix(); + GL11.glPushMatrix(); + scale(type); + } else if (item != null && item.getItemDamage() > 0) { + Dartcraft.proxy.bindTexture("liquid.png"); + GL11.glEnable(3042); + float alpha = 1.0F; + switch (item.getItemDamage()) { + case 6: + GL11.glColor4f(0.0F, 0.5F, 1.0F, alpha); + break; + case 5: + GL11.glColor4f(1.0F, 0.0F, 0.0F, alpha); + break; + case 4: + GL11.glColor4f(0.0627F, 0.7176F, 0.4863F, alpha); + break; + case 2: + GL11.glColor4f(1.0F, 1.0F, 0.0F, alpha); + break; + } + scale = 7.0F; + float yScale = 1.0F; + GL11.glScalef(scale, scale, scale); + if (type == IItemRenderer.ItemRenderType.ENTITY) { + GL11.glRotatef(0.44999766F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(168.90388F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } else if (type == IItemRenderer.ItemRenderType.EQUIPPED || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glRotatef(185.40428F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(6.599979F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } else if (type == IItemRenderer.ItemRenderType.INVENTORY) { + GL11.glRotatef(184.65428F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(6.749961F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } + GL11.glTranslatef(0.0F, 1.0F - yScale, 0.0F); + GL11.glScalef(1.0F, yScale, 1.0F); + this.liquid.renderAll(); + GL11.glDisable(3042); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + scale(type); + } + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Dartcraft.proxy.bindTexture("bottle.png"); + this.bottle.renderAll(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void scale(IItemRenderer.ItemRenderType type) { + float value = 0.0F; + float angle = 0.0F; + float angle2 = 0.0F; + float scale = 0.0F; + value = ((Entity)(Minecraft.getMinecraft()).thePlayer).rotationYaw * 2.0F; + angle = ((Entity)(Minecraft.getMinecraft()).thePlayer).rotationPitch * 2.0F; + angle2 = ((EntityLivingBase)(Minecraft.getMinecraft()).thePlayer).rotationYawHead * 2.0F; + if (Keyboard.isKeyDown(50)); + if (type == IItemRenderer.ItemRenderType.INVENTORY) { + scale = 0.04557239F; + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(1950.6F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(1950.6F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-178.5F, 0.0F, 1.0F, 0.0F); + } + if (type == IItemRenderer.ItemRenderType.EQUIPPED) { + value = 0.5F; + angle = -30.0F; + scale = 0.036F; + GL11.glTranslatef(0.35F, 0.65F, -0.1F); + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(angle, 1.0F, 0.0F, -1.0F); + } + if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + value = 0.5F; + angle = 180.0F; + scale = 0.025F; + GL11.glTranslatef(value, value, -0.1F); + GL11.glScalef(scale, scale, scale); + } + if (type == IItemRenderer.ItemRenderType.ENTITY) { + value = 0.5F; + angle = 180.0F; + scale = 0.035F; + GL11.glScalef(scale, scale, scale); + } + } + +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java b/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java new file mode 100644 index 0000000..1747254 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java @@ -0,0 +1,185 @@ +package ley.modding.dartcraft.entity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityBottle extends EntityLivingBase implements IBottleRenderable { + + private int timeout; + + public EntityBottle(World world) { + super(world); + } + + public EntityBottle(World world, double x, double y, double z, ItemStack contents) { + super(world); + setPosition(x, y, z); + setEntityItem(contents); + setSize(0.2F, 0.2F); + } + + protected void entityInit() { + super.entityInit(); + ((Entity)this).getDataWatcher().addObject(12, new ItemStack(Items.entitybottle)); + } + + public void writeToNBT(NBTTagCompound comp) { + super.writeToNBT(comp); + ItemStack contents = getEntityItem(); + if (contents != null) + comp.setTag("bottleContents", (NBTBase)contents.writeToNBT(new NBTTagCompound())); + } + + public void readFromNBT(NBTTagCompound comp) { + super.readFromNBT(comp); + if (comp.hasKey("bottleContents")) + setEntityItem(ItemStack.loadItemStackFromNBT(comp + .getCompoundTag("bottleContents"))); + } + + public void writeEntityToNBT(NBTTagCompound comp) {} + + public void readEntityFromNBT(NBTTagCompound comp) {} + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.timeout--; + if (!Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) { + if (this.timeout <= 0) + this.timeout = 40; + } else { + ItemStack contents = getEntityItem(); + if (contents != null && contents.getItem() instanceof ItemEntityBottle && this.timeout <= 0) { + this.timeout = 40; + NBTTagCompound comp = contents.getTagCompound(); + if (comp.hasKey("Fire") && comp.getShort("Fire") > 0) + comp.setShort("Fire", (short)-1); + if (comp.hasKey("FallDistance") && comp.getFloat("FallDistance") > 0.0F) + comp.setFloat("FallDistance", 0.0F); + short maxHealth = 0; + Entity temp = EntityList.createEntityFromNBT((NBTTagCompound)comp.copy(), ((Entity)this).worldObj); + EntityLivingBase bottled = null; + if (temp instanceof EntityLivingBase) + bottled = (EntityLivingBase)temp; + try { + maxHealth = (short)(int)bottled.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + if (maxHealth > 0 && comp.hasKey("Health") && comp.getShort("Health") < maxHealth) + comp.setShort("Health", (short)(comp.getShort("Health") + 1)); + } + } + } + + public String getBottledName() { + String name = ""; + ItemStack bottleStack = null; + int iterations = 0; + try { + ItemStack contents = getEntityItem(); + bottleStack = (contents != null) ? contents.copy() : null; + if (bottleStack != null) { + Entity entity = EntityList.createEntityFromNBT(bottleStack.getTagCompound(), ((Entity)this).worldObj); + while (entity instanceof EntityBottle) { + EntityBottle bottle = (EntityBottle)entity; + bottleStack = bottle.getEntityItem(); + entity = EntityList.createEntityFromNBT(bottleStack.getTagCompound(), ((Entity)this).worldObj); + iterations++; + } + switch (iterations) { + case 0: + name = name + "Twice "; + break; + case 1: + name = name + "Thrice "; + break; + default: + name = name + (iterations + 2) + "x "; + break; + } + name = name + "Bottled " + bottleStack.getTagCompound().getString("dartName"); + } + } catch (Exception e) { + return "Bottled Something"; + } + return name; + } + + public boolean canBePushed() { + return false; + } + + protected void dealFireDamage(int damage) {} + + public boolean attackEntityFrom(DamageSource source, float amount) { + if (((Entity)this).isDead || !Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) + return false; + if (source.getEntity() != null && source.getEntity() instanceof EntityPlayer && + !source.isProjectile()) { + ItemStack contents = getEntityItem(); + if (contents != null) { + if (!contents.hasTagCompound()) + contents.setTagCompound(new NBTTagCompound()); + contents.getTagCompound().setBoolean("wasDropped", true); + } + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "dartcraft:bottle", 2.0F, + EntityUtils.randomPitch()); + ItemUtils.dropItem(contents, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + setDead(); + } + return false; + } + + public void onCollideWithPlayer(EntityPlayer player) {} + + @SideOnly(Side.CLIENT) + public boolean canRenderOnFire() { + return false; + } + + public void setFire(int time) {} + + public ItemStack getHeldItem() { + return null; + } + + public void setCurrentItemOrArmor(int i, ItemStack itemstack) {} + + public ItemStack[] getLastActiveItems() { + return null; + } + + public ItemStack getEntityItem() { + return ((Entity)this).getDataWatcher().getWatchableObjectItemStack(12); + } + + public void setEntityItem(ItemStack stack) { + ((Entity)this).getDataWatcher().updateObject(12, stack); + try { + String foundName = stack.getTagCompound().getString("id"); + getEntityData().setString("name", foundName); + } catch (Exception e) { + e.printStackTrace(); + } + if (Dartcraft.proxy.isSimulating(((Entity)this).worldObj)); + } + + public ItemStack getEquipmentInSlot(int slot) { + return null; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java b/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java new file mode 100644 index 0000000..e1cfd7e --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java @@ -0,0 +1,147 @@ +package ley.modding.dartcraft.entity; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EntityFlyingFlask extends EntityThrowable implements IBottleRenderable { + + public EntityLivingBase contained; + + private boolean creative = false; + + private boolean capture = false; + + public EntityFlyingFlask(World world) { + super(world); + } + + public EntityFlyingFlask(World world, double x, double y, double z) { + super(world, x, y, z); + } + + public EntityFlyingFlask(World world, EntityLivingBase thrower, ItemStack flaskStack) { + super(world, thrower); + try { + if (thrower instanceof EntityPlayer && ((EntityPlayer)thrower).capabilities.isCreativeMode) + this.creative = true; + if (flaskStack != null) { + NBTTagCompound comp = (NBTTagCompound)flaskStack.getTagCompound().copy(); + Entity entity = EntityList.createEntityFromNBT(comp, world); + NBTTagCompound dartTag = EntityUtils.getModComp(entity); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 10); + this.contained = (EntityLivingBase)entity; + } else { + this.capture = true; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected void entityInit() { + super.entityInit(); + ((Entity)this).getDataWatcher().addObject(12, new ItemStack(Items.entitybottle)); + } + + protected void onImpact(MovingObjectPosition pos) { + if (Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) { + if (this.contained != null) { + this.contained.setPosition(((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + ((Entity)this).worldObj.spawnEntityInWorld((Entity)this.contained); + if (!this.creative) { + ItemStack flaskStack = new ItemStack(Items.forceflask); + ItemUtils.dropItem(flaskStack, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "random.pop", 1.0F, + EntityUtils.randomPitch()); + } else if (this.capture) { + if (!bottleEntity(pos.entityHit)) { + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "random.pop", 1.0F, + EntityUtils.randomPitch()); + ItemUtils.dropItem(new ItemStack(Items.forceflask), ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + } + setDead(); + } + } + + private boolean bottleEntity(Entity entity) { + try { + if (entity == null) + return false; + EntityLivingBase victim = null; + if (entity instanceof EntityLivingBase) + victim = (EntityLivingBase)entity; + if (victim != null && !((Entity)victim).isDead && victim.getHealth() > 0.0F) { + boolean nope = false; + /*boolean whitelisted = !Config.entityWhitelist; + if (!whitelisted && PluginBottles.whitelist != null) + for (String check : PluginBottles.whitelist) { + if (check != null && check.equals(victim.getClass().getCanonicalName())) { + whitelisted = true; + break; + } + } + if (!whitelisted) + nope = true;*/ + if (victim instanceof EntityPlayer || victim instanceof EntityBottle) + nope = true; + if (!nope && (victim instanceof net.minecraft.entity.monster.EntityMob || victim instanceof net.minecraft.entity.monster.EntityGhast)) { + float maxHealth = 0.0F; + try { + maxHealth = (float)victim.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + float ratio = victim.getHealth() / maxHealth; + float limit = 0.25F; + if (ratio >= limit && maxHealth >= 5.0F) + nope = true; + NBTTagCompound dartTag = EntityUtils.getModComp(entity); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 5); + } + if (nope) { + ((Entity)this).worldObj.playSoundAtEntity((Entity)victim, "dartcraft:nope", 2.0F, + EntityUtils.randomPitch()); + return false; + } + ItemStack bottleStack = EntityUtils.bottleEntity((Entity)victim); + ((Entity)this).worldObj.playSoundAtEntity((Entity)victim, "dartcraft:swipe", 2.0F, + EntityUtils.randomPitch()); + ((Entity)this).worldObj.removeEntity((Entity)victim); + victim = null; + ItemUtils.dropItem(bottleStack, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public ItemStack getEntityItem() { + return ((Entity)this).getDataWatcher().getWatchableObjectItemStack(12); + } + + public void setEntityItem(ItemStack stack) { + ((Entity)this).getDataWatcher().updateObject(12, stack); + try { + getEntityData().setString("name", stack.getTagCompound().getString("id")); + } catch (Exception e) {} + } + +} diff --git a/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java b/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java new file mode 100644 index 0000000..0d7abe9 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java @@ -0,0 +1,118 @@ +package ley.modding.dartcraft.event; + +import cpw.mods.fml.common.Mod.EventHandler; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.*; +import net.minecraft.entity.passive.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.player.EntityItemPickupEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; + +public class EntityBottleHandler { + + @EventHandler + public void handleTaggedPickup(EntityItemPickupEvent event) { + try { + if (((PlayerEvent)event).entityPlayer == null || event.item == null || event.item.getEntityItem() == null) + return; + boolean trigger = false; + if (event.item.getEntityItem().getItem() == Items.entitybottle) + if (meshBottles(((PlayerEvent)event).entityPlayer, event.item.getEntityItem())) { + event.setCanceled(true); + trigger = true; + } + if (Dartcraft.proxy.isSimulating(((Entity)((PlayerEvent)event).entityPlayer).worldObj) && trigger) { + ((Entity)((PlayerEvent)event).entityPlayer).worldObj.playSoundAtEntity((Entity)((PlayerEvent)event).entityPlayer, "random.pop", 0.25F, + EntityUtils.randomPitch()); + ((Entity)((PlayerEvent)event).entityPlayer).worldObj.removeEntity((Entity)event.item); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static boolean meshBottles(EntityPlayer player, ItemStack item) { + try { + EntityLivingBase entityOne = (EntityLivingBase)EntityList.createEntityFromNBT(item + .getTagCompound(), null); + if (!getHandleEntity((Entity)entityOne)) + return false; + String nameOne = entityOne.getClass().getCanonicalName(); + ItemStack[] equipOne = new ItemStack[5]; + int color = 0; + boolean child = false; + boolean villager = false; + String owner = ""; + String nameTagName = entityOne.getEntityData().getString("nameTagName"); + if (entityOne instanceof EntitySheep) + color = ((EntitySheep)entityOne).getFleeceColor(); + if (entityOne instanceof EntityAgeable && ((EntityAgeable)entityOne).isChild()) + child = true; + if (entityOne instanceof EntityZombie && ((EntityZombie)entityOne).isChild()) + child = true; + if (entityOne instanceof EntityZombie && ((EntityZombie)entityOne).isVillager()) + villager = true; + if (entityOne instanceof EntityTameable) { + EntityLivingBase owningEntity = ((EntityTameable) entityOne).getOwner(); + owner = (owningEntity != null) ? owningEntity.getCommandSenderName() : null; + } + int i; + for (i = 0; i < 5; i++) { + equipOne[i] = entityOne.getEquipmentInSlot(i); + if (equipOne[i] != null && (!(entityOne instanceof EntityPigZombie) || i != 0 || equipOne[i] + .getItem() != net.minecraft.init.Items.golden_sword)) + return false; + } + for (i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack invStack = player.inventory.mainInventory[i]; + if (invStack != null && invStack.getItem() == Items.entitybottle && invStack + .hasTagCompound() && invStack.stackSize < invStack.getMaxStackSize()) { + EntityLivingBase entityTwo = (EntityLivingBase)EntityList.createEntityFromNBT(invStack + .getTagCompound(), null); + if (nameOne.equals(entityTwo.getClass().getCanonicalName())) + if (!(entityTwo instanceof EntitySheep) || ((EntitySheep)entityTwo).getFleeceColor() == color) + if (!(entityTwo instanceof EntityAgeable) || ((EntityAgeable)entityTwo).isChild() == child) + if (!(entityTwo instanceof EntityZombie) || ((EntityZombie)entityTwo).isChild() == child) + if (!(entityTwo instanceof EntityZombie) || ((EntityZombie)entityTwo).isVillager() == villager) + if (!(entityTwo instanceof EntityTameable) || ((EntityTameable)entityTwo).getOwner() + .equals(owner)) { + for (int j = 0; j < 5; j++) { + ItemStack checkStack = entityTwo.getEquipmentInSlot(j); + if (checkStack != null && (!(entityOne instanceof EntityPigZombie) || j != 0 || checkStack + .getItem() != net.minecraft.init.Items.golden_sword)) + return false; + } + invStack.stackSize++; + invStack.animationsToGo = 10; + return true; + } + } + } + } catch (Exception e) {} + return false; + } + + private static boolean getHandleEntity(Entity entity) { + try { + String name = entity.getClass().getCanonicalName(); + Class[] accepted = { + EntityCow.class, EntityChicken.class, EntitySheep.class, EntityPig.class, EntityWolf.class, EntityZombie.class, EntityEnderman.class, EntityGhast.class, EntityBlaze.class, EntityPigZombie.class, + EntitySkeleton.class }; + for (Class check : accepted) { + if (name.equals(check.getCanonicalName())) + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java b/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java new file mode 100644 index 0000000..f7ff6d3 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java @@ -0,0 +1,249 @@ +package ley.modding.dartcraft.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.entity.EntityFlyingFlask; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemEntityBottle extends Item { + + public static final int ENTITY_META = 0; + + public static final int AREA_META = 1; + + public static final int CHECK_TIME = 40; + + public ItemEntityBottle() { + setCreativeTab(Dartcraft.tab); + setMaxStackSize(64); + setUnlocalizedName("entitybottle"); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean thing) { + if (stack.hasTagCompound()) { + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + if (stack.getItemDamage() == 0) { + Entity entity = null; + if (comp.hasKey("CanPickUpLoot")) + entity = EntityList.createEntityFromNBT(comp, ((Entity)player).worldObj); + if (comp != null && comp.hasKey("dartName")) { + String name = null; + if (entity instanceof EntityBottle) + name = ((EntityBottle)entity).getBottledName(); + if (name != null) { + list.clear(); + list.add(name); + } + } + } else if (stack.getItemDamage() == 1) { + if (comp.hasKey("specialID")) { + if (comp.getString("specialID").equals("fountain")) + list.add("Fairy Fountain"); + if (comp.getString("specialID").equals("darthome")) + list.add("Dart Home"); + } + } + } + } + + private String retrieveName(String name) { + if (name.contains("entity.Cat.name")) + return "Cat"; + return name; + } + + public String getItemStackDisplayName(ItemStack stack) { + if (!stack.hasTagCompound()) + return super.getItemStackDisplayName(stack); + if (stack.getItemDamage() == 0) { + String name = stack.getTagCompound().getString("dartName"); + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + if (name.equals("entity.DartCraft.entityBeeSwarm.name")) + return "Flask of Angry Bees"; + if (name.equals("entity.DartCraft.entityFairy.name")) + return "Bottled Fairy"; + if (name != null && !name.equals("")) + return "" + name; + } else if (stack.getItemDamage() == 1) { + return "Bottled Area"; + } + return super.getItemStackDisplayName(stack); + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { + if (stack == null || !Dartcraft.proxy.isSimulating(world)) + return; + if (stack.getItemDamage() == 0) { + if (stack.hasTagCompound()) + stack.getTagCompound().setInteger("timeout", stack.getTagCompound().getInteger("timeout") + 1); + if (stack.hasTagCompound() && stack.getTagCompound().hasKey("wasDropped")) + stack.getTagCompound().removeTag("wasDropped"); + if (stack != null && stack.getItem() instanceof ItemEntityBottle && stack.hasTagCompound() && stack + .getTagCompound().getInteger("timeout") >= 40) { + stack.getTagCompound().setInteger("timeout", 0); + NBTTagCompound comp = stack.getTagCompound(); + String name = comp.getString("dartName"); + if (name != null && name.equals("Creeper")) { + boolean bane = (comp.hasKey("ForgeData") && comp.getCompoundTag("ForgeData").hasKey("DartCraft") && comp.getCompoundTag("ForgeData").getCompoundTag("DartCraft").getBoolean("baned")); + if (!bane && entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer)entity; + world.createExplosion((Entity)new EntityCreeper(world), ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ, 0.25F, false); + comp.setBoolean("dartToDestroy", true); + for (int i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack tempStack = player.inventory.mainInventory[i]; + if (tempStack != null && tempStack.getItem() instanceof ItemEntityBottle && tempStack + .hasTagCompound() && tempStack.getTagCompound().hasKey("dartToDestroy") && tempStack + .getTagCompound().getBoolean("dartToDestroy")) { + //player.inventory.setInventorySlotContents(i, new ItemStack(PAItems.resource, CommonProxy.rand.nextInt(3) + 1, 3)); + break; + } + } + return; + } + } + if (comp.hasKey("Fire") && comp.getShort("Fire") > 0) + comp.setShort("Fire", (short)-1); + if (comp.hasKey("FallDistance") && comp.getFloat("FallDistance") > 0.0F) + comp.setFloat("FallDistance", 0.0F); + short maxHealth = 0; + Entity temp = EntityList.createEntityFromNBT((NBTTagCompound)comp.copy(), world); + EntityLivingBase bottled = null; + if (temp instanceof EntityLivingBase) + bottled = (EntityLivingBase)temp; + try { + maxHealth = (short)(int)bottled.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + if (maxHealth > 0 && comp.hasKey("Health") && comp.getShort("Health") < maxHealth) + comp.setShort("Health", (short)(comp.getShort("Health") + 1)); + } + } + } + + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + try { + if (!Dartcraft.proxy.isSimulating(world) || stack == null || stack + .getItemDamage() == 1); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + try { + if (stack.getItemDamage() == 0) { + boolean thrown = player.isSneaking(); + if (Dartcraft.proxy.isSimulating(world)) + if (!thrown) { + spawnEntity(world, player, stack); + } else { + EntityFlyingFlask flask = new EntityFlyingFlask(world, (EntityLivingBase)player, stack); + world.spawnEntityInWorld((Entity)flask); + flask.setEntityItem(stack.copy()); + world.playSoundAtEntity((Entity)player, "random.bow", 1.0F, + EntityUtils.randomPitch()); + } + stack.stackSize--; + if (!thrown) { + if (stack.stackSize > 0) { + if (!player.inventory.addItemStackToInventory(new ItemStack(Items.forceflask))) + if (Dartcraft.proxy.isSimulating(world)) + ItemUtils.dropItem(new ItemStack(Items.forceflask), world, ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ); + return stack; + } + return new ItemStack(Items.forceflask); + } + } else if (stack.getItemDamage() == 1) { + + } + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + private void spawnEntity(World world, EntityPlayer player, ItemStack stack) { + if (stack != null && stack.hasTagCompound()) { + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + Entity entity = EntityList.createEntityFromNBT(comp, world); + if (entity != null && entity instanceof EntityLivingBase) { + double xIncr = (-MathHelper.sin(((Entity)player).rotationYaw / 180.0F * 3.1415927F) * MathHelper.cos(((Entity)player).rotationPitch / 180.0F * 3.1415927F)); + double yIncr = -MathHelper.sin(((Entity)player).rotationPitch / 180.0F * 3.1415927F); + double zIncr = (MathHelper.cos(((Entity)player).rotationYaw / 180.0F * 3.1415927F) * MathHelper.cos(((Entity)player).rotationPitch / 180.0F * 3.1415927F)); + double x = ((Entity)player).posX + xIncr * 2.0D; + double y = ((Entity)player).posY; + double z = ((Entity)player).posZ + zIncr * 2.0D; + EntityLivingBase restored = (EntityLivingBase)entity; + restored.setPosition(x, y, z); + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)restored); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 10); + world.spawnEntityInWorld((Entity)restored); + world.playSoundAtEntity((Entity)player, "dartcraft:bottle", 2.0F, + EntityUtils.randomPitch()); + } + } + } + + public boolean hasCustomEntity(ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) + return false; + return ((!stack.getTagCompound().getBoolean("wasDropped") && stack.getItemDamage() == 0) || ( + !stack.getTagCompound().hasKey("specialID") && stack.getItemDamage() == 1 && stack.stackSize < 2)); + } + + public Entity createEntity(World world, Entity entity, ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) + return null; + try { + if (stack.getItemDamage() == 0) { + EntityBottle item = new EntityBottle(world, entity.posX, entity.posY, entity.posZ, stack); + ((Entity)item).motionX = entity.motionX; + ((Entity)item).motionY = entity.motionY; + ((Entity)item).motionZ = entity.motionZ; + return (Entity)item; + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void getSubItems(Item par1, CreativeTabs tabs, List list) { + try { + list.add(EntityUtils.bottleEntity((Entity)new EntityCow(null))); + list.add(EntityUtils.bottleEntity((Entity)new EntityPig(null))); + list.add(EntityUtils.bottleEntity((Entity)new EntityChicken(null))); + EntitySkeleton skeleton = new EntitySkeleton(null); + skeleton.setSkeletonType(1); + list.add(EntityUtils.bottleEntity((Entity)skeleton)); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java b/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java new file mode 100644 index 0000000..880a9e5 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java @@ -0,0 +1,294 @@ +package ley.modding.dartcraft.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.entity.EntityFlyingFlask; +import ley.modding.dartcraft.event.EntityBottleHandler; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemForceFlask extends Item { + + public static final int EMPTY_META = 0; + + public static final int MILK_META = 1; + + public static final int FORCE_META = 2; + + public static final int CHATEAU_META = 3; + + public static final int GREEN_META = 4; + + public static final int RED_META = 5; + + public static final int BLUE_META = 6; + + public static final float FLASK_AMOUNT = 250.0F; + + public static final float DRINK_AMOUNT = 1.0F; + + public ItemForceFlask() { + setMaxDamage(0); + setHasSubtypes(true); + setUnlocalizedName("forceflask"); + setCreativeTab(Dartcraft.tab); + setMaxStackSize(64); + setContainerItem(this); + } + + public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack) { + return true; + } + + public ItemStack getContainerItemStack(ItemStack stack) { + if (stack != null) + if (stack.hasTagCompound() && stack.getTagCompound().getBoolean("triedCraft")) + return new ItemStack(Blocks.glass); + return new ItemStack(this, 1, 0); + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { + try { + if (Dartcraft.proxy.isSimulating(world) && stack != null && entity != null && entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer)entity; + if (stack.getItemDamage() == 2 || stack.getItemDamage() == 1) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + if (stack.getTagCompound().hasKey("triedCraft") && stack.getTagCompound() + .getBoolean("triedCraft")) + stack.getTagCompound().removeTag("triedCraft"); + } else if (stack.getItemDamage() != 0 || stack.stackSize == 0) { + + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String getUnlocalizedName(ItemStack stack) { + String name = "item.forceflask_"; + if (stack != null) + switch (stack.getItemDamage()) { + case 0: + name = name + "empty"; + break; + case 1: + name = name + "milk"; + break; + case 4: + name = name + "potion_green"; + break; + case 6: + name = name + "potion_blue"; + break; + case 5: + name = name + "potion_red"; + break; + case 3: + name = name + "potion_chateau"; + break; + case 2: + name = name + "potion_force"; + break; + } + return name; + } + + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { + try { + if (stack.getItemDamage() == 0) + if (entity instanceof net.minecraft.entity.passive.EntityCow) { + player.swingItem(); + if (stack.stackSize == 1) + stack.setItemDamage(1); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public EnumAction getItemUseAction(ItemStack stack) { + try { + switch (stack.getItemDamage()) { + case 1: + case 5: + case 4: + case 2: + case 6: + case 3: + return EnumAction.drink; + } + } catch (Exception e) { + e.printStackTrace(); + } + return EnumAction.none; + } + + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + try { + if (stack.getItemDamage() == 0 && player.isSneaking()) { + if (Dartcraft.proxy.isSimulating(world)) { + EntityFlyingFlask flask = new EntityFlyingFlask(world, (EntityLivingBase)player, null); + world.spawnEntityInWorld((Entity)flask); + world.playSoundAtEntity((Entity)player, "random.bow", 1.0F, + EntityUtils.randomPitch()); + } + stack.stackSize--; + return stack; + } + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)player); + if ((stack.getItemDamage() >= 32 && stack.hasTagCompound() && stack + .getTagCompound().getFloat("amount") >= 1.0F) || stack.getItemDamage() == 1) + player.setItemInUse(stack, getMaxItemUseDuration(stack)); + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + public int getMaxItemUseDuration(ItemStack stack) { + try { + switch (stack.getItemDamage()) { + case 1: + return 16; + case 2: + case 3: + case 4: + case 5: + case 6: + return 32; + } + if (stack.getItemDamage() >= 32) + return 32; + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } + + public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) { + if (stack == null || world == null || player == null) + return stack; + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)player); + boolean server = Dartcraft.proxy.isSimulating(((Entity)player).worldObj); + if (dartTag.hasKey("lastPotion")) + return stack; + if (dartTag.hasKey("combatTime")) + return stack; + if (stack != null) { + int meta = stack.getItemDamage(); + switch (meta) { + case 1: + if (server) { + player.clearActivePotions(); + player.heal(4.0F); + world.playSoundAtEntity((Entity)player, "dartcraft:heart", 1.0F, 1.0F); + return reduceContainer(player, stack); + } + break; + } + } + return stack; + } + + private ItemStack reduceContainer(EntityPlayer player, ItemStack stack) { + try { + stack.stackSize--; + if (stack.stackSize <= 0) { + player.setCurrentItemOrArmor(0, new ItemStack(this)); + stack = new ItemStack(this); + } else { + player.inventory.addItemStackToInventory(new ItemStack(this)); + } + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { + if (!Dartcraft.proxy.isSimulating(((Entity)player).worldObj) || stack == null || stack + .getItemDamage() != 0) + return true; + World world = ((Entity)player).worldObj; + EntityLivingBase victim = null; + if (entity instanceof EntityLivingBase) + victim = (EntityLivingBase)entity; + if (victim != null && !((Entity)victim).isDead && victim.getHealth() > 0.0F) { + boolean nope = false; + //TODO Whitelist + /*boolean whitelisted = !Config.entityWhitelist; + if (!whitelisted && PluginBottles.whitelist != null) + for (String check : PluginBottles.whitelist) { + if (check != null && check.equals(victim.getClass().getCanonicalName())) { + whitelisted = true; + break; + } + } + if (!whitelisted) + nope = true;*/ + if (victim instanceof EntityPlayer || victim instanceof EntityBottle) + nope = true; + if (!nope && (victim instanceof net.minecraft.entity.monster.EntityMob || victim instanceof net.minecraft.entity.monster.EntityGhast)) { + float maxHealth = 0.0F; + try { + maxHealth = (float)victim.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + float ratio = victim.getHealth() / maxHealth; + float limit = 0.25F; + if (ratio >= limit && maxHealth >= 5.0F) + nope = true; + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)victim); + if (player.capabilities.isCreativeMode) + nope = false; + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 5); + } + if (nope) { + world.playSoundAtEntity((Entity) victim, "dartcraft:nope", 2.0F, + EntityUtils.randomPitch()); + return true; + } + ItemStack bottleStack = EntityUtils.bottleEntity((Entity)victim); + world.playSoundAtEntity((Entity)victim, "dartcraft:swipe", 2.0F, + EntityUtils.randomPitch()); + world.removeEntity((Entity)victim); + victim = null; + stack.stackSize--; + if (stack.stackSize <= 0) { + player.setCurrentItemOrArmor(0, bottleStack); + } else if (!EntityBottleHandler.meshBottles(player, bottleStack)) { + if (!player.inventory.addItemStackToInventory(bottleStack)) + if (Dartcraft.proxy.isSimulating(world)) + ItemUtils.dropItem(bottleStack, world, ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ); + } + } + return true; + } + + @SideOnly(Side.CLIENT) + public void getSubItems(Item meta, CreativeTabs tabs, List itemList) { + int[] toAdd = { 0, 1, 2, 4, 5, 6 }; + for (int i : toAdd) + itemList.add(new ItemStack(this, 1, i)); + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/Items.java b/src/main/java/ley/modding/dartcraft/item/Items.java index 384eb43..a02bb1c 100644 --- a/src/main/java/ley/modding/dartcraft/item/Items.java +++ b/src/main/java/ley/modding/dartcraft/item/Items.java @@ -12,5 +12,7 @@ public class Items { public static Item forceshears; public static Item forcepickaxe; public static Item forcemitts; + public static Item forceflask; + public static Item entitybottle; } diff --git a/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java b/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java index 7659460..db66a25 100644 --- a/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java +++ b/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java @@ -1,6 +1,18 @@ package ley.modding.dartcraft.proxy; +import cpw.mods.fml.client.registry.RenderingRegistry; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal; +import ley.modding.dartcraft.client.renderer.entity.RenderEntityBottle; +import ley.modding.dartcraft.client.renderer.item.RenderItemForceFlask; +import ley.modding.dartcraft.entity.*; +import ley.modding.dartcraft.item.Items; +import net.minecraft.client.model.ModelChicken; +import net.minecraft.client.model.ModelCow; +import net.minecraft.client.model.ModelPig; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraftforge.client.MinecraftForgeClient; public class ClientProxy extends CommonProxy { @@ -8,4 +20,21 @@ public class ClientProxy extends CommonProxy { return world != null && !world.isRemote; } + public void bindTexture(String texture) { + if (texture != null) + getClientInstance().getTextureManager().bindTexture(new ResourceLocation(Dartcraft.MODID, texture)); + } + + public void init() { + super.init(); + MinecraftForgeClient.registerItemRenderer(Items.forceflask, RenderItemForceFlask.instance); + MinecraftForgeClient.registerItemRenderer(Items.entitybottle, RenderItemForceFlask.instance); + RenderEntityBottle bottleRenderer = new RenderEntityBottle(); + RenderingRegistry.registerEntityRenderingHandler(EntityBottle.class, bottleRenderer); + RenderingRegistry.registerEntityRenderingHandler(EntityFlyingFlask.class, bottleRenderer); + RenderingRegistry.registerEntityRenderingHandler(EntityColdChicken.class, new RenderColdAnimal(new ModelChicken(), 0.6f, "textures/entity/coldChicken.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdCow.class, new RenderColdAnimal(new ModelCow(), 0.6f, "textures/entity/coldCow.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdPig.class, new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")); + } + } diff --git a/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java b/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java index 417fea4..a958e53 100644 --- a/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java +++ b/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java @@ -1,11 +1,17 @@ package ley.modding.dartcraft.proxy; +import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; +import java.util.Random; + public class CommonProxy { + public static Random rand = new Random(); + public void sendChatToPlayer(EntityPlayer player, String message) { player.addChatMessage(new ChatComponentText(message)); } @@ -14,4 +20,15 @@ public class CommonProxy { return true; } + public Minecraft getClientInstance() { + return FMLClientHandler.instance().getClient(); + } + + public void bindTexture(String texture) { + } + + public void init() { + + } + } diff --git a/src/main/java/ley/modding/dartcraft/util/EntityUtils.java b/src/main/java/ley/modding/dartcraft/util/EntityUtils.java new file mode 100644 index 0000000..fd86464 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/util/EntityUtils.java @@ -0,0 +1,84 @@ +package ley.modding.dartcraft.util; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.proxy.CommonProxy; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.*; +import net.minecraft.world.World; + +import java.lang.reflect.Constructor; + +public class EntityUtils { + + public static NBTTagCompound getModComp(Entity entity) { + if (entity == null || entity.getEntityData() == null) + return new NBTTagCompound(); + NBTTagCompound comp = entity.getEntityData().hasKey(Dartcraft.MODID) ? entity.getEntityData().getCompoundTag(Dartcraft.MODID) : null; + if (comp == null) { + entity.getEntityData().setTag(Dartcraft.MODID, (NBTBase)new NBTTagCompound()); + comp = entity.getEntityData().getCompoundTag(Dartcraft.MODID); + } + return comp; + } + + public static ItemStack bottleEntity(Entity victim) { + try { + String entityName = EntityList.getEntityString(victim); + if (victim == null || entityName == null) + return null; + ItemStack bottleStack = new ItemStack(Items.entitybottle); + NBTTagCompound bottleComp = new NBTTagCompound(); + victim.writeToNBT(bottleComp); + bottleComp.removeTag("OnGround"); + bottleComp.removeTag("PersistenceRequired"); + bottleComp.removeTag("Dimension"); + bottleComp.removeTag("PortalCooldown"); + bottleComp.removeTag("UUIDLeast"); + bottleComp.removeTag("UUIDMost"); + bottleComp.removeTag("DropChances"); + bottleComp.removeTag("Motion"); + bottleComp.removeTag("Pos"); + bottleComp.removeTag("Rotation"); + NBTTagDouble dummyDouble = new NBTTagDouble(0.0D); + NBTTagFloat dummyFloat = new NBTTagFloat(0.0F); + NBTTagList motion = new NBTTagList(); + motion.appendTag(dummyDouble.copy()); + motion.appendTag(dummyDouble.copy()); + motion.appendTag(dummyDouble.copy()); + NBTTagList rot = new NBTTagList(); + rot.appendTag(dummyFloat.copy()); + rot.appendTag(dummyFloat.copy()); + bottleComp.setTag("Pos", motion.copy()); + bottleComp.setTag("Motion", motion.copy()); + bottleComp.setTag("Rotation", rot.copy()); + bottleComp.setString("id", entityName); + bottleComp.setString("dartName", victim.getCommandSenderName()); + bottleStack.setTagCompound(bottleComp); + return bottleStack; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static Entity getEntity(String name) { + try { + Class entityClass = (Class) EntityList.stringToClassMapping.get(name); + if (entityClass != null) { + Constructor constructor = entityClass.getConstructor(new Class[] { World.class }); + Entity entity = constructor.newInstance(new Object[] { null }); + return entity; + } + } catch (Exception e) {} + return null; + } + + public static float randomPitch() { + return CommonProxy.rand.nextFloat() * 0.25F + 0.85F; + } + + +} diff --git a/src/main/java/ley/modding/dartcraft/util/ItemUtils.java b/src/main/java/ley/modding/dartcraft/util/ItemUtils.java new file mode 100644 index 0000000..eb0e048 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/util/ItemUtils.java @@ -0,0 +1,40 @@ +package ley.modding.dartcraft.util; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.proxy.CommonProxy; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class ItemUtils { + + public static void dropItem(ItemStack stack, World world, double x, double y, double z) { + if (stack != null && world != null && Dartcraft.proxy.isSimulating(world)) { + float xRand = CommonProxy.rand.nextFloat() * 0.2F + 0.1F; + float yRand = CommonProxy.rand.nextFloat() * 0.8F + 0.1F; + float zRand = CommonProxy.rand.nextFloat() * 0.2F + 0.1F; + while (stack.stackSize > 0) { + int randInt = CommonProxy.rand.nextInt(21) + 10; + if (randInt > stack.stackSize) + randInt = stack.stackSize; + stack.stackSize -= randInt; + EntityItem droppedItem = new EntityItem(world, ((float)x + xRand), ((float)y + yRand), ((float)z + zRand), new ItemStack(stack.getItem(), randInt, stack.getItemDamage())); + if (stack.hasTagCompound()) + droppedItem.getEntityItem().setTagCompound((NBTTagCompound) stack + .getTagCompound().copy()); + float modifier = 0.025F; + ((Entity)droppedItem) + .motionX = ((float)CommonProxy.rand.nextGaussian() * modifier); + ((Entity)droppedItem) + .motionY = ((float)CommonProxy.rand.nextGaussian() * modifier + 0.2F); + ((Entity)droppedItem) + .motionZ = ((float)CommonProxy.rand.nextGaussian() * modifier); + droppedItem.delayBeforeCanPickup = 10; + world.spawnEntityInWorld((Entity)droppedItem); + } + } + } + +} diff --git a/src/main/resources/assets/dartcraft/bottle.png b/src/main/resources/assets/dartcraft/bottle.png new file mode 100644 index 0000000000000000000000000000000000000000..c218695875dbf001a696db342d532d1df4a14436 GIT binary patch literal 23453 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/dartcraft/lang/en_US.lang b/src/main/resources/assets/dartcraft/lang/en_US.lang index 29fb5b1..4f175a7 100644 --- a/src/main/resources/assets/dartcraft/lang/en_US.lang +++ b/src/main/resources/assets/dartcraft/lang/en_US.lang @@ -5,5 +5,11 @@ item.forcestick.name=Force Stick item.forceshard.name=Force Shard item.forcemitts.name=Force Mitts item.forceshears.name=Force Shears +item.forceflask_empty.name=Force Flask +item.forceflask_milk.name=Milk Flask +item.forceflask_potion_force.name=Liquid Force Flask +item.forceflask_potion_green.name=Green Liquid Flask +item.forceflask_potion_blue.name=Blue Liquid Flask +item.forceflask_potion_red.name=Red Liquid Flask itemGroup.dartcraft=Dartcraft diff --git a/src/main/resources/assets/dartcraft/liquid.png b/src/main/resources/assets/dartcraft/liquid.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd9689cf41259c1c5b36650bbe792265bbd53b4 GIT binary patch literal 53211 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∋`|Sh{rzdBb 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 L;#Tc*FSmaJRd1%@ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/dartcraft/sounds/nope.ogg b/src/main/resources/assets/dartcraft/sounds/nope.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d75581d74597780ad3d2996977dc188854f283b3 GIT binary patch literal 7014 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 By^#O_ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/dartcraft/sounds/swipe.ogg b/src/main/resources/assets/dartcraft/sounds/swipe.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d1d04c5b9dba1da03b494f3140eddb6d914b6afe GIT binary patch literal 5463 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 Ip^x4_0Wpw7V*mgE literal 0 HcmV?d00001