Skip to content

Commit

Permalink
feat: Use Components for storing waystone names #774
Browse files Browse the repository at this point in the history
  • Loading branch information
BlayTheNinth committed Dec 25, 2023
1 parent 7aab8f8 commit 14679ef
Show file tree
Hide file tree
Showing 56 changed files with 272 additions and 284 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package net.blay09.mods.waystones.api;

import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;

import java.util.UUID;

public interface MutableWaystone {
void setName(String name);
void setName(Component name);

void setVisibility(WaystoneVisibility visibility);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
Expand All @@ -14,7 +15,7 @@
public interface Waystone {
UUID getWaystoneUid();

String getName();
Component getName();

ResourceKey<Level> getDimension();

Expand All @@ -36,7 +37,7 @@ default boolean wasGenerated() {
ResourceLocation getWaystoneType();

default boolean hasName() {
return !getName().isEmpty();
return !getName().getString().isEmpty();
}

default boolean hasOwner() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@

import net.blay09.mods.balm.api.event.BalmEvent;
import net.blay09.mods.waystones.api.Waystone;
import net.minecraft.network.chat.Component;

public class GenerateWaystoneNameEvent extends BalmEvent {

private final Waystone waystone;
private String name;
private Component name;

public GenerateWaystoneNameEvent(Waystone waystone, String name) {
public GenerateWaystoneNameEvent(Waystone waystone, Component name) {
this.waystone = waystone;
this.name = name;
}
Expand All @@ -17,11 +18,11 @@ public Waystone getWaystone() {
return waystone;
}

public String getName() {
public Component getName() {
return name;
}

public void setName(String name) {
public void setName(Component name) {
this.name = name;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,8 @@ public static ChatFormatting getColorForName(String name) {
}

public static Component getGalacticName(Waystone waystone) {
String name = StringUtils.substringBeforeLast(waystone.getName(), " ");
var galacticName = Component.literal(name);
galacticName.withStyle(WarpPlateBlock.getColorForName(name));
galacticName.withStyle(GALACTIC_STYLE);
return galacticName;
final var name = StringUtils.substringBeforeLast(waystone.getName().getString(), " ");
return Component.literal(name).withStyle(WarpPlateBlock.getColorForName(name)).withStyle(GALACTIC_STYLE);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,8 @@ protected InteractionResult handleActivation(Level world, BlockPos pos, Player p
PlayerWaystoneManager.activateWaystone(player, waystone);

if (!world.isClientSide) {
var nameComponent = Component.literal(waystone.getName());
nameComponent.withStyle(ChatFormatting.WHITE);
var chatComponent = Component.translatable("chat.waystones.waystone_activated", nameComponent);
chatComponent.withStyle(ChatFormatting.YELLOW);
final var nameComponent = waystone.getName().copy().withStyle(ChatFormatting.WHITE);
final var chatComponent = Component.translatable("chat.waystones.waystone_activated", nameComponent).withStyle(ChatFormatting.YELLOW);
player.sendSystemMessage(chatComponent);

WaystoneSyncManager.sendActivatedWaystones(player);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -277,9 +277,7 @@ public void appendHoverText(ItemStack stack, @Nullable BlockGetter world, List<C
}

protected void addWaystoneNameToTooltip(List<Component> tooltip, WaystoneProxy waystone) {
var component = Component.literal(waystone.getName());
component.withStyle(ChatFormatting.AQUA);
tooltip.add(component);
tooltip.add(waystone.getName().copy().withStyle(ChatFormatting.AQUA));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import net.blay09.mods.waystones.menu.WarpPlateMenu;
import net.blay09.mods.waystones.tag.ModItemTags;
import net.blay09.mods.waystones.worldgen.namegen.NameGenerationMode;
import net.blay09.mods.waystones.worldgen.namegen.NameGenerator;
import net.blay09.mods.waystones.worldgen.namegen.NameGeneratorManager;
import net.minecraft.ChatFormatting;
import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag;
Expand Down Expand Up @@ -60,9 +60,9 @@ public void initializeWaystone(ServerLevelAccessor world, @Nullable LivingEntity
super.initializeWaystone(world, player, origin);

// Warp Plates generate a name on placement always
Waystone waystone = getWaystone();
final var waystone = getWaystone();
if (waystone instanceof MutableWaystone) {
String name = NameGenerator.get(world.getServer()).getName(world, waystone, world.getRandom(), NameGenerationMode.RANDOM_ONLY);
final var name = NameGeneratorManager.get(world.getServer()).getName(world, waystone, world.getRandom(), NameGenerationMode.RANDOM_ONLY);
((MutableWaystone) waystone).setName(name);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ public static void initialize() {
tooltip.add(formatTranslation(ChatFormatting.YELLOW, "gui.waystones.inventory.return_to_nearest_waystone"));
Waystone nearestWaystone = PlayerWaystoneManager.getNearestWaystone(player);
if (nearestWaystone != null) {
tooltip.add(formatTranslation(ChatFormatting.GRAY, "tooltip.waystones.bound_to", ChatFormatting.DARK_AQUA + nearestWaystone.getName()));
tooltip.add(formatTranslation(ChatFormatting.GRAY, "tooltip.waystones.bound_to", nearestWaystone.getName().copy().withStyle(ChatFormatting.DARK_AQUA)));
} else {
tooltip.add(formatTranslation(ChatFormatting.RED, "gui.waystones.inventory.no_waystones_activated"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public WaystoneScreen(WaystoneMenu container, Inventory playerInventory, Compone
public void init() {
super.init();
final var waystone = menu.getWaystone();
var oldText = waystone.getName();
var oldText = waystone.getName().getString();
if (textField != null) {
oldText = textField.getValue();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ protected <T extends GuiEventListener & Renderable & NarratableEntry> T addRende
private void updateList() {
List<Waystone> list = new ArrayList<>();
for (Waystone waystone : waystones) {
if (waystone.getName().toLowerCase().contains(searchText.toLowerCase())) {
if (waystone.getName().getString().toLowerCase().contains(searchText.toLowerCase())) {
list.add(waystone);
}
}
Expand Down Expand Up @@ -288,12 +288,11 @@ protected void renderLabels(GuiGraphics guiGraphics, int mouseX, int mouseY) {
private void drawLocationHeader(GuiGraphics guiGraphics, Waystone waystone, int mouseX, int mouseY, int x, int y) {
Font font = Minecraft.getInstance().font;

String locationPrefix = ChatFormatting.YELLOW + I18n.get("gui.waystones.waystone_selection.current_location") + " ";
int locationPrefixWidth = font.width(locationPrefix);
int locationPrefixWidth = font.width(Component.translatable("gui.waystones.waystone_selection.current_location", ""));

String effectiveName = waystone.getName();
if (effectiveName.isEmpty()) {
effectiveName = I18n.get("gui.waystones.waystone_selection.unnamed_waystone");
var effectiveName = waystone.getName().copy();
if (effectiveName.getString().isEmpty()) {
effectiveName = Component.translatable("gui.waystones.waystone_selection.unnamed_waystone");
}
int locationWidth = font.width(effectiveName);

Expand All @@ -304,12 +303,12 @@ private void drawLocationHeader(GuiGraphics guiGraphics, Waystone waystone, int
isLocationHeaderHovered = mouseX >= startX && mouseX < startX + locationWidth + 16
&& mouseY >= startY && mouseY < startY + font.lineHeight;

String fullText = locationPrefix + ChatFormatting.WHITE;
if (isLocationHeaderHovered) {
fullText += ChatFormatting.UNDERLINE;
effectiveName.withStyle(ChatFormatting.UNDERLINE);
}
fullText += effectiveName;

final var fullText = Component.translatable("gui.waystones.waystone_selection.current_location",
effectiveName.withStyle(ChatFormatting.WHITE)).withStyle(ChatFormatting.YELLOW);
guiGraphics.drawString(font, fullText, x - fullWidth / 2, y, 0xFFFFFF);

if (isLocationHeaderHovered) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,14 @@ public WaystoneButton(int x, int y, Waystone waystone, Cost cost, OnPress pressa
}

private static Component getWaystoneNameComponent(Waystone waystone) {
String effectiveName = waystone.getName();
if (effectiveName.isEmpty()) {
effectiveName = I18n.get("gui.waystones.waystone_selection.unnamed_waystone");
var effectiveName = waystone.getName().copy();
if (effectiveName.getString().isEmpty()) {
effectiveName = Component.translatable("gui.waystones.waystone_selection.unnamed_waystone");
}
final var textComponent = Component.literal(effectiveName);
if (waystone.getVisibility() == WaystoneVisibility.GLOBAL && waystone.getWaystoneType().equals(WaystoneTypes.WAYSTONE)) {
textComponent.withStyle(ChatFormatting.YELLOW);
effectiveName.withStyle(ChatFormatting.YELLOW);
}
return textComponent;
return effectiveName;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ private static Component componentForWaystoneList(ServerPlayer caller, ServerPla
.withStyle(ChatFormatting.YELLOW)
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, suggestedCommand)));

final var waystoneName = Component.literal(waystone.getName())
final var waystoneName = waystone.getName().copy()
.withStyle(ChatFormatting.GREEN)
.withStyle(Style.EMPTY.withClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, suggestedCommand)));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public static String getMarkerId(Waystone waystone) {

public static POIMarker createWaystoneMarker(Waystone waystone) {
return POIMarker.builder()
.label(waystone.getName())
.label(waystone.getName().getString())
.position((double) waystone.getPos().getX(), waystone.getPos().getY(), waystone.getPos().getZ())
.maxDistance(1000)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ public static String getMarkerId(Waystone waystone) {

public static Marker createWaystoneMarker(MarkerSet markerSet, Waystone waystone) {
return markerSet.createMarker(getMarkerId(waystone),
waystone.getName(),
waystone.getName().getString(),
true,
waystone.getDimension().location().toString(),
waystone.getPos().getX(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import net.blay09.mods.waystones.config.WaystonesConfig;
import net.blay09.mods.waystones.config.WaystonesConfigData;
import net.minecraft.client.resources.language.I18n;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -139,9 +140,9 @@ private void updateWaypoint(Waystone waystone) {
try {
final var prefixedId = getPrefixedWaystoneId(waystone);
final var oldWaypoint = api.getWaypoint(Waystones.MOD_ID, prefixedId);
final var waystoneName = waystone.hasName() ? waystone.getName() : I18n.get("waystones.map.untitled_waystone");
Waypoint waypoint = new Waypoint(Waystones.MOD_ID, prefixedId, waystoneName, waystone.getDimension(), waystone.getPos());
waypoint.setName(waystoneName);
final var waystoneName = waystone.hasName() ? waystone.getName() : Component.translatable("waystones.map.untitled_waystone");
Waypoint waypoint = new Waypoint(Waystones.MOD_ID, prefixedId, waystoneName.getString(), waystone.getDimension(), waystone.getPos());
waypoint.setName(waystoneName.getString());
waypoint.setGroup(getWaystoneGroup(waystone));
if (oldWaypoint != null) {
waypoint.setEnabled(oldWaypoint.isEnabled());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public static void appendTooltip(BlockEntity blockEntity, Player player, Consume
Waystone waystone = waystoneBlockEntity.getWaystone();
boolean isActivated = !waystone.getWaystoneType().equals(WaystoneTypes.WAYSTONE) || PlayerWaystoneManager.isWaystoneActivated(player, waystone);
if (isActivated && waystone.hasName() && waystone.isValid()) {
tooltipConsumer.accept(Component.literal(waystone.getName()));
tooltipConsumer.accept(waystone.getName());
} else {
tooltipConsumer.accept(Component.translatable("tooltip.waystones.undiscovered"));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import net.blay09.mods.waystones.api.WaystoneOrigin;
import net.blay09.mods.waystones.api.WaystoneVisibility;
import net.minecraft.core.BlockPos;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.player.Player;
Expand Down Expand Up @@ -34,8 +35,8 @@ public UUID getWaystoneUid() {
}

@Override
public String getName() {
return "invalid";
public Component getName() {
return Component.literal("invalid");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,13 @@
import net.blay09.mods.balm.api.BalmEnvironment;
import net.blay09.mods.waystones.api.*;
import net.blay09.mods.waystones.api.WaystoneTypes;
import net.blay09.mods.waystones.api.error.WaystoneTeleportError;
import net.blay09.mods.waystones.api.event.WaystoneActivatedEvent;
import net.blay09.mods.waystones.cost.NoCost;
import net.blay09.mods.waystones.block.entity.WaystoneBlockEntityBase;
import net.blay09.mods.waystones.config.DimensionalWarp;
import net.blay09.mods.waystones.config.InventoryButtonMode;
import net.blay09.mods.waystones.config.WaystonesConfig;
import net.blay09.mods.waystones.worldgen.namegen.NameGenerationMode;
import net.blay09.mods.waystones.worldgen.namegen.NameGenerator;
import net.blay09.mods.waystones.api.cost.Cost;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.blay09.mods.waystones.worldgen.namegen.NameGeneratorManager;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
Expand All @@ -28,7 +23,6 @@
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.function.Consumer;

public class PlayerWaystoneManager {

Expand All @@ -44,7 +38,7 @@ public static boolean isWaystoneActivated(Player player, Waystone waystone) {
public static void activateWaystone(Player player, Waystone waystone) {
if (!waystone.hasName() && waystone instanceof MutableWaystone && waystone.wasGenerated()) {
NameGenerationMode nameGenerationMode = WaystonesConfig.getActive().worldGen.nameGenerationMode;
String name = NameGenerator.get(player.getServer()).getName(player.level(), waystone, player.level().random, nameGenerationMode);
final var name = NameGeneratorManager.get(player.getServer()).getName(player.level(), waystone, player.level().random, nameGenerationMode);
((MutableWaystone) waystone).setName(name);
}

Expand Down Expand Up @@ -75,23 +69,6 @@ public static Waystone getInventoryButtonTarget(Player player) {
return null;
}

private static void informPlayer(Entity entity, String translationKey) {
if (entity instanceof Player) {
var chatComponent = Component.translatable(translationKey);
chatComponent.withStyle(ChatFormatting.RED);
((Player) entity).displayClientMessage(chatComponent, false);
}
}

public static Consumer<WaystoneTeleportError> informRejectedTeleport(final Entity entityToInform) {
return error -> {
logger.info("Rejected teleport: " + error.getClass().getSimpleName());
if (error.getTranslationKey() != null) {
informPlayer(entityToInform, error.getTranslationKey());
}
};
}

public static boolean canDimensionalWarpBetween(Entity player, Waystone waystone) {
ResourceLocation fromDimension = player.level().dimension().location();
ResourceLocation toDimension = waystone.getDimension().location();
Expand Down Expand Up @@ -155,10 +132,6 @@ public static IPlayerWaystoneData getPlayerWaystoneData(BalmEnvironment side) {
return side.isClient() ? inMemoryPlayerWaystoneData : persistentPlayerWaystoneData;
}

public static boolean mayTeleportToWaystone(Player player, Waystone waystone) {
return true;
}

public static List<UUID> getSortingIndex(Player player) {
return getPlayerWaystoneData(player.level()).getSortingIndex(player);
}
Expand Down
Loading

0 comments on commit 14679ef

Please sign in to comment.