From 3f8ac8ddde7cfa9af57ac6fe50262365ec63543d Mon Sep 17 00:00:00 2001 From: Micle Date: Tue, 18 Jan 2022 18:00:06 +0000 Subject: [PATCH] Rewrote handle method to use new totem item class. Improved target checking. Method now checks if the target cost has been updated since. Changed method for teleporting target to hopefully fix an issue where target got stuck in 'limbo'. Added a success message. --- .../network/ReviveTargetPacket.java | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/src/main/java/dev/micle/totemofreviving/network/ReviveTargetPacket.java b/src/main/java/dev/micle/totemofreviving/network/ReviveTargetPacket.java index f998eb7..6af1683 100644 --- a/src/main/java/dev/micle/totemofreviving/network/ReviveTargetPacket.java +++ b/src/main/java/dev/micle/totemofreviving/network/ReviveTargetPacket.java @@ -1,21 +1,18 @@ package dev.micle.totemofreviving.network; import dev.micle.totemofreviving.TotemOfReviving; -import dev.micle.totemofreviving.config.Config; -import dev.micle.totemofreviving.item.StrawTotemItem; +import dev.micle.totemofreviving.item.TotemItem; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; +import net.minecraft.stats.Stats; import net.minecraft.util.Hand; import net.minecraft.util.text.StringTextComponent; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.network.NetworkEvent; -import java.util.UUID; import java.util.function.Supplier; -import static dev.micle.totemofreviving.item.StrawTotemItem.*; - public class ReviveTargetPacket { private final Hand hand; @@ -38,33 +35,48 @@ public class ReviveTargetPacket { context.enqueueWork(() -> { ServerPlayerEntity sender = context.getSender(); if (sender == null) { return; } - ItemStack totem = sender.getItemInHand(packet.hand); - int charge = totem.getOrCreateTag().getInt(TAG_CHARGE); - int targetCharge = totem.getOrCreateTag().getInt(TAG_TARGET_CHARGE); - String targetUUID = totem.getOrCreateTag().getString(TAG_TARGET_UUID); - ServerPlayerEntity target = TotemOfReviving.PROXY.getServer().getPlayerList().getPlayer(UUID.fromString(targetUUID)); - if (target == null) { return; } + ItemStack totemStack = sender.getItemInHand(packet.hand); + ServerPlayerEntity target; + + try { + target = TotemOfReviving.PROXY.getServer().getPlayerList().getPlayer(TotemItem.getTargetUUID(totemStack)); + if (target == null) { throw new NullPointerException("Target is null!"); } + } catch (NullPointerException exception) { + sender.sendMessage(new StringTextComponent(TextFormatting.WHITE + "Unable to find player!"), sender.getUUID()); + return; + } + + int charge = TotemItem.getCharge(totemStack); + int targetCost = TotemItem.getTargetCost(totemStack); + if (TotemItem.isCostDynamic(totemStack) && targetCost != target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS))) { + targetCost = target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS)); + TotemItem.setTargetCost(totemStack, targetCost); + } else if (!TotemItem.isCostDynamic(totemStack) && targetCost != TotemItem.getMaxCharge(totemStack)) { + targetCost = TotemItem.getMaxCharge(totemStack); + TotemItem.setTargetCost(totemStack, targetCost); + } if (!target.isSpectator()) { sender.sendMessage(new StringTextComponent(TextFormatting.GRAY + target.getDisplayName().getString() + TextFormatting.WHITE + " is not dead!"), sender.getUUID()); return; } - if (!target.getLevel().equals(sender.getLevel())) { - if (totem.getItem() instanceof StrawTotemItem && !Config.Server.getStrawTotemConfig().getCanReviveAcrossDimensions()) { - sender.sendMessage(new StringTextComponent(TextFormatting.GRAY + target.getDisplayName().getString() + TextFormatting.WHITE + " is in a different dimension!"), sender.getUUID()); - return; - } + + if (!target.getLevel().equals(sender.getLevel()) && !TotemItem.canReviveAcrossDimensions(totemStack)) { + sender.sendMessage(new StringTextComponent(TextFormatting.GRAY + target.getDisplayName().getString() + TextFormatting.WHITE + " is in a different dimension!"), sender.getUUID()); + return; } - if (charge < targetCharge) { + + if (charge < targetCost) { sender.sendMessage(new StringTextComponent(TextFormatting.WHITE + "Not enough charge!"), sender.getUUID()); return; } - target.setLevel(sender.getLevel()); - target.moveTo(sender.position().x, sender.position().y, sender.position().z); + + target.teleportTo(sender.getLevel(), sender.position().x, sender.position().y, sender.position().z, sender.yRot, sender.xRot); target.setGameMode(sender.getLevel().getServer().getDefaultGameType()); - totem.getOrCreateTag().putInt(TAG_CHARGE, charge - targetCharge); - totem.hurtAndBreak(1, sender, e -> e.broadcastBreakEvent(packet.hand)); + TotemItem.setCharge(totemStack, charge - targetCost); + totemStack.hurtAndBreak(1, sender, e -> e.broadcastBreakEvent(packet.hand)); + sender.sendMessage(new StringTextComponent(TextFormatting.WHITE + "Successfully revived " + TextFormatting.GRAY + target.getDisplayName().getString()), sender.getUUID()); }); context.setPacketHandled(true); }