Jump to content

simplebunsen

Members
  • Posts

    11
  • Joined

  • Last visited

Everything posted by simplebunsen

  1. thanks for your help! Just asking: is there any place except from experienced Forge users, where I can find this kind of in-depth information on specific functions etc? The documentation seems kind of lackluster and barebones for most of the code.
  2. So I want to have an armor item with a chance to get damaged on each tick while a certain condition is met. I can't use the PlayerEntity as ServerPlayerEntity though, since there is the following error: Net.minecraft.client.entity.player.ClientPlayerEntity cannot be cast to net.minecraft.entity.player.ServerPlayerEntity I suspect that it has do do something with sidedness, but can't wrap my head around how, since if I add an @OnlyIn Server Annotation, the Jump Boost doesn't seem to get applied clientside and isn't functionally there (desync?) How do I actually get the ServerPlayerEntity out of this event? @Override public void onArmorTick(ItemStack stack, World world, PlayerEntity player) { player.addPotionEffect(new EffectInstance(Effects.JUMP_BOOST, 0, 4, false, false, false)); if (chance && condition) { stack.attemptDamageItem(1, world.getRandom(), (ServerPlayerEntity) player); } }
  3. very weird... I ended up just applying a speed effect, but I don't have as precise control over the factor there. Thanks for trying to help, anyways!
  4. the method itself seems to be called, as it logs something every tick if I put in a logger. I don't know what the phase method is about, and I can't find any informative docs on it.
  5. I really forgot it huh ?‍♂️ Well it applies the effect more or less as expected on jumping, but the other thing doesn't take it away again at all. This all is in the class public class JumpBootsItem extends ArmorItem which is added to the forge event bus in the main mod method. Not sure if that's relevant.
  6. So I went to solve the problem using the Modifiers.. Firstly I have no clue how to do Reflections, I'm not a Java Master yet ? So I used onGround. public void onArmorTick(ItemStack stack, World world, PlayerEntity player) { player.addPotionEffect(new EffectInstance(Effects.JUMP_BOOST, 0, 4, false, false, false)); if (!player.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).hasModifier(movementSpeed)) { if (slot == EquipmentSlotType.FEET && stack.getItem() == this && !player.onGround) { player.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).applyModifier(movementSpeed); LOGGER.fatal("I am NOT ON GROUND, speed should and has change"); //SPEED is applied (two times in game, maybe due to lack of checks for sidedness? how to do?) } } } @SubscribeEvent public static void onTickEvent(TickEvent.PlayerTickEvent event) { if (event.player.onGround && event.player.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).hasModifier(movementSpeed)){ event.player.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).removeModifier(movementSpeed); LOGGER.fatal("Stopped being in the air etc, speed back to normal"); } } No idea what I'm doing wrong, could you give me some pointers yet again, please?
  7. Thanks for answering, I will try to implement this with my limited knowledge ? Would it be sufficient to apply the modifier in the onArmorTick class, since it only really needs to be checked when I have the armor on. Also, how to apply the modifier? Should I put and remove from the Multimap provided by getAttributeModifiers?
  8. Thanks for replying, I wanted to use space bar so the player had agency over whether or not he actually wanted to continue jumping and receiving faster movement. I will use the second suggestion, but really that's beside the point as the problem I'm having concerns the AttributeModifier not changing properly. Do you know anything about that?
  9. So I want to have an item that has Jump Boost when equipped (already working), and I want the movement speed to be faster in the air. Therefore, I want to change the Attribute Modifiers of my ArmorItem programatically, and at runtime. The code below doesn't produce the expected outcome of only applying the speedup when the player holds the space key, instead it only even seems to fire if I hover directly on the item in my armor slot, pressing the space bar. public class JumpBootsItem extends ArmorItem { private AttributeModifier movementSpeed = new AttributeModifier("JumpBootsMovementSpeedModifier", 1, Operation.MULTIPLY_TOTAL); public Minecraft mc = Minecraft.getInstance(); @Override public Multimap<String, AttributeModifier> getAttributeModifiers(EquipmentSlotType slot, ItemStack stack) { Multimap<String, AttributeModifier> output = super.getAttributeModifiers(slot, stack); if (slot == EquipmentSlotType.FEET && stack.getItem().equals(this) && InputMappings.isKeyDown(mc.getMainWindow().getHandle(), mc.gameSettings.keyBindJump.getKey().getKeyCode())) { output.put(SharedMonsterAttributes.MOVEMENT_SPEED.getName(), this.movementSpeed); LOGGER.fatal("I am holding jump, speed should change"); } return output; } How to actually implement what I'm trying to do? Should I maybe instead try to simply add a "clone" of the item with the speed boost applied, then silently change it in the armor slot once the space bar is pressed? Thanks for replies!
×
×
  • Create New...

Important Information

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