diff --git a/changelog b/changelog index e754f9074..77a41cc8c 100644 --- a/changelog +++ b/changelog @@ -66,6 +66,8 @@ * Retextured the fallout effect, fallout no longer has large snowflakes and the color now matches the crater better * High-yield mini nukes no longer create chunk radiation, since they use the MK5 which already has AoE radiation, this prevents dead grass from spawning that makes the crater look uglier * Balefire spread is now limited to prevent densely vegetated biomes from lagging to hell +* The bricked furnace now makes charcoal twice as fast +* Combination ovens no longer need two welded copper plates and instead only cast plates, therefore no longer being post-arc welder. This should make it more affordable and useful in the initial earlygame where things like automatic wood farms are most important. ## Fixed * Fixed dupe caused by shift-clicking ashes out of the bricked furnace diff --git a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java index 0d586e803..f2a8d73d7 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockVolcano.java @@ -198,10 +198,6 @@ public class BlockVolcano extends BlockContainer implements ITooltipProvider, IB } } - /* TODO */ - private boolean doesPyroclastic() { return false; } - private double getPyroclasticRange() { return 0D; } - /** Causes two magma explosions, one from bedrock to the core and one from the core to 15 blocks above. */ private void blastMagmaChannel() { ExplosionNT explosion = new ExplosionNT(worldObj, null, xCoord + 0.5, yCoord + worldObj.rand.nextInt(15) + 1.5, zCoord + 0.5, 7); diff --git a/src/main/java/com/hbm/blocks/bomb/LaunchPad.java b/src/main/java/com/hbm/blocks/bomb/LaunchPad.java index 78436a540..ac7910c4a 100644 --- a/src/main/java/com/hbm/blocks/bomb/LaunchPad.java +++ b/src/main/java/com/hbm/blocks/bomb/LaunchPad.java @@ -1,131 +1,74 @@ package com.hbm.blocks.bomb; -import java.util.Random; - -import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.BlockDummyable; import com.hbm.interfaces.IBomb; -import com.hbm.main.MainRegistry; import com.hbm.tileentity.bomb.TileEntityLaunchPad; -import cpw.mods.fml.common.network.internal.FMLNetworkHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; -import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -public class LaunchPad extends BlockContainer implements IBomb { +public class LaunchPad extends BlockDummyable implements IBomb { - public static boolean keepInventory = false; - private final static Random field_149933_a = new Random(); - - public LaunchPad(Material p_i45386_1_) { - super(p_i45386_1_); + public LaunchPad(Material mat) { + super(mat); } @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntityLaunchPad(); + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityLaunchPad(); + return null; } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { - if(!keepInventory) { - TileEntityLaunchPad tileentityfurnace = (TileEntityLaunchPad) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - - if(tileentityfurnace != null) { - for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - - if(itemstack != null) { - float f = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - - while(itemstack.stackSize > 0) { - int j1 = LaunchPad.field_149933_a.nextInt(21) + 10; - - if(j1 > itemstack.stackSize) { - j1 = itemstack.stackSize; - } - - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - - if(itemstack.hasTagCompound()) { - entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); - } - - float f3 = 0.05F; - entityitem.motionX = (float) LaunchPad.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float) LaunchPad.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float) LaunchPad.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } - - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } - - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } - + @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) { - return true; - } else if(!player.isSneaking()) { - TileEntityLaunchPad entity = (TileEntityLaunchPad) world.getTileEntity(x, y, z); - if(entity != null) { - FMLNetworkHandler.openGui(player, MainRegistry.instance, 0, world, x, y, z); - } - return true; - } else { - return false; - } + return this.standardOpenBehavior(world, x, y, z, player, 0); } @Override - public void onNeighborBlockChange(World p_149695_1_, int x, int y, int z, Block p_149695_5_) { - if(p_149695_1_.isBlockIndirectlyGettingPowered(x, y, z) && !p_149695_1_.isRemote) { - this.explode(p_149695_1_, x, y, z); - } + public int[] getDimensions() { + return new int[] {0, 0, 1, 1, 1, 1}; } @Override - public int getRenderType() { - return -1; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) { - return Item.getItemFromBlock(ModBlocks.launch_pad); + public int getOffset() { + return 1; } @Override public BombReturnCode explode(World world, int x, int y, int z) { - TileEntityLaunchPad entity = (TileEntityLaunchPad) world.getTileEntity(x, y, z); - return entity.launchFromDesignator(); + + if(!world.isRemote) { + + int[] corePos = findCore(world, x, y, z); + if(corePos != null){ + TileEntity core = world.getTileEntity(corePos[0], corePos[1], corePos[2]); + if(core instanceof TileEntityLaunchPad){ + TileEntityLaunchPad entity = (TileEntityLaunchPad)core; + return entity.launchFromDesignator(); + } + } + } + + return BombReturnCode.UNDEFINED; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block blockIn){ + + if(!world.isRemote){ + + int[] corePos = findCore(world, x, y, z); + if(corePos != null){ + TileEntity core = world.getTileEntity(corePos[0], corePos[1], corePos[2]); + if(core instanceof TileEntityLaunchPad){ + TileEntityLaunchPad launchpad = (TileEntityLaunchPad)core; + launchpad.updateRedstonePower(x, y, z); + } + } + } + super.onNeighborBlockChange( world, x, y, z, blockIn); } - } diff --git a/src/main/java/com/hbm/blocks/bomb/LaunchPadLarge.java b/src/main/java/com/hbm/blocks/bomb/LaunchPadLarge.java index eb6d9daa8..da9f9bdec 100644 --- a/src/main/java/com/hbm/blocks/bomb/LaunchPadLarge.java +++ b/src/main/java/com/hbm/blocks/bomb/LaunchPadLarge.java @@ -64,8 +64,8 @@ public class LaunchPadLarge extends BlockDummyable implements IBomb { if(corePos != null){ TileEntity core = world.getTileEntity(corePos[0], corePos[1], corePos[2]); if(core instanceof TileEntityLaunchPadLarge){ - TileEntityLaunchPadLarge door = (TileEntityLaunchPadLarge)core; - door.updateRedstonePower(x, y, z); + TileEntityLaunchPadLarge launchpad = (TileEntityLaunchPadLarge)core; + launchpad.updateRedstonePower(x, y, z); } } } diff --git a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java index 573e56e84..2bf40a528 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun20GaugeFactory.java @@ -13,7 +13,6 @@ import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java index 0e7916786..d21ebf9c9 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun45ACPFactory.java @@ -12,7 +12,6 @@ import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java index 6a99a6109..847a3f3ab 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun50BMGFactory.java @@ -20,7 +20,6 @@ import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java index e3f697b5a..4c0f19804 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun556mmFactory.java @@ -18,7 +18,6 @@ import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java index 2f24b5a02..47ae1fb7d 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun75BoltFactory.java @@ -14,7 +14,6 @@ import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java index 993751dda..3419a631b 100644 --- a/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/Gun762mmFactory.java @@ -15,7 +15,6 @@ import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.potion.HbmPotion; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java index 93dfe03b9..905f80321 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunGaussFactory.java @@ -9,7 +9,6 @@ import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java index 0c9b53a54..1c933ce55 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketFactory.java @@ -13,7 +13,6 @@ import com.hbm.items.ModItems; import com.hbm.items.ItemAmmoEnums.AmmoRocket; import com.hbm.lib.HbmCollection.EnumGunManufacturer; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay.Crosshair; diff --git a/src/main/java/com/hbm/inventory/container/ContainerLaunchPadTier1.java b/src/main/java/com/hbm/inventory/container/ContainerLaunchPadTier1.java deleted file mode 100644 index a19e9a385..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerLaunchPadTier1.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.tileentity.bomb.TileEntityLaunchPad; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; - -public class ContainerLaunchPadTier1 extends Container { - - private TileEntityLaunchPad diFurnace; - - public ContainerLaunchPadTier1(InventoryPlayer invPlayer, TileEntityLaunchPad tedf) { - - diFurnace = tedf; - - this.addSlotToContainer(new Slot(tedf, 0, 26, 17)); - this.addSlotToContainer(new Slot(tedf, 1, 80, 17)); - this.addSlotToContainer(new Slot(tedf, 2, 134, 17)); - - for(int i = 0; i < 3; i++) { - for(int j = 0; j < 9; j++) { - this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); - } - } - - for(int i = 0; i < 9; i++) { - this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); - } - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { - ItemStack var3 = null; - Slot var4 = (Slot) this.inventorySlots.get(par2); - - if(var4 != null && var4.getHasStack()) { - ItemStack var5 = var4.getStack(); - var3 = var5.copy(); - - if(par2 <= 2) { - if(!this.mergeItemStack(var5, 3, this.inventorySlots.size(), true)) { - return null; - } - } else { - return null; - } - - if(var5.stackSize == 0) { - var4.putStack((ItemStack) null); - } else { - var4.onSlotChanged(); - } - } - - return var3; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return diFurnace.isUseableByPlayer(player); - } -} diff --git a/src/main/java/com/hbm/inventory/gui/GUILaunchPadTier1.java b/src/main/java/com/hbm/inventory/gui/GUILaunchPadTier1.java deleted file mode 100644 index e57b35868..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUILaunchPadTier1.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.hbm.inventory.gui; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerLaunchPadTier1; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.bomb.TileEntityLaunchPad; - -public class GUILaunchPadTier1 extends GuiInfoContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/weapon/gui_launch_pad.png"); - private TileEntityLaunchPad diFurnace; - - public GUILaunchPadTier1(InventoryPlayer invPlayer, TileEntityLaunchPad tedf) { - super(new ContainerLaunchPadTier1(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 166; - } - - @Override - public void drawScreen(int mouseX, int mouseY, float f) { - super.drawScreen(mouseX, mouseY, f); - - this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 53, 160, 16, diFurnace.power, diFurnace.maxPower); - - String[] text = new String[] { "First Slot:", - " -Missile (no custom ones!)", - " -Carrier Rocket" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, text); - - String[] text1 = new String[] { "Second Slot:", - " -Target designator for missiles", - " -Satellite payload for the carrier rocket" }; - this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36 + 16, 16, 16, guiLeft - 8, guiTop + 36 + 16, text1); - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); - - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); - this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - int j1 = (int)diFurnace.getPowerScaled(160); - drawTexturedModalRect(guiLeft + 8, guiTop + 53, 8, 166, j1, 16); - - this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 2); - this.drawInfoPanel(guiLeft - 16, guiTop + 36 + 16, 16, 16, 3); - } -} diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index f6a37b64d..794daf237 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -312,7 +312,7 @@ public class AnvilRecipes { new AStack[] { new ComparableStack(Blocks.stonebrick, 8), new OreDictStack(KEY_LOG, 16), - new OreDictStack(CU.plateWelded(), 2), + new OreDictStack(CU.plateCast(), 2), new OreDictStack(KEY_BRICK, 16) }, new AnvilOutput(new ItemStack(ModBlocks.furnace_combination))).setTier(2)); diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java index c4178aa08..0b4ef3dd2 100644 --- a/src/main/java/com/hbm/items/tool/ItemBoltgun.java +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -8,7 +8,6 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.util.EntityDamageUtil; diff --git a/src/main/java/com/hbm/items/weapon/ItemCoilgun.java b/src/main/java/com/hbm/items/weapon/ItemCoilgun.java index 2cff7857d..af245c5d2 100644 --- a/src/main/java/com/hbm/items/weapon/ItemCoilgun.java +++ b/src/main/java/com/hbm/items/weapon/ItemCoilgun.java @@ -2,7 +2,6 @@ package com.hbm.items.weapon; import com.hbm.handler.GunConfiguration; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunBio.java b/src/main/java/com/hbm/items/weapon/ItemGunBio.java index 77ea4a9f7..1e7184e84 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunBio.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunBio.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.handler.GunConfiguration; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunCongo.java b/src/main/java/com/hbm/items/weapon/ItemGunCongo.java index 4e34d889a..a4657cb6e 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunCongo.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunCongo.java @@ -2,7 +2,6 @@ package com.hbm.items.weapon; import com.hbm.handler.GunConfiguration; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; diff --git a/src/main/java/com/hbm/items/weapon/ItemGunPip.java b/src/main/java/com/hbm/items/weapon/ItemGunPip.java index c57e56a70..c6ed8aaf9 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunPip.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunPip.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.handler.GunConfiguration; import com.hbm.render.anim.BusAnimation; -import com.hbm.render.anim.BusAnimationKeyframe; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.HbmAnimations.AnimType; diff --git a/src/main/java/com/hbm/lib/HbmChestContents.java b/src/main/java/com/hbm/lib/HbmChestContents.java index c0bda98a8..c1571f47b 100644 --- a/src/main/java/com/hbm/lib/HbmChestContents.java +++ b/src/main/java/com/hbm/lib/HbmChestContents.java @@ -17,7 +17,6 @@ import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandomChestContent; -import net.minecraft.world.ChunkCoordIntPair; public class HbmChestContents { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index a11765e7a..40e1cf518 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1715,6 +1715,9 @@ public class ClientProxy extends ServerProxy { fx.setBaseScale(data.getFloat("base")); fx.setMaxScale(data.getFloat("max")); fx.setLife(data.getInteger("life") / (particleSetting + 1)); + if(data.hasKey("noWind")) fx.noWind(); + if(data.hasKey("strafe")) fx.setStrafe(data.getFloat("strafe")); + if(data.hasKey("alpha")) fx.alphaMod(data.getFloat("alpha")); if(data.hasKey("color")) { Color color = new Color(data.getInteger("color")); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 006d32211..3928f0aa8 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -41,7 +41,7 @@ import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.satellites.Satellite; import com.hbm.tileentity.TileMappings; -import com.hbm.tileentity.bomb.TileEntityLaunchPad; +import com.hbm.tileentity.bomb.TileEntityLaunchPadBase; import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.TileEntityNukeFurnace; import com.hbm.tileentity.machine.rbmk.RBMKDials; @@ -332,7 +332,7 @@ public class MainRegistry { TileMappings.writeMappings(); MachineDynConfig.initialize(); - TileEntityLaunchPad.registerLaunchables(); + TileEntityLaunchPadBase.registerLaunchables(); for(Entry, String[]> e : TileMappings.map.entrySet()) { diff --git a/src/main/java/com/hbm/particle/ParticleCoolingTower.java b/src/main/java/com/hbm/particle/ParticleCoolingTower.java index ced14c05f..cf9d39559 100644 --- a/src/main/java/com/hbm/particle/ParticleCoolingTower.java +++ b/src/main/java/com/hbm/particle/ParticleCoolingTower.java @@ -15,6 +15,9 @@ public class ParticleCoolingTower extends EntityFX { private float baseScale = 1.0F; private float maxScale = 1.0F; private float lift = 0.3F; + private float strafe = 0.075F; + private boolean windDir = true; + private float alphaMod = 0.25F; public ParticleCoolingTower(TextureManager texman, World world, double x, double y, double z) { super(world, x, y, z); @@ -23,21 +26,13 @@ public class ParticleCoolingTower extends EntityFX { this.noClip = true; } - public void setBaseScale(float f) { - this.baseScale = f; - } - - public void setMaxScale(float f) { - this.maxScale = f; - } - - public void setLift(float f) { - this.lift = f; - } - - public void setLife(int i) { - this.particleMaxAge = i; - } + public void setBaseScale(float f) { this.baseScale = f; } + public void setMaxScale(float f) { this.maxScale = f; } + public void setLift(float f) { this.lift = f; } + public void setLife(int i) { this.particleMaxAge = i; } + public void setStrafe(float f) { this.strafe = f; } + public void noWind() { this.windDir = false; } + public void alphaMod(float mod) { this.alphaMod = mod; } public void onUpdate() { @@ -47,20 +42,25 @@ public class ParticleCoolingTower extends EntityFX { float ageScale = (float) this.particleAge / (float) this.particleMaxAge; - this.particleAlpha = 0.25F - ageScale * 0.25F; + this.particleAlpha = alphaMod - ageScale * alphaMod; this.particleScale = baseScale + (float)Math.pow((maxScale * ageScale - baseScale), 2); this.particleAge++; - - if(this.motionY < this.lift) { + + if(lift > 0 && this.motionY < this.lift) { this.motionY += 0.01F; } + if(lift < 0 && this.motionY > this.lift) { + this.motionY -= 0.01F; + } - this.motionX += rand.nextGaussian() * 0.075D * ageScale; - this.motionZ += rand.nextGaussian() * 0.075D * ageScale; + this.motionX += rand.nextGaussian() * strafe * ageScale; + this.motionZ += rand.nextGaussian() * strafe * ageScale; - this.motionX += 0.02 * ageScale; - this.motionX -= 0.01 * ageScale; + if(windDir) { + this.motionX += 0.02 * ageScale; + this.motionZ -= 0.01 * ageScale; + } if(this.particleAge == this.particleMaxAge) { this.setDead(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLaunchPad.java b/src/main/java/com/hbm/render/tileentity/RenderLaunchPad.java index b0f720391..a57b0cce3 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderLaunchPad.java +++ b/src/main/java/com/hbm/render/tileentity/RenderLaunchPad.java @@ -4,6 +4,7 @@ import java.util.function.Consumer; import org.lwjgl.opengl.GL11; +import com.hbm.blocks.BlockDummyable; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderMissileGeneric; @@ -21,13 +22,18 @@ public class RenderLaunchPad extends TileEntitySpecialRenderer { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y, z + 0.5D); GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } bindTexture(ResourceManager.missile_pad_tex); ResourceManager.missile_pad.renderAll(); - GL11.glDisable(GL11.GL_CULL_FACE); - if(tileEntity instanceof TileEntityLaunchPad) { ItemStack toRender = ((TileEntityLaunchPad) tileEntity).toRender; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java index 5513e6de1..2b7c53dea 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPad.java @@ -1,230 +1,65 @@ package com.hbm.tileentity.bomb; -import java.util.HashMap; -import java.util.List; - -import org.apache.logging.log4j.Level; - -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.bomb.LaunchPad; -import com.hbm.config.GeneralConfig; -import com.hbm.entity.missile.EntityCarrier; -import com.hbm.entity.missile.EntityMissileAntiBallistic; -import com.hbm.entity.missile.EntityMissileBaseNT; -import com.hbm.entity.missile.EntityMissileDoomsday; -import com.hbm.entity.missile.EntityMissileShuttle; -import com.hbm.entity.missile.EntityMissileStealth; -import com.hbm.entity.missile.EntityMissileTier0.*; -import com.hbm.entity.missile.EntityMissileTier1.*; -import com.hbm.entity.missile.EntityMissileTier2.*; -import com.hbm.entity.missile.EntityMissileTier3.*; -import com.hbm.entity.missile.EntityMissileTier4.*; -import com.hbm.interfaces.IBomb.BombReturnCode; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.inventory.container.ContainerLaunchPadTier1; -import com.hbm.inventory.gui.GUILaunchPadTier1; -import com.hbm.items.ModItems; -import com.hbm.lib.Library; -import com.hbm.main.MainRegistry; -import com.hbm.tileentity.IGUIProvider; -import com.hbm.tileentity.IRadarCommandReceiver; -import com.hbm.tileentity.TileEntityMachineBase; - import api.hbm.energy.IEnergyUser; -import api.hbm.item.IDesignatorItem; -import cpw.mods.fml.common.Optional; +import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import li.cil.oc.api.machine.Arguments; -import li.cil.oc.api.machine.Callback; -import li.cil.oc.api.machine.Context; -import li.cil.oc.api.network.SimpleComponent; -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityLaunchPad extends TileEntityMachineBase implements IEnergyUser, SimpleComponent, IGUIProvider, IRadarCommandReceiver { - - /** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */ - public static final HashMap> missiles = new HashMap(); - - public static void registerLaunchables() { +public class TileEntityLaunchPad extends TileEntityLaunchPadBase implements IEnergyUser, IFluidStandardReceiver { - //Tier 0 - missiles.put(new ComparableStack(ModItems.missile_micro), EntityMissileMicro.class); - missiles.put(new ComparableStack(ModItems.missile_schrabidium), EntityMissileSchrabidium.class); - missiles.put(new ComparableStack(ModItems.missile_bhole), EntityMissileBHole.class); - missiles.put(new ComparableStack(ModItems.missile_taint), EntityMissileTaint.class); - missiles.put(new ComparableStack(ModItems.missile_emp), EntityMissileEMP.class); - //Tier 1 - missiles.put(new ComparableStack(ModItems.missile_generic), EntityMissileGeneric.class); - missiles.put(new ComparableStack(ModItems.missile_decoy), EntityMissileDecoy.class); - missiles.put(new ComparableStack(ModItems.missile_incendiary), EntityMissileIncendiary.class); - missiles.put(new ComparableStack(ModItems.missile_cluster), EntityMissileCluster.class); - missiles.put(new ComparableStack(ModItems.missile_buster), EntityMissileBunkerBuster.class); - //Tier 2 - missiles.put(new ComparableStack(ModItems.missile_strong), EntityMissileStrong.class); - missiles.put(new ComparableStack(ModItems.missile_incendiary_strong), EntityMissileIncendiaryStrong.class); - missiles.put(new ComparableStack(ModItems.missile_cluster_strong), EntityMissileClusterStrong.class); - missiles.put(new ComparableStack(ModItems.missile_buster_strong), EntityMissileBusterStrong.class); - missiles.put(new ComparableStack(ModItems.missile_emp_strong), EntityMissileEMPStrong.class); - //Tier 3 - missiles.put(new ComparableStack(ModItems.missile_burst), EntityMissileBurst.class); - missiles.put(new ComparableStack(ModItems.missile_inferno), EntityMissileInferno.class); - missiles.put(new ComparableStack(ModItems.missile_rain), EntityMissileRain.class); - missiles.put(new ComparableStack(ModItems.missile_drill), EntityMissileDrill.class); - missiles.put(new ComparableStack(ModItems.missile_shuttle), EntityMissileShuttle.class); - //Tier 4 - missiles.put(new ComparableStack(ModItems.missile_nuclear), EntityMissileNuclear.class); - missiles.put(new ComparableStack(ModItems.missile_nuclear_cluster), EntityMissileMirv.class); - missiles.put(new ComparableStack(ModItems.missile_volcano), EntityMissileVolcano.class); - - missiles.put(new ComparableStack(ModItems.missile_doomsday), EntityMissileDoomsday.class); - missiles.put(new ComparableStack(ModItems.missile_stealth), EntityMissileStealth.class); - } - - public ItemStack toRender; + @Override public boolean isReadyForLaunch() { return delay <= 0; } + @Override public double getLaunchOffset() { return 2D; } - public long power; - public final long maxPower = 100000; - - private static final int[] slots_bottom = new int[] {0, 1, 2}; - private static final int[] slots_side = new int[] {0}; - - public TileEntityLaunchPad() { - super(3); - } - - @Override - public String getName() { - return "container.launchPad"; - } + public int delay = 0; @Override public void updateEntity() { if(!worldObj.isRemote) { - power = Library.chargeTEFromItems(slots, 2, power, maxPower); - this.updateConnections(); + if(this.delay > 0) delay--; - NBTTagCompound data = new NBTTagCompound(); - data.setLong("power", power); - if(slots[0] != null) { - data.setInteger("id", Item.getIdFromItem(slots[0].getItem())); - data.setShort("meta", (short) slots[0].getItemDamage()); - } - networkPack(data, 250); - } else { - - - List entities = worldObj.getEntitiesWithinAABB(EntityMissileBaseNT.class, AxisAlignedBB.getBoundingBox(xCoord - 0.5, yCoord, zCoord - 0.5, xCoord + 1.5, yCoord + 10, zCoord + 1.5)); - - if(!entities.isEmpty()) { - - for(int i = 0; i < 15; i++) { - - boolean dir = worldObj.rand.nextBoolean(); - float moX = (float) (dir ? 0 : worldObj.rand.nextGaussian() * 0.5F); - float moZ = (float) (!dir ? 0 : worldObj.rand.nextGaussian() * 0.5F); - - MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] { moX, 0, moZ }); - } + if(!this.isMissileValid() || !this.hasFuel()) { + this.delay = 100; } } - } - - @Override - public void networkUnpack(NBTTagCompound nbt) { - this.power = nbt.getLong("power"); - if(nbt.hasKey("id")) { - this.toRender = new ItemStack(Item.getItemById(nbt.getInteger("id")), 1, nbt.getShort("meta")); - } else { - this.toRender = null; - } - } - - private void updateConnections() { - this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord, Library.POS_X); - this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord, Library.NEG_X); - this.trySubscribe(worldObj, xCoord, yCoord, zCoord + 1, Library.POS_Z); - this.trySubscribe(worldObj, xCoord, yCoord, zCoord - 1, Library.NEG_Z); - this.trySubscribe(worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); - } - - @Override - public boolean isItemValidForSlot(int i, ItemStack itemStack) { - return true; + super.updateEntity(); } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); - power = nbt.getLong("power"); - - if(slots == null || slots.length != 3) slots = new ItemStack[3]; + + this.delay = nbt.getInteger("delay"); } @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); - nbt.setLong("power", power); + + nbt.setInteger("delay", delay); } - @Override - public int[] getAccessibleSlotsFromSide(int side) { - return side == 0 ? slots_bottom : (side == 1 ? new int[0] : slots_side); - } - - public long getPowerScaled(long i) { - return (power * i) / maxPower; - } + AxisAlignedBB bb = null; @Override public AxisAlignedBB getRenderBoundingBox() { - return TileEntity.INFINITE_EXTENT_AABB; - } - - @Override - public void setPower(long i) { - power = i; - } - - @Override - public long getPower() { - return power; - } - - @Override - public long getMaxPower() { - return maxPower; - } - - @Override - public long transferPower(long power) { - this.power += power; - if(this.power > this.getMaxPower()) { - long overshoot = this.power - this.getMaxPower(); - this.power = this.getMaxPower(); - return overshoot; + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 2, + yCoord, + zCoord - 2, + xCoord + 3, + yCoord + 15, + zCoord + 3 + ); } - return 0; - } - - @Override - public boolean canConnect(ForgeDirection dir) { - return dir != ForgeDirection.UP && dir != ForgeDirection.UNKNOWN; + + return bb; } @Override @@ -232,181 +67,4 @@ public class TileEntityLaunchPad extends TileEntityMachineBase implements IEnerg public double getMaxRenderDistanceSquared() { return 65536.0D; } - - public boolean hasPower() { - return this.power >= 75_000; - } - - @Override - public boolean sendCommandPosition(int x, int y, int z) { - return this.launchToCoordinate(x, z) == BombReturnCode.LAUNCHED; - } - - @Override - public boolean sendCommandEntity(Entity target) { - return this.launchToEntity(target) == BombReturnCode.LAUNCHED; - } - - public BombReturnCode launchFromDesignator() { - if(slots[0] == null) return BombReturnCode.ERROR_MISSING_COMPONENT; - - boolean needsDesignator = missiles.containsKey(new ComparableStack(slots[0]).makeSingular()); - - int targetX = 0; - int targetZ = 0; - - if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) { - - IDesignatorItem designator = (IDesignatorItem) slots[1].getItem(); - - if(!designator.isReady(worldObj, slots[1], xCoord, yCoord, zCoord) && needsDesignator) return BombReturnCode.ERROR_MISSING_COMPONENT; - - Vec3 coords = designator.getCoords(worldObj, slots[1], xCoord, yCoord, zCoord); - targetX = (int) Math.floor(coords.xCoord); - targetZ = (int) Math.floor(coords.zCoord); - - } else { - if(needsDesignator) return BombReturnCode.ERROR_MISSING_COMPONENT; - } - - return this.launchToCoordinate(targetX, targetZ); - } - - public BombReturnCode launchToEntity(Entity entity) { - if(!hasPower()) return BombReturnCode.ERROR_MISSING_COMPONENT; - Entity e = instantiateMissile((int) Math.floor(entity.posX), (int) Math.floor(entity.posZ)); - if(e != null) { - - if(e instanceof EntityMissileAntiBallistic) { - EntityMissileAntiBallistic abm = (EntityMissileAntiBallistic) e; - abm.tracking = entity; - } - - finalizeLaunch(e); - return BombReturnCode.LAUNCHED; - } - return BombReturnCode.ERROR_MISSING_COMPONENT; - } - - public BombReturnCode launchToCoordinate(int targetX, int targetZ) { - if(!hasPower()) return BombReturnCode.ERROR_MISSING_COMPONENT; - Entity e = instantiateMissile(targetX, targetZ); - if(e != null) { - finalizeLaunch(e); - return BombReturnCode.LAUNCHED; - } - return BombReturnCode.ERROR_MISSING_COMPONENT; - } - - public Entity instantiateMissile(int targetX, int targetZ) { - - if(slots[0] == null) return null; - - if(slots[0].getItem() == ModItems.missile_carrier) { - EntityCarrier missile = new EntityCarrier(worldObj); - missile.posX = xCoord + 0.5F; - missile.posY = yCoord + 1F; - missile.posZ = zCoord + 0.5F; - if(slots[1] != null) { - missile.setPayload(slots[1]); - this.slots[1] = null; - } - worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:entity.rocketTakeoff", 100.0F, 1.0F); - return missile; - } - - Class clazz = this.missiles.get(new ComparableStack(slots[0]).makeSingular()); - - if(clazz != null) { - try { - EntityMissileBaseNT missile = clazz.getConstructor(World.class, float.class, float.class, float.class, int.class, int.class).newInstance(worldObj, xCoord + 0.5F, yCoord + 1F, zCoord + 0.5F, targetX, targetZ); - worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - if(GeneralConfig.enableExtendedLogging) MainRegistry.logger.log(Level.INFO, "[MISSILE] Tried to launch missile at " + xCoord + " / " + yCoord + " / " + zCoord + " to " + xCoord + " / " + zCoord + "!"); - return missile; - } catch(Exception e) { } - } - - if(slots[0].getItem() == ModItems.missile_anti_ballistic) { - EntityMissileAntiBallistic missile = new EntityMissileAntiBallistic(worldObj); - missile.posX = xCoord + 0.5F; - missile.posY = yCoord + 0.5F; - missile.posZ = zCoord + 0.5F; - worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - return missile; - } - - return null; - } - - public void finalizeLaunch(Entity missile) { - this.power -= 75_000; - worldObj.spawnEntityInWorld(missile); - this.decrStackSize(0, 1); - } - - // do some opencomputer stuff - @Override - public String getComponentName() { - return "launch_pad"; - } - - @Callback - @Optional.Method(modid = "OpenComputers") - public Object[] getEnergyInfo(Context context, Arguments args) { - return new Object[] {getPower(), getMaxPower()}; - } - - @Callback - @Optional.Method(modid = "OpenComputers") - public Object[] getCoords(Context context, Arguments args) { - if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) { - int xCoord2; - int zCoord2; - if (slots[1].stackTagCompound != null) { - xCoord2 = slots[1].stackTagCompound.getInteger("xCoord"); - zCoord2 = slots[1].stackTagCompound.getInteger("zCoord"); - } else - return new Object[] {false}; - - // Not sure if i should have this - /* - if(xCoord2 == xCoord && zCoord2 == zCoord) { - xCoord2 += 1; - } - */ - - return new Object[] {xCoord2, zCoord2}; - } - return new Object[] {false, "Designator not found"}; - } - @Callback - @Optional.Method(modid = "OpenComputers") - public Object[] setCoords(Context context, Arguments args) { - if (slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) { - slots[1].stackTagCompound = new NBTTagCompound(); - slots[1].stackTagCompound.setInteger("xCoord", args.checkInteger(0)); - slots[1].stackTagCompound.setInteger("zCoord", args.checkInteger(1)); - - return new Object[] {true}; - } - return new Object[] {false, "Designator not found"}; - } - - @Callback - @Optional.Method(modid = "OpenComputers") - public Object[] launch(Context context, Arguments args) { - ((LaunchPad) ModBlocks.launch_pad).explode(worldObj, xCoord, yCoord, zCoord); - return new Object[] {}; - } - - @Override - public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerLaunchPadTier1(player.inventory, this); - } - - @Override - @SideOnly(Side.CLIENT) - public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUILaunchPadTier1(player.inventory, this); - } } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index 6cc7d1a4b..b2e746207 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.bomb; +import java.util.HashMap; import java.util.HashSet; import java.util.Set; @@ -8,6 +9,31 @@ import org.apache.logging.log4j.Level; import com.hbm.config.GeneralConfig; import com.hbm.entity.missile.EntityMissileAntiBallistic; import com.hbm.entity.missile.EntityMissileBaseNT; +import com.hbm.entity.missile.EntityMissileDoomsday; +import com.hbm.entity.missile.EntityMissileShuttle; +import com.hbm.entity.missile.EntityMissileStealth; +import com.hbm.entity.missile.EntityMissileTier0.EntityMissileBHole; +import com.hbm.entity.missile.EntityMissileTier0.EntityMissileEMP; +import com.hbm.entity.missile.EntityMissileTier0.EntityMissileMicro; +import com.hbm.entity.missile.EntityMissileTier0.EntityMissileSchrabidium; +import com.hbm.entity.missile.EntityMissileTier0.EntityMissileTaint; +import com.hbm.entity.missile.EntityMissileTier1.EntityMissileBunkerBuster; +import com.hbm.entity.missile.EntityMissileTier1.EntityMissileCluster; +import com.hbm.entity.missile.EntityMissileTier1.EntityMissileDecoy; +import com.hbm.entity.missile.EntityMissileTier1.EntityMissileGeneric; +import com.hbm.entity.missile.EntityMissileTier1.EntityMissileIncendiary; +import com.hbm.entity.missile.EntityMissileTier2.EntityMissileBusterStrong; +import com.hbm.entity.missile.EntityMissileTier2.EntityMissileClusterStrong; +import com.hbm.entity.missile.EntityMissileTier2.EntityMissileEMPStrong; +import com.hbm.entity.missile.EntityMissileTier2.EntityMissileIncendiaryStrong; +import com.hbm.entity.missile.EntityMissileTier2.EntityMissileStrong; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileBurst; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileDrill; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileInferno; +import com.hbm.entity.missile.EntityMissileTier3.EntityMissileRain; +import com.hbm.entity.missile.EntityMissileTier4.EntityMissileMirv; +import com.hbm.entity.missile.EntityMissileTier4.EntityMissileNuclear; +import com.hbm.entity.missile.EntityMissileTier4.EntityMissileVolcano; import com.hbm.interfaces.IBomb.BombReturnCode; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.container.ContainerLaunchPadLarge; @@ -37,10 +63,49 @@ import net.minecraft.inventory.Container; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase implements IEnergyUser, IFluidStandardReceiver, IGUIProvider, IRadarCommandReceiver { + + /** Automatic instantiation of generic missiles, i.e. everything that both extends EntityMissileBaseNT and needs a designator */ + public static final HashMap> missiles = new HashMap(); + + public static void registerLaunchables() { + + //Tier 0 + missiles.put(new ComparableStack(ModItems.missile_micro), EntityMissileMicro.class); + missiles.put(new ComparableStack(ModItems.missile_schrabidium), EntityMissileSchrabidium.class); + missiles.put(new ComparableStack(ModItems.missile_bhole), EntityMissileBHole.class); + missiles.put(new ComparableStack(ModItems.missile_taint), EntityMissileTaint.class); + missiles.put(new ComparableStack(ModItems.missile_emp), EntityMissileEMP.class); + //Tier 1 + missiles.put(new ComparableStack(ModItems.missile_generic), EntityMissileGeneric.class); + missiles.put(new ComparableStack(ModItems.missile_decoy), EntityMissileDecoy.class); + missiles.put(new ComparableStack(ModItems.missile_incendiary), EntityMissileIncendiary.class); + missiles.put(new ComparableStack(ModItems.missile_cluster), EntityMissileCluster.class); + missiles.put(new ComparableStack(ModItems.missile_buster), EntityMissileBunkerBuster.class); + //Tier 2 + missiles.put(new ComparableStack(ModItems.missile_strong), EntityMissileStrong.class); + missiles.put(new ComparableStack(ModItems.missile_incendiary_strong), EntityMissileIncendiaryStrong.class); + missiles.put(new ComparableStack(ModItems.missile_cluster_strong), EntityMissileClusterStrong.class); + missiles.put(new ComparableStack(ModItems.missile_buster_strong), EntityMissileBusterStrong.class); + missiles.put(new ComparableStack(ModItems.missile_emp_strong), EntityMissileEMPStrong.class); + //Tier 3 + missiles.put(new ComparableStack(ModItems.missile_burst), EntityMissileBurst.class); + missiles.put(new ComparableStack(ModItems.missile_inferno), EntityMissileInferno.class); + missiles.put(new ComparableStack(ModItems.missile_rain), EntityMissileRain.class); + missiles.put(new ComparableStack(ModItems.missile_drill), EntityMissileDrill.class); + missiles.put(new ComparableStack(ModItems.missile_shuttle), EntityMissileShuttle.class); + //Tier 4 + missiles.put(new ComparableStack(ModItems.missile_nuclear), EntityMissileNuclear.class); + missiles.put(new ComparableStack(ModItems.missile_nuclear_cluster), EntityMissileMirv.class); + missiles.put(new ComparableStack(ModItems.missile_volcano), EntityMissileVolcano.class); + + missiles.put(new ComparableStack(ModItems.missile_doomsday), EntityMissileDoomsday.class); + missiles.put(new ComparableStack(ModItems.missile_stealth), EntityMissileStealth.class); + } public ItemStack toRender; @@ -233,21 +298,22 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl if(slots[0] == null) return null; - Class clazz = TileEntityLaunchPad.missiles.get(new ComparableStack(slots[0]).makeSingular()); + Class clazz = TileEntityLaunchPadBase.missiles.get(new ComparableStack(slots[0]).makeSingular()); if(clazz != null) { try { - EntityMissileBaseNT missile = clazz.getConstructor(World.class, float.class, float.class, float.class, int.class, int.class).newInstance(worldObj, xCoord + 0.5F, yCoord + 2F, zCoord + 0.5F, targetX, targetZ); + EntityMissileBaseNT missile = clazz.getConstructor(World.class, float.class, float.class, float.class, int.class, int.class).newInstance(worldObj, xCoord + 0.5F, yCoord + (float) getLaunchOffset() /* Position arguments need to be floats, jackass */, zCoord + 0.5F, targetX, targetZ); if(GeneralConfig.enableExtendedLogging) MainRegistry.logger.log(Level.INFO, "[MISSILE] Tried to launch missile at " + xCoord + " / " + yCoord + " / " + zCoord + " to " + xCoord + " / " + zCoord + "!"); + missile.getDataWatcher().updateObject(3, (byte) MathHelper.clamp_int(this.getBlockMetadata() - 10, 2, 5)); return missile; } catch(Exception e) { } } if(slots[0].getItem() == ModItems.missile_anti_ballistic) { EntityMissileAntiBallistic missile = new EntityMissileAntiBallistic(worldObj); - missile.posX = xCoord + 0.5F; - missile.posY = yCoord + 2F; - missile.posZ = zCoord + 0.5F; + missile.posX = xCoord + 0.5D; + missile.posY = yCoord + getLaunchOffset(); + missile.posZ = zCoord + 0.5D; return missile; } @@ -278,7 +344,6 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl int targetZ = 0; if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem) { - IDesignatorItem designator = (IDesignatorItem) slots[1].getItem(); if(!designator.isReady(worldObj, slots[1], xCoord, yCoord, zCoord) && needsDesignator) return BombReturnCode.ERROR_MISSING_COMPONENT; @@ -365,4 +430,5 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl /** Any extra conditions for launching in addition to the missile being valid and fueled */ public abstract boolean isReadyForLaunch(); + public abstract double getLaunchOffset(); } diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadLarge.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadLarge.java index 7b36f7791..2b6622bfe 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadLarge.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadLarge.java @@ -1,6 +1,6 @@ package com.hbm.tileentity.bomb; -import com.hbm.entity.missile.EntityMissileBaseNT; +import com.hbm.inventory.fluid.Fluids; import com.hbm.items.weapon.ItemMissile; import com.hbm.items.weapon.ItemMissile.MissileFormFactor; import com.hbm.main.MainRegistry; @@ -13,7 +13,6 @@ import api.hbm.fluid.IFluidStandardReceiver; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; -import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; @@ -43,10 +42,8 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements protected boolean liftMoving = false; protected boolean erectorMoving = false; - @Override - public boolean isReadyForLaunch() { - return this.erected && this.readyToLoad; - } + @Override public boolean isReadyForLaunch() { return this.erected && this.readyToLoad; } + @Override public double getLaunchOffset() { return 2D; } @Override public void updateEntity() { @@ -187,6 +184,43 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements this.audioErector = null; } } + + if(this.erected && this.hasFuel() && this.tanks[1].getTankType() == Fluids.OXYGEN) { + + //maybe too much? + /*if(this.formFactor == MissileFormFactor.ATLAS.ordinal() && worldObj.getTotalWorldTime() % 4 == 0) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.DOWN); + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", -5F); + data.setFloat("base", 0.25F); + data.setFloat("max", 0.5F); + data.setInteger("life", 30 + worldObj.rand.nextInt(10)); + data.setDouble("posX", xCoord + 0.5 - (dir.offsetX + rot.offsetX) * 0.5); + data.setDouble("posZ", zCoord + 0.5 - (dir.offsetZ + rot.offsetZ) * 0.5); + data.setDouble("posY", yCoord + 14.625); + data.setBoolean("noWind", true); + data.setFloat("alphaMod", 0.01F); + data.setFloat("strafe", 0.05F); + for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data); + }*/ + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "tower"); + data.setFloat("lift", 0F); + data.setFloat("base", 0.5F); + data.setFloat("max", 2F); + data.setInteger("life", 60 + worldObj.rand.nextInt(30)); + data.setDouble("posX", xCoord + 0.5); + data.setDouble("posZ", zCoord + 0.5); + data.setDouble("posY", yCoord + 2); + data.setBoolean("noWind", true); + data.setFloat("alphaMod", 2F); + data.setFloat("strafe", 0.05F); + for(int i = 0; i < 3; i++) MainRegistry.proxy.effectNT(data); + } } super.updateEntity(); @@ -244,17 +278,6 @@ public class TileEntityLaunchPadLarge extends TileEntityLaunchPadBase implements nbt.setInteger("formFactor", formFactor); } - public Entity instantiateMissile(int targetX, int targetZ) { - Entity missile = super.instantiateMissile(targetX, targetZ); - - if(missile instanceof EntityMissileBaseNT) { - EntityMissileBaseNT base = (EntityMissileBaseNT) missile; - base.getDataWatcher().updateObject(3, (byte) (this.getBlockMetadata() - 10)); - } - - return missile; - } - AxisAlignedBB bb = null; @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java index f31af3b06..be440a25c 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceBrick.java @@ -40,6 +40,8 @@ public class TileEntityFurnaceBrick extends TileEntityMachineBase implements IGU burnSpeed.put(Item.getItemFromBlock(Blocks.netherrack), 4); burnSpeed.put(Item.getItemFromBlock(Blocks.cobblestone), 2); burnSpeed.put(Item.getItemFromBlock(Blocks.sand), 2); + burnSpeed.put(Item.getItemFromBlock(Blocks.log), 2); + burnSpeed.put(Item.getItemFromBlock(Blocks.log2), 2); } public int burnTime;