diff options
author | Martin Robertz <dream-master@gmx.net> | 2022-01-30 09:57:25 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-30 09:57:25 +0100 |
commit | 69834eef41c6cb12d69b1963603f7426e0736682 (patch) | |
tree | 4b3e3887be059a2e3373a89e7aa8ffa996478a05 /src/main/java/gtPlusPlus/core/item | |
parent | 8cc0619706f93b4e81fb930ec7fb85cdcbd5d734 (diff) | |
parent | 1d983706ef427b1d008787843ac23529e43cc659 (diff) | |
download | GT5-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')
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; + } + } + +} |