From 14304fceb8e6fc845721ba7b13c82a84428749d5 Mon Sep 17 00:00:00 2001 From: Blood-Asp Date: Mon, 17 Oct 2016 12:37:13 +0200 Subject: [PATCH] Exploding GT machines now drop randomly some of their crafting components. --- .../metatileentity/BaseMetaTileEntity.java | 52 +++++++++++-------- .../loaders/misc/GT_Achievements.java | 2 +- 2 files changed, 31 insertions(+), 23 deletions(-) diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index fbfdb1a5..0823d913 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1092,7 +1092,6 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE @Override public void doExplosion(long aAmount) { - System.out.println("doExplosion"); if (canAccessData()) { // This is only for Electric Machines if (GregTech_API.sMachineWireFire && mMetaTileEntity.isElectric()) { @@ -1105,35 +1104,44 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE // Normal Explosion Code mMetaTileEntity.onExplosion(); if(GT_Mod.gregtechproxy.mExplosionItemDrop){ - Random tRandom = new Random(); for (int i = 0; i < this.getSizeInventory(); i++) { ItemStack tItem = this.getStackInSlot(i); - System.out.println("getInventory: "+i); if ((tItem != null) && (tItem.stackSize > 0) && (this.isValidSlot(i))) { - EntityItem tItemEntity = new EntityItem(this.worldObj, this.xCoord + tRandom.nextFloat() * 0.8F + 0.1F, this.yCoord + tRandom.nextFloat() * 0.8F + 0.1F, this.zCoord + tRandom.nextFloat() * 0.8F + 0.1F, new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); - if (tItem.hasTagCompound()) { - tItemEntity.getEntityItem().setTagCompound((NBTTagCompound) tItem.getTagCompound().copy()); - } - tItemEntity.motionX = (tRandom.nextGaussian() * 0.0500000007450581D); - tItemEntity.motionY = (tRandom.nextGaussian() * 0.0500000007450581D + 0.2000000029802322D); - tItemEntity.motionZ = (tRandom.nextGaussian() * 0.0500000007450581D); - tItemEntity.hurtResistantTime = 999999; - tItemEntity.lifespan = 60000; - try { - Field tField = tItemEntity.getClass().getDeclaredField("health"); - tField.setAccessible(true); - tField.setInt(tItemEntity, 99999999); - } catch (Exception e) {e.printStackTrace();} - this.worldObj.spawnEntityInWorld(tItemEntity); - System.out.println("spawnItem: "+tItemEntity.getEntityItem().getDisplayName()); - tItem.stackSize = 0; - this.setInventorySlotContents(i, null); + dropItems(tItem); + this.setInventorySlotContents(i, null); } + } + } + if (mRecipeStuff != null) { + for (int i = 0; i < 9; i++) { + if (this.getRandomNumber(100) < 50) { + dropItems(GT_Utility.loadItem(mRecipeStuff, "Ingredient." + i)); } - } + } } mMetaTileEntity.doExplosion(aAmount); } } + + public void dropItems(ItemStack tItem){ + if(tItem==null)return; + Random tRandom = new Random(); + EntityItem tItemEntity = new EntityItem(this.worldObj, this.xCoord + tRandom.nextFloat() * 0.8F + 0.1F, this.yCoord + tRandom.nextFloat() * 0.8F + 0.1F, this.zCoord + tRandom.nextFloat() * 0.8F + 0.1F, new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + if (tItem.hasTagCompound()) { + tItemEntity.getEntityItem().setTagCompound((NBTTagCompound) tItem.getTagCompound().copy()); + } + tItemEntity.motionX = (tRandom.nextGaussian() * 0.0500000007450581D); + tItemEntity.motionY = (tRandom.nextGaussian() * 0.0500000007450581D + 0.2000000029802322D); + tItemEntity.motionZ = (tRandom.nextGaussian() * 0.0500000007450581D); + tItemEntity.hurtResistantTime = 999999; + tItemEntity.lifespan = 60000; + try { + Field tField = tItemEntity.getClass().getDeclaredField("health"); + tField.setAccessible(true); + tField.setInt(tItemEntity, 99999999); + } catch (Exception e) {e.printStackTrace();} + this.worldObj.spawnEntityInWorld(tItemEntity); + tItem.stackSize = 0; + } @Override public ArrayList getDrops() { diff --git a/src/main/java/gregtech/loaders/misc/GT_Achievements.java b/src/main/java/gregtech/loaders/misc/GT_Achievements.java index a8b08d67..981048cd 100644 --- a/src/main/java/gregtech/loaders/misc/GT_Achievements.java +++ b/src/main/java/gregtech/loaders/misc/GT_Achievements.java @@ -486,7 +486,7 @@ public class GT_Achievements { return; } ItemData data = GT_OreDictUnificator.getItemData(stack); - if (data != null) { + if (data != null && data.mPrefix!=null) { if (data.mPrefix == OrePrefixes.dust) { if (data.mMaterial.mMaterial == Materials.Lutetium) { issueAchievement(player, "newmetal");