Hey Everyone,
im developing a small mod for 1.18.2 forge that stores some data attached to the player with a custom capability.
This works fine on disconnect & reconnect. Server restart & on death of player.
For some reason when returning from the end the data gets lost & the player gets the capability recreated...
Below some code attached of the capability
Code below are my player events. They all trigger correctly, on returning from the end the respawn player event is triggerd as far as i can understand from debugging.
Should reviveCaps() be called on player respawn aswell??
@SubscribeEvent
public static void onPlayerCloned(PlayerEvent.Clone event) {
if(!event.isWasDeath()) return;
event.getOriginal().reviveCaps();
LOGGER.info("CLONE EVENT TRIGGERD!!");
event.getOriginal().getCapability(PlayerIslandProvider.PLAYER_ISLAND).ifPresent(oldStore -> {
if(oldStore.hasOne()) LOGGER.info("We found island data!");
event.getPlayer().getCapability(PlayerIslandProvider.PLAYER_ISLAND).ifPresent(newStore -> {
newStore.copyFrom(oldStore);
});
});
event.getOriginal().invalidateCaps();
}
@SubscribeEvent
public static void onDimensionChange (PlayerEvent.PlayerChangedDimensionEvent event) {
event.getPlayer().reviveCaps();
}
@SubscribeEvent
public void onPlayerRespawn(PlayerEvent.PlayerRespawnEvent event) {
event.getPlayer().getCapability(PlayerIslandProvider.PLAYER_ISLAND).ifPresent(i -> {
if(i.hasOne())
event.getPlayer().teleportTo(i.getLocation().getX(), i.getLocation().getY(), i.getLocation().getZ());
});
}
@SubscribeEvent
public static void onAttachCapabilitiesPlayer(AttachCapabilitiesEvent<Entity> event) {
if(!(event.getObject() instanceof Player)) return;
if(event.getObject().getCapability(PlayerIslandProvider.PLAYER_ISLAND).isPresent()) return;
event.addCapability(new ResourceLocation(Main.MOD_ID, "islanddata"), new PlayerIslandProvider());
}