diff options
Diffstat (limited to 'src/main/java/gtPlusPlus')
3 files changed, 57 insertions, 26 deletions
diff --git a/src/main/java/gtPlusPlus/api/objects/minecraft/ShapedRecipe.java b/src/main/java/gtPlusPlus/api/objects/minecraft/ShapedRecipe.java index f799623dd6..4da6ef3a1f 100644 --- a/src/main/java/gtPlusPlus/api/objects/minecraft/ShapedRecipe.java +++ b/src/main/java/gtPlusPlus/api/objects/minecraft/ShapedRecipe.java @@ -4,12 +4,13 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.ShapedOreRecipe; +import gregtech.api.interfaces.IRecipeMutableAccess; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.core.util.minecraft.ItemUtils; -public class ShapedRecipe { +public class ShapedRecipe implements IRecipeMutableAccess { private static final String CHARS = "abcdefghijklmnop"; public ShapedOreRecipe mRecipe; @@ -248,4 +249,19 @@ public class ShapedRecipe { t.printStackTrace(); } } + + @Override + public ItemStack gt5u$getRecipeOutputItem() { + return ((IRecipeMutableAccess) mRecipe).gt5u$getRecipeOutputItem(); + } + + @Override + public void gt5u$setRecipeOutputItem(ItemStack newItem) { + ((IRecipeMutableAccess) mRecipe).gt5u$setRecipeOutputItem(newItem); + } + + @Override + public Object gt5u$getRecipeInputs() { + return ((IRecipeMutableAccess) mRecipe).gt5u$getRecipeInputs(); + } } diff --git a/src/main/java/gtPlusPlus/core/common/CommonProxy.java b/src/main/java/gtPlusPlus/core/common/CommonProxy.java index 5d93141c56..12f0971e73 100644 --- a/src/main/java/gtPlusPlus/core/common/CommonProxy.java +++ b/src/main/java/gtPlusPlus/core/common/CommonProxy.java @@ -6,14 +6,19 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.event.entity.living.LivingAttackEvent; +import baubles.common.container.InventoryBaubles; +import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Mods; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; @@ -30,6 +35,7 @@ import gtPlusPlus.core.handler.events.EntityDeathHandler; import gtPlusPlus.core.handler.events.GeneralTooltipEventHandler; import gtPlusPlus.core.handler.events.PlayerSleepEventHandler; import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.bauble.BaseBauble; import gtPlusPlus.core.lib.CORE; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.tileentities.ModTileEntities; @@ -204,4 +210,34 @@ public class CommonProxy { public EntityPlayer getPlayerEntity(MessageContext ctx) { return ctx.getServerHandler().playerEntity; } + + @SuppressWarnings("unused") // used by the event bus + @SubscribeEvent + public void onPlayerAttacked(LivingAttackEvent event) { + if (Mods.Baubles.isModLoaded()) { + BaubleAttackHandler.run(event); + } + } + + // Prevent class loading errors if Baubles are missing + private static final class BaubleAttackHandler { + + public static void run(LivingAttackEvent event) { + if (!(event.entityLiving instanceof EntityPlayer player)) { + return; + } + InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); + final ItemStack bauble1 = baubles.getStackInSlot(1); + if (bauble1.getItem() instanceof BaseBauble gtBauble && gtBauble.getDamageNegations() + .contains(event.source.damageType)) { + event.setCanceled(true); + return; + } + final ItemStack bauble2 = baubles.getStackInSlot(2); + if (bauble2.getItem() instanceof BaseBauble gtBauble && gtBauble.getDamageNegations() + .contains(event.source.damageType)) { + event.setCanceled(true); + } + } + } } diff --git a/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java b/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java index 92468aa6d8..76121ef266 100644 --- a/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java +++ b/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java @@ -9,21 +9,16 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import net.minecraftforge.event.entity.living.LivingAttackEvent; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import baubles.api.BaubleType; import baubles.api.IBauble; -import baubles.common.container.InventoryBaubles; -import baubles.common.lib.PlayerHandler; import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; import gregtech.api.enums.Mods; import gregtech.api.util.GT_LanguageManager; import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.NBTUtils; @Optional.InterfaceList( @@ -41,11 +36,14 @@ public class BaseBauble extends Item implements IBauble { public BaseBauble(BaubleType type) { this.mThisBauble = type; - Utils.registerEvent(this); this.setMaxStackSize(1); this.setCreativeTab(AddToCreativeTab.tabMisc); } + public List<String> getDamageNegations() { + return damageNegations; + } + @Override public String getItemStackDisplayName(final ItemStack tItem) { String key = "gtplusplus." + getUnlocalizedName() + ".name"; @@ -55,14 +53,6 @@ public class BaseBauble extends Item implements IBauble { return GT_LanguageManager.getTranslation(key); } - @SubscribeEvent - public void onPlayerAttacked(LivingAttackEvent event) { - if (event.entityLiving instanceof EntityPlayer player) { - if (getCorrectBauble(player) != null && damageNegations.contains(event.source.damageType)) - event.setCanceled(true); - } - } - @Override public boolean canEquip(ItemStack arg0, EntityLivingBase arg1) { return arg1 instanceof EntityPlayer; @@ -107,17 +97,6 @@ public class BaseBauble extends Item implements IBauble { .removeAttributeModifiers(attributes); } - public ItemStack getCorrectBauble(EntityPlayer player) { - InventoryBaubles baubles = PlayerHandler.getPlayerBaubles(player); - ItemStack stack1 = baubles.getStackInSlot(1); - ItemStack stack2 = baubles.getStackInSlot(2); - return isCorrectBauble(stack1) ? stack1 : isCorrectBauble(stack2) ? stack2 : null; - } - - private boolean isCorrectBauble(ItemStack stack) { - return stack != null && (stack.getItem() == this); - } - @Override public int getEntityLifespan(ItemStack itemStack, World world) { return Integer.MAX_VALUE; |