CycleTarget method now returns message component. Implemented totem functionality without any extra networking.

This commit is contained in:
2026-01-12 04:36:44 +01:00
parent 5b2771c1f7
commit dbabba477a

View File

@ -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()));
}
}