diff options
Diffstat (limited to 'src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java')
-rw-r--r-- | src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java b/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java new file mode 100644 index 0000000000..5039871764 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java @@ -0,0 +1,233 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.Reference; +import tectech.TecTech; +import tectech.thing.CustomItemList; +import tectech.thing.metaTileEntity.hatch.MTEHatchParam; +import tectech.thing.metaTileEntity.hatch.MTEHatchParamText; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 15.03.2017. + */ +public final class ItemParametrizerMemoryCard extends Item { + + public static ItemParametrizerMemoryCard INSTANCE; + private static IIcon locked, unlocked; + + private ItemParametrizerMemoryCard() { + setMaxStackSize(1); + setHasSubtypes(true); + setUnlocalizedName("em.parametrizerMemoryCard"); + setTextureName(Reference.MODID + ":itemParametrizerMemoryCardUnlocked"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(aPlayer instanceof EntityPlayerMP)) return false; + if (!(tTileEntity instanceof IGregTechTileEntity)) return false; + aStack.stackSize = 1; + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + + if (metaTE instanceof MTEHatchParamText parametrizer) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to parametrizer + parametrizer.param = tNBT.getInteger("param"); + parametrizer.value0D = tNBT.getDouble("value0D"); + parametrizer.value1D = tNBT.getDouble("value1D"); + parametrizer.value0s = tNBT.getString("value0s"); + parametrizer.value1s = tNBT.getString("value1s"); + } else { + // read from parametrizer + NBTTagCompound newTag = new NBTTagCompound(); + newTag.setInteger("param", parametrizer.param); + newTag.setDouble("value0D", parametrizer.value0D); + newTag.setDouble("value1D", parametrizer.value1D); + newTag.setString("value0s", parametrizer.value0s); + newTag.setString("value1s", parametrizer.value1s); + aStack.setTagCompound(newTag); + } + return true; + } else if (metaTE instanceof MTEHatchParam parametrizer) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to parametrizer + parametrizer.param = tNBT.getInteger("param"); + parametrizer.value0D = tNBT.getDouble("value0D"); + parametrizer.value1D = tNBT.getDouble("value1D"); + } else { + // read from parametrizer + NBTTagCompound newTag = new NBTTagCompound(); + tNBT.setInteger("param", parametrizer.param); + tNBT.setDouble("value0D", parametrizer.value0D); + tNBT.setDouble("value1D", parametrizer.value1D); + aStack.setTagCompound(newTag); + } + return true; + } else if (metaTE instanceof TTMultiblockBase controller) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to controller + if (tNBT.hasKey("paramList", Constants.NBT.TAG_LIST)) { + // from controller + NBTTagList tagList = tNBT.getTagList("paramList", Constants.NBT.TAG_COMPOUND); + for (int hatch = 0; hatch < 10; hatch++) { + NBTTagCompound tag = tagList.getCompoundTagAt(hatch); + controller.parametrization + .trySetParameters(hatch, tag.getDouble("value0D"), tag.getDouble("value1D")); + } + } else { + // from parametrizer + controller.parametrization.trySetParameters( + tNBT.getInteger("param"), + tNBT.getDouble("value0D"), + tNBT.getDouble("value1D")); + } + } else { + // read from controller + NBTTagCompound newTag = new NBTTagCompound(); + NBTTagList tagList = new NBTTagList(); + for (int hatch = 0; hatch < 10; hatch++) { + NBTTagCompound tagChild = new NBTTagCompound(); + Parameters.Group.ParameterIn[] parameters = controller.parametrization.getGroup(hatch).parameterIn; + if (parameters[0] != null) { + tagChild.setDouble("value0D", parameters[0].get()); + } + if (parameters[1] != null) { + tagChild.setDouble("value1D", parameters[1].get()); + } + tagList.appendTag(tagChild); + } + newTag.setTag("paramList", tagList); + aStack.setTagCompound(newTag); + } + return true; + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (aPlayer instanceof EntityPlayerMP && aPlayer.isSneaking()) { + aStack.stackSize = 1; + if (aStack.getItemDamage() == 1) { + aStack.setItemDamage(0); + } else { + aStack.setItemDamage(1); + } + return aStack; + } + return aStack; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + if (stack.getItemDamage() == 1) { + return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.paste"); + } else { + return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.copy"); + } + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List<String> aList, boolean boo) { + NBTTagCompound tNBT = aStack.getTagCompound(); + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(translateToLocal("item.em.parametrizerMemoryCard.desc.0")); // Stores Parameters + + if (aStack.getItemDamage() == 1) { + // Use on Multiblock Controller to configure it + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.1")); + } else { + // Use on Multiblock Controller to store parameters + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.2")); + } + // Sneak right click to lock/unlock + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.3")); + + double temp; + if (tNBT != null && tNBT.hasKey("param")) { + aList.add("Hatch ID: " + EnumChatFormatting.AQUA + tNBT.getInteger("param")); + temp = tNBT.getInteger("value0D"); + aList.add("Value 0D: " + EnumChatFormatting.AQUA + temp); + aList.add( + "Value 0B: " + EnumChatFormatting.AQUA + + TTUtility.longBitsToShortString(Double.doubleToLongBits(temp))); + aList.add("Value 0s: " + EnumChatFormatting.AQUA + tNBT.getString("value0s")); + temp = tNBT.getInteger("value1D"); + aList.add("Value 1D: " + EnumChatFormatting.AQUA + temp); + aList.add( + "Value 1B: " + EnumChatFormatting.AQUA + + TTUtility.longBitsToShortString(Double.doubleToLongBits(temp))); + aList.add("Value 1s: " + EnumChatFormatting.AQUA + tNBT.getString("value1s")); + } + } + + public static void run() { + INSTANCE = new ItemParametrizerMemoryCard(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.parametrizerMemory.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + locked = iconRegister.registerIcon(Reference.MODID + ":itemParametrizerMemoryCardLocked"); + unlocked = itemIcon = iconRegister.registerIcon(getIconString()); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage == 1) { + return locked; + } + return unlocked; + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List<ItemStack> list) { + ItemStack that = new ItemStack(this, 1); + that.setTagCompound(new NBTTagCompound()); + list.add(that); + } +} |