diff --git a/assets/hbm/textures/gui/gui_soyuz_capsule.png b/assets/hbm/textures/gui/gui_soyuz_capsule.png new file mode 100644 index 000000000..d5d1c4cfc Binary files /dev/null and b/assets/hbm/textures/gui/gui_soyuz_capsule.png differ diff --git a/assets/hbm/textures/items/ammo_357_desh.png b/assets/hbm/textures/items/ammo_357_desh.png index 1161087ca..899238a09 100644 Binary files a/assets/hbm/textures/items/ammo_357_desh.png and b/assets/hbm/textures/items/ammo_357_desh.png differ diff --git a/assets/hbm/textures/items/gun_revolver_ammo.png b/assets/hbm/textures/items/gun_revolver_ammo.png index f3547c6df..77b64a54e 100644 Binary files a/assets/hbm/textures/items/gun_revolver_ammo.png and b/assets/hbm/textures/items/gun_revolver_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_cursed_ammo.png b/assets/hbm/textures/items/gun_revolver_cursed_ammo.png index 0b2aa0496..d55664661 100644 Binary files a/assets/hbm/textures/items/gun_revolver_cursed_ammo.png and b/assets/hbm/textures/items/gun_revolver_cursed_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_gold_ammo.png b/assets/hbm/textures/items/gun_revolver_gold_ammo.png index 57576c192..fe6b25154 100644 Binary files a/assets/hbm/textures/items/gun_revolver_gold_ammo.png and b/assets/hbm/textures/items/gun_revolver_gold_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_iron_ammo.png b/assets/hbm/textures/items/gun_revolver_iron_ammo.png index 31c7e7244..bc25af3a4 100644 Binary files a/assets/hbm/textures/items/gun_revolver_iron_ammo.png and b/assets/hbm/textures/items/gun_revolver_iron_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_lead_ammo.png b/assets/hbm/textures/items/gun_revolver_lead_ammo.png index 8c74373b0..a123c6987 100644 Binary files a/assets/hbm/textures/items/gun_revolver_lead_ammo.png and b/assets/hbm/textures/items/gun_revolver_lead_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_nightmare_ammo.png b/assets/hbm/textures/items/gun_revolver_nightmare_ammo.png index d532c72b9..75fc19a3b 100644 Binary files a/assets/hbm/textures/items/gun_revolver_nightmare_ammo.png and b/assets/hbm/textures/items/gun_revolver_nightmare_ammo.png differ diff --git a/assets/hbm/textures/items/gun_revolver_schrabidium_ammo.png b/assets/hbm/textures/items/gun_revolver_schrabidium_ammo.png index 818621466..e3e19703d 100644 Binary files a/assets/hbm/textures/items/gun_revolver_schrabidium_ammo.png and b/assets/hbm/textures/items/gun_revolver_schrabidium_ammo.png differ diff --git a/com/hbm/blocks/ModBlocks.java b/com/hbm/blocks/ModBlocks.java index 2f8a446f0..ab6e14f02 100644 --- a/com/hbm/blocks/ModBlocks.java +++ b/com/hbm/blocks/ModBlocks.java @@ -282,6 +282,9 @@ public class ModBlocks { public static Block sat_dock; public static final int guiID_dock = 80; + + public static Block soyuz_capsule; + public static final int guiID_capsule = 93; public static Block crate_iron; public static final int guiID_crate_iron = 46; @@ -1159,6 +1162,7 @@ public class ModBlocks { sat_resonator = new DecoBlock(Material.iron).setBlockName("sat_resonator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":sat_resonator"); sat_dock = new MachineSatDock(Material.iron).setBlockName("sat_dock").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":sat_dock"); + soyuz_capsule = new SoyuzCapsule(Material.iron).setBlockName("soyuz_capsule").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":soyuz_capsule"); turret_light = new TurretLight(Material.iron).setBlockName("turret_light").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":turret_light"); turret_heavy = new TurretHeavy(Material.iron).setBlockName("turret_heavy").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.weaponTab).setBlockTextureName(RefStrings.MODID + ":turret_heavy"); @@ -1800,6 +1804,7 @@ public class ModBlocks { GameRegistry.registerBlock(launch_table, launch_table.getUnlocalizedName()); GameRegistry.registerBlock(soyuz_launcher, soyuz_launcher.getUnlocalizedName()); GameRegistry.registerBlock(sat_dock, sat_dock.getUnlocalizedName()); + GameRegistry.registerBlock(soyuz_capsule, soyuz_capsule.getUnlocalizedName()); GameRegistry.registerBlock(machine_radar, machine_radar.getUnlocalizedName()); //Guide diff --git a/com/hbm/blocks/machine/GeigerCounter.java b/com/hbm/blocks/machine/GeigerCounter.java index 388eebec3..1daa1b1ee 100644 --- a/com/hbm/blocks/machine/GeigerCounter.java +++ b/com/hbm/blocks/machine/GeigerCounter.java @@ -123,11 +123,11 @@ public class GeigerCounter extends BlockContainer { { world.playSoundAtEntity(player, "hbm:item.techBoop", 1.0F, 1.0F); - int eRad = (int)player.getEntityData().getFloat("hfr_radiation"); + double eRad = ((int)(player.getEntityData().getFloat("hfr_radiation") * 10)) / 10D; RadiationSavedData data = RadiationSavedData.getData(player.worldObj); Chunk chunk = world.getChunkFromBlockCoords((int)player.posX, (int)player.posZ); - int rads = (int)Math.ceil(data.getRadNumFromCoord(chunk.xPosition, chunk.zPosition)); + double rads = ((int)(data.getRadNumFromCoord(chunk.xPosition, chunk.zPosition) * 10)) / 10D; player.addChatMessage(new ChatComponentText("Current chunk radiation: " + rads + " RAD/s")); player.addChatMessage(new ChatComponentText("Player contamination: " + eRad + " RAD")); diff --git a/com/hbm/blocks/machine/SoyuzCapsule.java b/com/hbm/blocks/machine/SoyuzCapsule.java new file mode 100644 index 000000000..915cabafa --- /dev/null +++ b/com/hbm/blocks/machine/SoyuzCapsule.java @@ -0,0 +1,108 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.main.MainRegistry; +import com.hbm.tileentity.machine.TileEntitySoyuzCapsule; + +import cpw.mods.fml.common.network.internal.FMLNetworkHandler; +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.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class SoyuzCapsule extends BlockContainer { + + public SoyuzCapsule(Material p_i45386_1_) { + super(p_i45386_1_); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntitySoyuzCapsule(); + } + + @Override + public int getRenderType(){ + return -1; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @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()) + { + + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_capsule, world, x, y, z); + + return true; + } else { + return false; + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) + { + IInventory tileentityfurnace = (IInventory) world.getTileEntity(x, y, z); + Random rand = world.rand; + + if (tileentityfurnace != null) { + for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { + ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); + + if (itemstack != null) { + float f = rand.nextFloat() * 0.8F + 0.1F; + float f1 = rand.nextFloat() * 0.8F + 0.1F; + float f2 = rand.nextFloat() * 0.8F + 0.1F; + + while (itemstack.stackSize > 0) { + int j1 = rand.nextInt(21) + 10; + + if (j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } + + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + 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) rand.nextGaussian() * f3; + entityitem.motionY = (float) rand.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) rand.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } + + world.func_147453_f(x, y, z, block); + } + + super.breakBlock(world, x, y, z, block, meta); + } + +} diff --git a/com/hbm/entity/missile/EntityBobmazon.java b/com/hbm/entity/missile/EntityBobmazon.java index 989c66391..63f605ba4 100644 --- a/com/hbm/entity/missile/EntityBobmazon.java +++ b/com/hbm/entity/missile/EntityBobmazon.java @@ -1,10 +1,10 @@ package com.hbm.entity.missile; import com.hbm.explosion.ExplosionLarge; -import com.hbm.packet.AuxParticlePacket; -import com.hbm.packet.PacketDispatcher; +import com.hbm.main.MainRegistry; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.item.EntityItem; @@ -40,17 +40,22 @@ public class EntityBobmazon extends Entity { for(int i = 0; i < 4; i++) { - if(!this.worldObj.isRemote && i % 2 == 0) - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacket(posX, posY + 1, posZ, 2), new TargetPoint(worldObj.provider.dimensionId, posX, posY + 1, posZ, 300)); - if(worldObj.getBlock((int)(posX - 0.5), (int)(posY + 1), (int)(posZ - 0.5)).getMaterial() != Material.air && !worldObj.isRemote && dataWatcher.getWatchableObjectInt(16) != 1) { - this.setDead(); - ExplosionLarge.spawnParticles(worldObj, posX, posY, posZ, 50); + ExplosionLarge.spawnParticles(worldObj, posX, posY + 1, posZ, 50); this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:entity.oldExplosion", 10.0F, 0.5F + this.rand.nextFloat() * 0.1F); - if(payload != null) - worldObj.spawnEntityInWorld(new EntityItem(worldObj, posX, posY + 2, posZ, payload)); + if(payload != null) { + EntityItem pack = new EntityItem(worldObj, posX, posY + 2, posZ, payload); + pack.motionX = 0; + pack.motionZ = 0; + if(!worldObj.spawnEntityInWorld(pack)) + System.out.println("BBBBBBBBBBB"); + } else { + System.out.println("AAAAAAAAAAAA"); + } + + this.setDead(); break; } @@ -59,12 +64,43 @@ public class EntityBobmazon extends Entity { this.posY += this.motionY; this.posZ += this.motionZ; } + + if(worldObj.isRemote) { + + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "exhaust"); + data.setString("mode", "meteor"); + data.setInteger("count", 1); + data.setDouble("width", 0); + data.setDouble("posX", posX); + data.setDouble("posY", posY + 1); + data.setDouble("posZ", posZ); + + MainRegistry.proxy.effectNT(data); + } } @Override - protected void readEntityFromNBT(NBTTagCompound nbt) { } + protected void readEntityFromNBT(NBTTagCompound nbt) { + + NBTTagCompound nbt1 = (NBTTagCompound)nbt.getTag("payload"); + this.payload = ItemStack.loadItemStackFromNBT(nbt1); + } @Override - protected void writeEntityToNBT(NBTTagCompound nbt) { } + protected void writeEntityToNBT(NBTTagCompound nbt) { + + NBTTagCompound nbt1 = new NBTTagCompound(); + payload.writeToNBT(nbt1); + nbt.setTag("payload", nbt1); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 500000; + } } diff --git a/com/hbm/entity/missile/EntitySoyuz.java b/com/hbm/entity/missile/EntitySoyuz.java index 83ebe1863..47b894ae2 100644 --- a/com/hbm/entity/missile/EntitySoyuz.java +++ b/com/hbm/entity/missile/EntitySoyuz.java @@ -11,11 +11,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; public class EntitySoyuz extends Entity { double acceleration = 0.00D; public int mode; + public int targetX; + public int targetZ; private ItemStack[] payload; @@ -76,6 +79,23 @@ public class EntitySoyuz extends Entity { } + if(mode == 1) { + + EntitySoyuzCapsule capsule = new EntitySoyuzCapsule(worldObj); + capsule.payload = this.payload; + capsule.soyuz = this.getSkin(); + capsule.setPosition(targetX + 0.5, 600, targetZ + 0.5); + System.out.println(capsule.posX + " " + capsule.posZ); + + IChunkProvider provider = worldObj.getChunkProvider(); + provider.loadChunk(targetX >> 4, targetZ >> 4); + + if(worldObj.spawnEntityInWorld(capsule)) + System.out.println("Success!"); + else + System.out.println("Crap."); + } + this.setDead(); } @@ -114,6 +134,11 @@ public class EntitySoyuz extends Entity { public void readEntityFromNBT(NBTTagCompound nbt) { NBTTagList list = nbt.getTagList("items", 10); + + this.setSkin(nbt.getInteger("skin")); + targetX = nbt.getInteger("targetX"); + targetZ = nbt.getInteger("targetZ"); + mode = nbt.getInteger("mode"); for (int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); @@ -129,6 +154,11 @@ public class EntitySoyuz extends Entity { NBTTagList list = new NBTTagList(); + nbt.setInteger("skin", this.getSkin()); + nbt.setInteger("targetX", targetX); + nbt.setInteger("targetZ", targetZ); + nbt.setInteger("mode", mode); + for (int i = 0; i < payload.length; i++) { if (payload[i] != null) { NBTTagCompound nbt1 = new NBTTagCompound(); diff --git a/com/hbm/entity/missile/EntitySoyuzCapsule.java b/com/hbm/entity/missile/EntitySoyuzCapsule.java new file mode 100644 index 000000000..f0321c8ea --- /dev/null +++ b/com/hbm/entity/missile/EntitySoyuzCapsule.java @@ -0,0 +1,107 @@ +package com.hbm.entity.missile; + +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; +import com.hbm.tileentity.machine.TileEntitySoyuzCapsule; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EntitySoyuzCapsule extends EntityThrowable { + + public int soyuz; + public ItemStack[] payload = new ItemStack[18]; + + public EntitySoyuzCapsule(World p_i1582_1_) { + super(p_i1582_1_); + this.ignoreFrustumCheck = true; + this.isImmuneToFire = true; + } + + @Override + public void onUpdate() { + + this.lastTickPosX = this.prevPosX = posX; + this.lastTickPosY = this.prevPosY = posY; + this.lastTickPosZ = this.prevPosZ = posZ; + this.setPosition(posX + this.motionX, posY + this.motionY, posZ + this.motionZ); + + if(this.motionY > -0.2) + this.motionY -= 0.02; + + if(posY > 600) + posY = 600; + + if(this.worldObj.getBlock((int)this.posX, (int)this.posY, (int)this.posZ) != Blocks.air) { + + this.setDead(); + + if(!worldObj.isRemote) { + worldObj.setBlock((int)(this.posX), (int)(this.posY + 1), (int)(this.posZ), ModBlocks.soyuz_capsule); + + TileEntitySoyuzCapsule capsule = (TileEntitySoyuzCapsule)worldObj.getTileEntity((int)(this.posX), (int)(this.posY + 1), (int)(this.posZ)); + if(capsule != null) { + + for(int i = 0; i < payload.length; i++) { + capsule.setInventorySlotContents(i, payload[i]); + } + } + + capsule.setInventorySlotContents(18, new ItemStack(ModItems.missile_soyuz, 1, soyuz)); + } + } + } + + @Override + protected void onImpact(MovingObjectPosition p_70184_1_) { + + } + + @Override + @SideOnly(Side.CLIENT) + public boolean isInRangeToRenderDist(double distance) + { + return distance < 500000; + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) { + + NBTTagList list = nbt.getTagList("items", 10); + + soyuz = nbt.getInteger("soyuz"); + + for (int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if (b0 >= 0 && b0 < payload.length) { + payload[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) { + + NBTTagList list = new NBTTagList(); + + nbt.setInteger("soyuz", soyuz); + + for (int i = 0; i < payload.length; i++) { + if (payload[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte) i); + payload[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } +} diff --git a/com/hbm/handler/GUIHandler.java b/com/hbm/handler/GUIHandler.java index 71e2c8b92..d72ce4973 100644 --- a/com/hbm/handler/GUIHandler.java +++ b/com/hbm/handler/GUIHandler.java @@ -831,6 +831,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_capsule: + { + if(entity instanceof TileEntitySoyuzCapsule) + { + return new ContainerSoyuzCapsule(player.inventory, (TileEntitySoyuzCapsule) entity); + } + return null; + } } } else { //NON-TE CONTAINERS @@ -1661,6 +1670,15 @@ public class GUIHandler implements IGuiHandler { } return null; } + + case ModBlocks.guiID_capsule: + { + if(entity instanceof TileEntitySoyuzCapsule) + { + return new GUISoyuzCapsule(player.inventory, (TileEntitySoyuzCapsule) entity); + } + return null; + } } } else { //CLIENTONLY GUIS diff --git a/com/hbm/inventory/container/ContainerCoreEmitter.java b/com/hbm/inventory/container/ContainerCoreEmitter.java index 79e8dd3ca..e8eeaec85 100644 --- a/com/hbm/inventory/container/ContainerCoreEmitter.java +++ b/com/hbm/inventory/container/ContainerCoreEmitter.java @@ -48,4 +48,4 @@ public class ContainerCoreEmitter extends Container { return var3; } -} +} \ No newline at end of file diff --git a/com/hbm/inventory/container/ContainerSoyuzCapsule.java b/com/hbm/inventory/container/ContainerSoyuzCapsule.java new file mode 100644 index 000000000..60e689f7c --- /dev/null +++ b/com/hbm/inventory/container/ContainerSoyuzCapsule.java @@ -0,0 +1,81 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.TileEntitySoyuzCapsule; + +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 ContainerSoyuzCapsule extends Container { + + private TileEntitySoyuzCapsule diFurnace; + + public ContainerSoyuzCapsule(InventoryPlayer invPlayer, TileEntitySoyuzCapsule tedf) { + diFurnace = tedf; + + for(int i = 0; i < 3; i++) + { + for(int j = 0; j < 6; j++) + { + this.addSlotToContainer(new Slot(tedf, j + i * 6, 8 + j * 18 + 18 * 2, 17 + i * 18)); + } + } + + this.addSlotToContainer(new Slot(tedf, 18, 8, 35)); + + 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 <= diFurnace.getSizeInventory() - 1) { + if (!this.mergeItemStack(var5, diFurnace.getSizeInventory(), this.inventorySlots.size(), true)) + { + return null; + } + } + else if (!this.mergeItemStack(var5, 0, diFurnace.getSizeInventory(), false)) + { + 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/com/hbm/inventory/gui/GUICoreEmitter.java b/com/hbm/inventory/gui/GUICoreEmitter.java index 38e90334e..65c040037 100644 --- a/com/hbm/inventory/gui/GUICoreEmitter.java +++ b/com/hbm/inventory/gui/GUICoreEmitter.java @@ -77,7 +77,7 @@ public class GUICoreEmitter extends GuiInfoContainer { @Override protected void drawGuiContainerForegroundLayer( int i, int j) { - String name = this.emitter.hasCustomInventoryName() ? this.emitter.getInventoryName() : I18n.format(this.emitter.getInventoryName()); + String name = I18n.format(this.emitter.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString("Output: " + Library.getShortNumber(emitter.prev) + "Spk", 50, 30, 0xFF7F7F); diff --git a/com/hbm/inventory/gui/GUISoyuzCapsule.java b/com/hbm/inventory/gui/GUISoyuzCapsule.java new file mode 100644 index 000000000..e880738c4 --- /dev/null +++ b/com/hbm/inventory/gui/GUISoyuzCapsule.java @@ -0,0 +1,42 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerSoyuzCapsule; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntitySoyuzCapsule; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUISoyuzCapsule extends GuiContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_soyuz_capsule.png"); + private TileEntitySoyuzCapsule diFurnace; + + public GUISoyuzCapsule(InventoryPlayer invPlayer, TileEntitySoyuzCapsule tedf) { + super(new ContainerSoyuzCapsule(invPlayer, tedf)); + diFurnace = tedf; + + this.xSize = 176; + this.ySize = 168; + } + + @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); + } +} diff --git a/com/hbm/items/tool/ItemGeigerCounter.java b/com/hbm/items/tool/ItemGeigerCounter.java index 22c629f8f..6a3ec1435 100644 --- a/com/hbm/items/tool/ItemGeigerCounter.java +++ b/com/hbm/items/tool/ItemGeigerCounter.java @@ -91,6 +91,7 @@ public class ItemGeigerCounter extends Item { public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int i, float f0, float f1, float f2) { if(world.getBlock(x, y, z) == ModBlocks.block_red_copper) { + world.func_147480_a(x, y, z, false); player.inventory.consumeInventoryItem(ModItems.geiger_counter); player.inventory.addItemStackToInventory(new ItemStack(ModItems.survey_scanner)); return true; @@ -105,11 +106,11 @@ public class ItemGeigerCounter extends Item { if(!world.isRemote) { world.playSoundAtEntity(player, "hbm:item.techBoop", 1.0F, 1.0F); - int eRad = (int)player.getEntityData().getFloat("hfr_radiation"); + double eRad = ((int)(player.getEntityData().getFloat("hfr_radiation") * 10)) / 10D; RadiationSavedData data = RadiationSavedData.getData(player.worldObj); Chunk chunk = world.getChunkFromBlockCoords((int)player.posX, (int)player.posZ); - int rads = (int)Math.ceil(data.getRadNumFromCoord(chunk.xPosition, chunk.zPosition)); + double rads = ((int)(data.getRadNumFromCoord(chunk.xPosition, chunk.zPosition) * 10)) / 10D; player.addChatMessage(new ChatComponentText("Current chunk radiation: " + rads + " RAD/s")); player.addChatMessage(new ChatComponentText("Player contamination: " + eRad + " RAD")); diff --git a/com/hbm/main/ClientProxy.java b/com/hbm/main/ClientProxy.java index 85b6f24b1..bc753878f 100644 --- a/com/hbm/main/ClientProxy.java +++ b/com/hbm/main/ClientProxy.java @@ -102,6 +102,7 @@ import com.hbm.render.entity.rocket.RenderMissileStrong; import com.hbm.render.entity.rocket.RenderMissileTaint; import com.hbm.render.entity.rocket.RenderMissileThermo; import com.hbm.render.entity.rocket.RenderSoyuz; +import com.hbm.render.entity.rocket.RenderSoyuzCapsule; import com.hbm.render.item.*; import com.hbm.render.loader.HmfModelLoader; import com.hbm.render.tileentity.*; @@ -405,6 +406,7 @@ public class ClientProxy extends ServerProxy ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCompactLauncher.class, new RenderCompactLauncher()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaunchTable.class, new RenderLaunchTable()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySoyuzLauncher.class, new RenderSoyuzLauncher()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySoyuzCapsule.class, new RenderCapsule()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCable.class, new RenderCable()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityOilDuct.class, new RenderOilDuct()); @@ -459,6 +461,7 @@ public class ClientProxy extends ServerProxy RenderingRegistry.registerEntityRenderingHandler(EntityCarrier.class, new RenderCarrierMissile()); RenderingRegistry.registerEntityRenderingHandler(EntityBooster.class, new RenderBoosterMissile()); RenderingRegistry.registerEntityRenderingHandler(EntitySoyuz.class, new RenderSoyuz()); + RenderingRegistry.registerEntityRenderingHandler(EntitySoyuzCapsule.class, new RenderSoyuzCapsule()); RenderingRegistry.registerEntityRenderingHandler(EntityBomber.class, new RenderBomber()); RenderingRegistry.registerEntityRenderingHandler(EntityBurningFOEQ.class, new RenderFOEQ()); RenderingRegistry.registerEntityRenderingHandler(EntityFallingNuke.class, new RenderFallingNuke()); diff --git a/com/hbm/main/MainRegistry.java b/com/hbm/main/MainRegistry.java index 41a966b5c..8bd3dc879 100644 --- a/com/hbm/main/MainRegistry.java +++ b/com/hbm/main/MainRegistry.java @@ -542,6 +542,7 @@ public class MainRegistry GameRegistry.registerTileEntity(TileEntityTesla.class, "tileentity_tesla_coil"); GameRegistry.registerTileEntity(TileEntityBarrel.class, "tileentity_fluid_barrel"); GameRegistry.registerTileEntity(TileEntityCyberCrab.class, "tileentity_crabs"); + GameRegistry.registerTileEntity(TileEntitySoyuzCapsule.class, "tileentity_soyuz_capsule"); EntityRegistry.registerModEntity(EntityRocket.class, "entity_rocket", 0, this, 250, 1, true); EntityRegistry.registerModEntity(EntityNukeExplosion.class, "entity_nuke_explosion", 1, this, 250, 1, true); @@ -688,6 +689,7 @@ public class MainRegistry EntityRegistry.registerModEntity(EntityTomBlast.class, "entity_tom_bust", 142, this, 1000, 1, true); EntityRegistry.registerModEntity(EntityBuilding.class, "entity_falling_building", 143, this, 1000, 1, true); EntityRegistry.registerModEntity(EntitySoyuz.class, "entity_soyuz", 144, this, 1000, 1, true); + EntityRegistry.registerModEntity(EntitySoyuzCapsule.class, "entity_soyuz_capsule", 145, this, 1000, 1, true); EntityRegistry.registerGlobalEntityID(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x204131, 0x75CE00); EntityRegistry.registerGlobalEntityID(EntityTaintedCreeper.class, "entity_mob_tainted_creeper", EntityRegistry.findGlobalUniqueEntityId(), 0x813b9b, 0xd71fdd); diff --git a/com/hbm/main/ModEventHandler.java b/com/hbm/main/ModEventHandler.java index 4d5be4e29..26f11ebb5 100644 --- a/com/hbm/main/ModEventHandler.java +++ b/com/hbm/main/ModEventHandler.java @@ -283,8 +283,11 @@ public class ModEventHandler if(eRad < 200 || entity instanceof EntityNuclearCreeper || entity instanceof EntityMooshroom || entity instanceof EntityZombie || entity instanceof EntitySkeleton) continue; + if(eRad > 2500) + entity.getEntityData().setFloat("hfr_radiation", 2500); + if(eRad >= 1000) { - if(entity.attackEntityFrom(ModDamageSource.radiation, 1000)) + if(entity.attackEntityFrom(ModDamageSource.radiation, entity.getMaxHealth() * 100)) entity.getEntityData().setFloat("hfr_radiation", 0); } else if(eRad >= 800) { if(event.world.rand.nextInt(300) == 0) diff --git a/com/hbm/packet/ItemBobmazonPacket.java b/com/hbm/packet/ItemBobmazonPacket.java index 27195ffae..8e9047038 100644 --- a/com/hbm/packet/ItemBobmazonPacket.java +++ b/com/hbm/packet/ItemBobmazonPacket.java @@ -97,7 +97,7 @@ public class ItemBobmazonPacket implements IMessage { bob.posX = p.posX + rand.nextGaussian() * 10; bob.posY = 300; bob.posZ = p.posZ + rand.nextGaussian() * 10; - bob.payload = stack; + bob.payload = stack.copy(); world.spawnEntityInWorld(bob); } else { diff --git a/com/hbm/packet/NBTPacket.java b/com/hbm/packet/NBTPacket.java index bf80ddcfa..8d60abf61 100644 --- a/com/hbm/packet/NBTPacket.java +++ b/com/hbm/packet/NBTPacket.java @@ -3,6 +3,7 @@ package com.hbm.packet; import java.io.IOException; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.tileentity.TileEntityTickingBase; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; @@ -74,17 +75,16 @@ public class NBTPacket implements IMessage { TileEntity te = Minecraft.getMinecraft().theWorld.getTileEntity(m.x, m.y, m.z); - if(!(te instanceof TileEntityMachineBase)) - return null; - - TileEntityMachineBase base = (TileEntityMachineBase)te; - try { NBTTagCompound nbt = m.buffer.readNBTTagCompoundFromBuffer(); - if(nbt != null) - base.networkUnpack(nbt); + if(nbt != null) { + if(te instanceof TileEntityMachineBase) + ((TileEntityMachineBase) te).networkUnpack(nbt); + if(te instanceof TileEntityTickingBase) + ((TileEntityTickingBase) te).networkUnpack(nbt); + } } catch (IOException e) { e.printStackTrace(); diff --git a/com/hbm/render/entity/rocket/RenderSoyuzCapsule.java b/com/hbm/render/entity/rocket/RenderSoyuzCapsule.java new file mode 100644 index 000000000..ebd19fa44 --- /dev/null +++ b/com/hbm/render/entity/rocket/RenderSoyuzCapsule.java @@ -0,0 +1,44 @@ +package com.hbm.render.entity.rocket; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderSoyuzCapsule extends Render { + + @Override + public void doRender(Entity entity, double x, double y, double z, float i, float j) { + + GL11.glPushMatrix(); + + GL11.glTranslated(x, y, z); + + double time = (entity.worldObj.getTotalWorldTime()); + double sine = Math.sin(time * 0.05) * 5; + double sin3 = Math.sin(time * 0.05 + Math.PI * 0.5) * 5; + int height = 7; + GL11.glTranslated(0.0F, height, 0.0F); + GL11.glRotated(sine, 0, 0, 1); + GL11.glRotated(sin3, 1, 0, 0); + GL11.glTranslated(0.0F, -height, 0.0F); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.soyuz_lander_tex); + ResourceManager.soyuz_lander.renderPart("Capsule"); + bindTexture(ResourceManager.soyuz_chute_tex); + ResourceManager.soyuz_lander.renderPart("Chute"); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity p_110775_1_) { + return ResourceManager.soyuz_lander_tex; + } +} diff --git a/com/hbm/render/tileentity/RenderCapsule.java b/com/hbm/render/tileentity/RenderCapsule.java new file mode 100644 index 000000000..b4c9de24a --- /dev/null +++ b/com/hbm/render/tileentity/RenderCapsule.java @@ -0,0 +1,32 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderCapsule extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float i) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glTranslatef(0.0F, -0.25F, 0.0F); + GL11.glRotatef(-25, 0, 1, 0); + GL11.glRotatef(15, 0, 0, 1); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.soyuz_lander_tex); + ResourceManager.soyuz_lander.renderPart("Capsule"); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + +} diff --git a/com/hbm/render/tileentity/RendererObjTester.java b/com/hbm/render/tileentity/RendererObjTester.java index 2827f24a5..609dcd76f 100644 --- a/com/hbm/render/tileentity/RendererObjTester.java +++ b/com/hbm/render/tileentity/RendererObjTester.java @@ -4,7 +4,6 @@ import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; -import com.hbm.render.util.SoyuzPronter; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/com/hbm/tileentity/TileEntityInventoryBase.java b/com/hbm/tileentity/TileEntityInventoryBase.java new file mode 100644 index 000000000..4278443fe --- /dev/null +++ b/com/hbm/tileentity/TileEntityInventoryBase.java @@ -0,0 +1,167 @@ +package com.hbm.tileentity; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; + +public abstract class TileEntityInventoryBase extends TileEntity implements ISidedInventory { + + public ItemStack slots[]; + + private String customName; + + public TileEntityInventoryBase(int scount) { + slots = new ItemStack[scount]; + } + + @Override + public int getSizeInventory() { + return slots.length; + } + + @Override + public ItemStack getStackInSlot(int i) { + return slots[i]; + } + + @Override + public ItemStack getStackInSlotOnClosing(int i) { + if(slots[i] != null) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } else { + return null; + } + } + + @Override + public void setInventorySlotContents(int i, ItemStack itemStack) { + slots[i] = itemStack; + if(itemStack != null && itemStack.stackSize > getInventoryStackLimit()) + { + itemStack.stackSize = getInventoryStackLimit(); + } + } + + @Override + public String getInventoryName() { + return this.hasCustomInventoryName() ? this.customName : getName(); + } + + public abstract String getName(); + + @Override + public boolean hasCustomInventoryName() { + return this.customName != null && this.customName.length() > 0; + } + + public void setCustomName(String name) { + this.customName = name; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) + { + return false; + }else{ + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=128; + } + } + + @Override + public void openInventory() {} + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return false; + } + + @Override + public ItemStack decrStackSize(int i, int j) { + if(slots[i] != null) + { + if(slots[i].stackSize <= j) + { + ItemStack itemStack = slots[i]; + slots[i] = null; + return itemStack; + } + ItemStack itemStack1 = slots[i].splitStack(j); + if (slots[i].stackSize == 0) + { + slots[i] = null; + } + + return itemStack1; + } else { + return null; + } + } + + @Override + public boolean canInsertItem(int i, ItemStack itemStack, int j) { + return this.isItemValidForSlot(i, itemStack); + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return new int[] { 0 }; + } + + @Override + public boolean canUpdate() { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + NBTTagList list = nbt.getTagList("items", 10); + + for(int i = 0; i < list.tagCount(); i++) + { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) + { + slots[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < slots.length; i++) + { + if(slots[i] != null) + { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte)i); + slots[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("items", list); + } +} diff --git a/com/hbm/tileentity/TileEntityTickingBase.java b/com/hbm/tileentity/TileEntityTickingBase.java new file mode 100644 index 000000000..43bae557a --- /dev/null +++ b/com/hbm/tileentity/TileEntityTickingBase.java @@ -0,0 +1,35 @@ +package com.hbm.tileentity; + +import com.hbm.packet.NBTPacket; +import com.hbm.packet.PacketDispatcher; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.FluidTank; + +public abstract class TileEntityTickingBase extends TileEntity { + + public TileEntityTickingBase() { } + + public abstract String getInventoryName(); + + public int getGaugeScaled(int i, FluidTank tank) { + return tank.getFluidAmount() * i / tank.getCapacity(); + } + + //abstracting this method forces child classes to implement it + //so i don't have to remember the fucking method name + //was it update? onUpdate? updateTile? did it have any args? + //shit i don't know man + @Override + public abstract void updateEntity(); + + public void networkPack(NBTTagCompound nbt, int range) { + + if(!worldObj.isRemote) + PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + } + + public void networkUnpack(NBTTagCompound nbt) { } +} diff --git a/com/hbm/tileentity/machine/TileEntitySoyuzCapsule.java b/com/hbm/tileentity/machine/TileEntitySoyuzCapsule.java new file mode 100644 index 000000000..39ac64ed5 --- /dev/null +++ b/com/hbm/tileentity/machine/TileEntitySoyuzCapsule.java @@ -0,0 +1,16 @@ +package com.hbm.tileentity.machine; + +import com.hbm.tileentity.TileEntityInventoryBase; + +public class TileEntitySoyuzCapsule extends TileEntityInventoryBase { + + public TileEntitySoyuzCapsule() { + super(19); + } + + @Override + public String getName() { + return "container.soyuzCapsule"; + } + +} diff --git a/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 69644276b..0087c35a3 100644 --- a/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -117,15 +117,6 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS if(!entities.isEmpty()) { - //for(int i = 0; i < 35; i++) { - - //Vec3 vec = Vec3.createVectorHelper(worldObj.rand.nextGaussian() * 0.5 + 1, 0, 0); - //vec.rotateAroundY(worldObj.rand.nextFloat() * (float) (Math.PI * 2)); - - //MainRegistry.proxy.spawnParticle(xCoord + 0.5, yCoord + 0.25 + worldObj.rand.nextFloat() * 3, zCoord + 0.5, "launchsmoke", new float[] {(float) vec.xCoord, 0, (float) vec.zCoord}); - - //} - NBTTagCompound data = new NBTTagCompound(); data.setString("type", "smoke"); data.setString("mode", "shockRand"); @@ -170,6 +161,7 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS EntitySoyuz soyuz = new EntitySoyuz(worldObj); soyuz.setSkin(this.getType()); + soyuz.mode = this.mode; soyuz.setLocationAndAngles(xCoord + 0.5, yCoord + 5, zCoord + 0.5, 0, 0); worldObj.spawnEntityInWorld(soyuz); @@ -189,7 +181,9 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS payload.add(slots[i]); slots[i] = null; } - + + soyuz.targetX = slots[1].stackTagCompound.getInteger("xCoord"); + soyuz.targetZ = slots[1].stackTagCompound.getInteger("zCoord"); soyuz.setPayload(payload); }