Posted September 1, 20169 yr Okay, so I'm continuing to port my mods from 1.8 to 1.10 and have come up with another thing I can't seem to figure out. In my mod I generate a structure that has loot in it, in this case there is a brewing stand where the inventory already contains some potions. To create the potions, previously in 1.8 and earlier it worked fine to do the following: theTileEntity.setInventorySlotContents(slot, new ItemStack(Items.POTIONITEM, 1, 8259)); // should be fire breathing However, now in 1.10 when I open the brewing stand inventory it shows pink and black default textures in the slot where I put the potion, and if I hover over it says that it is water with no effect. Looking at how potions are created in the 1.10 vanilla source, I see that it now has a registry and is doing combinations with potion type to create a unique id. Anyway what is the proper way in 1.10 to create an ItemStack containing a fire resistance potion? Check out my tutorials here: http://jabelarminecraft.blogspot.com/
September 1, 20169 yr Potion.REGISTRY.getObject(new ResourceLocation("fire_resistance")); This is what I would try to use (I don't know, if it works) And then I would do the Stack like this: int id = Potion.REGISTRY.getObject(new ResourceLocation("fire_resistance")); theTileEntity.setInventorySlotContents(slot, new ItemStack(Items.POTIONITEM, 1, id)); Bringing the best mod back alive! Our mod REFORGED! Balkon's Weapons for 1.8: https://github.com/TheOnlySilverClaw/Reforged/releases
September 1, 20169 yr Author Well, I tried some similar ideas. Your idea doesn't really work because getObject() returns something like "net.minecraft.potion.Potion@919086". And even if I just used the 919086 part it wouldn't be a proper potion metadata. There is though ways to get an id for the potion type using PotionType.getID(PotionTypes.FIRE_RESISTANCE) but that isn't a full potion definition since it could be strong, could be splash, etc. I'm pretty sure that doesn't give the metadata value. But could be wrong. Check out my tutorials here: http://jabelarminecraft.blogspot.com/
September 1, 20169 yr Potion items don't use metadata any more, they use NBT. Standard, splash and lingering potions are now separate Item s that use the same NBT format. Tipped arrows also use this format for their effects. There is now the concept of a PotionType , which is a singleton collection of zero or more PotionEffect s (e.g. PotionTypes.LONG_FIRE_RESISTANCE , 8 minutes of Fire Resistance). Vanilla stores its PotionType s in the PotionTypes class and its Potion s in the MobEffects class. A potion item may have either zero or one PotionType as well as zero or more custom PotionEffect s. Use PotionUtils.addPotionToItemStack to set the PotionType of a potion ItemStack and PotionUtils.appendEffects to add custom PotionEffect s to a stack. Use PotionUtils.getEffectsFromStack to get all PotionEffect s from a potion ItemStack . This includes both the PotionType 's effects and the custom effects. Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20169 yr Author Thanks, it definitely seems that things have changed a lot. So I'm still a bit lost on how to simply create an ItemStack containing a specific potion. ItemStack still takes metadata so I need to convert to that, I think, unless there is some other potion util method for creating item stacks. The mob effects class seems to contain the basic effect (like FIRE_RESISTANCE) but not the combined (strong and long-lasting). Sorry for asking to be spoon-fed but it I tried various combinations of mob effects and potion classes and methods and can't seem to create an item stack for strong long-lasting fire resistance... Check out my tutorials here: http://jabelarminecraft.blogspot.com/
September 2, 20169 yr Thanks, it definitely seems that things have changed a lot. So I'm still a bit lost on how to simply create an ItemStack containing a specific potion. ItemStack still takes metadata so I need to convert to that, I think, unless there is some other potion util method for creating item stacks. The mob effects class seems to contain the basic effect (like FIRE_RESISTANCE) but not the combined (strong and long-lasting). Sorry for asking to be spoon-fed but it I tried various combinations of mob effects and potion classes and methods and can't seem to create an item stack for strong long-lasting fire resistance... This may not be the best way to do it, but you could add the NBT directly because all it does it look for a certain tag. I happened to stumble across this in PotionUtils PotionType.getPotionTypeForName(tag.getString("Potion")) Mainly the tag.getString("potion") part which you could set to the PotionType name which does contain LONG and STRONG in there names. VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect. Forge and vanilla BlockState generator.
September 2, 20169 yr Thanks, it definitely seems that things have changed a lot. So I'm still a bit lost on how to simply create an ItemStack containing a specific potion. ItemStack still takes metadata so I need to convert to that, I think, unless there is some other potion util method for creating item stacks. The mob effects class seems to contain the basic effect (like FIRE_RESISTANCE) but not the combined (strong and long-lasting). Sorry for asking to be spoon-fed but it I tried various combinations of mob effects and potion classes and methods and can't seem to create an item stack for strong long-lasting fire resistance... Create the ItemStack with metadata 0, then use the PotionUtils methods to set its NBT. The potion code itself doesn't care what the metadata is (all the effects are stored in NBT), but vanilla only registers the item models for metadata 0 (so other metadata values will be rendered as the missing model). Vanilla doesn't allow you to brew Strong Fire Resistance (because the amplifier doesn't do anything), so there's no PotionType for it. Vanilla doesn't allow you to brew a potion that's both Strong and Long, so there are no PotionType s for it. If you want to use an effect that doesn't have a PotionType registered for it, you can either create and register your own PotionType (using GameRegistry.register , like other IForgeRegistryEntry singletons) or add the PotionEffect directly to the potion ItemStack . Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.
September 2, 20169 yr Author Doh! Got it. You said NBT and for some reason I kept thinking metadata. Makes sense. Check out my tutorials here: http://jabelarminecraft.blogspot.com/
September 2, 20169 yr Author Worked like a charm. For those who might read this thread in the future, here was what I used to create a potion: ItemStack thePotion = PotionUtils.addPotionToItemStack(new ItemStack(Items.POTIONITEM), PotionTypes.LONG_STRENGTH); Check out my tutorials here: http://jabelarminecraft.blogspot.com/
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.