Implemented reviving.
This commit is contained in:
@ -5,6 +5,7 @@ import dev.micle.totemofreviving.config.Config;
|
|||||||
import dev.micle.totemofreviving.network.ChangeTargetPacket;
|
import dev.micle.totemofreviving.network.ChangeTargetPacket;
|
||||||
import dev.micle.totemofreviving.network.ChargeTotemPacket;
|
import dev.micle.totemofreviving.network.ChargeTotemPacket;
|
||||||
import dev.micle.totemofreviving.network.Network;
|
import dev.micle.totemofreviving.network.Network;
|
||||||
|
import dev.micle.totemofreviving.network.ReviveTargetPacket;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.util.ITooltipFlag;
|
import net.minecraft.client.util.ITooltipFlag;
|
||||||
import net.minecraft.client.util.InputMappings;
|
import net.minecraft.client.util.InputMappings;
|
||||||
@ -89,13 +90,10 @@ public class StrawTotemItem extends Item {
|
|||||||
@ParametersAreNonnullByDefault
|
@ParametersAreNonnullByDefault
|
||||||
public ActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
|
public ActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
|
||||||
if (!Config.Server.getStrawTotemConfig().getIsEnabled() || world.isClientSide) { return super.use(world, playerEntity, hand); }
|
if (!Config.Server.getStrawTotemConfig().getIsEnabled() || world.isClientSide) { return super.use(world, playerEntity, hand); }
|
||||||
ItemStack totem;
|
|
||||||
ItemStack charge;
|
ItemStack charge;
|
||||||
if (hand.equals(Hand.MAIN_HAND)) {
|
if (hand.equals(Hand.MAIN_HAND)) {
|
||||||
totem = playerEntity.getMainHandItem();
|
|
||||||
charge = playerEntity.getOffhandItem();
|
charge = playerEntity.getOffhandItem();
|
||||||
} else {
|
} else {
|
||||||
totem = playerEntity.getOffhandItem();
|
|
||||||
charge = playerEntity.getMainHandItem();
|
charge = playerEntity.getMainHandItem();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,8 +103,7 @@ public class StrawTotemItem extends Item {
|
|||||||
if (charge.getItem() instanceof StrawChargeItem) {
|
if (charge.getItem() instanceof StrawChargeItem) {
|
||||||
Network.channel.sendToServer(new ChargeTotemPacket(hand));
|
Network.channel.sendToServer(new ChargeTotemPacket(hand));
|
||||||
}
|
}
|
||||||
// Revive target
|
Network.channel.sendToServer(new ReviveTargetPacket(hand));
|
||||||
//totem.hurtAndBreak(1, sender, e -> e.broadcastBreakEvent(packet.hand));
|
|
||||||
}
|
}
|
||||||
return super.use(world, playerEntity, hand);
|
return super.use(world, playerEntity, hand);
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,11 @@ public class Network {
|
|||||||
.decoder(ChargeTotemPacket::decode)
|
.decoder(ChargeTotemPacket::decode)
|
||||||
.consumer(ChargeTotemPacket::handle)
|
.consumer(ChargeTotemPacket::handle)
|
||||||
.add();
|
.add();
|
||||||
|
channel.messageBuilder(ReviveTargetPacket.class, id++)
|
||||||
|
.encoder(ReviveTargetPacket::encode)
|
||||||
|
.decoder(ReviveTargetPacket::decode)
|
||||||
|
.consumer(ReviveTargetPacket::handle)
|
||||||
|
.add();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeVersionInfo(PacketBuffer buffer) {
|
public static void writeVersionInfo(PacketBuffer buffer) {
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
package dev.micle.totemofreviving.network;
|
||||||
|
|
||||||
|
import dev.micle.totemofreviving.TotemOfReviving;
|
||||||
|
import dev.micle.totemofreviving.config.Config;
|
||||||
|
import dev.micle.totemofreviving.item.StrawTotemItem;
|
||||||
|
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.network.PacketBuffer;
|
||||||
|
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;
|
||||||
|
|
||||||
|
public ReviveTargetPacket(final Hand hand) {
|
||||||
|
this.hand = hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void encode(final ReviveTargetPacket packet, final PacketBuffer buffer) {
|
||||||
|
Network.writeVersionInfo(buffer);
|
||||||
|
buffer.writeEnum(packet.hand);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ReviveTargetPacket decode(final PacketBuffer buffer) {
|
||||||
|
Network.checkVersion(buffer);
|
||||||
|
return new ReviveTargetPacket(buffer.readEnum(Hand.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void handle(final ReviveTargetPacket packet, final Supplier<NetworkEvent.Context> contextSupplier) {
|
||||||
|
final NetworkEvent.Context context = contextSupplier.get();
|
||||||
|
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; }
|
||||||
|
|
||||||
|
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 (charge < targetCharge) {
|
||||||
|
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.setGameMode(sender.getLevel().getServer().getDefaultGameType());
|
||||||
|
totem.getOrCreateTag().putInt(TAG_CHARGE, charge - targetCharge);
|
||||||
|
totem.hurtAndBreak(1, sender, e -> e.broadcastBreakEvent(packet.hand));
|
||||||
|
});
|
||||||
|
context.setPacketHandled(true);
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user