Renato Posted October 19, 2024 Posted October 19, 2024 I try to get some information about other players when joining a server. For example, I want to listen to the `AttackEntityEvent` to observe if one player hits another. However, this event works only if my own player hits other entities. Also, I want to read the information in the chat on a server with `ClientChatReceivedEvent` but that only works in Singleplayer. I know these problems are kind of separate ones but maybe they are linked because I register my Event listeners in a wrong way. I don't know. I have the same problem with many other events like `ArrowNockEvent`, `LivingHurtEvent`. The only event that works correctly is my `TickEvent.PlayerTickEvent`. Could you help me please. Are these events wrong? If so, are they other events that I can consider? If not, how can I gather information about other players on the server? Thanks for your help! @Mod(Main.MODID) public class Main { // Define mod id in a common place for everything to reference public static final String MODID = "tttdatacollector"; // Directly reference a slf4j logger private static final Logger LOGGER = LogUtils.getLogger(); public Main(FMLJavaModLoadingContext context) { IEventBus modEventBus = context.getModEventBus(); // Register the commonSetup method for modloading modEventBus.addListener(this::commonSetup); // Register ourselves for server and other game events we are interested in MinecraftForge.EVENT_BUS.register(this); MinecraftForge.EVENT_BUS.register(new PlayerTickEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerHurtEventHandler()); MinecraftForge.EVENT_BUS.register(new PlayerAttackEntityEventHandler()); MinecraftForge.EVENT_BUS.register(new ChatMessageEventHandler()); MinecraftForge.EVENT_BUS.register(new KillEventHandler()); } } public class ChatMessageEventHandler { private static final Logger log = LogUtils.getLogger(); @SubscribeEvent public void onChatMessageServer(ClientChatReceivedEvent event) { log.info("ClientChatReceivedEvent"); log.info(event.getMessage().getString()); } } public class BowShotEventHandler { private static final Logger log = LogUtils.getLogger(); @SubscribeEvent public void onArrowNock(ArrowNockEvent event) { log.info("onArrowNock"); if (event.getEntity() instanceof ServerPlayer player) { log.info("Player nocked an arrow: {}", player.getName().getString()); } } } public class PlayerAttackEntityEventHandler { private static final Logger log = LogUtils.getLogger(); @SubscribeEvent public void onPlayerAttack(AttackEntityEvent event) { log.info("Player Attack by {} to {}", event.getEntity().getName().getString(), event.getTarget().getName().getString()); } } public class PlayerTickEventHandler { private static final Logger log = LogUtils.getLogger(); private final AggregatedPlayerDataCache aggregatedPlayerDataCache = AggregatedPlayerDataCache.getInstance(); private final PlayerPositionCache playerPositionCache = PlayerPositionCache.getInstance(); private final PlayerDistanceScoreCalculator playerDistanceScoreCalculator = PlayerDistanceScoreCalculator.getInstance(); @SubscribeEvent public void onPlayerTick(TickEvent.PlayerTickEvent event) { var player = event.player; String playerName = player.getName().getString(); var playerData = aggregatedPlayerDataCache.getPlayerData(playerName); playerData.setPlayerName(playerName); var oldPos = playerPositionCache.getPlayerPosition(playerName); this.calculateAndSetDistanceAndScore(oldPos, playerData, player); } } Quote
Paint_Ninja Posted November 13, 2024 Posted November 13, 2024 (edited) I think the events you're looking at are based on client-side information. Depending on where the mod is being run (client-side or server-side) the events may produce different results. You could use networking to communicate server events to the client. What Forge version are you using? By the way, try asking on the Discord in future, it's more active for dev support than the forums these days. Edited November 13, 2024 by Paint_Ninja Quote Official Forge Discord server | Support FAQ for players
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.