Posted December 21, 20204 yr Hello there, so I got an item, which can be thrown. The issues is, it's facing the wrong way when doing the charge animation when right click is held. I checked how Mojang did with the trident, they're using an overrides predicate with a special value called "throwing", that updates from 0.0 to 1.0 when the item is being thrown. How could I make my own value just like they did? I checked the wiki but the docs are out of date.
December 21, 20204 yr You have to register a new property for your item, and make use of it in your item json (as you already saw in the trident json), you can find everything you need in orded to do that in the ItemModelsProperties class Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
December 21, 20204 yr Author Hello again, thanks for the info! I got a problem though... It does that, with that: public ModdedSpearItem(Properties properties) { super(properties); ItemModelsProperties.registerProperty(Registries.iron_spear.get(), new ResourceLocation("spear_throwing"), (itemstack, clientworld, livingentity) -> { return livingentity != null && livingentity.isHandActive() && livingentity.getActiveItemStack() == itemstack ? 1.0F : 0.0F; }); } and that's how my object is registered: public static final RegistryObject<Item> iron_spear = ITEMS.register("iron_spear", () -> new ModdedSpearItem(new Item.Properties().group(Azure.TAB).maxStackSize(1))); You got any idea of what I've done wrong?
December 21, 20204 yr Author public Azure() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::enqueueWork); Registries.init(); MinecraftForge.EVENT_BUS.register(this); } private void enqueueWork(final FMLClientSetupEvent event) { ItemModelsProperties.registerProperty(Registries.iron_spear.get(), new ResourceLocation("spear_throwing"), (itemstack, clientworld, livingentity) -> { return livingentity != null && livingentity.isHandActive() && livingentity.getActiveItemStack() == itemstack ? 1.0F : 0.0F; }); } Am I doing something wrong? The game launches but seems to ignore it.
December 21, 20204 yr You just created a new method called enqueueWork, what diesieben07 meant is to use FMLClientSetupEvent#enqueueWork, take a look inside the FMLClientSetupEvent class and its super classes Check out the port of the BetterEnd fabric mod (WIP): https://www.curseforge.com/minecraft/mc-mods/betterend-forge-port
December 21, 20204 yr Author 10 minutes ago, diesieben07 said: You called your method enqueueWork... that's not going to do anything. You need to use enqueueWork on the event, because ItemModelsProperties is not threadsafe. You also registered your property under the "minecraft" namespace, which is probably not what you intended (nor what you should do). What do you mean "under the "minecraft" namespace"? And also how do I use the enqueueWork function? Edited December 21, 20204 yr by MaxAnimator
December 21, 20204 yr 5 minutes ago, MaxAnimator said: What do you mean "under the "minecraft" namespace"? https://mcforge.readthedocs.io/en/latest/concepts/resources/#resourcelocation 6 minutes ago, MaxAnimator said: And also how do I use the enqueueWork function? By calling it?
December 21, 20204 yr Author 1 minute ago, Danebi said: https://mcforge.readthedocs.io/en/latest/concepts/resources/#resourcelocation By calling it? I don't understand what arguments it takes.
December 22, 20204 yr Author Ok I just got it to work... but it still doesn't do anything. private void doClientStuff(final FMLClientSetupEvent event) { event.enqueueWork(new Runnable() { public void run() { ItemModelsProperties.registerProperty(Registries.iron_spear.get(), new ResourceLocation("azure:spear_throwing"), (itemstack, clientworld, livingentity) -> { return livingentity != null && livingentity.isHandActive() && livingentity.getActiveItemStack() == itemstack ? 1.0F : 0.0F; }); } }); }
December 22, 20204 yr Author public Azure() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::setup); FMLJavaModLoadingContext.get().getModEventBus().addListener(this::doClientStuff); Registries.init(); MinecraftForge.EVENT_BUS.register(this); } It's here so it should be called
December 22, 20204 yr Author 33 minutes ago, diesieben07 said: You said "it is not working". Which behavior made you say that? The game seems to ignore it. There's no modification made at all when in game; I checked my model and it does work; so it's coming from this piece of code: private void doClientStuff(final FMLClientSetupEvent event) { event.enqueueWork(new Runnable() { public void run() { ItemModelsProperties.registerProperty(Registries.iron_spear.get(), new ResourceLocation("azure:spear_throwing"), (itemstack, clientworld, livingentity) -> { return livingentity != null && livingentity.isHandActive() && livingentity.getActiveItemStack() == itemstack ? 1.0F : 0.0F; }); } }); }
December 22, 20204 yr Author Thank you!!!! I'll check about data generators and how they work, thanks again!!
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.