3mptysl Posted August 15, 2022 Share Posted August 15, 2022 My character dies and the totem is activated after dying and then the totem is shown with the respawn menu open. i need steve not to die. And i have other problem how i reproduce the sound and particle of default totem of undying? Quote Link to comment Share on other sites More sharing options...
vemerion Posted August 15, 2022 Share Posted August 15, 2022 You would need to listen to the LivingDeathEvent and check if the player is holding your custom totem and if so prevent the death. 3 hours ago, 3mptysl said: And i have other problem how i reproduce the sound and particle of default totem of undying? You need to manually play the sound TOTEM_USE and create the particle TOTEM_OF_UNDYING when you prevent the death. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 Okay and where i check if the player is holding my totem in client or with a packet, or in Item totem? And where re the partícles because i didnt find it. Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 Vanilla handles the Totem of Undying in LivingEntity#checkTotemDeathProtection. The particles and the totem overlay are handled via ServerLevel#broadcastEntityEvent with event id 35. Note this will call the vanilla logic of the Totem on the client in ClientPacketListener#handleEntityEvent. I you wish to have a custom behavior you need to send a custom Packet to the client which handle this for you. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 I fix to prevent death and work correctly but when i use broadcastEntityEvent i cant put my custom totem, so i use this but idk how i send particles and sound public boolean handle(Supplier<NetworkEvent.Context> supplier) { NetworkEvent.Context context = supplier.get(); context.enqueueWork(() -> { // Server ServerPlayer player = context.getSender(); ServerLevel level = player.getLevel(); // level.broadcastEntityEvent(player,(byte) 35); Minecraft.getInstance().gameRenderer.displayItemActivation(new ItemStack(ItemInit.TOTEM_BELLOTO.get())); }); return true; } Quote Link to comment Share on other sites More sharing options...
warjort Posted August 15, 2022 Share Posted August 15, 2022 1 hour ago, Luis_ST said: I you wish to have a custom behavior you need to send a custom Packet to the client which handle this for you. Do this. You can't run client code on the server. Or more accurately, you can, but it will crash on a dedicated server. Quote Boilerplate: If you don't post your logs/debug.log we can't help you. For curseforge you need to enable the forge debug.log in its minecraft settings. You should also post your crash report if you have one. If there is no error in the log file and you don't have a crash report then post the launcher_log.txt from the minecraft folder. Again for curseforge this will be in your curseforge/minecraft/Install Large files should be posted to a file sharing site like https://gist.github.com You should also read the support forum sticky post. Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 27 minutes ago, 3mptysl said: when i use broadcastEntityEvent i cant put my custom totem, so i use this but idk how i send particles and sound You should take a look at this FCW page, especially into this entry. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 i check that, but no idea how i send a packet to server with LiveDeathEvent#setCanceled, i think im really confuse xd. Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 Why to the server, the effects of the Totem are client side only, you need to send a (custom) Packet from server to client. This can be done as follows: <your simple channel>.send(PacketDistributor.PLAYER.with(() -> <the server player>), <your custom packet>); Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 okay i create the package like this public class TotemBellotoClientPacket { public TotemBellotoClientPacket() { } public TotemBellotoClientPacket(FriendlyByteBuf buf) { } public void toBytes(FriendlyByteBuf buf) { } public boolean handle(Supplier<NetworkEvent.Context> supplier) { NetworkEvent.Context context = supplier.get(); context.enqueueWork(() -> { // ClientSide ServerPlayer player = context.getSender(); ServerLevel level = player.getLevel(); Minecraft.getInstance().gameRenderer.displayItemActivation(new ItemStack(ItemInit.TOTEM_BELLOTO.get())); level.playSound(null, player.getOnPos(), SoundEvents.TOTEM_USE, SoundSource.PLAYERS, 0.5F, level.random.nextFloat() *0.1F + 0.9F); }); return true; } } Is it correctly? i need to send it to the client but from where i send it? Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 1 hour ago, 3mptysl said: Is it correctly? Almost, you can not use the #getSender on the client, since there is only one sender on the client. You can get the Player and the Level from the Minecraft instance. You also need to move this into a client only class, and wrap the call via DistExecutor#unsafeRunWhenOn you can use this (the second code example) as an example. 1 hour ago, 3mptysl said: Minecraft.getInstance().gameRenderer.displayItemActivation(new ItemStack(ItemInit.TOTEM_BELLOTO.get())); level.playSound(null, player.getOnPos(), SoundEvents.TOTEM_USE, SoundSource.PLAYERS, 0.5F, level.random.nextFloat() *0.1F + 0.9F); 1 hour ago, 3mptysl said: i need to send it to the client but from where i send it? From LivingDeathEvent after you cancel the Event via your SimpleChannel (which you have hopefully already created). Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 Like this? SimpleMessage -> import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.network.NetworkDirection; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.simple.SimpleChannel; import java.util.function.BiConsumer; public class ModMessages { private static SimpleChannel INSTANCE; private static int packetId = 0; private static int id() { return packetId++; } public static void register() { SimpleChannel net = NetworkRegistry.ChannelBuilder .named(new ResourceLocation(Belloto.MOD_ID, "messages")) .networkProtocolVersion(() -> "1.0") .clientAcceptedVersions(s -> true) .serverAcceptedVersions(s -> true) .simpleChannel(); INSTANCE = net; net.messageBuilder(TotemBellotoPacket.class, id(), NetworkDirection.PLAY_TO_SERVER) .decoder(TotemBellotoPacket::new) .encoder(TotemBellotoPacket::toBytes) .consumer(TotemBellotoPacket::handle) .add(); net.messageBuilder(TotemBellotoClientPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) .decoder(TotemBellotoClientPacket::new) .encoder(TotemBellotoClientPacket::toBytes) .consumer(TotemBellotoClientPacket::handle) .add(); } public static <MSG> void sendToServer(MSG message) { INSTANCE.sendToServer(message); } public static <MSG> void sendToPlayer(MSG message, ServerPlayer player) { INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), message); } } TotemClientPacket-> package com.naim.belloto.networking.packet; import com.naim.belloto.Init.ItemInit; import com.naim.belloto.networking.handler.ClientPacketHandlerClass; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; import java.util.logging.Level; public class TotemBellotoClientPacket { public TotemBellotoClientPacket() { } public TotemBellotoClientPacket(FriendlyByteBuf buf) { } public void toBytes(FriendlyByteBuf buf) { } public boolean handle(Supplier<NetworkEvent.Context> ctx) { NetworkEvent.Context context = ctx.get(); context.enqueueWork(() -> { // Client DistExecutor.unsafeCallWhenOn(Dist.CLIENT,() -> () -> ClientPacketHandlerClass.handlePacket(ctx)); }); return true; } } And the handler like u say package com.naim.belloto.networking.handler; import com.naim.belloto.Init.ItemInit; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class ClientPacketHandlerClass { public static boolean handlePacket(Supplier<NetworkEvent.Context> ctx) { Player player = Minecraft.getInstance().player; ClientLevel level = Minecraft.getInstance().level; Minecraft.getInstance().gameRenderer.displayItemActivation(new ItemStack(ItemInit.TOTEM_BELLOTO.get())); //level.playSound(null, player.getOnPos(), SoundEvents.TOTEM_USE, SoundSource.PLAYERS, 0.5F, level.random.nextFloat() *0.1F + 0.9F); return true; } } And u said to me i need to cancel LivingDeathEvent via my simpleChannel, but i need to put it in a packet? or what, im lerning about Networking im really confuse. can u give me an example or pseudocode pls Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 13 minutes ago, 3mptysl said: INSTANCE = net; You should init the SimpleChannel instance at the end of the register method. 15 minutes ago, 3mptysl said: And u said to me i need to cancel LivingDeathEvent via my simpleChannel, but i need to put it in a packet? No you need to cancel the Event and then send the Packet via the SimpleChannel to the client: // inside your LivingDeathEvent EventHandler event.setCanceled(true); if (event.getEntity() instance ServerPlayer player) { ModMessages.sendToPlayer(new TotemBellotoClientPacket(), player); } This code above is an example which is not tested. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 i cancel livingdeathevent thats work correctly but i think the packet is not sending because client is not rendering the totem animation, i think Simple channel is init, are you referring to this? or something else private void setup (FMLCommonSetupEvent event){ event.enqueueWork(() -> { ModMessages.register(); SpawnPlacements.register(ModEntityTypes.ARDILLA.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); }); Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 21 minutes ago, 3mptysl said: i cancel livingdeathevent thats work correctly but i think the packet is not sending because client is not rendering the totem animation, i think Simple channel is init Please show your LivingDeathEvent. 21 minutes ago, 3mptysl said: are you referring to this? or something else FMLCommonSetupEvent is okay but i would recommend to call it as early as possible ideally in the constructor of your main mod class. If you want to call it in FMLCommonSetupEvent move it outside of the enqueueWork block. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 LivingDeathEvent import com.naim.belloto.Belloto; import com.naim.belloto.Init.ItemInit; import com.naim.belloto.networking.ModMessages; import com.naim.belloto.networking.packet.TotemBellotoClientPacket; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(modid = Belloto.MOD_ID, value = Dist.DEDICATED_SERVER) public class LivingDeathEvent { @SubscribeEvent public static void onDeathEvent(net.minecraftforge.event.entity.living.LivingDeathEvent event) { if (event.getEntityLiving() instanceof Player player) { if (player.getMainHandItem().getItem().equals(ItemInit.TOTEM_BELLOTO.get())) { Level level = player.getLevel(); event.setCanceled(true); player.setHealth(12); level.playSound(null, player.getOnPos(), SoundEvents.TOTEM_USE, SoundSource.PLAYERS, 1F, level.random.nextFloat() *0.1F + 0.9F); if (event.getEntity() instanceof ServerPlayer player1) { ModMessages.sendToPlayer(new TotemBellotoClientPacket(), player1); } } } } } Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 15, 2022 Share Posted August 15, 2022 2 minutes ago, 3mptysl said: value = Dist.DEDICATED_SERVER Remove this from the EventBusSubscriber annotation if you want that the code also work in Singleplayer on a intedgraed server. The other code looks okay. Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 Now client and server crash ---- Minecraft Crash Report ---- // Don't do that. Time: 15/8/22 22:49 Description: Ticking entity java.lang.NullPointerException: Cannot invoke "net.minecraftforge.network.simple.SimpleChannel.send(net.minecraftforge.network.PacketDistributor$PacketTarget, Object)" because "com.naim.belloto.networking.ModMessages.INSTANCE" is null at com.naim.belloto.networking.ModMessages.sendToPlayer(ModMessages.java:57) ~[%2380!/:?] {re:classloading} at com.naim.belloto.event.LivingDeathEvent.onDeathEvent(LivingDeathEvent.java:27) ~[%2380!/:?] {re:classloading} at net.minecraftforge.eventbus.ASMEventHandler_4_LivingDeathEvent_onDeathEvent_LivingDeathEvent.invoke(.dynamic) ~[?:?] {} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.common.ForgeHooks.onLivingDeath(ForgeHooks.java:327) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2375%2381!/:?] {re:classloading} at net.minecraft.server.level.ServerPlayer.die(ServerPlayer.java:544) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.LivingEntity.hurt(LivingEntity.java:1131) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.player.Player.hurt(Player.java:834) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.level.ServerPlayer.hurt(ServerPlayer.java:664) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.Mob.doHurtTarget(Mob.java:1326) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Zombie.doHurtTarget(Zombie.java:313) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.MeleeAttackGoal.checkAndPerformAttack(MeleeAttackGoal.java:147) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.MeleeAttackGoal.tick(MeleeAttackGoal.java:138) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.ZombieAttackGoal.tick(ZombieAttackGoal.java:25) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.WrappedGoal.tick(WrappedGoal.java:55) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.GoalSelector.tickRunningGoals(GoalSelector.java:121) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.serverAiStep(Mob.java:691) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.LivingEntity.aiStep(LivingEntity.java:2506) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.aiStep(Mob.java:495) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Monster.aiStep(Monster.java:41) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.monster.Zombie.aiStep(Zombie.java:235) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.LivingEntity.tick(LivingEntity.java:2253) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.tick(Mob.java:307) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Zombie.tick(Zombie.java:209) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.server.level.ServerLevel.tickNonPassenger(ServerLevel.java:652) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.level.Level.guardEntityTick(Level.java:486) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.level.ServerLevel.lambda$tick$3(ServerLevel.java:319) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:299) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:902) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:842) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.server.IntegratedServer.tickServer(IntegratedServer.java:84) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:685) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:261) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:833) [?:?] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Server thread Stacktrace: at com.naim.belloto.networking.ModMessages.sendToPlayer(ModMessages.java:57) ~[%2380!/:?] {re:classloading} at com.naim.belloto.event.LivingDeathEvent.onDeathEvent(LivingDeathEvent.java:27) ~[%2380!/:?] {re:classloading} at net.minecraftforge.eventbus.ASMEventHandler_4_LivingDeathEvent_onDeathEvent_LivingDeathEvent.invoke(.dynamic) ~[?:?] {} at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:85) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-5.0.7.jar%239!/:?] {} at net.minecraftforge.common.ForgeHooks.onLivingDeath(ForgeHooks.java:327) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2375%2381!/:?] {re:classloading} at net.minecraft.server.level.ServerPlayer.die(ServerPlayer.java:544) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.LivingEntity.hurt(LivingEntity.java:1131) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.player.Player.hurt(Player.java:834) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.level.ServerPlayer.hurt(ServerPlayer.java:664) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.Mob.doHurtTarget(Mob.java:1326) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Zombie.doHurtTarget(Zombie.java:313) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.MeleeAttackGoal.checkAndPerformAttack(MeleeAttackGoal.java:147) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.MeleeAttackGoal.tick(MeleeAttackGoal.java:138) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.ZombieAttackGoal.tick(ZombieAttackGoal.java:25) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.WrappedGoal.tick(WrappedGoal.java:55) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.ai.goal.GoalSelector.tickRunningGoals(GoalSelector.java:121) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.serverAiStep(Mob.java:691) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.LivingEntity.aiStep(LivingEntity.java:2506) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.aiStep(Mob.java:495) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Monster.aiStep(Monster.java:41) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.monster.Zombie.aiStep(Zombie.java:235) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.LivingEntity.tick(LivingEntity.java:2253) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.world.entity.Mob.tick(Mob.java:307) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.entity.monster.Zombie.tick(Zombie.java:209) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.server.level.ServerLevel.tickNonPassenger(ServerLevel.java:652) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.level.Level.guardEntityTick(Level.java:486) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.level.ServerLevel.lambda$tick$3(ServerLevel.java:319) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:299) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} -- Entity being ticked -- Details: Entity Type: minecraft:zombie (net.minecraft.world.entity.monster.Zombie) Entity ID: 1 Entity Name: Zombie Entity's Exact location: -2.30, 72.00, 24.69 Entity's Block location: World: (-3,72,24), Section: (at 13,8,8 in -1,4,1; chunk contains blocks -16,-64,16 to -1,319,31), Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,-64,0 to -1,319,511) Entity's Momentum: 0.04, -0.08, 0.04 Entity's Passengers: [] Entity's Vehicle: null Stacktrace: at net.minecraft.world.level.Level.guardEntityTick(Level.java:486) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.level.ServerLevel.lambda$tick$3(ServerLevel.java:319) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.world.level.entity.EntityTickList.forEach(EntityTickList.java:54) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading} at net.minecraft.server.level.ServerLevel.tick(ServerLevel.java:299) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:902) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:842) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.server.IntegratedServer.tickServer(IntegratedServer.java:84) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:685) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:261) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:833) [?:?] {} -- Affected level -- Details: All players: 1 total; [ServerPlayer['Dev'/153, l='ServerLevel[New World]', x=-0.99, y=72.00, z=25.22]] Chunk stats: 3249 Level dimension: minecraft:overworld Level spawn location: World: (0,85,0), Section: (at 0,5,0 in 0,5,0; chunk contains blocks 0,-64,0 to 15,319,15), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,-64,0 to 511,319,511) Level time: 400990 game time, 18228 day time Level name: New World Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true Level weather: Rain time: 1 (now: false), thunder time: 1 (now: false) Known server brands: forge Level was modded: true Level storage version: 0x04ABD - Anvil Stacktrace: at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:902) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:842) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.client.server.IntegratedServer.tickServer(IntegratedServer.java:84) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:685) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:261) ~[forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.jar%2376!/:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:833) [?:?] {} -- System Details -- Details: Minecraft Version: 1.18.2 Minecraft Version ID: 1.18.2 Operating System: Windows 10 (amd64) version 10.0 Java Version: 17.0.1, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode, sharing), Oracle Corporation Memory: 1615990256 bytes (1541 MiB) / 4269801472 bytes (4072 MiB) up to 8522825728 bytes (8128 MiB) CPUs: 20 Processor Vendor: GenuineIntel Processor Name: 12th Gen Intel(R) Core(TM) i7-12700K Identifier: Intel64 Family 6 Model 151 Stepping 2 Microarchitecture: unknown Frequency (GHz): 3,61 Number of physical packages: 1 Number of physical CPUs: 12 Number of logical CPUs: 20 Graphics card #0 name: NVIDIA GeForce RTX 3080 Graphics card #0 vendor: NVIDIA (0x10de) Graphics card #0 VRAM (MB): 4095,00 Graphics card #0 deviceId: 0x2216 Graphics card #0 versionInfo: DriverVersion=31.0.15.1659 Memory slot #0 capacity (MB): 8192,00 Memory slot #0 clockSpeed (GHz): 3,20 Memory slot #0 type: DDR4 Memory slot #1 capacity (MB): 8192,00 Memory slot #1 clockSpeed (GHz): 3,20 Memory slot #1 type: DDR4 Memory slot #2 capacity (MB): 8192,00 Memory slot #2 clockSpeed (GHz): 3,20 Memory slot #2 type: DDR4 Memory slot #3 capacity (MB): 8192,00 Memory slot #3 clockSpeed (GHz): 3,20 Memory slot #3 type: DDR4 Virtual memory max (MB): 34557,42 Virtual memory used (MB): 26409,04 Swap memory total (MB): 2048,00 Swap memory used (MB): 68,13 JVM Flags: 1 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump Server Running: true Player Count: 1 / 8; [ServerPlayer['Dev'/153, l='ServerLevel[New World]', x=-0.99, y=72.00, z=25.22]] Data Packs: vanilla (incompatible), mod:forge (incompatible), mod:belloto, mod:geckolib3 (incompatible) World Generation: Stable Type: Integrated Server (map_client.txt) Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge' ModLauncher: 9.1.3+9.1.3+main.9b69c82a ModLauncher launch target: forgeclientuserdev ModLauncher naming: mcp ModLauncher services: mixin PLUGINSERVICE eventbus PLUGINSERVICE slf4jfixer PLUGINSERVICE object_holder_definalize PLUGINSERVICE runtime_enum_extender PLUGINSERVICE capability_token_subclass PLUGINSERVICE accesstransformer PLUGINSERVICE runtimedistcleaner PLUGINSERVICE mixin TRANSFORMATIONSERVICE fml TRANSFORMATIONSERVICE FML Language Providers: [email protected] javafml@null Mod List: forge-1.18.2-40.1.0_mapped_official_1.18.2-recomp.|Minecraft |minecraft |1.18.2 |DONE |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f |Forge |forge |40.1.0 |DONE |Manifest: NOSIGNATURE main |Belloto Mod |belloto |0.0NONE |DONE |Manifest: NOSIGNATURE geckolib-forge-1.18-3.0.30_mapped_official_1.18.2.|GeckoLib |geckolib3 |3.0.30 |DONE |Manifest: NOSIGNATURE Crash Report UUID: d4ce6bcd-8ca5-4581-9c57-5cf43c119f98 FML: 40.1 Forge: net.minecraftforge:40.1.0 Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 15, 2022 Author Share Posted August 15, 2022 only crash when an entity kill me idk, And totem animation is no displaying Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 16, 2022 Author Share Posted August 16, 2022 I have here my deathEvent, when a player dies with totem its send packet to client with the packet and the serverPlayer @Mod.EventBusSubscriber(modid = Belloto.MOD_ID) public class onDeathEvent { @SubscribeEvent public static void onDeathEvent(LivingDeathEvent event) { if (event.getEntityLiving() instanceof Player player) { if (player.getMainHandItem().getItem().equals(ItemInit.TOTEM_BELLOTO.get())) { Level level = player.getLevel(); player.setItemInHand(InteractionHand.MAIN_HAND, ItemStack.EMPTY); event.setCanceled(true); player.setHealth(1.0F); player.addEffect(new MobEffectInstance(MobEffects.REGENERATION, 1000, 1)); player.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, 1000, 1)); player.addEffect(new MobEffectInstance(MobEffects.ABSORPTION, 80, 2)); level.playSound(null, player.getOnPos(), SoundEvents.TOTEM_USE, SoundSource.PLAYERS, 1F, level.random.nextFloat() * 0.1F + 0.9F); if (event.getEntityLiving() instanceof ServerPlayer serverPlayer) { ModMessages.sendToPlayer(new TotemBellotoClientPacket(), serverPlayer); } } } } } My packet public class TotemBellotoClientPacket { public TotemBellotoClientPacket() { } public TotemBellotoClientPacket(FriendlyByteBuf buf) { } public void toBytes(FriendlyByteBuf buf) { } public boolean handle(Supplier<NetworkEvent.Context> ctx) { NetworkEvent.Context context = ctx.get(); context.enqueueWork(() -> { // Client DistExecutor.unsafeCallWhenOn(Dist.CLIENT,() -> () -> ClientPacketHandlerClass.handlePacket(ctx)); }); return true; } } MyHandlerClass public class ClientPacketHandlerClass { public static boolean handlePacket(Supplier<NetworkEvent.Context> ctx) { Player player = Minecraft.getInstance().player; ClientLevel level = Minecraft.getInstance().level; //ClientTotem.particleStuff(player); ClientTotem.totemActivated(ItemInit.TOTEM_BELLOTO.get()); return true; } And finally my simpleChannel, idk where is the issue public class ModMessages { private static SimpleChannel INSTANCE; private static int packetId = 0; private static int id() { return packetId++; } public static void register() { SimpleChannel net = NetworkRegistry.ChannelBuilder .named(new ResourceLocation(Belloto.MOD_ID, "messages")) .networkProtocolVersion(() -> "1.0") .clientAcceptedVersions(s -> true) .serverAcceptedVersions(s -> true) .simpleChannel(); INSTANCE = net; net.messageBuilder(TotemBellotoClientPacket.class, id(), NetworkDirection.PLAY_TO_CLIENT) .decoder(TotemBellotoClientPacket::new) .encoder(TotemBellotoClientPacket::toBytes) .consumer(TotemBellotoClientPacket::handle) .add(); } public static <MSG> void sendToServer(MSG message) { INSTANCE.sendToServer(message); } public static <MSG> void sendToPlayer(MSG message, ServerPlayer player) { INSTANCE.send(PacketDistributor.PLAYER.with(() -> player), message); } } Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 16, 2022 Author Share Posted August 16, 2022 In my ModClass @Mod(MOD_ID) public class Belloto { // Directly reference a slf4j logger private static final Logger LOGGER = LogUtils.getLogger(); public static final String MOD_ID = "belloto"; public static final CreativeModeTab BELLOTO_TAB = new CreativeModeTab(MOD_ID) { @Override @OnlyIn(Dist.CLIENT) public ItemStack makeIcon() { return new ItemStack(ItemInit.BELLOTA_ITEM.get()); } }; public Belloto() { IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); ItemInit.ITEMS.register(bus); BlockInit.BLOCKS.register(bus); MinecraftForge.EVENT_BUS.register(this); ModEntityTypes.register(bus); GeckoLib.initialize(); } private void clientSetup(final FMLClientSetupEvent event) { EntityRenderers.register(ModEntityTypes.ARDILLA.get(), ArdillaRenderer::new); } private void setup (FMLCommonSetupEvent event){ event.enqueueWork(() -> { SpawnPlacements.register(ModEntityTypes.ARDILLA.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules); }); ModMessages.register(); } } I call it in setup Quote Link to comment Share on other sites More sharing options...
Luis_ST Posted August 16, 2022 Share Posted August 16, 2022 (edited) You never register your EventHandler, but: 12 hours ago, Luis_ST said: i would recommend to call it as early as possible ideally in the constructor of your main mod class. Edited August 16, 2022 by Luis_ST Quote Link to comment Share on other sites More sharing options...
3mptysl Posted August 16, 2022 Author Share Posted August 16, 2022 ups true, thx Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.