diff --git a/changelog b/changelog index f7108e12f..82df3d70f 100644 --- a/changelog +++ b/changelog @@ -1,7 +1,6 @@ ##Added * CRTs and toasters * Decorative blocks that will spawn in upcoming dungeons -* Snow globes * Sentry turret "Edwin" * A broken down version of the sentry turret with infinite power and ammo * Will be found in the new silo structure diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 94c961f5e..43fa85e20 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1544,7 +1544,7 @@ public class ModBlocks { deco_loot = new BlockLoot().setBlockName("deco_loot").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); pedestal = new BlockPedestal().setBlockName("pedestal").setCreativeTab(null).setHardness(2.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":pedestal_top"); bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); - snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron"); + snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron"); hazmat = new BlockGeneric(Material.cloth).setBlockName("hazmat").setStepSound(Block.soundTypeCloth).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":hazmat"); gravel_obsidian = new BlockFalling(Material.iron).setBlockName("gravel_obsidian").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(5.0F).setResistance(240.0F).setBlockTextureName(RefStrings.MODID + ":gravel_obsidian"); diff --git a/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java b/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java index eec626d2c..2f2f29881 100644 --- a/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java +++ b/src/main/java/com/hbm/blocks/bomb/LaunchPadRusted.java @@ -1,12 +1,16 @@ package com.hbm.blocks.bomb; +import java.util.Random; + import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IBomb; import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @@ -28,6 +32,11 @@ public class LaunchPadRusted extends BlockDummyable implements IBomb { if(meta >= 12) return new TileEntityLaunchPadRusted(); return null; } + + @Override + public Item getItemDropped(int i, Random rand, int j) { + return null; + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 30d51c83c..35c6b1763 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -109,6 +109,7 @@ public class EntityMappings { addEntity(EntityMinecartTest.class, "entity_minecart_test", 1000); addEntity(EntitySparkBeam.class, "entity_spark_beam", 1000); addEntity(EntityMissileDoomsday.class, "entity_missile_doomsday", 1000); + addEntity(EntityMissileDoomsdayRusted.class, "entity_missile_doomsday_rusted", 1000); addEntity(EntityTSmokeFX.class, "entity_t_smoke_fx", 1000); addEntity(EntityNukeExplosionMK3.class, "entity_nuke_mk3", 1000); addEntity(EntityVortex.class, "entity_vortex", 250); diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java b/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java deleted file mode 100644 index 06c55969f..000000000 --- a/src/main/java/com/hbm/entity/missile/EntityMissileDoomsday.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.hbm.entity.missile; - -import java.util.List; - -import com.hbm.config.BombConfig; -import com.hbm.entity.effect.EntityNukeTorex; -import com.hbm.entity.logic.EntityNukeExplosionMK5; -import com.hbm.items.ModItems; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class EntityMissileDoomsday extends EntityMissileBaseNT { - - public EntityMissileDoomsday(World world) { - super(world); - } - - public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) { - super(world, x, y, z, a, b); - } - - @Override - public void onImpact() { - this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100)); - EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); - } - - @Override - protected void spawnContrail() { - - byte rot = this.dataWatcher.getWatchableObjectByte(3); - - Vec3 thrust = Vec3.createVectorHelper(0, 0, 1); - switch(rot) { - case 2: thrust.rotateAroundY((float) -Math.PI / 2F); break; - case 4: thrust.rotateAroundY((float) -Math.PI); break; - case 3: thrust.rotateAroundY((float) -Math.PI / 2F * 3F); break; - } - thrust.rotateAroundY((this.rotationYaw + 90) * (float) Math.PI / 180F); - thrust.rotateAroundX(this.rotationPitch * (float) Math.PI / 180F); - thrust.rotateAroundY(-(this.rotationYaw + 90) * (float) Math.PI / 180F); - - this.spawnContraolWithOffset(thrust.xCoord, thrust.yCoord, thrust.zCoord); - this.spawnContraolWithOffset(0, 0, 0); - this.spawnContraolWithOffset(-thrust.xCoord, -thrust.zCoord, -thrust.zCoord); - } - - @Override public List getDebris() { return null; } - @Override public ItemStack getDebrisRareDrop() { return null; } - @Override public String getUnlocalizedName() { return "radar.target.doomsday"; } - @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday); } -} diff --git a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java index 5e9f8472e..ea440d024 100644 --- a/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java +++ b/src/main/java/com/hbm/entity/missile/EntityMissileTier4.java @@ -103,4 +103,27 @@ public abstract class EntityMissileTier4 extends EntityMissileBaseNT { @Override public ItemStack getDebrisRareDrop() { return new ItemStack(ModItems.warhead_volcano); } @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_volcano); } } + + public static class EntityMissileDoomsday extends EntityMissileTier4 { + public EntityMissileDoomsday(World world) { super(world); } + public EntityMissileDoomsday(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } + @Override public void onImpact() { + this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius * 2, posX, posY, posZ).moreFallout(100)); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius * 2); + } + @Override public List getDebris() { return null; } + @Override public ItemStack getDebrisRareDrop() { return null; } + @Override public String getUnlocalizedName() { return "radar.target.doomsday"; } + @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday); } + } + + public static class EntityMissileDoomsdayRusted extends EntityMissileDoomsday { + public EntityMissileDoomsdayRusted(World world) { super(world); } + public EntityMissileDoomsdayRusted(World world, float x, float y, float z, int a, int b) { super(world, x, y, z, a, b); } + @Override public void onImpact() { + this.worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, BombConfig.missileRadius, posX, posY, posZ).moreFallout(100)); + EntityNukeTorex.statFac(worldObj, posX, posY, posZ, BombConfig.missileRadius); + } + @Override public ItemStack getMissileItemForInfo() { return new ItemStack(ModItems.missile_doomsday_rusted); } + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java b/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java index a69c5f4c1..fb829f26e 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java +++ b/src/main/java/com/hbm/inventory/container/ContainerLaunchPadRusted.java @@ -1,7 +1,10 @@ package com.hbm.inventory.container; +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.items.ModItems; import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; +import api.hbm.item.IDesignatorItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; @@ -13,6 +16,12 @@ public class ContainerLaunchPadRusted extends Container { private TileEntityLaunchPadRusted launchpad; public ContainerLaunchPadRusted(InventoryPlayer invPlayer, TileEntityLaunchPadRusted tedf) { + this.launchpad = tedf; + + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, tedf, 0, 26, 72)); + this.addSlotToContainer(new Slot(tedf, 1, 116, 45)); + this.addSlotToContainer(new Slot(tedf, 2, 134, 45)); + this.addSlotToContainer(new Slot(tedf, 3, 26, 99)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { @@ -27,7 +36,44 @@ public class ContainerLaunchPadRusted extends Container { @Override public ItemStack transferStackInSlot(EntityPlayer player, int par2) { - return null; + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(par2); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(par2 <= 3) { + if(!this.mergeItemStack(var5, 4, this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(var3.getItem() instanceof IDesignatorItem) { + if(!this.mergeItemStack(var5, 3, 4, false)) { + return null; + } + } else if(var3.getItem() == ModItems.launch_code) { + if(!this.mergeItemStack(var5, 1, 2, false)) { + return null; + } + } else if(var3.getItem() == ModItems.launch_key) { + if(!this.mergeItemStack(var5, 2, 3, false)) { + return null; + } + } else { + return null; + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + } + + return var3; } @Override diff --git a/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java index 2a4d6d626..a90bd4799 100644 --- a/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java +++ b/src/main/java/com/hbm/inventory/gui/GUILaunchPadRusted.java @@ -1,14 +1,28 @@ package com.hbm.inventory.gui; -import org.lwjgl.opengl.GL11; +import java.util.Random; +import java.util.function.Consumer; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.container.ContainerLaunchPadRusted; +import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; +import com.hbm.packet.NBTControlPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.item.ItemRenderMissileGeneric; import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; public class GUILaunchPadRusted extends GuiInfoContainer { @@ -27,6 +41,20 @@ public class GUILaunchPadRusted extends GuiInfoContainer { @Override public void drawScreen(int mouseX, int mouseY, float f) { super.drawScreen(mouseX, mouseY, f); + drawCustomInfoStat(mouseX, mouseY, guiLeft + 26, guiTop + 36, 16, 16, mouseX, mouseY, EnumChatFormatting.YELLOW + "Release Missile", "Missile is locked in lauch position,", "releasing may cause damage to the missile.", "Damaged missile can not be put back", "into launching position."); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 26 <= x && guiLeft + 26 + 16 > x && guiTop + 36 < y && guiTop + 36 + 16 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("release", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, launchpad.xCoord, launchpad.yCoord, launchpad.zCoord)); + } } @Override @@ -41,30 +69,33 @@ public class GUILaunchPadRusted extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + boolean hasCodes = launchpad.slots[1] != null && launchpad.slots[1].getItem() == ModItems.launch_code; + boolean hasKey = launchpad.slots[2] != null && launchpad.slots[2].getItem() == ModItems.launch_key; + + if(hasCodes) drawTexturedModalRect(guiLeft + 121, guiTop + 32, 192, 0, 6, 8); + if(hasKey) drawTexturedModalRect(guiLeft + 139, guiTop + 32, 192, 0, 6, 8); - /*if(launchpad.slots[0] != null) { - Consumer renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(launchpad.slots[0]).makeSingular()); + if(hasCodes && hasKey && launchpad.missileLoaded) { + + Random rand = new Random(launchpad.xCoord * 131_071 + launchpad.zCoord); + int launchCodes = rand.nextInt(100_000_000); + + for(int i = 0; i < 8; i++) { + int magnitude = (int) Math.pow(10, i); + int digit = (launchCodes % (magnitude * 10)) / magnitude; + drawTexturedModalRect(guiLeft + 109 + 6 * i, guiTop + 85, 192 + 6 * digit, 8, 6, 8); + } + } + + if(launchpad.missileLoaded) { + Consumer renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(ModItems.missile_doomsday_rusted).makeSingular()); if(renderer != null) { GL11.glPushMatrix(); GL11.glTranslatef(guiLeft + 70, guiTop + 120, 100); - double scale = 1D; - - if(launchpad.slots[0].getItem() instanceof ItemMissile) { - ItemMissile missile = (ItemMissile) launchpad.slots[0].getItem(); - switch(missile.formFactor) { - case ABM: scale = 1.45D; break; - case MICRO: scale = 2.5D; break; - case V2: scale = 1.75D; break; - case STRONG: scale = 1.375D; break; - case HUGE: scale = 0.925D; break; - case ATLAS: scale = 0.875D; break; - case OTHER: break; - } - if(missile == ModItems.missile_stealth) scale = 1.125D; - } - + double scale = 0.875D; GL11.glRotatef(90, 0, 1, 0); GL11.glScaled(scale, scale, scale); GL11.glScalef(-8, -8, -8); @@ -79,6 +110,6 @@ public class GUILaunchPadRusted extends GuiInfoContainer { GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } - }*/ + } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index badd7a22b..4814e8b11 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1327,6 +1327,7 @@ public class ModItems { public static Item missile_nuclear_cluster; public static Item missile_volcano; public static Item missile_doomsday; + public static Item missile_doomsday_rusted; public static Item missile_taint; public static Item missile_micro; public static Item missile_bhole; @@ -3956,6 +3957,7 @@ public class ModItems { missile_nuclear_cluster = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_nuclear_cluster").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_nuclear_cluster"); missile_volcano = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_volcano").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_volcano"); missile_doomsday = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).setUnlocalizedName("missile_doomsday").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); + missile_doomsday_rusted = new ItemMissile(MissileFormFactor.ATLAS, MissileTier.TIER4).notLaunchable().setUnlocalizedName("missile_doomsday_rusted").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_doomsday"); missile_taint = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_taint").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_taint"); missile_micro = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_micro").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_micro"); missile_bhole = new ItemMissile(MissileFormFactor.MICRO, MissileTier.TIER0).setUnlocalizedName("missile_bhole").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":missile_bhole"); @@ -6919,6 +6921,7 @@ public class ModItems { GameRegistry.registerItem(missile_nuclear_cluster, missile_nuclear_cluster.getUnlocalizedName()); GameRegistry.registerItem(missile_volcano, missile_volcano.getUnlocalizedName()); GameRegistry.registerItem(missile_doomsday, missile_doomsday.getUnlocalizedName()); + GameRegistry.registerItem(missile_doomsday_rusted, missile_doomsday_rusted.getUnlocalizedName()); //Rockets GameRegistry.registerItem(missile_carrier, missile_carrier.getUnlocalizedName()); GameRegistry.registerItem(missile_soyuz, missile_soyuz.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/ItemMissile.java b/src/main/java/com/hbm/items/weapon/ItemMissile.java index 74ac62c42..692750516 100644 --- a/src/main/java/com/hbm/items/weapon/ItemMissile.java +++ b/src/main/java/com/hbm/items/weapon/ItemMissile.java @@ -14,6 +14,7 @@ public class ItemMissile extends ItemCustomLore { public final MissileTier tier; public final MissileFuel fuel; public int fuelCap; + public boolean launchable = true; public ItemMissile(MissileFormFactor form, MissileTier tier) { this(form, tier, form.defaultFuel); @@ -26,6 +27,11 @@ public class ItemMissile extends ItemCustomLore { this.setFuelCap(this.fuel.defaultCap); } + public ItemMissile notLaunchable() { + this.launchable = false; + return this; + } + public ItemMissile setFuelCap(int fuelCap) { this.fuelCap = fuelCap; return this; @@ -34,9 +40,14 @@ public class ItemMissile extends ItemCustomLore { @Override public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { list.add(EnumChatFormatting.ITALIC + this.tier.display); - list.add("Fuel: " + this.fuel.display); - if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB"); - super.addInformation(itemstack, player, list, bool); + + if(!this.launchable) { + list.add(EnumChatFormatting.RED + "Not launchable!"); + } else { + list.add("Fuel: " + this.fuel.display); + if(this.fuelCap > 0) list.add("Fuel capacity: " + this.fuelCap + "mB"); + super.addInformation(itemstack, player, list, bool); + } } public enum MissileFormFactor { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 0fac4f2f1..e04fcf3bf 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -326,6 +326,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCore.class, new RenderCore()); //missile blocks ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPad.class, new RenderLaunchPad()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPadRusted.class, new RenderLaunchPadRusted()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchPadLarge.class, new RenderLaunchPadLarge()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMissileAssembly.class, new RenderMissileAssembly()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompactLauncher.class, new RenderCompactLauncher()); @@ -447,6 +448,7 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.missile_nuclear_cluster, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); MinecraftForgeClient.registerItemRenderer(ModItems.missile_volcano, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); + MinecraftForgeClient.registerItemRenderer(ModItems.missile_doomsday_rusted, new ItemRenderMissileGeneric(RenderMissileType.TYPE_NUCLEAR)); MinecraftForgeClient.registerItemRenderer(ModItems.missile_carrier, new ItemRenderMissileGeneric(RenderMissileType.TYPE_CARRIER)); MinecraftForgeClient.registerItemRenderer(ModItems.missile_shuttle, new ItemRenderMissileGeneric(RenderMissileType.TYPE_ROBIN)); @@ -712,6 +714,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityMissileVolcano.class, new RenderMissileNuclear()); RenderingRegistry.registerEntityRenderingHandler(EntityMIRV.class, new RenderMirv()); RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsday.class, new RenderMissileNuclear()); + RenderingRegistry.registerEntityRenderingHandler(EntityMissileDoomsdayRusted.class, new RenderMissileNuclear()); RenderingRegistry.registerEntityRenderingHandler(EntityCarrier.class, new RenderCarrierMissile()); RenderingRegistry.registerEntityRenderingHandler(EntityBooster.class, new RenderBoosterMissile()); RenderingRegistry.registerEntityRenderingHandler(EntitySoyuz.class, new RenderSoyuz()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 8559cc901..c021fe722 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -1126,6 +1126,14 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rbmk_cooler, 1), new Object[] { "IGI", "GCG", "IGI", 'C', ModBlocks.rbmk_blank, 'I', ModItems.plate_polymer, 'G', ModBlocks.steel_grate }); } + addShapelessAuto(new ItemStack(ModItems.launch_code), new Object[] { + new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece), + new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece), + new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece), + new ItemStack(ModItems.launch_code_piece), new ItemStack(ModItems.launch_code_piece), + new ItemStack(ModItems.circuit_aluminium) + }); + addShapelessAuto(ModItems.circuit_star_component.stackFromEnum(CircuitComponentType.CHIPSET), new Object[] { ModItems.circuit_star_piece.stackFromEnum(ScrapType.BRIDGE_BIOS), ModItems.circuit_star_piece.stackFromEnum(ScrapType.BRIDGE_BUS), diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 4f472a6d3..ebbfc9671 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -325,6 +325,7 @@ public class ModEventHandler { if(event.entityLiving instanceof IMob) { if(event.entityLiving.getRNG().nextInt(1000) == 0) event.entityLiving.dropItem(ModItems.heart_piece, 1); if(event.entityLiving.getRNG().nextInt(250) == 0) event.entityLiving.dropItem(ModItems.key_red_cracked, 1); + if(event.entityLiving.getRNG().nextInt(250) == 0) event.entityLiving.dropItem(ModItems.launch_code_piece, 1); } if(event.entityLiving instanceof EntityCyberCrab && event.entityLiving.getRNG().nextInt(500) == 0) { diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 87085aba0..f02a8f479 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1230,6 +1230,7 @@ public class ResourceManager { public static final ResourceLocation missileMIRV_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_thermo.png"); public static final ResourceLocation missileVolcano_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_tectonic.png"); public static final ResourceLocation missileDoomsday_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_doomsday.png"); + public static final ResourceLocation missileDoomsdayRusted_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_atlas_doomsday_weathered.png"); public static final ResourceLocation missileTaint_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_micro_taint.png"); public static final ResourceLocation missileShuttle_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missileShuttle.png"); public static final ResourceLocation missileMicro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/missile_micro.png"); @@ -1296,6 +1297,7 @@ public class ResourceManager { //Missile Parts public static final ResourceLocation missile_pad_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/silo.png"); + public static final ResourceLocation missile_pad_rusted_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/silo_rusted.png"); public static final ResourceLocation missile_erector_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/pad.png"); public static final ResourceLocation missile_erector_micro_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/erector_micro.png"); public static final ResourceLocation missile_erector_v2_tex = new ResourceLocation(RefStrings.MODID, "textures/models/launchpad/erector_v2.png"); diff --git a/src/main/java/com/hbm/render/entity/rocket/RenderMissileNuclear.java b/src/main/java/com/hbm/render/entity/rocket/RenderMissileNuclear.java index 8a8adc589..51abf8cd7 100644 --- a/src/main/java/com/hbm/render/entity/rocket/RenderMissileNuclear.java +++ b/src/main/java/com/hbm/render/entity/rocket/RenderMissileNuclear.java @@ -3,10 +3,7 @@ package com.hbm.render.entity.rocket; import org.lwjgl.opengl.GL11; import com.hbm.entity.missile.EntityMissileBaseNT; -import com.hbm.entity.missile.EntityMissileDoomsday; -import com.hbm.entity.missile.EntityMissileTier4.EntityMissileMirv; -import com.hbm.entity.missile.EntityMissileTier4.EntityMissileNuclear; -import com.hbm.entity.missile.EntityMissileTier4.EntityMissileVolcano; +import com.hbm.entity.missile.EntityMissileTier4.*; import com.hbm.main.ResourceManager; import net.minecraft.client.renderer.entity.Render; @@ -36,6 +33,7 @@ public class RenderMissileNuclear extends Render { if(entity instanceof EntityMissileNuclear) bindTexture(ResourceManager.missileNuclear_tex); if(entity instanceof EntityMissileMirv) bindTexture(ResourceManager.missileMIRV_tex); if(entity instanceof EntityMissileDoomsday) bindTexture(ResourceManager.missileDoomsday_tex); + if(entity instanceof EntityMissileDoomsdayRusted) bindTexture(ResourceManager.missileDoomsdayRusted_tex); if(entity instanceof EntityMissileVolcano) bindTexture(ResourceManager.missileVolcano_tex); GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java b/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java index d38d09a86..08bbe24d0 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java +++ b/src/main/java/com/hbm/render/item/ItemRenderMissileGeneric.java @@ -165,6 +165,7 @@ public class ItemRenderMissileGeneric implements IItemRenderer { renderers.put(new ComparableStack(ModItems.missile_nuclear_cluster), generateStandard(ResourceManager.missileMIRV_tex, ResourceManager.missileNuclear)); renderers.put(new ComparableStack(ModItems.missile_volcano), generateStandard(ResourceManager.missileVolcano_tex, ResourceManager.missileNuclear)); renderers.put(new ComparableStack(ModItems.missile_doomsday), generateStandard(ResourceManager.missileDoomsday_tex, ResourceManager.missileNuclear)); + renderers.put(new ComparableStack(ModItems.missile_doomsday_rusted), generateStandard(ResourceManager.missileDoomsdayRusted_tex, ResourceManager.missileNuclear)); renderers.put(new ComparableStack(ModItems.missile_carrier), x -> { GL11.glScalef(2F, 2F, 2F); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLaunchPadRusted.java b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadRusted.java new file mode 100644 index 000000000..3b0dec424 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderLaunchPadRusted.java @@ -0,0 +1,72 @@ +package com.hbm.render.tileentity; + +import java.util.function.Consumer; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.items.ModItems; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.render.item.ItemRenderMissileGeneric; +import com.hbm.tileentity.bomb.TileEntityLaunchPadRusted; + +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderLaunchPadRusted extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + 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_rusted_tex); + ResourceManager.missile_pad.renderAll(); + + if(tileEntity instanceof TileEntityLaunchPadRusted) { + TileEntityLaunchPadRusted launchpad = (TileEntityLaunchPadRusted) tileEntity; + if(launchpad.missileLoaded) { + GL11.glTranslated(0, 1, 0); + Consumer renderer = ItemRenderMissileGeneric.renderers.get(new ComparableStack(ModItems.missile_doomsday_rusted).makeSingular()); + if(renderer != null) renderer.accept(this.field_147501_a.field_147553_e); + } + } + + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.launch_pad_rusted); + } + + @Override + public IItemRenderer getRenderer() { + + return new ItemRenderBase() { + @Override public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(3, 3, 3); + } + @Override public void renderCommon() { + bindTexture(ResourceManager.missile_pad_rusted_tex); ResourceManager.missile_pad.renderAll(); + }}; + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index ece9edd78..6ca6430d1 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -73,6 +73,7 @@ public class TileMappings { put(TileEntityRedBarrel.class, "tileentity_barrel"); put(TileEntityYellowBarrel.class, "tileentity_nukebarrel"); put(TileEntityLaunchPad.class, "tileentity_launch1"); + put(TileEntityLaunchPadRusted.class, "tileentity_launchpad_rusted"); put(TileEntityLaunchPadLarge.class, "tileentity_launchpad_large"); put(TileEntityDecoBlock.class, "tileentity_deco"); put(TileEntityDecoBlockAltW.class, "tileentity_deco_w"); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java index 81b2573c8..5fc986444 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadBase.java @@ -85,8 +85,8 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl 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); } @@ -307,7 +307,7 @@ public abstract class TileEntityLaunchPadBase extends TileEntityMachineBase impl } public boolean isMissileValid(ItemStack stack) { - return stack.getItem() instanceof ItemMissile; + return stack.getItem() instanceof ItemMissile && ((ItemMissile) stack.getItem()).launchable; } public boolean hasFuel() { diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java index ae6320306..c5c5db0bd 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchPadRusted.java @@ -1,25 +1,37 @@ package com.hbm.tileentity.bomb; import java.util.HashSet; +import java.util.List; import java.util.Set; +import com.hbm.entity.missile.EntityMissileBaseNT; +import com.hbm.entity.missile.EntityMissileTier4.EntityMissileDoomsdayRusted; import com.hbm.interfaces.IBomb.BombReturnCode; +import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerLaunchPadRusted; import com.hbm.inventory.gui.GUILaunchPadRusted; +import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.TrackerUtil; import com.hbm.util.fauxpointtwelve.BlockPos; +import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements IGUIProvider { +public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements IGUIProvider, IControlReceiver { public int prevRedstonePower; public int redstonePower; @@ -28,7 +40,7 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements public boolean missileLoaded; public TileEntityLaunchPadRusted() { - super(3); + super(4); } @Override @@ -39,15 +51,77 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements @Override public void updateEntity() { + if(!worldObj.isRemote) { + + if(this.redstonePower > 0 && this.prevRedstonePower <= 0) { + this.launch(); + } + + this.prevRedstonePower = this.redstonePower; + this.networkPackNT(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++) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + if(worldObj.rand.nextBoolean()) dir = dir.getOpposite(); + if(worldObj.rand.nextBoolean()) dir = dir.getRotation(ForgeDirection.UP); + float moX = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetX; + float moZ = (float) (worldObj.rand.nextGaussian() * 0.15F + 0.75) * dir.offsetZ; + + MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25, zCoord + 0.5, "launchsmoke", new float[] {moX, 0, moZ}); + } + } + } + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeBoolean(this.missileLoaded); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.missileLoaded = buf.readBoolean(); } public BombReturnCode launch() { - return BombReturnCode.UNDEFINED; + + if(slots[1] != null && slots[2] != null && slots[3] != null && this.missileLoaded) { + if(slots[1].getItem() == ModItems.launch_code && slots[2].getItem() == ModItems.launch_key) { + if(slots[3] != null && slots[3].getItem() instanceof IDesignatorItem) { + IDesignatorItem designator = (IDesignatorItem) slots[3].getItem(); + + if(!designator.isReady(worldObj, slots[3], xCoord, yCoord, zCoord)) return BombReturnCode.ERROR_MISSING_COMPONENT; + + Vec3 coords = designator.getCoords(worldObj, slots[3], xCoord, yCoord, zCoord); + int targetX = (int) Math.floor(coords.xCoord); + int targetZ = (int) Math.floor(coords.zCoord); + + EntityMissileDoomsdayRusted missile = new EntityMissileDoomsdayRusted(worldObj, xCoord + 0.5F, yCoord + 1F, zCoord + 0.5F, targetX, targetZ); + worldObj.spawnEntityInWorld(missile); + TrackerUtil.setTrackingRange(worldObj, missile, 500); + worldObj.playSoundEffect(xCoord + 0.5, yCoord, zCoord + 0.5, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); + this.missileLoaded = false; + this.decrStackSize(1, 1); + this.markDirty(); + } + } + } + + return BombReturnCode.ERROR_MISSING_COMPONENT; } @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); + + this.missileLoaded = nbt.getBoolean("missileLoaded"); this.redstonePower = nbt.getInteger("redstonePower"); this.prevRedstonePower = nbt.getInteger("prevRedstonePower"); @@ -61,6 +135,8 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); + + nbt.setBoolean("missileLoaded", missileLoaded); nbt.setInteger("redstonePower", redstonePower); nbt.setInteger("prevRedstonePower", prevRedstonePower); @@ -129,4 +205,20 @@ public class TileEntityLaunchPadRusted extends TileEntityMachineBase implements public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUILaunchPadRusted(player.inventory, this); } + + @Override + public boolean hasPermission(EntityPlayer player) { + return this.isUseableByPlayer(player); + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("release")) { + if(this.missileLoaded && slots[0] == null) { + this.missileLoaded = false; + slots[0] = new ItemStack(ModItems.missile_doomsday_rusted); + this.markDirty(); + } + } + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 870e4e4bc..fafa793a2 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -347,6 +347,7 @@ container.hydrotreater=Hydrotreater container.iGenerator=Industrieller Generator container.keyForge=Schlossertisch container.launchPad=Startrampe +container.launchPadRusted=Startrampe container.launchTable=Große Startrampe container.leadBox=Sicherheitsbehälter container.machineArcWelder=Lichtbogenschweißer @@ -2245,6 +2246,9 @@ item.laser_crystal_co2.name=CO2-Desh-Laserkristall item.laser_crystal_digamma.name=Digamma-Laserkristall item.laser_crystal_dnt.desc=Dineutronium-Spark Fermion Superkristall item.laser_crystal_dnt.name=Spark-Laserkristall +item.launch_code.name=Silo-Startcode +item.launch_code_piece.name=Silo-Startcodestück +item.launch_key.name=Silo-Startschlüssel item.lead_gavel.name=Bleierner Richterhammer item.lemon.name="Zitrone" item.letter.name=Eilbrief diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 8856440c5..52fe31da3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -706,6 +706,7 @@ container.hydrotreater=Hydrotreater container.iGenerator=Industrial Generator container.keyForge=Locksmith Table container.launchPad=Launch Pad +container.launchPadRusted=Launch Pad container.launchTable=Large Launch Pad container.leadBox=Containment Box container.machineArcWelder=Arc Welder @@ -2996,6 +2997,9 @@ item.laser_crystal_co2.name=CO2-Desh Laser Crystal item.laser_crystal_digamma.name=Digamma Laser Crystal item.laser_crystal_dnt.desc=Dineutronium-Spark Fermion Supercrystal item.laser_crystal_dnt.name=Spark Laser Crystal +item.launch_code.name=Silo Launch Code +item.launch_code_piece.name=Silo Launch Code Piece +item.launch_key.name=Silo Launch Key item.lead_gavel.name=Leaden Gavel item.lemon.name="Lemon" item.letter.name=Express Mail diff --git a/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png b/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png index 97741eba5..a08cd9b97 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png and b/src/main/resources/assets/hbm/textures/gui/weapon/gui_launch_pad_rusted.png differ diff --git a/src/main/resources/assets/hbm/textures/items/launch_code.png b/src/main/resources/assets/hbm/textures/items/launch_code.png index ef5db0f47..a6dad0a9e 100644 Binary files a/src/main/resources/assets/hbm/textures/items/launch_code.png and b/src/main/resources/assets/hbm/textures/items/launch_code.png differ