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.ChatFormatting;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.network.chat.Component;
|
import net.minecraft.network.chat.Component;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.players.PlayerList;
|
import net.minecraft.server.players.PlayerList;
|
||||||
@ -85,23 +86,24 @@ public abstract class TotemItem extends Item {
|
|||||||
return (stack.getItem() instanceof TotemItem);
|
return (stack.getItem() instanceof TotemItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Optional<TotemData> cycleTarget(ItemStack itemStack, PlayerList playerList) {
|
public static Component cycleTarget(ItemStack itemStack, PlayerList playerList) {
|
||||||
if (!isTotem(itemStack)) return Optional.empty();
|
if (!isTotem(itemStack)) return Component.empty();
|
||||||
TotemData totemData = getTotemData(itemStack);
|
TotemData totemData = getTotemData(itemStack);
|
||||||
|
|
||||||
int targetIndex = totemData.getTargetIndex() + 1;
|
int targetIndex = totemData.getTargetIndex() + 1;
|
||||||
targetIndex = targetIndex >= playerList.getPlayerCount() ? 0 : targetIndex;
|
targetIndex = targetIndex >= playerList.getPlayerCount() ? 0 : targetIndex;
|
||||||
|
|
||||||
ServerPlayer target = playerList.getPlayers().get(targetIndex);
|
ServerPlayer target = playerList.getPlayers().get(targetIndex);
|
||||||
|
TotemData newTotemData = new TotemData(
|
||||||
setTotemData(itemStack, new TotemData(
|
|
||||||
targetIndex,
|
targetIndex,
|
||||||
target.getStringUUID(),
|
target.getStringUUID(),
|
||||||
target.getScoreboardName(),
|
target.getScoreboardName(),
|
||||||
target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS)),
|
target.getStats().getValue(Stats.CUSTOM.get(Stats.DEATHS)),
|
||||||
totemData.getCharge()
|
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) {
|
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) {
|
public @NotNull InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand usedHand) {
|
||||||
if (level.isClientSide) return super.use(level, player, 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 totemStack = (usedHand.equals(InteractionHand.MAIN_HAND)) ? player.getMainHandItem() : player.getOffhandItem();
|
||||||
ItemStack chargeStack = (usedHand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
|
ItemStack chargeStack = (usedHand.equals(InteractionHand.MAIN_HAND)) ? player.getOffhandItem() : player.getMainHandItem();
|
||||||
|
|
||||||
if (player.isCrouching()) {
|
if (player.isCrouching()) {
|
||||||
// Change Target Packet
|
// Change Target
|
||||||
Optional<TotemData> totemData = cycleTarget(totemStack, level.getServer().getPlayerList());
|
player.sendSystemMessage(cycleTarget(totemStack, server.getPlayerList()));
|
||||||
totemData.ifPresent(data -> player.sendSystemMessage(Component.literal(ChatFormatting.WHITE + "Now targetting " + ChatFormatting.GRAY + data.getTargetName() + ".")));
|
|
||||||
} else {
|
} else {
|
||||||
if (isCharge(chargeStack)) {
|
if (isCharge(chargeStack)) {
|
||||||
// Charge Totem Packet
|
// Charge Totem
|
||||||
chargeTotem(totemStack, chargeStack);
|
chargeTotem(totemStack, chargeStack);
|
||||||
} else {
|
} else {
|
||||||
// Revive Target Packet
|
// Revive Target
|
||||||
Component message = reviveTarget(equipmentSlot, totemStack, level.getServer().getPlayerList().getPlayer(player.getUUID()), level.getServer().getPlayerList());
|
player.sendSystemMessage(reviveTarget(slot, totemStack, server.getPlayerList().getPlayer(player.getUUID()), server.getPlayerList()));
|
||||||
player.sendSystemMessage(message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user