@SubscribeEvent public void onPlayerClone(PlayerEvent.Clone event) { EntityPlayer player = event.getEntityPlayer(); // Duplicate nutrition capability data on server INutrientManager nutritionOld = event.getOriginal().getCapability(NUTRITION_CAPABILITY, null); // Get old nutrition INutrientManager nutritionNew = player.getCapability(NUTRITION_CAPABILITY, null); // Get new nutrition nutritionNew.set(nutritionOld.get()); // Overwrite nutrition // On death, apply nutrition penalty // This is synced automatically in EventPlayerJoinWorld#EntityJoinWorldEvent if (event.isWasDeath()) { Map<Nutrient, Float> nutrition = player.getCapability(NUTRITION_CAPABILITY, null).get(); for (Nutrient nutrient : nutrition.keySet()) if (Config.deathPenaltyReset || nutrition.get(nutrient) > Config.deathPenaltyMin) // If reset is disabled, only reduce to cap when above its value player.getCapability(NUTRITION_CAPABILITY, null).set(nutrient, Math.max(Config.deathPenaltyMin, nutrition.get(nutrient) - Config.deathPenaltyLoss)); // Subtract death penalty from each nutrient, to cap } } }
@SubscribeEvent public void cloneCapabilitiesEvent(PlayerEvent.Clone event) { try { BaublesContainer bco = (BaublesContainer) BaublesApi.getBaublesHandler(event.getOriginal()); NBTTagCompound nbt = bco.serializeNBT(); BaublesContainer bcn = (BaublesContainer) BaublesApi.getBaublesHandler(event.getEntityPlayer()); bcn.deserializeNBT(nbt); } catch (Exception e) { Baubles.log.error("Could not clone player ["+event.getOriginal().getName()+"] baubles when changing dimensions"); } }
@SubscribeEvent public void onPlayerClone(net.minecraftforge.event.entity.player.PlayerEvent.Clone event) { AndroidPlayer newAndroidPlayer = MOPlayerCapabilityProvider.GetAndroidCapability(event.getEntityPlayer()); AndroidPlayer oldAndroidPlayer = MOPlayerCapabilityProvider.GetAndroidCapability(event.getOriginal()); if (newAndroidPlayer != null && oldAndroidPlayer != null) { newAndroidPlayer.copy(oldAndroidPlayer); if (event.isWasDeath()) { newAndroidPlayer.onPlayerRespawn(); } newAndroidPlayer.sync(EnumSet.allOf(AndroidPlayer.DataType.class)); } OverdriveExtendedProperties newExtendedProperties = MOPlayerCapabilityProvider.GetExtendedCapability(event.getEntityPlayer()); OverdriveExtendedProperties oldExtenderDProperties = MOPlayerCapabilityProvider.GetExtendedCapability(event.getOriginal()); if (newExtendedProperties != null && oldExtenderDProperties != null) { newExtendedProperties.copy(oldExtenderDProperties); newExtendedProperties.sync(EnumSet.allOf(PlayerQuestData.DataType.class)); } }
return; EntityPlayer player = event.getEntityPlayer(); EntityPlayer oldPlayer = event.getOriginal();
if (evt.getOriginal() == null || evt.getEntityPlayer() == null || evt.getEntityPlayer() instanceof FakePlayer) { return; if (evt.getEntityPlayer().world.getGameRules().getBoolean("keepInventory")) { return; if (evt.getOriginal() == evt.getEntityPlayer() || evt.getOriginal().inventory == evt.getEntityPlayer().inventory || (evt.getOriginal().inventory.armorInventory == evt.getEntityPlayer().inventory.armorInventory && evt.getOriginal().inventory.mainInventory == evt.getEntityPlayer().inventory.mainInventory)) { return; Log.debug("Running onPlayerCloneLate logic for " + evt.getEntityPlayer().getName()); if (addToPlayerInventory(evt.getEntityPlayer(), item) || tryToSpawnItemInWorld(evt.getOriginal(), item)) { evt.getOriginal().inventory.armorInventory.set(i, Prep.getEmpty()); ItemStack item = evt.getOriginal().inventory.mainInventory.get(i); if (isSoulBound(item)) { if (addToPlayerInventory(evt.getEntityPlayer(), item) || tryToSpawnItemInWorld(evt.getOriginal(), item)) { evt.getOriginal().inventory.mainInventory.set(i, Prep.getEmpty()); if (evt.getEntityPlayer().getName().equals("Bacon_Donut")) { addToPlayerInventory(evt.getEntityPlayer(), new ItemStack(Items.COOKED_PORKCHOP)); } else if (evt.getEntityPlayer().getName().equals("wyld")) { addToPlayerInventory(evt.getEntityPlayer(), new ItemStack(Items.EGG)); } else if (evt.getEntityPlayer().getName().equals("Soaryn")) { addToPlayerInventory(evt.getEntityPlayer(), new ItemStack(Blocks.CHEST)); } else if (evt.getEntityPlayer().getName().equals("Henry_Loenwind")) { final ItemStack stack = new ItemStack(ModObject.itemColdFireIgniter.getItemNN());
return; if (evt.getOriginal() == null || evt.getEntityPlayer() == null || evt.getEntityPlayer() instanceof FakePlayer) { return; if (evt.getEntityPlayer().world.getGameRules().getBoolean("keepInventory")) { return; if (evt.getOriginal() == evt.getEntityPlayer() || evt.getOriginal().inventory == evt.getEntityPlayer().inventory || (evt.getOriginal().inventory.armorInventory == evt.getEntityPlayer().inventory.armorInventory && evt.getOriginal().inventory.mainInventory == evt.getEntityPlayer().inventory.mainInventory)) { Log.warn("Player " + evt.getEntityPlayer().getName() + " just died and respawned in their old body. Did someone fire a PlayerEvent.Clone(death=true) " + "for a teleportation? Supressing Soulbound enchantment for zombie player."); return; Log.debug("Running onPlayerCloneEarly logic for " + evt.getEntityPlayer().getName()); if (addToPlayerInventory(evt.getEntityPlayer(), item)) { evt.getOriginal().inventory.armorInventory.set(i, Prep.getEmpty()); ItemStack item = evt.getOriginal().inventory.mainInventory.get(i); if (isSoulBound(item)) { if (addToPlayerInventory(evt.getEntityPlayer(), item)) { evt.getOriginal().inventory.mainInventory.set(i, Prep.getEmpty());
@SubscribeEvent(priority = EventPriority.LOWEST) public void onClonePlayer(PlayerEvent.Clone event) { if (event.isWasDeath()) { if (!event.getOriginal().getEntityWorld().getGameRules().getBoolean("keepInventory")) { if (event.getOriginal().hasCapability(PlayerDeathLocationCapability.CAPABILITY_PLAYER_DEATH_LOCATION, null)) { IPlayerDeathLocationCapability cap = event.getOriginal().getCapability(PlayerDeathLocationCapability.CAPABILITY_PLAYER_DEATH_LOCATION, null); ItemStack stack = new ItemStack(ModItems.DEATH_COMPASS); if (!stack.hasTagCompound()) stack.setTagCompound(new NBTTagCompound()); stack.getTagCompound().setInteger("dimID", cap.getGraveDimension()); stack.getTagCompound().setString("dimName", cap.getGraveDimensionName()); stack.getTagCompound().setInteger("homeX", cap.getGraveLocationX()); stack.getTagCompound().setInteger("homeZ", cap.getGraveLocationZ()); stack.getTagCompound().setString("deathTime", cap.getDeathTime()); if(!event.getEntityPlayer().inventory.addItemStackToInventory(stack)) if(!event.getEntityPlayer().getEntityWorld().isRemote) event.getEntityPlayer().entityDropItem(stack, 1F); event.getEntityPlayer().inventoryContainer.detectAndSendChanges(); event.getEntityPlayer().inventory.markDirty(); } } } } }
@SubscribeEvent public void onPlayerRespawn(PlayerEvent.Clone event) { if (event.getEntityPlayer() == null || event.getEntityPlayer() instanceof FakePlayer || !event.isWasDeath() || event.isCanceled() || event.getEntityPlayer().world.getGameRules().getBoolean("keepInventory") || ModConfig.LOSE_QUEST_BOOK_ON_DEATH) { return; } if (event.getOriginal().inventory.hasItemStack(new ItemStack(ModItems.book))) { ItemStack bookStack = new ItemStack(ModItems.book); for (ItemStack stack : event.getOriginal().inventory.mainInventory) { if (bookStack.isItemEqual(stack)) { bookStack = stack.copy(); // Copy the actual stack break; } } event.getEntityPlayer().inventory.addItemStackToInventory(bookStack); } } }
@SubscribeEvent public void clonePlayerDataOnDeath(PlayerEvent.Clone event) { if (!event.isWasDeath()) { return; } EntityPlayer original = event.getOriginal(); if (original instanceof EntityPlayerMP) { EntityPlayer newP = event.getEntityPlayer(); PlayerData newData = newP.getCapability(EsteemedInnovation.PLAYER_DATA, null); PlayerData originalData = original.getCapability(EsteemedInnovation.PLAYER_DATA, null); for (String piece : originalData.getAllUnlockedPieces()) { if (newData.setHasUnlockedBookPiece(piece, true)) { EsteemedInnovation.channel.sendTo(new BookPieceUnlockedStateChangePacket(piece, true), (EntityPlayerMP) newP); } } } }
@SubscribeEvent public static void onPlayerClone(PlayerEvent.Clone event) { //Clone persistent capability properties EntityPlayer oldPlayer = event.getOriginal(); EntityPlayer newPlayer = event.getEntityPlayer(); List<EntityCapability<?, ?, EntityPlayer>> capabilities = getEntityCapabilities(oldPlayer); for(EntityCapability<?, ?, EntityPlayer> capability : capabilities) { if(capability.isPersistent() && capability instanceof ISerializableCapability) { NBTTagCompound nbt = new NBTTagCompound(); ((ISerializableCapability)capability).writeToNBT(nbt); EntityCapability<?, ?, EntityPlayer> newCapability = capability.getEntityCapability(newPlayer); if(newCapability != null && newCapability instanceof ISerializableCapability) ((ISerializableCapability)newCapability).readFromNBT(nbt); } } }
@SubscribeEvent public void onPlayerCloned(PlayerEvent.Clone event) { if (event.isWasDeath()) { // We need to copyFrom the capabilities if (event.getOriginal().hasCapability(PlayerProperties.PLAYER_GOT_NOTE, null)) { PlayerGotNote oldStore = event.getOriginal().getCapability(PlayerProperties.PLAYER_GOT_NOTE, null); PlayerGotNote newStore = PlayerProperties.getPlayerGotNote(event.getEntityPlayer()); newStore.copyFrom(oldStore); } } }
@SubscribeEvent public void onPlayerClone(PlayerEvent.Clone event) { if (event.isWasDeath()) { NBTTagCompound compound = new NBTTagCompound(); EntityDataCapabilityImplementation.getCapability(event.getOriginal()).saveToNBT(compound); EntityDataCapabilityImplementation.getCapability(event.getEntityPlayer()).loadFromNBT(compound); } }
@SubscribeEvent(priority = EventPriority.HIGH) public void onPlayerClone(PlayerEvent.Clone event) { if (!event.getEntityPlayer().getEntityWorld().isRemote) { FactionPlayerHandler.get(event.getEntityPlayer()).copyFrom(event.getOriginal()); } }
@SubscribeEvent (priority = EventPriority.NORMAL) public void handlePlayerCloneEvent(PlayerEvent.Clone event) { NBTTagCompound newTag = event.getEntityPlayer().getEntityData(); NBTTagCompound oldTag = event.getOriginal().getEntityData(); if (oldTag.hasKey(TFProps.LEXICON_DATA)) { newTag.setTag(TFProps.LEXICON_DATA, oldTag.getCompoundTag(TFProps.LEXICON_DATA)); } }
@SubscribeEvent public void onPlayerClone(Clone event) { betterquesting.api2.cache.QuestCache oCache = event.getOriginal().getCapability(CapabilityProviderQuestCache.CAP_QUEST_CACHE, null); betterquesting.api2.cache.QuestCache nCache = event.getEntityPlayer().getCapability(CapabilityProviderQuestCache.CAP_QUEST_CACHE, null); if(oCache != null && nCache != null) nCache.deserializeNBT(oCache.serializeNBT()); }
@SubscribeEvent public static void cloneEvent(PlayerEvent.Clone evt) { NBTTagCompound bags = evt.getOriginal().getCapability(ProjectEAPI.ALCH_BAG_CAPABILITY, null).serializeNBT(); evt.getEntityPlayer().getCapability(ProjectEAPI.ALCH_BAG_CAPABILITY, null).deserializeNBT(bags); NBTTagCompound knowledge = evt.getOriginal().getCapability(ProjectEAPI.KNOWLEDGE_CAPABILITY, null).serializeNBT(); evt.getEntityPlayer().getCapability(ProjectEAPI.KNOWLEDGE_CAPABILITY, null).deserializeNBT(knowledge); }
@SubscribeEvent public static void onPlayerRespawn(PlayerEvent.Clone event) { if (event.isWasDeath()) event.getEntityPlayer().addPotionEffect(new PotionEffect(RegistrarBloodMagic.SOUL_FRAY, 400)); }
@SubscribeEvent public void onPlayerClone(PlayerEvent.Clone event) { IPlayerExtendedProperties src = CapabilityRegistry.getPlayerProperties(event.getOriginal()); IPlayerExtendedProperties dest = CapabilityRegistry.getPlayerProperties(event.getEntityPlayer()); dest.setDataFromNBT(src.getDataAsNBT()); if (src.getMaxHealth() > 0) { UtilEntity.setMaxHealth(event.getEntityPlayer(), src.getMaxHealth()); } //event.isWasDeath() && //event if it wasnt death, we still want to do this. otherwise on going thru portla, the extra hearts //are hidden because mojang //if health var never used (never eaten a heart) then skip }
@SubscribeEvent(priority = EventPriority.HIGH) public void onPlayerClone(PlayerEvent.Clone evt) { if(!evt.isWasDeath() || evt.isCanceled()) { return; } if(evt.getOriginal() == null || evt.getEntityPlayer() == null || evt.getEntityPlayer() instanceof FakePlayer) { return; } if(evt.getEntityPlayer().getEntityWorld().getGameRules().getBoolean("keepInventory")) { return; } for(int i = 0; i < evt.getOriginal().inventory.mainInventory.size(); i++) { ItemStack stack = evt.getOriginal().inventory.mainInventory.get(i); if(TinkerUtil.hasModifier(stack.getTagCompound(), this.identifier)) { evt.getEntityPlayer().inventory.addItemStackToInventory(stack); evt.getOriginal().inventory.mainInventory.set(i, ItemStack.EMPTY); } } } }