From 89975c8718f975c3037d3e5f3264ffa96029de06 Mon Sep 17 00:00:00 2001 From: MysteriousAges Date: Sat, 5 Sep 2015 15:49:39 -0700 Subject: [PATCH] Adding Baubles compat for Mysterious Magnet in the amulet slot, cleaning up code to make it more readable. Closes #59. --- gradle.properties | 2 +- .../magicbees/item/ItemMysteriousMagnet.java | 165 ++++++++++-------- 2 files changed, 96 insertions(+), 71 deletions(-) diff --git a/gradle.properties b/gradle.properties index 93590de..a985ef2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ version_major=2 version_minor=3 -version_rev=5 +version_rev=6 version_forestry=3.6.3.20 version_bloodmagic=1.3.3-4 diff --git a/src/main/java/magicbees/item/ItemMysteriousMagnet.java b/src/main/java/magicbees/item/ItemMysteriousMagnet.java index 922a6ae..1b14ad9 100644 --- a/src/main/java/magicbees/item/ItemMysteriousMagnet.java +++ b/src/main/java/magicbees/item/ItemMysteriousMagnet.java @@ -2,6 +2,8 @@ package magicbees.item; import java.util.List; +import baubles.api.BaubleType; +import baubles.api.IBauble; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -12,6 +14,7 @@ import magicbees.main.utils.TabMagicBees; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; @@ -21,16 +24,17 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.IIcon; import net.minecraft.world.World; +import cpw.mods.fml.common.Optional; -public class ItemMysteriousMagnet extends Item -{ +@Optional.Interface(modid="Baubles", iface="baubles.api.IBauble") +public class ItemMysteriousMagnet extends Item implements IBauble { + @SideOnly(Side.CLIENT) private IIcon activeIcon; private final float FUDGE_FACTOR = 0.2f; - public ItemMysteriousMagnet() - { + public ItemMysteriousMagnet() { super(); this.setNoRepair(); this.setHasSubtypes(true); @@ -41,84 +45,130 @@ public class ItemMysteriousMagnet extends Item @Override @SideOnly(Side.CLIENT) @SuppressWarnings({ "unchecked", "rawtypes" }) - public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4) - { - String s = LocalizationManager.getLocalizedString("misc.level", itemStack.getItemDamage() >> 1); - if (isMagnetActive(itemStack)) - { + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4) { + String s = LocalizationManager.getLocalizedString("misc.level", getMagnetLevel(itemStack)); + if (isMagnetActive(itemStack)) { list.add(LocalizationManager.getLocalizedString("misc.magnetActive", s)); } - else - { + else { list.add(LocalizationManager.getLocalizedString("misc.magnetInactive", s)); } } + @Override + public void onUpdate(ItemStack itemStack, World world, Entity entity, int par4, boolean par5) { + if (entity instanceof EntityLivingBase) { + onWornTick(itemStack, (EntityLivingBase) entity); + } + } + @Override @SideOnly(Side.CLIENT) @SuppressWarnings({ "unchecked", "rawtypes" }) - public void getSubItems(Item item, CreativeTabs tabs, List list) - { - for (int i = 0; i <= getMaximumLevel(); i++) - { + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for (int i = 0; i <= getMaximumLevel(); i++) { list.add(new ItemStack(this, 1, i * 2)); } } @Override @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) - { + public void registerIcons(IIconRegister iconRegister) { this.itemIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":magnetInactive"); this.activeIcon = iconRegister.registerIcon(CommonProxy.DOMAIN + ":magnetActive"); } @Override @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int damage) - { - return isMagnetActive(damage) ? this.activeIcon : this.itemIcon; + public IIcon getIconFromDamage(int meta) { + return isMagnetActive(meta) ? this.activeIcon : this.itemIcon; } @Override @SideOnly(Side.CLIENT) - public boolean hasEffect(ItemStack itemStack, int pass) - { + public boolean hasEffect(ItemStack itemStack, int pass) { return isMagnetActive(itemStack); } @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) - { - if (player.isSneaking()) - { - itemStack.setItemDamage(itemStack.getItemDamage() ^ 1); + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) { + if (player.isSneaking()) { + toggleActive(itemStack); } return itemStack; } + + public void toggleActive(ItemStack itemStack) { + itemStack.setItemDamage(itemStack.getItemDamage() ^ 1); + } - @SuppressWarnings("unchecked") + public boolean isMagnetActive(ItemStack itemStack) { + return isMagnetActive(itemStack.getItemDamage()); + } + + private boolean isMagnetActive(int damage) { + return (damage & 0x01) == 1; + } + + public int getMaximumLevel() { + return Config.magnetMaxLevel; + } + + public int getMagnetLevel(ItemStack itemStack) { + return itemStack.getItemDamage() >> 1; + } + + private float getRadius(ItemStack itemStack) { + return Config.magnetBaseRange + (Config.magnetLevelMultiplier * getMagnetLevel(itemStack)); + } + @Override - public void onUpdate(ItemStack itemStack, World world, Entity entity, int par4, boolean par5) - { - if (isMagnetActive(itemStack) && entity instanceof EntityPlayer) - { + public boolean canEquip(ItemStack arg0, EntityLivingBase arg1) { + return true; + } + + @Override + public boolean canUnequip(ItemStack arg0, EntityLivingBase arg1) { + return true; + } + + @Override + @Optional.Method(modid="Baubles") + public BaubleType getBaubleType(ItemStack arg0) { + return BaubleType.AMULET; + } + + @Override + public void onEquipped(ItemStack itemStack, EntityLivingBase entity) { + if (!isMagnetActive(itemStack)) { + toggleActive(itemStack); + } + } + + @Override + public void onUnequipped(ItemStack itemStack, EntityLivingBase entity) { + if (isMagnetActive(itemStack)) { + toggleActive(itemStack); + } + } + + @Override + @SuppressWarnings("unchecked") + public void onWornTick(ItemStack itemStack, EntityLivingBase entity) { + if (isMagnetActive(itemStack) && entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)entity; - float radius = getRadius(itemStack.getItemDamage()) - FUDGE_FACTOR; + World world = entity.worldObj; + float radius = getRadius(itemStack) - FUDGE_FACTOR; AxisAlignedBB bounds = player.boundingBox.expand(radius, radius, radius); - if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) - { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { bounds.expand(FUDGE_FACTOR, FUDGE_FACTOR, FUDGE_FACTOR); - if ((itemStack.getItemDamage() >> 1) >= 7) - { + if (7 <= getMagnetLevel(itemStack)) { List arrows = world.getEntitiesWithinAABB(EntityArrow.class, bounds); - for (EntityArrow arrow : arrows) - { - if (arrow.canBePickedUp == 1 && world.rand.nextInt(6) == 0) - { + for (EntityArrow arrow : arrows) { + if (arrow.canBePickedUp == 1 || world.rand.nextFloat() < 0.3f) { EntityItem replacement = new EntityItem(world, arrow.posX, arrow.posY, arrow.posZ, new ItemStack(Items.arrow)); world.spawnEntityInWorld(replacement); @@ -130,10 +180,8 @@ public class ItemMysteriousMagnet extends Item List list = world.getEntitiesWithinAABB(EntityItem.class, bounds); - for (EntityItem e : list) - { - if (e.age >= 10) - { + for (EntityItem e : list) { + if (e.age >= 10) { double x = player.posX - e.posX; double y = player.posY - e.posY; double z = player.posZ - e.posZ; @@ -149,13 +197,11 @@ public class ItemMysteriousMagnet extends Item e.motionZ = z; e.isAirBorne = true; - if (e.isCollidedHorizontally) - { + if (e.isCollidedHorizontally) { e.motionY += 1; } - if (world.rand.nextInt(20) == 0) - { + if (world.rand.nextFloat() < 0.2f) { float pitch = 0.85f - world.rand.nextFloat() * 3f / 10f; world.playSoundEffect(e.posX, e.posY, e.posZ, "mob.endermen.portal", 0.6f, pitch); } @@ -163,25 +209,4 @@ public class ItemMysteriousMagnet extends Item } } } - - private boolean isMagnetActive(ItemStack itemStack) - { - return isMagnetActive(itemStack.getItemDamage()); - } - - private boolean isMagnetActive(int damage) - { - return (damage & 0x01) == 1; - } - - public int getMaximumLevel() - { - return Config.magnetMaxLevel; - } - - private float getRadius(int damageValue) - { - return Config.magnetBaseRange + (Config.magnetLevelMultiplier * (damageValue >> 1)); - } - }