From b6be3e87ff5aaf2b677589bd590c8d842bbe8d3f Mon Sep 17 00:00:00 2001 From: Arthur Uzulin Date: Mon, 18 Nov 2013 18:11:22 +1100 Subject: [PATCH] Achievement stuffs - Implemented 'Dual Convenience' achievement --- resources/assets/tinker/lang/en_US.lang | 6 ++-- .../achievementIcons/dualConvenience.png | Bin 0 -> 5469 bytes src/tconstruct/blocks/logic/FrypanLogic.java | 2 +- src/tconstruct/common/TContent.java | 3 +- src/tconstruct/inventory/FrypanContainer.java | 14 ++++---- src/tconstruct/inventory/SlotFrypan.java | 30 ++++++++++++++++++ src/tconstruct/items/TitleIcon.java | 2 +- src/tconstruct/util/TEventHandler.java | 22 +++++++++++-- 8 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 resources/assets/tinker/textures/items/achievementIcons/dualConvenience.png create mode 100644 src/tconstruct/inventory/SlotFrypan.java diff --git a/resources/assets/tinker/lang/en_US.lang b/resources/assets/tinker/lang/en_US.lang index 2fbfdb43..9aab17f2 100644 --- a/resources/assets/tinker/lang/en_US.lang +++ b/resources/assets/tinker/lang/en_US.lang @@ -571,7 +571,7 @@ achievement.tconstruct.proTinkerer=Pro Tinkerer achievement.tconstruct.smelteryMaker=Smeltery Creator achievement.tconstruct.preparedFight=Prepared to Fight achievement.tconstruct.enemySlayer=Enemy Slayer -achievement.tconstruct.convenientDuo=Convenient Duo(NYI) +achievement.tconstruct.dualConvenience=Dual Convenience achievement.tconstruct.beginner.desc=Open the "Materials and You" manual achievement.tconstruct.pattern.desc=Craft your first blank pattern @@ -579,5 +579,5 @@ achievement.tconstruct.tinkerer.desc=Create your first tool achievement.tconstruct.proTinkerer.desc=Craft your first tier 2 tool achievement.tconstruct.smelteryMaker.desc=Craft a smeltery component achievement.tconstruct.preparedFight.desc=Create your first weapon -achievement.tconstruct.enemySlayer.desc=Slay an enemy -achievement.tconstruct.convenientDuo=Kill an enemy with a frying pan, and then cook their meat in it +achievement.tconstruct.enemySlayer.desc=Slay a mob +achievement.tconstruct.dualConvenience.desc=Kill a mob with a frying pan, and then cook their meat in it diff --git a/resources/assets/tinker/textures/items/achievementIcons/dualConvenience.png b/resources/assets/tinker/textures/items/achievementIcons/dualConvenience.png new file mode 100644 index 0000000000000000000000000000000000000000..e5ec5ae2f72db9aaff78a24504ae97b2031fdad9 GIT binary patch literal 5469 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 M+{6Y~iM^EYKNX@Mh5!Hn literal 0 HcmV?d00001 diff --git a/src/tconstruct/blocks/logic/FrypanLogic.java b/src/tconstruct/blocks/logic/FrypanLogic.java index 69042dbd..dcbaba5d 100644 --- a/src/tconstruct/blocks/logic/FrypanLogic.java +++ b/src/tconstruct/blocks/logic/FrypanLogic.java @@ -287,7 +287,7 @@ public class FrypanLogic extends EquipLogic implements IActiveLogic @Override public Container getGuiContainer (InventoryPlayer inventoryplayer, World world, int x, int y, int z) { - return new FrypanContainer(inventoryplayer, this); + return new FrypanContainer(inventoryplayer.player, this); } /*@Override diff --git a/src/tconstruct/common/TContent.java b/src/tconstruct/common/TContent.java index ccc7ba0e..aea73ca9 100644 --- a/src/tconstruct/common/TContent.java +++ b/src/tconstruct/common/TContent.java @@ -2415,8 +2415,9 @@ public class TContent implements IFuelHandler achievements.put("tconstruct.pattern", new Achievement(2002, "tconstruct.pattern", 2, 1, blankPattern, achievements.get("tconstruct.beginner")).registerAchievement()); achievements.put("tconstruct.tinkerer", new Achievement(2003, "tconstruct.tinkerer", 2, 2, new ItemStack(titleIcon, 1, 4096), achievements.get("tconstruct.pattern")).registerAchievement()); achievements.put("tconstruct.preparedFight", new Achievement(2004, "tconstruct.preparedFight", 1, 3, new ItemStack(titleIcon, 1, 4097), achievements.get("tconstruct.tinkerer")).registerAchievement()); - achievements.put("tconstruct.proTinkerer", new Achievement(2005, "tconstruct.proTinkerer", 4, 3, new ItemStack(titleIcon, 1, 4098), achievements.get("tconstruct.tinkerer")).setSpecial().registerAchievement()); + achievements.put("tconstruct.proTinkerer", new Achievement(2005, "tconstruct.proTinkerer", 4, 4, new ItemStack(titleIcon, 1, 4098), achievements.get("tconstruct.tinkerer")).setSpecial().registerAchievement()); achievements.put("tconstruct.smelteryMaker", new Achievement(2006, "tconstruct.smelteryMaker", -2, -1, smeltery, achievements.get("tconstruct.beginner")).registerAchievement()); achievements.put("tconstruct.enemySlayer", new Achievement(2007, "tconstruct.enemySlayer", 0, 5, new ItemStack(titleIcon, 1, 4099), achievements.get("tconstruct.preparedFight")).registerAchievement()); + achievements.put("tconstruct.dualConvenience", new Achievement(2008, "tconstruct.dualConvenience", 0, 7, new ItemStack(titleIcon, 1, 4100), achievements.get("tconstruct.enemySlayer")).setSpecial().registerAchievement()); } } diff --git a/src/tconstruct/inventory/FrypanContainer.java b/src/tconstruct/inventory/FrypanContainer.java index 09f9f4eb..9d39308d 100644 --- a/src/tconstruct/inventory/FrypanContainer.java +++ b/src/tconstruct/inventory/FrypanContainer.java @@ -1,12 +1,9 @@ package tconstruct.inventory; -import tconstruct.blocks.logic.FrypanLogic; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.inventory.Slot; +import net.minecraft.entity.player.*; +import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; +import tconstruct.blocks.logic.FrypanLogic; public class FrypanContainer extends Container { @@ -15,13 +12,14 @@ public class FrypanContainer extends Container public int fuel = 0; public int fuelGague = 0; - public FrypanContainer(InventoryPlayer inventoryplayer, FrypanLogic frypan) + public FrypanContainer(EntityPlayer player, FrypanLogic frypan) { + InventoryPlayer inventoryplayer = player.inventory; logic = frypan; this.addSlotToContainer(new Slot(frypan, 1, 26, 45)); for (int y = 0; y < 2; y++) for (int x = 0; x < 4; x++) - this.addSlotToContainer(new Slot(frypan, 2 + x + y * 4, 70 + x * 18, 27 + y * 18)); + this.addSlotToContainer(new SlotFrypan(frypan, 2 + x + y * 4, 70 + x * 18, 27 + y * 18, player)); /* Player inventory */ for (int column = 0; column < 3; column++) diff --git a/src/tconstruct/inventory/SlotFrypan.java b/src/tconstruct/inventory/SlotFrypan.java new file mode 100644 index 00000000..d12113d9 --- /dev/null +++ b/src/tconstruct/inventory/SlotFrypan.java @@ -0,0 +1,30 @@ +package tconstruct.inventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.*; +import net.minecraft.item.*; +import net.minecraft.nbt.NBTTagCompound; +import tconstruct.achievements.TAchievements; + +public class SlotFrypan extends Slot{ + + public EntityPlayer player; + + public SlotFrypan(IInventory par1IInventory, int par2, int par3, int par4, EntityPlayer player) { + super(par1IInventory, par2, par3, par4); + this.player = player; + } + + @Override + public void putStack(ItemStack par1ItemStack){ + super.putStack(par1ItemStack); + if(par1ItemStack != null && par1ItemStack.getItem() != null && par1ItemStack.getItem() instanceof ItemFood && par1ItemStack.hasTagCompound()){ + NBTTagCompound stackTagCompound = par1ItemStack.getTagCompound(); + if(stackTagCompound == null || !stackTagCompound.getBoolean("frypanKill")){ + return; + } + player.addStat(TAchievements.achievements.get("tconstruct.dualConvenience"), 1); + } + } + +} diff --git a/src/tconstruct/items/TitleIcon.java b/src/tconstruct/items/TitleIcon.java index a83218c8..af8dcb97 100644 --- a/src/tconstruct/items/TitleIcon.java +++ b/src/tconstruct/items/TitleIcon.java @@ -27,7 +27,7 @@ public class TitleIcon extends Item int[] secondaryColor = { 0x1567BF, 0xFFEC6E }; String[] mobNames = { "TConstruct.EdibleSlime", "TConstruct.KingSlime" }; - String[] achievementIconNames = new String[] {"tinkerer", "preparedFight", "proTinkerer", "enemySlayer"}; + String[] achievementIconNames = new String[] {"tinkerer", "preparedFight", "proTinkerer", "enemySlayer", "dualConvenience"}; Icon[] achievementIcons = new Icon[achievementIconNames.length]; public TitleIcon(int par1) diff --git a/src/tconstruct/util/TEventHandler.java b/src/tconstruct/util/TEventHandler.java index 2074937d..a516f648 100644 --- a/src/tconstruct/util/TEventHandler.java +++ b/src/tconstruct/util/TEventHandler.java @@ -1,9 +1,8 @@ package tconstruct.util; -import tconstruct.achievements.TAchievements; +import net.minecraft.item.crafting.FurnaceRecipes; import java.util.Random; - import net.minecraft.block.Block; import net.minecraft.entity.*; import net.minecraft.entity.boss.EntityWither; @@ -23,8 +22,10 @@ import net.minecraftforge.event.entity.player.*; import net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; import net.minecraftforge.oredict.OreDictionary.OreRegisterEvent; import tconstruct.TConstruct; +import tconstruct.achievements.TAchievements; import tconstruct.blocks.*; import tconstruct.common.TContent; +import tconstruct.items.tools.FryingPan; import tconstruct.library.TConstructRegistry; import tconstruct.library.crafting.ToolBuilder; import tconstruct.library.event.*; @@ -223,6 +224,23 @@ public class TEventHandler @ForgeSubscribe public void onLivingDrop (LivingDropsEvent event) { + if(event.source.getEntity() != null && event.source.getEntity() instanceof EntityPlayer){ + EntityPlayer player = (EntityPlayer)event.source.getEntity(); + if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof FryingPan){ + for(int i = 0; i < event.drops.size(); i++){ + ItemStack is = event.drops.get(i).getEntityItem(); + if(FurnaceRecipes.smelting().getSmeltingResult(is) != null && FurnaceRecipes.smelting().getSmeltingResult(is).getItem() instanceof ItemFood){ + NBTTagCompound stackCompound = is.getTagCompound(); + if(stackCompound == null){ + stackCompound = new NBTTagCompound(); + } + stackCompound.setBoolean("frypanKill", true); + is.setTagCompound(stackCompound); + } + } + } + } + if (random.nextInt(500) == 0 && event.entityLiving instanceof IMob && event.entityLiving.dimension == 0) { ItemStack dropStack = new ItemStack(TContent.heartCanister, 1, 1);