CycleTarget method now returns message component. Implemented totem functionality without any extra networking.
This commit is contained in:
@ -6,6 +6,7 @@ import dev.micle.totem_of_reviving.setup.ModDataComponents;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.server.players.PlayerList;
|
||||
@ -85,23 +86,24 @@ public abstract class TotemItem extends Item {
|
||||
return (stack.getItem() instanceof TotemItem);
|
||||
}
|
||||
|
||||
public static Optional<TotemData> cycleTarget(ItemStack itemStack, PlayerList playerList) {
|
||||
if (!isTotem(itemStack)) return Optional.empty();
|
||||
public static Component cycleTarget(ItemStack itemStack, PlayerList playerList) {
|
||||
if (!isTotem(itemStack)) return Component.empty();
|
||||
TotemData totemData = getTotemData(itemStack);
|
||||
|
||||
int targetIndex = totemData.getTargetIndex() + 1;
|
||||
targetIndex = targetIndex >= playerList.getPlayerCount() ? 0 : targetIndex;
|
||||
|
||||
ServerPlayer target = playerList.getPlayers().get(targetIndex);
|
||||
|
||||
setTotemData(itemStack, new TotemData(
|
||||
TotemData newTotemData = new TotemData(
|
||||
targetIndex,
|
||||
target.getStringUUID(),
|
||||
target.getScoreboardName(),
|
||||
target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS)),
|
||||
totemData.getCharge()
|
||||
));
|
||||
return Optional.of(totemData);
|
||||
);
|
||||
|
||||
setTotemData(itemStack, newTotemData);
|
||||
return Component.literal(ChatFormatting.WHITE + "Now targetting " + ChatFormatting.GRAY + newTotemData.getTargetName() + ".");
|
||||
}
|
||||
|
||||
public static boolean chargeTotem(ItemStack totemStack, ItemStack chargeStack) {
|
||||
@ -236,24 +238,23 @@ public abstract class TotemItem extends Item {
|
||||
public @NotNull InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
|
||||
if (level.isClientSide) return super.use(level, player, usedHand);
|
||||
|
||||
System.out.println("HERE");
|
||||
MinecraftServer server = level.getServer();
|
||||
if (server == null) return super.use(level, player, usedHand);
|
||||
|
||||
EquipmentSlot equipmentSlot = (usedHand.equals(InteractionHand.MAIN_HAND)) ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND;
|
||||
EquipmentSlot slot = (usedHand.equals(InteractionHand.MAIN_HAND)) ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND;
|
||||
ItemStack totemStack = (usedHand.equals(InteractionHand.MAIN_HAND)) ? player.getMainHandItem() : player.getOffhandItem();
|
||||
ItemStack chargeStack = (usedHand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
|
||||
|
||||
if (player.isCrouching()) {
|
||||
// Change Target Packet
|
||||
Optional<TotemData> totemData = cycleTarget(totemStack, level.getServer().getPlayerList());
|
||||
totemData.ifPresent(data -> player.sendSystemMessage(Component.literal(ChatFormatting.WHITE + "Now targetting " + ChatFormatting.GRAY + data.getTargetName() + ".")));
|
||||
// Change Target
|
||||
player.sendSystemMessage(cycleTarget(totemStack, server.getPlayerList()));
|
||||
} else {
|
||||
if (isCharge(chargeStack)) {
|
||||
// Charge Totem Packet
|
||||
// Charge Totem
|
||||
chargeTotem(totemStack, chargeStack);
|
||||
} else {
|
||||
// Revive Target Packet
|
||||
Component message = reviveTarget(equipmentSlot, totemStack, level.getServer().getPlayerList().getPlayer(player.getUUID()), level.getServer().getPlayerList());
|
||||
player.sendSystemMessage(message);
|
||||
// Revive Target
|
||||
player.sendSystemMessage(reviveTarget(slot, totemStack, server.getPlayerList().getPlayer(player.getUUID()), server.getPlayerList()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user