Jump to content

TheRPGAdventurer

Members
  • Posts

    642
  • Joined

  • Last visited

Everything posted by TheRPGAdventurer

  1. This is the only one that I do not understand. Dont kno how to use NBTTagList, What tag dragn_0, I though there was only 2 NBT's. the "dragon" for the dragon and "byte" for the selection
  2. If the oneo f the dragon is dead, how do I remove its index?
  3. package com.TheRPGAdventurer.ROTD.client.items; import java.util.List; import java.util.UUID; import javax.annotation.Nullable; import com.TheRPGAdventurer.ROTD.DragonMounts; import com.TheRPGAdventurer.ROTD.server.entity.EntityTameableDragon; import com.TheRPGAdventurer.ROTD.util.DMUtils; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTUtil; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextComponentString; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.WorldWorkerManager; import net.minecraftforge.common.util.Constants; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemDragonWhistle extends Item { // private final MessageDragonWhistle dcw = new MessageDragonWhistle(); // private List<EntityTameableDragon> dragons = new ArrayList(); // EntityTameableDragon dragon; private byte oldIndex; public ItemDragonWhistle() { this.setUnlocalizedName("dragon_whistle"); this.setRegistryName(new ResourceLocation(DragonMounts.MODID, "dragon_whistle")); this.setMaxStackSize(1); this.setCreativeTab(DragonMounts.TAB); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { // tooltip.add(StatCollector.translateToLocal(dragon.toString())); } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); int i = player.dimension; if(worldIn instanceof WorldServer) { WorldServer worldServer = (WorldServer) worldIn; EntityTameableDragon dragon = (EntityTameableDragon) worldServer.getEntityFromUuid(stack.getTagCompound().getUniqueId("dragons")); if (player.isSneaking() && stack.hasTagCompound()) { byte oldIndex = stack.getTagCompound().getByte("dragons"); byte newIndex = (byte) ((oldIndex + 1) % Math.min(3, stack.getTagCompound().getSize())); stack.getTagCompound().setByte("dragons", newIndex); DMUtils.getLogger().info("Dragon is" + dragon.getDisplayName().toString()); player.sendStatusMessage(new TextComponentString("whistle.controlling:" + dragon.getDisplayName().toString() + "" +dragon.getUniqueID().toString()), true); } } if (!player.isSneaking() && stack.hasTagCompound()) { if (worldIn.isRemote) { DragonMounts.proxy.openDragonWhistleGui(stack.getTagCompound().getUniqueId("dragons"), new ItemStack(this), worldIn); return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack); } } else if(!stack.hasTagCompound()) { player.sendStatusMessage(new TextComponentString("whistle.empty"), true); return new ActionResult<ItemStack>(EnumActionResult.FAIL, stack); } return new ActionResult<ItemStack>(EnumActionResult.FAIL, stack); } @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if (target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon) target; if (dragon.isTamedFor(player)) { NBTTagCompound nbt = new NBTTagCompound(); // NBTTagList nbtList; if (stack.hasTagCompound()) { nbt = stack.getTagCompound(); } else { stack.setTagCompound(nbt); } if (nbt.hasKey("dragons") && stack.getTagCompound().getSize() <= 3) { // I got confused because VoidWalker is mentioning NBTTagList and Im tempted use it UUID uuid = dragon.getUniqueID(); nbt.setTag("dragons", NBTUtil.createUUIDTag(uuid)); // is storing for the dragon in here enough? } else { player.sendStatusMessage(new TextComponentString("whistle.limit"), true); } } else { player.sendStatusMessage(new TextComponentString("dragon.notOwned"), true); } return true; } else { return false; } } } 1. is stack.gettagcompound.setByte("dragons", newIndex) should I use to get the index of collected dragons? I get an error called: Caused by: java.lang.ArithmeticException: / by zero 2. I thinks something is missing I ge
  4. SO I have this in the guiDragonWhistle @Override protected void actionPerformed(GuiButton button) { if(dragon != null) { byte previousState = dragon.getWhistleState(); dragon.come(button == come); dragon.circle(button == circle); dragon.follow(button == followFlying); dragon.nothing(button == nothing); byte controlState = dragon.getWhistleState(); if (controlState != previousState) { DragonMounts.NETWORK_WRAPPER .sendToServer(new MessageDragonWhistle(dragon.getEntityId(), controlState)); } } } How do I replace the nothing value, basicaaly the default one, the one with no commands. Can I just easily insert something like a null or false value?
  5. Its an index right? for the position of which dragon UUID should I be selecting to input commands with?
  6. So after I made this, what getter should I call it in the nbt?
  7. Per Whistle, I mentioned that it can carry 3 dragon datas. So i want a limit for 3 dragons, I also have to ensure the dragons have the player who used it is the dragon's owner, but since items are singletons.... So i need an NBTTagList to store 3 dragons and cycle which dragon to control with shift + rightCLicking it and it will print a message in the hotbar saying The details what the dragon is being controlled, Owner or UUID breed, I can choose maybe at least one so it wont be a hassle.
  8. Current Problem : 1. really need a docs to understand NBT's and know what methods to call. Vanilla codes cannot be trusted that much "too many much magic numbers and the effort of cycling through each class used for different problems" 2. Constant has been cast on a wrong import lmao, use forge one 3. Cannot diffrentiate NBTLists to NBTTagCompound, it seems like NBTTagCompound is required to use NBTTagLists, 4. Not knowing Cycling through dragons as mentioned above, with byte and what to call to cycle 5. Can I really use Guis to set dragon with commands, pic from the first post 6. Limits as mentioned, no idea how to set it it with NBTTagLists Things I Understand: 1. Items are singletons use ItemStacks for some reason (if have a hacked 64 stack diamond sword then separate them from stack in an inventory its low red bar durability is retained) 2. NBT's as I vaguely understood are a way to store data on stuff. Like entities, items, guis? (GUIScreenBook : stored on item or GUI) 3. We will use stored ID's to identify what dragon to control no brainer.
  9. package com.TheRPGAdventurer.ROTD.client.items; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.annotation.Nullable; import com.TheRPGAdventurer.ROTD.DragonMounts; import com.TheRPGAdventurer.ROTD.client.userinput.StatCollector; import com.TheRPGAdventurer.ROTD.server.entity.EntityTameableDragon; import com.TheRPGAdventurer.ROTD.server.network.MessageDragonWhistle; import gnu.trove.impl.Constants; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemWrittenBook; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTUtil; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemDragonWhistle extends Item { // private final MessageDragonWhistle dcw = new MessageDragonWhistle(); // private List<EntityTameableDragon> dragons = new ArrayList(); // EntityTameableDragon dragon; private byte listPos; public ItemDragonWhistle() { this.setUnlocalizedName("dragon_whistle"); this.setRegistryName(new ResourceLocation(DragonMounts.MODID, "dragon_whistle")); this.setMaxStackSize(1); this.setCreativeTab(DragonMounts.TAB); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { // tooltip.add(StatCollector.translateToLocal(dragons.toString())); } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); if(!worldIn.isRemote && !player.isSneaking() && stack.hasTagCompound()) { DragonMounts.proxy.openDragonWhistleGui(stack.getTagCompound().getUniqueId("dragons"), new ItemStack(this), (WorldServer)worldIn); } return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack); } @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if(target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon)target; // this.dragon = dragon; if(dragon.isTamedFor(player)) { NBTTagCompound nbt = new NBTTagCompound(); NBTTagList nbtList; if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); nbtList = nbt.getTagList("dragons", Constants.DEFAULT_BYTE_NO_ENTRY_VALUE); } else { stack.setTagCompound(nbt); } if(nbt.hasKey("dragons")) { UUID uuid = dragon.getUniqueID(); nbt.setTag("dragons", NBTUtil.createUUIDTag(uuid)); //nbt.setInteger("dragons", dragon.getEntityId()); //} else { } player.sendStatusMessage(new TextComponentTranslation("dragon.added" + dragon.getUniqueID().toString(), DragonMounts.MODID), true); } else { player.sendStatusMessage(new TextComponentTranslation("dragon.notTamed", DragonMounts.MODID), true); } return true; } else { return false; } } /* if(player.isSneaking()) { controllableDragons.iterator().next(); player.sendStatusMessage(dragon.getDisplayName(), true); // setting the value of N as 4 int limit = 3; int count = 0; Iterator<EntityTameableDragon> it = controllableDragons.iterator(); // Iterating through the list of integers while (it.hasNext()) { it.next(); count++; // Check if first four i.e, (equal to N) // integers are iterated. if (count > limit) { // If yes then remove all the remaining integers. it.remove(); } } System.out.print("New stream of length N" + " after truncation is : "); // Displaying new stream of length // N after truncation for (EntityTameableDragon number : controllableDragons) { System.out.print(number + " "); } } */ }
  10. package com.TheRPGAdventurer.ROTD.client.items; import java.util.ArrayList; import java.util.List; import java.util.UUID; import javax.annotation.Nullable; import com.TheRPGAdventurer.ROTD.DragonMounts; import com.TheRPGAdventurer.ROTD.client.userinput.StatCollector; import com.TheRPGAdventurer.ROTD.server.entity.EntityTameableDragon; import com.TheRPGAdventurer.ROTD.server.network.MessageDragonWhistle; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemWrittenBook; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTUtil; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemDragonWhistle extends Item { private final MessageDragonWhistle dcw = new MessageDragonWhistle(); // private List<EntityTameableDragon> dragons = new ArrayList(); // EntityTameableDragon dragon; private byte listPos; public ItemDragonWhistle() { this.setUnlocalizedName("dragon_whistle"); this.setRegistryName(new ResourceLocation(DragonMounts.MODID, "dragon_whistle")); this.setMaxStackSize(1); this.setCreativeTab(DragonMounts.TAB); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { // tooltip.add(StatCollector.translateToLocal(dragons.toString())); } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); if(worldIn.isRemote && !player.isSneaking() && stack.hasTagCompound()) { DragonMounts.proxy.openDragonWhistleGui(stack.getTagCompound().getUniqueId("dragons"), new ItemStack(this), (WorldServer)worldIn); } return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack); } @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if(target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon)target; // this.dragon = dragon; if(dragon.isTamedFor(player)) { NBTTagCompound nbt = new NBTTagCompound(); NBTTagList nbtList; if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); nbtList = nbt.getTagList("dragons", 8); // copied from guiscreen book } else { stack.setTagCompound(nbt); } if(nbt.hasKey("dragons")) { UUID uuid = dragon.getUniqueID(); nbt.setTag("dragons", NBTUtil.createUUIDTag(uuid)); //nbt.setInteger("dragons", dragon.getEntityId()); //} else { } player.sendStatusMessage(new TextComponentTranslation("dragon.added" + dragon.getUniqueID().toString(), DragonMounts.MODID), true); } else { player.sendStatusMessage(new TextComponentTranslation("dragon.notTamed", DragonMounts.MODID), true); } return true; } else { return false; } } /* if(player.isSneaking()) { controllableDragons.iterator().next(); player.sendStatusMessage(dragon.getDisplayName(), true); // setting the value of N as 4 int limit = 3; int count = 0; Iterator<EntityTameableDragon> it = controllableDragons.iterator(); // Iterating through the list of integers while (it.hasNext()) { it.next(); count++; // Check if first four i.e, (equal to N) // integers are iterated. if (count > limit) { // If yes then remove all the remaining integers. it.remove(); } } System.out.print("New stream of length N" + " after truncation is : "); // Displaying new stream of length // N after truncation for (EntityTameableDragon number : controllableDragons) { System.out.print(number + " "); } } */ }
  11. @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if(target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon)target; this.dragon = dragon; if(dragon.isTamedFor(player)) { NBTTagCompound nbt = new NBTTagCompound(); NBTTagList nbtList; if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); nbtList = nbt.getTagList("dragons", 3); // limit as you said } else { stack.setTagCompound(nbt); } if(nbt.hasKey("dragons")) { UUID uuid = dragon.getUniqueID(); nbt.setTag("dragons", NBTUtil.createUUIDTag(uuid)); nbt.setInteger("dragons", dragon.getEntityId()); //} else { } player.sendStatusMessage(new TextComponentTranslation("dragon.added" + dragon.getUniqueID().toString(), new Object[0]), true); } else { player.sendStatusMessage(new TextComponentTranslation("dragon.notTamed", new Object[0]), true); } return true; } else { return false; } } Something is missing perhaps, please tell me what, and what methods to use.
  12. That doesnt exist it seems, just world.getEntityID(int), so how do I convert UUID to int?
  13. what method do i call to get the dragon from uuid or nbt, does it have something to do with world?
  14. I know theres something wrong and missing here and Im asking you what. @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if(target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon)target; this.dragon = dragon; if(dragon.isTamedFor(player)) { NBTTagCompound nbt; NBTTagList nbtList; if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); } else { nbt = new NBTTagCompound(); } if(nbt.hasKey("dragons")) { UUID uuid = dragon.getUniqueID(); nbt.setTag("dragons", NBTUtil.createUUIDTag(uuid)); //} else { } player.sendStatusMessage(new TextComponentTranslation("dragon.added" + dragon.getUniqueID().toString(), new Object[0]), true); } else { player.sendStatusMessage(new TextComponentTranslation("dragon.notTamed", new Object[0]), true); } return true; } else { return false; } }
  15. Is there NBT tutorials in the docs, wikipedia for minecraft only provide for commands
  16. Sorry my bad. What methods do I call to store UUID's im not so sure. Also private List<EntityTameableDragon> dragons = new ArrayList();  EntityTameableDragon dragon; would these be included ?
  17. SO NBTTagCompound is wrong and I should prefer using NBTTaglist then remove NBTTagCompound?
  18. See, I want a dragon whistle that when right clicked will open a gui, and have an array of commands, fly, circle, come, nothing. The commands seem to work but problem is, when i do the command, all the dragons in the world will do the same command, so I want a dragon to be right clicked by the owner to add a lists of dragons to control, the maximum is 3 dragons per whistle. and I can change what dragon to control by shift + right clicking the whistle, it will send a status message at the hotbar with the dragons displayName. // This code is an attempt, not really finished. package com.TheRPGAdventurer.ROTD.client.items; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import javax.annotation.Nullable; import com.TheRPGAdventurer.ROTD.DragonMounts; import com.TheRPGAdventurer.ROTD.client.userinput.StatCollector; import com.TheRPGAdventurer.ROTD.server.entity.EntityTameableDragon; import com.TheRPGAdventurer.ROTD.server.network.MessageDragonWhistle; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; public class ItemDragonWhistle extends Item { private final MessageDragonWhistle dcw = new MessageDragonWhistle(); private List<EntityTameableDragon> dragons = new ArrayList(); EntityTameableDragon dragon; public ItemDragonWhistle() { this.setUnlocalizedName("dragon_whistle"); this.setRegistryName(new ResourceLocation(DragonMounts.MODID, "dragon_whistle")); this.setMaxStackSize(1); this.setCreativeTab(DragonMounts.TAB); } @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { tooltip.add(StatCollector.translateToLocal(dragons.toString())); } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer player, EnumHand hand) { ItemStack stack = player.getHeldItem(hand); if(worldIn.isRemote && !player.isSneaking()) { DragonMounts.proxy.openDragonWhistleGui(dragon, new ItemStack(this)); } return new ActionResult<ItemStack>(EnumActionResult.SUCCESS, stack); } @Override public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity target) { if(target instanceof EntityTameableDragon) { EntityTameableDragon dragon = (EntityTameableDragon)target; this.dragon = dragon; if(dragon.isTamedFor(player)) { NBTTagCompound nbt; if(stack.hasTagCompound()) { nbt = stack.getTagCompound(); } else { nbt = new NBTTagCompound(); } if(nbt.hasKey("dragons")) { } else { } player.sendStatusMessage(new TextComponentTranslation("dragon.added" + dragon.getUniqueID().toString(), new Object[0]), true); } else { player.sendStatusMessage(new TextComponentTranslation("dragon.notTamed", new Object[0]), true); } return true; } else { return false; } } /* if(player.isSneaking()) { controllableDragons.iterator().next(); player.sendStatusMessage(dragon.getDisplayName(), true); // setting the value of N as 4 int limit = 3; int count = 0; Iterator<EntityTameableDragon> it = controllableDragons.iterator(); // Iterating through the list of integers while (it.hasNext()) { it.next(); count++; // Check if first four i.e, (equal to N) // integers are iterated. if (count > limit) { // If yes then remove all the remaining integers. it.remove(); } } System.out.print("New stream of length N" + " after truncation is : "); // Displaying new stream of length // N after truncation for (EntityTameableDragon number : controllableDragons) { System.out.print(number + " "); } } */ }
  19. when riding a horse and you look down it zooms in if its close to a block, hile mine just passes through it revealing air blocks below
  20. So i have a rideable dragon, with its camera extended using EntityViewRenderEvent.CameraSetup, problem is, it pass through blocks and maybe exploited to find caves below. SO I need a horse or pig EntityViewRenderEvent.CameraSetup to figure out how they dont pass through blocks. @SubscribeEvent public void thirdPersonCameraFix(EntityViewRenderEvent.CameraSetup event) { EntityPlayer player = Minecraft.getMinecraft().player; if(player.getRidingEntity() instanceof EntityTameableDragon) { float scale = MathX.clamp(((EntityTameableDragon) player.getRidingEntity()).getScale(), 0.1f, 1f); if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GL11.glTranslated(0F , -1.4F, -10.8 * scale); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GL11.glTranslated(0F , -0.8F, 10.8 * scale); } } else if(player.getRidingEntity() instanceof EntityCarriage) { if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GL11.glTranslated(0F , -0.8F, -10.8); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GL11.glTranslated(0F , -0.8F, 10.8); } } }
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.