From 337891905f16ae3880aca017f212edf80d4ab841 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 25 Nov 2021 15:41:19 +0100 Subject: [PATCH 1/3] hadron power plug crashfix, IV bag --- .../com/hbm/crafting/ConsumableRecipes.java | 5 +- src/main/java/com/hbm/items/ModItems.java | 17 +++++ .../items/special/ItemSimpleConsumable.java | 61 ++++++++++++++++++ .../machine/TileEntityHadronPower.java | 2 +- src/main/java/com/hbm/util/LootGenerator.java | 4 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/textures/items/iv_blood.png | Bin 0 -> 482 bytes .../assets/hbm/textures/items/iv_empty.png | Bin 0 -> 251 bytes 9 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/items/special/ItemSimpleConsumable.java create mode 100644 src/main/resources/assets/hbm/textures/items/iv_blood.png create mode 100644 src/main/resources/assets/hbm/textures/items/iv_empty.png diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 5608fe507..1def4dc05 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -130,6 +130,9 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.med_bag, 1), new Object[] { "LLL", "SIS", "LLL", 'L', ModItems.plate_polymer, 'S', ModItems.syringe_metal_stimpak, 'I', ModItems.pill_iodine }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.med_bag, 1), new Object[] { "LL", "SI", "LL", 'L', ModItems.plate_polymer, 'S', ModItems.syringe_metal_super, 'I', ModItems.radaway }); + //IV Bags + CraftingManager.addRecipeAuto(new ItemStack(ModItems.iv_blood, 4), new Object[] { "S", "I", "S", 'S', ModItems.plate_polymer, 'I', IRON.plate() }); + //Radaway CraftingManager.addRecipeAuto(new ItemStack(ModItems.radaway, 1), new Object[] { "S", "M", "W", 'S', ModItems.plate_polymer, 'M', ModBlocks.mush, 'W', Items.potionitem }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.radaway_strong, 1), new Object[] { "S", "M", "W", 'S', Items.pumpkin_seeds, 'M', ModBlocks.mush, 'W', ModItems.radaway }); @@ -172,7 +175,7 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.industrial_magnet, 1), new Object[] { "SMS", " B ", "SMS", 'S', STEEL.ingot(), 'M', ModItems.horseshoe_magnet, 'B', ModBlocks.fusion_conductor }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_container, 1), new Object[] { "HAH", "ACA", "HAH", 'H', ModItems.heart_piece, 'A', AL.ingot(), 'C', ModItems.coin_creeper }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_booster, 1), new Object[] { "GHG", "MCM", "GHG", 'G', GOLD.ingot(), 'H', ModItems.heart_container, 'M', ModItems.morning_glory, 'C', ModItems.coin_maskman }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_fab, 1), new Object[] { "GHG", "MCM", "GHG", 'G', ModItems.billet_polonium, 'H', ModItems.heart_booster, 'M', ModItems.canteen_fab, 'C', ModItems.coin_worm }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.heart_fab, 1), new Object[] { "GHG", "MCM", "GHG", 'G', PO210.billet(), 'H', ModItems.heart_booster, 'M', ModItems.canteen_fab, 'C', ModItems.coin_worm }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ink, 1), new Object[] { "FPF", "PIP", "FPF", 'F', new ItemStack(Blocks.red_flower, 1, OreDictionary.WILDCARD_VALUE), 'P', ModItems.armor_polish, 'I', KEY_BLACK }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.bathwater_mk2, 1), new Object[] { "MWM", "WBW", "MWM", 'M', ModItems.bottle_mercury, 'W', ModItems.nuclear_waste, 'B', ModItems.bathwater }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.back_tesla, 1), new Object[] { "DGD", "GTG", "DGD", 'D', ModItems.ducttape, 'G', ModItems.wire_gold, 'T', ModBlocks.tesla }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 47c3d964b..1c4912b50 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -37,6 +37,7 @@ import net.minecraft.item.ItemSoup; import net.minecraft.item.ItemStack; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.EnumHelper; @@ -840,6 +841,8 @@ public class ModItems { public static Item syringe_metal_super; public static Item syringe_taint; public static Item syringe_mkunicorn; + public static Item iv_empty; + public static Item iv_blood; public static Item radaway; public static Item radaway_strong; public static Item radaway_flush; @@ -3263,6 +3266,18 @@ public class ModItems { syringe_metal_super = new ItemSyringe().setUnlocalizedName("syringe_metal_super").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_metal_super"); syringe_taint = new ItemSyringe().setUnlocalizedName("syringe_taint").setFull3D().setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":syringe_taint"); syringe_mkunicorn = new ItemSyringe().setUnlocalizedName("syringe_mkunicorn").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":syringe_mkunicorn"); + + iv_empty = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + stack.stackSize--; + user.attackEntityFrom(DamageSource.magic, 5F); + ItemSimpleConsumable.tryAddItem(user, new ItemStack(ModItems.iv_blood)); //are references resolved when the lambda is created or when it is called? must run some tests on this + }).setUnlocalizedName("iv_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_empty"); + iv_blood = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + stack.stackSize--; + user.heal(5F); + ItemSimpleConsumable.tryAddItem(user, new ItemStack(ModItems.iv_empty)); + }).setUnlocalizedName("iv_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_blood"); + med_bag = new ItemSyringe().setUnlocalizedName("med_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_bag"); radaway = new ItemSyringe().setUnlocalizedName("radaway").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway"); radaway_strong = new ItemSyringe().setUnlocalizedName("radaway_strong").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_strong"); @@ -7470,6 +7485,8 @@ public class ModItems { GameRegistry.registerItem(syringe_taint, syringe_taint.getUnlocalizedName()); GameRegistry.registerItem(syringe_mkunicorn, syringe_mkunicorn.getUnlocalizedName()); GameRegistry.registerItem(med_bag, med_bag.getUnlocalizedName()); + GameRegistry.registerItem(iv_empty, iv_empty.getUnlocalizedName()); + GameRegistry.registerItem(iv_blood, iv_blood.getUnlocalizedName()); GameRegistry.registerItem(radaway, radaway.getUnlocalizedName()); GameRegistry.registerItem(radaway_strong, radaway_strong.getUnlocalizedName()); GameRegistry.registerItem(radaway_flush, radaway_flush.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java new file mode 100644 index 000000000..56b46eae7 --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java @@ -0,0 +1,61 @@ +package com.hbm.items.special; + +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import com.hbm.items.ModItems; +import com.hbm.util.Tuple.Pair; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemSimpleConsumable extends Item { + + //if java is giving me the power of generics and delegates then i'm going to use them, damn it! + private BiConsumer useAction; + private BiConsumer useActionServer; + private BiConsumer> hitAction; + private BiConsumer> hitActionServer; + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + if(this.useAction != null) + this.useAction.accept(stack, player); + + if(!world.isRemote && this.useActionServer != null) + this.useActionServer.accept(stack, player); + + return stack; + } + + @Override + public boolean hitEntity(ItemStack stack, EntityLivingBase entity, EntityLivingBase entityPlayer) { + + if(this.hitAction != null) + this.hitAction.accept(stack, new Pair(entity, entityPlayer)); + + if(!entity.worldObj.isRemote && this.hitActionServer != null) + this.hitActionServer.accept(stack, new Pair(entity, entityPlayer)); + + return false; + } + + public static void tryAddItem(EntityLivingBase entity, ItemStack stack) { + if(entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer) entity; + if(!player.inventory.addItemStackToInventory(stack)) { + player.dropPlayerItemWithRandomChoice(stack, false); + } + } + } + + //this formatting style probably already has a name but i will call it "the greg" + public ItemSimpleConsumable setUseAction( BiConsumer delegate) { this.useAction = delegate; return this; } + public ItemSimpleConsumable setUseActionServer( BiConsumer delegate) { this.useActionServer = delegate; return this; } + public ItemSimpleConsumable setHitAction( BiConsumer> delegate) { this.hitAction = delegate; return this; } + public ItemSimpleConsumable setHitActionServer( BiConsumer> delegate) { this.hitActionServer = delegate; return this; } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java index 885a71247..dfbb58c77 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHadronPower.java @@ -14,7 +14,7 @@ public class TileEntityHadronPower extends TileEntity implements IEnergyUser { @Override public boolean canUpdate() { - return this.worldObj.getTotalWorldTime() % 20 == 0; + return this.worldObj != null && this.worldObj.getTotalWorldTime() % 20 == 0; } @Override diff --git a/src/main/java/com/hbm/util/LootGenerator.java b/src/main/java/com/hbm/util/LootGenerator.java index 20654457e..2c5d0b500 100644 --- a/src/main/java/com/hbm/util/LootGenerator.java +++ b/src/main/java/com/hbm/util/LootGenerator.java @@ -52,8 +52,8 @@ public class LootGenerator { addItemWithDeviation(loot, world.rand, new ItemStack(syringe), 0.125, i * 0.03125, 0.25); } - int type = world.rand.nextInt(5); - Item syringe = type < 2 ? ModItems.radaway : type < 4 ? ModItems.radx : ModItems.siox; + int type = world.rand.nextInt(8); + Item syringe = type < 2 ? ModItems.radaway : type < 4 ? ModItems.radx : type < 7 ? ModItems.iv_blood : ModItems.siox; addItemWithDeviation(loot, world.rand, new ItemStack(syringe), -0.25, 0, -0.125); } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index aa40a5e78..d7d2b05c6 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1593,6 +1593,8 @@ item.insert_polonium.name=Poloniumeinlage item.insert_steel.name=Schwere Stahleinlage item.insert_xsapi.name=XSAPI-Einlage item.insert_yharonite.name=Yharoniteinlage +item.iv_blood.name=Blutbeutel +item.iv_empty.name=Infusionsbeutel item.jackt.name=Verdammt stylische Kugeljacke item.jackt2.name=Verdammt stylische Kugeljacke 2: Tokyo Drift item.jetpack_boost.name=Boosterrucksack diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 329a05d59..011a04cee 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1661,6 +1661,8 @@ item.insert_polonium.name=Polonium Insert item.insert_steel.name=Heavy Steel Insert item.insert_xsapi.name=XSAPI Insert item.insert_yharonite.name=Yharonite Insert +item.iv_blood.name=Blood Bag +item.iv_empty.name=IV Bag item.jackt.name=Damn Stylish Ballistic Jacket item.jackt2.name=Damn Stylish Ballistic Jacket 2: Tokyo Drift item.jetpack_boost.name=Boostpack diff --git a/src/main/resources/assets/hbm/textures/items/iv_blood.png b/src/main/resources/assets/hbm/textures/items/iv_blood.png new file mode 100644 index 0000000000000000000000000000000000000000..929fd387b8005547d172d51ab3bcb9d95c40e145 GIT binary patch literal 482 zcmV<80UiE{P)8%>@}5? zIqVe8%%jc*4a#(YtIEaD?I|IjA}*!_JdS)FM{8=s z<*wsVw&47&h4}kB01+f^1mq0#P(C?MMANuEy29D-G0ed?1sAa>o(aE{dh6AQ3L9Ir z5BBmh8^msM2Rbcv$QoF|QBptxfpqss=F>AXo-W!QS*GJ`2>hHhfboN47PmLk{+s`` Y4}&v~AMKhZ4gdfE07*qoM6N<$f?>PZ2><{9 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/iv_empty.png b/src/main/resources/assets/hbm/textures/items/iv_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa192c4fb40a1f5a71db37ca6f0c0df6f153d75 GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfr?hkm>}S{mBsY%kqw=P9Vcvk{QuLAE&q4$97wld1_8ra8&7UN zAhG@ZJ-5J$=dW0IIEm&m&-vFbZIJ#ss;$(?Nn_Gx_3sNM+RiGd)tvJ^tDEF;R<}vI zbP0l+XkKr&?o3 literal 0 HcmV?d00001 From 0eb71db3a6d68d67be245386260e112da0150873 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 25 Nov 2021 22:54:00 +0100 Subject: [PATCH 2/3] radaway recipes, simplified IV bag code --- .../com/hbm/crafting/ConsumableRecipes.java | 8 ++--- src/main/java/com/hbm/items/ModItems.java | 31 +++++++++++++------ .../items/special/ItemSimpleConsumable.java | 19 ++++++++++++ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 1def4dc05..c7697d7d7 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -131,12 +131,12 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.med_bag, 1), new Object[] { "LL", "SI", "LL", 'L', ModItems.plate_polymer, 'S', ModItems.syringe_metal_super, 'I', ModItems.radaway }); //IV Bags - CraftingManager.addRecipeAuto(new ItemStack(ModItems.iv_blood, 4), new Object[] { "S", "I", "S", 'S', ModItems.plate_polymer, 'I', IRON.plate() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.iv_empty, 4), new Object[] { "S", "I", "S", 'S', ModItems.plate_polymer, 'I', IRON.plate() }); //Radaway - CraftingManager.addRecipeAuto(new ItemStack(ModItems.radaway, 1), new Object[] { "S", "M", "W", 'S', ModItems.plate_polymer, 'M', ModBlocks.mush, 'W', Items.potionitem }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.radaway_strong, 1), new Object[] { "S", "M", "W", 'S', Items.pumpkin_seeds, 'M', ModBlocks.mush, 'W', ModItems.radaway }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.radaway_flush, 1), new Object[] { "S", "M", "W", 'S', I.dust(), 'M', ModBlocks.mush, 'W', ModItems.radaway_strong }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.radaway, 1), new Object[] { ModItems.iv_blood, COAL.dust(), Items.pumpkin_seeds }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.radaway_strong, 1), new Object[] { ModItems.radaway, ModBlocks.mush }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.radaway_flush, 1), new Object[] { ModItems.radaway_strong, I.dust() }); //Cladding CraftingManager.addShapelessAuto(new ItemStack(ModItems.cladding_paint, 1), new Object[] { PB.nugget(), PB.nugget(), PB.nugget(), PB.nugget(), Items.clay_ball, Items.glass_bottle }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 1c4912b50..379cfb8b8 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3268,20 +3268,31 @@ public class ModItems { syringe_mkunicorn = new ItemSyringe().setUnlocalizedName("syringe_mkunicorn").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":syringe_mkunicorn"); iv_empty = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { - stack.stackSize--; + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.syringe", new ItemStack(ModItems.iv_blood)); user.attackEntityFrom(DamageSource.magic, 5F); - ItemSimpleConsumable.tryAddItem(user, new ItemStack(ModItems.iv_blood)); //are references resolved when the lambda is created or when it is called? must run some tests on this }).setUnlocalizedName("iv_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_empty"); + iv_blood = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { - stack.stackSize--; + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.radaway", new ItemStack(ModItems.iv_empty)); user.heal(5F); - ItemSimpleConsumable.tryAddItem(user, new ItemStack(ModItems.iv_empty)); - }).setUnlocalizedName("iv_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_blood"); + }).setUnlocalizedName("iv_blood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_blood"); + + radaway = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.radaway", new ItemStack(ModItems.iv_empty)); + user.addPotionEffect(new PotionEffect(HbmPotion.radaway.id, 14, 9)); + }).setUnlocalizedName("radaway").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway"); + + radaway_strong = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.radaway", new ItemStack(ModItems.iv_empty)); + ItemSimpleConsumable.addPotionEffect(user, HbmPotion.radaway, 14, 9); + }).setUnlocalizedName("radaway_strong").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_strong"); + + radaway_flush = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.radaway", new ItemStack(ModItems.iv_empty)); + ItemSimpleConsumable.addPotionEffect(user, HbmPotion.radaway, 50, 19); + }).setUnlocalizedName("radaway_flush").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_flush"); med_bag = new ItemSyringe().setUnlocalizedName("med_bag").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":med_bag"); - radaway = new ItemSyringe().setUnlocalizedName("radaway").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway"); - radaway_strong = new ItemSyringe().setUnlocalizedName("radaway_strong").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_strong"); - radaway_flush = new ItemSyringe().setUnlocalizedName("radaway_flush").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_flush"); radx = new ItemPill(0).setUnlocalizedName("radx").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radx"); siox = new ItemPill(0).setUnlocalizedName("siox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":siox"); xanax = new ItemPill(0).setUnlocalizedName("xanax").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":xanax_2"); @@ -6268,9 +6279,9 @@ public class ModItems { //Universal Tank GameRegistry.registerItem(fluid_tank_empty, fluid_tank_empty.getUnlocalizedName()); GameRegistry.registerItem(fluid_tank_full, fluid_tank_full.getUnlocalizedName()); - GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); - GameRegistry.registerItem(fluid_tank_lead_full, fluid_tank_lead_full.getUnlocalizedName()); GameRegistry.registerItem(fluid_tank_lead_empty, fluid_tank_lead_empty.getUnlocalizedName()); + GameRegistry.registerItem(fluid_tank_lead_full, fluid_tank_lead_full.getUnlocalizedName()); + GameRegistry.registerItem(fluid_barrel_empty, fluid_barrel_empty.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_full, fluid_barrel_full.getUnlocalizedName()); GameRegistry.registerItem(fluid_barrel_infinite, fluid_barrel_infinite.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java index 56b46eae7..bdd3f1b60 100644 --- a/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java +++ b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java @@ -4,12 +4,15 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; import com.hbm.items.ModItems; +import com.hbm.potion.HbmPotion; import com.hbm.util.Tuple.Pair; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; public class ItemSimpleConsumable extends Item { @@ -44,6 +47,22 @@ public class ItemSimpleConsumable extends Item { return false; } + public static void giveSoundAndDecrement(ItemStack stack, EntityLivingBase entity, String sound, ItemStack container) { + stack.stackSize--; + entity.worldObj.playSoundAtEntity(entity, sound, 1.0F, 1.0F); + ItemSimpleConsumable.tryAddItem(entity, container); + } + + public static void addPotionEffect(EntityLivingBase entity, Potion effect, int duration, int level) { + + if(!entity.isPotionActive(effect)) { + entity.addPotionEffect(new PotionEffect(effect.id, duration, level)); + } else { + int d = entity.getActivePotionEffect(effect).getDuration() + duration; + entity.addPotionEffect(new PotionEffect(effect.id, d, level)); + } + } + public static void tryAddItem(EntityLivingBase entity, ItemStack stack) { if(entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) entity; From 0579ef7ad1886b39a99aa28544eaf4f3d8ecfce5 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 26 Nov 2021 15:18:36 +0100 Subject: [PATCH 3/3] xp IV bags --- .../com/hbm/crafting/ConsumableRecipes.java | 7 +- src/main/java/com/hbm/items/ModItems.java | 17 ++++ .../items/special/ItemSimpleConsumable.java | 2 +- .../java/com/hbm/util/EnchantmentUtil.java | 86 ++++++++++++++++++ .../assets/hbm/textures/items/iv_xp.png | Bin 0 -> 443 bytes .../assets/hbm/textures/items/iv_xp_empty.png | Bin 0 -> 258 bytes .../{items => models}/tank_CARBONDIOXIDE.png | Bin 7 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/iv_xp.png create mode 100644 src/main/resources/assets/hbm/textures/items/iv_xp_empty.png rename src/main/resources/assets/hbm/textures/{items => models}/tank_CARBONDIOXIDE.png (100%) diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index c7697d7d7..f2805f3a5 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -43,7 +43,7 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.apple_euphemium, 1), new Object[] { "EEE", "EAE", "EEE", 'E', EUPH.nugget(), 'A', Items.apple }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.tem_flakes, 1, 0), new Object[] { GOLD.nugget(), Items.paper }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.tem_flakes, 1, 1), new Object[] { GOLD.nugget(), GOLD.nugget(), GOLD.nugget(), Items.paper }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.tem_flakes, 1, 2), new Object[] { Items.gold_ingot, Items.gold_ingot, GOLD.nugget(), GOLD.nugget(), Items.paper }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.tem_flakes, 1, 2), new Object[] { GOLD.ingot(), GOLD.ingot(), GOLD.nugget(), GOLD.nugget(), Items.paper }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.glowing_stew, 1), new Object[] { Items.bowl, Item.getItemFromBlock(ModBlocks.mush), Item.getItemFromBlock(ModBlocks.mush) }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.balefire_scrambled, 1), new Object[] { Items.bowl, ModItems.egg_balefire }); CraftingManager.addShapelessAuto(new ItemStack(ModItems.balefire_and_ham, 1), new Object[] { ModItems.balefire_scrambled, Items.cooked_beef }); @@ -99,8 +99,8 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_antidote, 6), new Object[] { "SPS", "SMS", "SPS", 'S', ModItems.syringe_empty, 'P', Items.pumpkin_seeds, 'M', Items.reeds }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_poison, 1), new Object[] { "SLS", "LCL", "SLS", 'C', ModItems.syringe_empty, 'S', Items.spider_eye, 'L', PB.dust() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_poison, 1), new Object[] { "SLS", "LCL", "SLS", 'C', ModItems.syringe_empty, 'S', Items.spider_eye, 'L', ModItems.powder_poison }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_awesome, 1), new Object[] { "SPS", "NCN", "SPS", 'C', ModItems.syringe_empty, 'S', S.dust(), 'P', PU239.nugget(), 'N', ModItems.nugget_pu238 }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_awesome, 1), new Object[] { "SNS", "PCP", "SNS", 'C', ModItems.syringe_empty, 'S', S.dust(), 'P', PU239.nugget(), 'N', ModItems.nugget_pu238 }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_awesome, 1), new Object[] { "SPS", "NCN", "SPS", 'C', ModItems.syringe_empty, 'S', S.dust(), 'P', PU239.nugget(), 'N', PU238.nugget() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_awesome, 1), new Object[] { "SNS", "PCP", "SNS", 'C', ModItems.syringe_empty, 'S', S.dust(), 'P', PU239.nugget(), 'N', PU238.nugget() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_metal_empty, 6), new Object[] { "P", "C", "B", 'B', Blocks.iron_bars, 'C', ModItems.rod_empty, 'P', IRON.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_metal_stimpak, 1), new Object[] { " N ", "NSN", " N ", 'N', Items.nether_wart, 'S', ModItems.syringe_metal_empty }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.syringe_metal_medx, 1), new Object[] { " N ", "NSN", " N ", 'N', Items.quartz, 'S', ModItems.syringe_metal_empty }); @@ -132,6 +132,7 @@ public class ConsumableRecipes { //IV Bags CraftingManager.addRecipeAuto(new ItemStack(ModItems.iv_empty, 4), new Object[] { "S", "I", "S", 'S', ModItems.plate_polymer, 'I', IRON.plate() }); + CraftingManager.addShapelessAuto(new ItemStack(ModItems.iv_xp_empty, 1), new Object[] { ModItems.iv_empty, ModItems.powder_magic }); //Radaway CraftingManager.addShapelessAuto(new ItemStack(ModItems.radaway, 1), new Object[] { ModItems.iv_blood, COAL.dust(), Items.pumpkin_seeds }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 379cfb8b8..d2c6fab3d 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -23,6 +23,7 @@ import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.potion.HbmPotion; import com.hbm.tileentity.machine.rbmk.IRBMKFluxReceiver.NType; +import com.hbm.util.EnchantmentUtil; import api.hbm.block.IToolable.ToolType; import cpw.mods.fml.common.registry.GameRegistry; @@ -843,6 +844,8 @@ public class ModItems { public static Item syringe_mkunicorn; public static Item iv_empty; public static Item iv_blood; + public static Item iv_xp_empty; + public static Item iv_xp; public static Item radaway; public static Item radaway_strong; public static Item radaway_flush; @@ -3277,6 +3280,18 @@ public class ModItems { user.heal(5F); }).setUnlocalizedName("iv_blood").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_blood"); + iv_xp_empty = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + if(user.experienceTotal >= 100) { + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.syringe", new ItemStack(ModItems.iv_xp)); + EnchantmentUtil.setExperience(user, user.experienceTotal - 100); + } + }).setUnlocalizedName("iv_xp_empty").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_xp_empty"); + + iv_xp = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { + ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "random.orb", new ItemStack(ModItems.iv_xp_empty)); + EnchantmentUtil.addExperience(user, 100, false); + }).setUnlocalizedName("iv_xp").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":iv_xp"); + radaway = new ItemSimpleConsumable().setUseActionServer((stack, user) -> { ItemSimpleConsumable.giveSoundAndDecrement(stack, user, "hbm:item.radaway", new ItemStack(ModItems.iv_empty)); user.addPotionEffect(new PotionEffect(HbmPotion.radaway.id, 14, 9)); @@ -7498,6 +7513,8 @@ public class ModItems { GameRegistry.registerItem(med_bag, med_bag.getUnlocalizedName()); GameRegistry.registerItem(iv_empty, iv_empty.getUnlocalizedName()); GameRegistry.registerItem(iv_blood, iv_blood.getUnlocalizedName()); + GameRegistry.registerItem(iv_xp_empty, iv_xp_empty.getUnlocalizedName()); + GameRegistry.registerItem(iv_xp, iv_xp.getUnlocalizedName()); GameRegistry.registerItem(radaway, radaway.getUnlocalizedName()); GameRegistry.registerItem(radaway_strong, radaway_strong.getUnlocalizedName()); GameRegistry.registerItem(radaway_flush, radaway_flush.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java index bdd3f1b60..1b76ab578 100644 --- a/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java +++ b/src/main/java/com/hbm/items/special/ItemSimpleConsumable.java @@ -15,7 +15,7 @@ import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -public class ItemSimpleConsumable extends Item { +public class ItemSimpleConsumable extends ItemCustomLore { //if java is giving me the power of generics and delegates then i'm going to use them, damn it! private BiConsumer useAction; diff --git a/src/main/java/com/hbm/util/EnchantmentUtil.java b/src/main/java/com/hbm/util/EnchantmentUtil.java index 88cdf54ec..b64ce08ab 100644 --- a/src/main/java/com/hbm/util/EnchantmentUtil.java +++ b/src/main/java/com/hbm/util/EnchantmentUtil.java @@ -1,15 +1,27 @@ package com.hbm.util; import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public class EnchantmentUtil { + /** + * Adds an enchantment of the given level to the supplied itemstack + * @param stack + * @param enchantment + * @param level + */ public static void addEnchantment(ItemStack stack, Enchantment enchantment, int level) { stack.addEnchantment(enchantment, level); } + /** + * Removes an enchantment from the given itemstack, regardless of level + * @param stack + * @param enchantment + */ public static void removeEnchantment(ItemStack stack, Enchantment enchantment) { if(stack.getEnchantmentTagList() == null) @@ -27,4 +39,78 @@ public class EnchantmentUtil { if(stack.getEnchantmentTagList().tagCount() == 0) stack.getTagCompound().removeTag("ench"); } + + /** + * Returns the size of the XP bar for the given level + * @param level + * @return + */ + public static int xpBarCap(int level) { + return level >= 30 ? 62 + (level - 30) * 7 : (level >= 15 ? 17 + (level - 15) * 3 : 17); + } + + /** + * + * @param targetXp + * @return + */ + public static int getLevelForExperience(int xp) { + + int level = 0; + + while (true) { + + int xpCap = xpBarCap(level); + + if (xp < xpCap) + return level; + + xp -= xpCap; + level++; + } + } + + /** + * Identical to EntityPlayer.addExperience but without increasing the player's score + * @param player + * @param xp + */ + public static void addExperience(EntityPlayer player, int xp, boolean silent) { + + int j = Integer.MAX_VALUE - player.experienceTotal; + + if(xp > j) { + xp = j; + } + + player.experience += (float)xp / (float)player.xpBarCap(); + + for(player.experienceTotal += xp; player.experience >= 1.0F; player.experience /= (float)player.xpBarCap()) { + player.experience = (player.experience - 1.0F) * (float)player.xpBarCap(); + + if(silent) + addExperienceLevelSilent(player, 1); + else + player.addExperienceLevel(1); + } + } + + public static void setExperience(EntityPlayer player, int xp) { + + player.experienceLevel = 0; + player.experience = 0.0F; + player.experienceTotal = 0; + + addExperience(player, xp, true); + } + + public static void addExperienceLevelSilent(EntityPlayer player, int level) { + player.experienceLevel += level; + + if (player.experienceLevel < 0) { + player.experienceLevel = 0; + player.experience = 0.0F; + player.experienceTotal = 0; + } + } } diff --git a/src/main/resources/assets/hbm/textures/items/iv_xp.png b/src/main/resources/assets/hbm/textures/items/iv_xp.png new file mode 100644 index 0000000000000000000000000000000000000000..305474f37be8eea3fa1b53bc642f0e57749408ca GIT binary patch literal 443 zcmV;s0Yv_ZP)I7{`BU@2V795uHRksNK{rprC@#yAdekI+Wjpy@hg&~f2O!neLBdn&iRq#}E($nXk2sqmM?QZ2G}`Y zmA_gZ{GJzxk^75{nRxMI2DYT|nb2e0d?LAXI?Rf$6+L zbj_|HtHDsI1K`0AgE?F4hX!vtd}=UuVlteEj2Gwx=&ec+3IY~P%3^x>$cE0tjuW;%{{Lymmj63=4y0Q!gMi_zjVCuB zkl6nIo?D>CfoDA7KOSC>oAa+-+MxEMR9mUnA&p7=;jYF8Kyaen@Xzs70b#r6r`mN> zC-6senRBe?zQDLC*Fbzi3WMI^3yg94d-i<)_J8Sb{{PCKFA9saaUYr5BAFO?^?E>O zuyPo40@p^3fBmNgb}$-v=5T5no3(7&;}FikAhIEe>B-Uz4xlF(JYD@<);T3K0RY{# BVy^%I literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/tank_CARBONDIOXIDE.png b/src/main/resources/assets/hbm/textures/models/tank_CARBONDIOXIDE.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/tank_CARBONDIOXIDE.png rename to src/main/resources/assets/hbm/textures/models/tank_CARBONDIOXIDE.png