aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/core/item
diff options
context:
space:
mode:
authorMartin Robertz <dream-master@gmx.net>2022-01-30 09:57:25 +0100
committerGitHub <noreply@github.com>2022-01-30 09:57:25 +0100
commit69834eef41c6cb12d69b1963603f7426e0736682 (patch)
tree4b3e3887be059a2e3373a89e7aa8ffa996478a05 /src/main/java/gtPlusPlus/core/item
parent8cc0619706f93b4e81fb930ec7fb85cdcbd5d734 (diff)
parent1d983706ef427b1d008787843ac23529e43cc659 (diff)
downloadGT5-Unofficial-69834eef41c6cb12d69b1963603f7426e0736682.tar.gz
GT5-Unofficial-69834eef41c6cb12d69b1963603f7426e0736682.tar.bz2
GT5-Unofficial-69834eef41c6cb12d69b1963603f7426e0736682.zip
Merge pull request #102 from GTNewHorizons/St00f
St00f
Diffstat (limited to 'src/main/java/gtPlusPlus/core/item')
-rw-r--r--src/main/java/gtPlusPlus/core/item/ModItems.java10
-rw-r--r--src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java45
-rw-r--r--src/main/java/gtPlusPlus/core/item/base/CoreItem.java4
-rw-r--r--src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java62
-rw-r--r--src/main/java/gtPlusPlus/core/item/general/ItemMagicFeather.java269
5 files changed, 367 insertions, 23 deletions
diff --git a/src/main/java/gtPlusPlus/core/item/ModItems.java b/src/main/java/gtPlusPlus/core/item/ModItems.java
index 4004ab2724..8b72b9c7c9 100644
--- a/src/main/java/gtPlusPlus/core/item/ModItems.java
+++ b/src/main/java/gtPlusPlus/core/item/ModItems.java
@@ -76,11 +76,13 @@ import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechItems;
import net.minecraft.item.*;
import net.minecraft.item.Item.ToolMaterial;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.EnumHelper;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
public final class ModItems {
+
public static ToolMaterial STABALLOY = EnumHelper.addToolMaterial("Staballoy", 3, 2500, 7, 1.0F, 18);
public static Item ZZZ_Empty;
@@ -357,6 +359,8 @@ public final class ModItems {
public static CoreItem itemExquisiteIndustrialDiamond;
public static BaseItemMetaFood itemMetaFood;
+
+ public static ItemMagicFeather itemMagicFeather;
static {
Logger.INFO("Items!");
@@ -367,8 +371,9 @@ public final class ModItems {
public static final void init(){
- itemDebugScanner = new DebugScanner();
-
+ itemDebugScanner = new DebugScanner();
+ itemMagicFeather = new ItemMagicFeather();
+
itemAlkalusDisk = new BaseItemDamageable("itemAlkalusDisk", AddToCreativeTab.tabMisc, 1, 0, "Unknown Use", EnumRarity.rare, EnumChatFormatting.AQUA, false, null);
itemBigEgg = new ItemGiantEgg();
itemGenericToken = new ItemGenericToken();
@@ -519,6 +524,7 @@ public final class ModItems {
MaterialGenerator.generate(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN);
MaterialGenerator.generate(ELEMENT.STANDALONE.HYPOGEN);
MaterialGenerator.generate(ELEMENT.STANDALONE.CHRONOMATIC_GLASS);
+ MaterialGenerator.generate(ELEMENT.STANDALONE.FORCE);
//Custom Materials that are from Runescape
MaterialGenerator.generate(ELEMENT.STANDALONE.BLACK_METAL);
diff --git a/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java b/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java
index af03fd2b83..9590ec2848 100644
--- a/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java
+++ b/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java
@@ -1,15 +1,15 @@
package gtPlusPlus.core.item.base;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+
import gregtech.api.GregTech_API;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.TextureSet;
+import gregtech.api.util.GT_LanguageManager;
import gregtech.api.objects.GT_RenderedTexture;
import gregtech.api.util.GT_OreDictUnificator;
import gtPlusPlus.api.objects.Logger;
@@ -17,6 +17,7 @@ import gtPlusPlus.core.creative.AddToCreativeTab;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.lib.LoadedMods;
import gtPlusPlus.core.material.Material;
+import gtPlusPlus.core.material.state.MaterialState;
import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.data.StringUtils;
import gtPlusPlus.core.util.math.MathUtils;
@@ -65,6 +66,9 @@ public class BaseItemComponent extends Item{
//if (componentType != ComponentTypes.DUST)
GT_OreDictUnificator.registerOre(componentType.getOreDictName()+material.getUnlocalizedName(), ItemUtils.getSimpleStack(this));
+ if (componentType == ComponentTypes.GEAR) {
+ GT_OreDictUnificator.registerOre("gear"+material.getUnlocalizedName(), ItemUtils.getSimpleStack(this));
+ }
if (LoadedMods.Thaumcraft) {
//ThaumcraftUtils.addAspectToItem(ItemUtils.getSimpleStack(this), TC_Aspect_Wrapper.generate(TC_Aspects.METALLUM.mAspect), 1);
if (componentMaterial.isRadioactive) {
@@ -168,6 +172,34 @@ public class BaseItemComponent extends Item{
public final String getMaterialName() {
return this.materialName;
}
+
+ @Override
+ public String getItemStackDisplayName(ItemStack stack) {
+ if (componentMaterial == null) {
+ String aFormattedLangName = componentType.getName();
+ if (!aFormattedLangName.startsWith(" ")) {
+ if (aFormattedLangName.contains("@")) {
+ String[] aSplit = aFormattedLangName.split("@");
+ aFormattedLangName = aSplit[0] + " " + getMaterialName() + " " + aSplit[1];
+ }
+ }
+ if (aFormattedLangName.equals(componentType.getName())) {
+ aFormattedLangName = getMaterialName() + aFormattedLangName;
+ }
+ return GT_LanguageManager.addStringLocalization(unlocalName, aFormattedLangName);
+ }
+ String aFormattedLangName = componentType.getName();
+ if (!aFormattedLangName.startsWith(" ")) {
+ if (aFormattedLangName.contains("@")) {
+ String[] aSplit = aFormattedLangName.split("@");
+ aFormattedLangName = aSplit[0] + " " + componentMaterial.getLocalizedName() + " " + aSplit[1];
+ }
+ }
+ if (aFormattedLangName.equals(componentType.getName())) {
+ aFormattedLangName = componentMaterial.getLocalizedName() + aFormattedLangName;
+ }
+ return GT_LanguageManager.addStringLocalization(unlocalName, aFormattedLangName);
+ }
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
@@ -345,6 +377,7 @@ public class BaseItemComponent extends Item{
((Map<Integer, Short[]>) extraData).put((int) Short.MAX_VALUE-2, new Short[] {(short) (((Map<Integer, Short[]>) extraData).size()-1)});
}
if (extraData != null) {
+
Short aCurrentFrame = ((Map<Integer, Short[]>) extraData).get((int) Short.MAX_VALUE)[0];
Short aSize = (short) (((Map<Integer, Short[]>) extraData).size() - 3);
short nextFrame = (short) ((aCurrentFrame < aSize) ? (aCurrentFrame+1) : 0);
@@ -966,10 +999,10 @@ public class BaseItemComponent extends Item{
public static enum ComponentTypes {
DUST("Dust", " Dust", "dust", OrePrefixes.dust),
- DUSTSMALL("DustSmall", " Dust", "dustSmall", OrePrefixes.dustSmall),
- DUSTTINY("DustTiny", " Dust", "dustTiny", OrePrefixes.dustTiny),
+ DUSTSMALL("DustSmall", "Small Pile of@Dust", "dustSmall", OrePrefixes.dustSmall),
+ DUSTTINY("DustTiny", "Tiny Pile of@Dust", "dustTiny", OrePrefixes.dustTiny),
INGOT("Ingot", " Ingot", "ingot", OrePrefixes.ingot),
- HOTINGOT("HotIngot", " Hot Ingot", "ingotHot", OrePrefixes.ingotHot),
+ HOTINGOT("HotIngot", "Hot@Ingot", "ingotHot", OrePrefixes.ingotHot),
PLATE("Plate", " Plate", "plate", OrePrefixes.plate),
PLATEDOUBLE("PlateDouble", " Double Plate", "plateDouble", OrePrefixes.plateDouble),
ROD("Rod", " Rod", "stick", OrePrefixes.stick),
diff --git a/src/main/java/gtPlusPlus/core/item/base/CoreItem.java b/src/main/java/gtPlusPlus/core/item/base/CoreItem.java
index 7ce96b2a88..fbd04eb30b 100644
--- a/src/main/java/gtPlusPlus/core/item/base/CoreItem.java
+++ b/src/main/java/gtPlusPlus/core/item/base/CoreItem.java
@@ -140,7 +140,7 @@ public class CoreItem extends Item
this.setMaxDamage(maxDmg);
this.rarity = regRarity;
this.itemDescription = description;
- this.descColour = colour;
+ this.descColour = colour != null ? colour : EnumChatFormatting.RESET;
this.hasEffect = Effect;
this.turnsInto = OverrideItem;
GameRegistry.registerItem(this, unlocalizedName);
@@ -160,7 +160,7 @@ public class CoreItem extends Item
this.setMaxDamage(maxDmg);
this.rarity = regRarity;
this.itemDescription = description;
- this.descColour = colour;
+ this.descColour = colour != null ? colour : EnumChatFormatting.RESET;
this.hasEffect = Effect;
this.turnsInto = OverrideItem;
GameRegistry.registerItem(this, unlocalizedName);
diff --git a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java
index 396689ef63..af6f036942 100644
--- a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java
+++ b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java
@@ -1,30 +1,35 @@
package gtPlusPlus.core.item.base.itemblock;
+import java.util.HashMap;
import java.util.List;
-import net.minecraft.block.Block;
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.item.ItemBlock;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.EnumChatFormatting;
-import net.minecraft.world.World;
-
+import gregtech.api.util.GT_LanguageManager;
+import gtPlusPlus.core.block.base.BasicBlock.BlockTypes;
+import gtPlusPlus.api.objects.Logger;
import gtPlusPlus.core.block.base.BlockBaseModular;
import gtPlusPlus.core.block.base.BlockBaseOre;
import gtPlusPlus.core.lib.CORE;
import gtPlusPlus.core.material.Material;
import gtPlusPlus.core.material.MaterialStack;
-import gtPlusPlus.core.util.Utils;
import gtPlusPlus.core.util.minecraft.EntityUtils;
import gtPlusPlus.core.util.sys.KeyboardUtils;
+import net.minecraft.block.Block;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemBlock;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
public class ItemBlockGtBlock extends ItemBlock {
+ public static HashMap<String, String> sNameCache = new HashMap<String, String>();
+
protected final int blockColour;
private int sRadiation;
private Material mMaterial;
+ protected BlockTypes thisBlockType;
private final Block thisBlock;
private boolean isOre = false;
@@ -50,15 +55,46 @@ public class ItemBlockGtBlock extends ItemBlock {
if (block instanceof BlockBaseModular){
BlockBaseModular g = (BlockBaseModular) block;
this.mMaterial = g.getMaterialEx();
+ this.thisBlockType = g.thisBlock;
}
else {
this.mMaterial = null;
+ this.thisBlockType = BlockTypes.STANDARD;
}
- // GT_OreDictUnificator.registerOre("block"+block.getUnlocalizedName().replace("tile.block",
- // "").replace("tile.", "").replace("of", "").replace("Of", "").replace("Block",
- // "").replace("-", "").replace("_", "").replace(" ", ""),
- // ItemUtils.getSimpleStack(this));
+ }
+
+ public int getBlockTypeMeta() {
+ if (this.thisBlockType.equals(BlockTypes.STANDARD)) {
+ return 0;
+ }
+ else if (this.thisBlockType.equals(BlockTypes.FRAME)) {
+ return 1;
+ }
+ else if (this.thisBlockType.equals(BlockTypes.ORE)) {
+ return 2;
+ }
+ return 0;
+ }
+
+ public String getUnlocalizedBlockName() {
+ return "block."+mMaterial.getUnlocalizedName()+"."+this.thisBlockType.name().toLowerCase();
+ }
+
+ public String GetProperName() {
+ String tempIngot = sNameCache.get(getUnlocalizedBlockName());
+ if (tempIngot == null) {
+ tempIngot = "BAD.UNLOCAL.NAME";
+ }
+ return tempIngot;
+ }
+
+ @Override
+ public String getItemStackDisplayName(ItemStack stack) {
+ return this.thisBlock.getLocalizedName();
+ //Logger.INFO("Unlocal Name: "+this.getUnlocalizedName());
+ //String aFormattedLangName = GetProperName();
+ //return GT_LanguageManager.addStringLocalization("block."+mMaterial.getUnlocalizedName()+"."+this.thisBlockType.name().toLowerCase()+".name", aFormattedLangName);
}
public int getRenderColor(final int aMeta) {
diff --git a/src/main/java/gtPlusPlus/core/item/general/ItemMagicFeather.java b/src/main/java/gtPlusPlus/core/item/general/ItemMagicFeather.java
new file mode 100644
index 0000000000..4d34bf84e7
--- /dev/null
+++ b/src/main/java/gtPlusPlus/core/item/general/ItemMagicFeather.java
@@ -0,0 +1,269 @@
+package gtPlusPlus.core.item.general;
+
+import java.util.*;
+
+import cpw.mods.fml.common.eventhandler.EventPriority;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.gameevent.TickEvent;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gtPlusPlus.api.objects.Logger;
+import gtPlusPlus.core.creative.AddToCreativeTab;
+import gtPlusPlus.core.item.ModItems;
+import gtPlusPlus.core.item.base.CoreItem;
+import gtPlusPlus.core.lib.CORE;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.*;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.tileentity.TileEntityBeacon;
+import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+
+public class ItemMagicFeather extends CoreItem {
+
+ public static final String NAME = "magicfeather";
+ private static final WeakHashMap<UUID, MagicFeatherData> sPlayerData = new WeakHashMap<UUID, MagicFeatherData>();
+ private static final WeakHashMap<UUID, HashSet<TileEntityBeacon>> sBeaconData = new WeakHashMap<UUID, HashSet<TileEntityBeacon>>();
+
+ public ItemMagicFeather() {
+ super("magicfeather", AddToCreativeTab.tabMisc, 1, 100, new String[]{"Lets you fly around Beacons"}, EnumRarity.uncommon, null, false, null);
+ setMaxStackSize(1);
+ setUnlocalizedName(CORE.MODID + ":" + NAME);
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ @Override
+ public int getEntityLifespan(ItemStack itemStack, World world) {
+ return Integer.MAX_VALUE;
+ }
+
+ @Override
+ @SideOnly(Side.CLIENT)
+ public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) {
+ list.add("Does not need to be the item held in your hand to work");
+ super.addInformation(stack, aPlayer, list, bool);
+ EntityPlayer player = Minecraft.getMinecraft().thePlayer;
+ list.add("");
+ if (player != null) {
+ if (!isInBeaconRange(player)) {
+ list.add("" + EnumChatFormatting.RED + "Needs to be within beacon range");
+ }
+ else {
+ list.add("" + EnumChatFormatting.GOLD + "Fly like an eagle");
+ }
+ HashSet<TileEntityBeacon> aBeaconData = sBeaconData.get(player.getUniqueID());
+ if (aBeaconData != null && !aBeaconData.isEmpty()) {
+ list.add("Nearby Beacons:");
+ for (TileEntityBeacon aBeacon : aBeaconData) {
+ int level = aBeacon.getLevels();
+ if (level > 0) {
+ int radius = (level * 10 + 10);
+ int x = aBeacon.xCoord;
+ int z = aBeacon.zCoord;
+ int y = aBeacon.yCoord;
+ list.add("Level: "+level+", Radius: "+radius);
+ list.add("Location: "+x+", "+y+", "+z);
+ }
+ }
+ }
+ }
+ }
+
+ public boolean hasCustomEntity(ItemStack stack) {
+ return true;
+ }
+
+ private static boolean isInBeaconRange(EntityPlayer player) {
+ World world = player.getEntityWorld();
+ if (world.isRemote) {
+ HashSet<TileEntityBeacon> aBeaconData = sBeaconData.get(player.getUniqueID());
+ if (aBeaconData != null) {
+ return !aBeaconData.isEmpty();
+ }
+ return false;
+ }
+ List<TileEntity> tileEntities = world.loadedTileEntityList;
+ HashSet<TileEntityBeacon> aBeaconData = sBeaconData.get(player.getUniqueID());
+ if (aBeaconData == null) {
+ aBeaconData = new HashSet<TileEntityBeacon>();
+ sBeaconData.put(player.getUniqueID(), aBeaconData);
+ }
+ for (TileEntity t : tileEntities) {
+ if (!(t instanceof TileEntityBeacon)) {
+ continue;
+ }
+ TileEntityBeacon beacon = (TileEntityBeacon) t;
+ int level = beacon.getLevels();
+ if (level == 0) {
+ continue;
+ }
+ int radius = (level * 10 + 10);
+ int x = beacon.xCoord;
+ int z = beacon.zCoord;
+ if (player.posX < (x - radius) || player.posX > (x + radius)) {
+ continue;
+ }
+ if (player.posZ < (z - radius) || player.posZ > (z + radius)) {
+ continue;
+ }
+ if (!aBeaconData.contains(beacon)) {
+ aBeaconData.add(beacon);
+ }
+ }
+ if (aBeaconData.size() > 0) {
+ return true;
+ }
+
+ return false;
+ }
+
+ private static void setMayFly(EntityPlayer player, boolean mayFly) {
+ if (player.capabilities.allowFlying == mayFly) {
+ return;
+ }
+ if (!mayFly) {
+ // force the player on the ground then remove ability to fly
+ // this prevent crashing the the ground and dying
+ // when you accidentally get out of the beacon range
+ player.capabilities.isFlying = false;
+ if (player.onGround && player.fallDistance < 1F) {
+ player.capabilities.allowFlying = false;
+ }
+ }
+ else {
+ player.capabilities.allowFlying = true;
+ }
+ player.sendPlayerAbilities();
+ }
+
+ @SubscribeEvent(priority=EventPriority.HIGHEST)
+ public void onPlayerTick(TickEvent.PlayerTickEvent event) {
+ if (event.side != Side.SERVER) {
+ return;
+ }
+ EntityPlayer player = event.player;
+ HashSet<TileEntityBeacon> aBeaconData = sBeaconData.get(player.getUniqueID());
+ if (aBeaconData != null && !aBeaconData.isEmpty()) {
+ HashSet<TileEntityBeacon> aRemovals = new HashSet<TileEntityBeacon>();
+ for (TileEntityBeacon aBeacon : aBeaconData) {
+ int level = aBeacon.getLevels();
+ if (level == 0) {
+ aRemovals.add(aBeacon);
+ continue;
+ }
+ int radius = (level * 10 + 10);
+ int x = aBeacon.xCoord;
+ int z = aBeacon.zCoord;
+ if (player.posX < (x - radius) || player.posX > (x + radius)) {
+ aRemovals.add(aBeacon);
+ continue;
+ }
+ if (player.posZ < (z - radius) || player.posZ > (z + radius)) {
+ aRemovals.add(aBeacon);
+ continue;
+ }
+ }
+ aBeaconData.removeAll(aRemovals);
+ }
+ boolean hasItem = hasItem(player, ModItems.itemMagicFeather);
+ if (!hasItem) {
+ ItemMagicFeather.sPlayerData.remove(player.getUniqueID());
+ }
+ MagicFeatherData data = ItemMagicFeather.sPlayerData.get(player.getUniqueID());
+ if (data == null) {
+ data = new MagicFeatherData(player);
+ ItemMagicFeather.sPlayerData.put(player.getUniqueID(), data);
+ }
+ data.onTick();
+ }
+
+ @SubscribeEvent(priority=EventPriority.LOWEST)
+ public void onPlayerDeath(LivingDeathEvent event) {
+ if (event.entityLiving != null) {
+ EntityLivingBase aEntity = event.entityLiving;
+ if (aEntity instanceof EntityPlayer && aEntity.worldObj != null) {
+ if (aEntity.worldObj.isRemote) {
+ return;
+ }
+ else {
+ EntityPlayer aPlayer = (EntityPlayer) aEntity;
+ ItemMagicFeather.sPlayerData.remove(aPlayer.getUniqueID());
+ ItemMagicFeather.sBeaconData.remove(aPlayer.getUniqueID());
+ }
+ }
+ }
+ }
+
+ private static boolean hasItem(EntityPlayer player, Item item) {
+ for (int i = 0; i < player.inventory.getSizeInventory(); i++) {
+ ItemStack stack = player.inventory.getStackInSlot(i);
+ if (stack != null && stack.getItem() != null && stack.getItem() instanceof ItemMagicFeather) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static class MagicFeatherData {
+
+ private final EntityPlayer player;
+ private boolean hasItem = false;
+ private int checkTick = 0;
+ private boolean beaconInRangeCache;
+
+ public MagicFeatherData(EntityPlayer player) {
+ this.player = player;
+ this.beaconInRangeCache = player.capabilities.allowFlying;
+ }
+
+ public void onTick() {
+ try {
+ boolean hasItem = hasItem(player, ModItems.itemMagicFeather);
+ if (hasItem != this.hasItem) {
+ if (hasItem) {
+ this.onAdd();
+ }
+ if (!hasItem) {
+ this.onRemove();
+ }
+ this.hasItem = hasItem;
+ Logger.INFO("Ticking feather "+hasItem);
+ return;
+ }
+ }
+ catch (Throwable t) {
+ t.printStackTrace();
+ }
+
+ boolean mayFly = player.capabilities.isCreativeMode || (hasItem && checkBeaconInRange(player));
+ setMayFly(player, mayFly);
+ }
+
+ private void onAdd() {
+ if (!ItemMagicFeather.isInBeaconRange(player)) {
+ return;
+ }
+ setMayFly(player, true);
+ }
+
+ private void onRemove() {
+ if (player.capabilities.isCreativeMode) {
+ return;
+ }
+ setMayFly(player, false);
+ }
+
+ private boolean checkBeaconInRange(EntityPlayer player) {
+ if (checkTick++ % 40 != 0) {
+ return beaconInRangeCache;
+ }
+ beaconInRangeCache = ItemMagicFeather.isInBeaconRange(player);
+ return beaconInRangeCache;
+ }
+ }
+
+}