Adding Baubles compat for Mysterious Magnet in the amulet slot, cleaning up code to make it more readable. Closes #59.

This commit is contained in:
MysteriousAges committed 2015-09-05 15:49:39 -07:00
1 parent 7ae7af2238
commit 89975c8718
2 files changed
+96 -71

No files matched your search

@@ -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<EntityArrow> 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<EntityItem> 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));
}
}