Skip to content

Commit 4085b61

Browse files
authored
Merge pull request #366 from FTBTeam/1.21.1/dev
1.21.1/dev
2 parents 4942f76 + 52a8374 commit 4085b61

File tree

266 files changed

+789
-1657
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

266 files changed

+789
-1657
lines changed

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,17 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## [2101.1.11]
8+
9+
### Added
10+
* Translation keys may now be used as waypoint text; the translated text will be shown where applicable
11+
* Primarily useful for adding localized waypoints via command or API
12+
13+
### Changed
14+
* Moved a lot of entity face icon loading code into FTB Library
15+
* No player-visible changes here
16+
* This release requires FTB Library 2101.1.21+
17+
718
## [2101.1.10]
819

920
### Added

common/src/main/java/dev/ftb/mods/ftbchunks/FTBChunksCommands.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,11 @@
1515
import dev.ftb.mods.ftbchunks.api.ClaimResult;
1616
import dev.ftb.mods.ftbchunks.api.ClaimedChunk;
1717
import dev.ftb.mods.ftbchunks.api.FTBChunksProperties;
18-
import dev.ftb.mods.ftbchunks.client.gui.EntityIconSettingsScreen;
19-
import dev.ftb.mods.ftbchunks.client.mapicon.EntityIcons;
18+
import dev.ftb.mods.ftbchunks.client.FTBChunksClient;
2019
import dev.ftb.mods.ftbchunks.data.ChunkTeamDataImpl;
2120
import dev.ftb.mods.ftbchunks.data.ClaimedChunkImpl;
2221
import dev.ftb.mods.ftbchunks.data.ClaimedChunkManagerImpl;
23-
import dev.ftb.mods.ftbchunks.net.AddWaypointPacket;
24-
import dev.ftb.mods.ftbchunks.net.LoadedChunkViewPacket;
25-
import dev.ftb.mods.ftbchunks.net.OpenClaimGUIPacket;
26-
import dev.ftb.mods.ftbchunks.net.RequestBlockColorPacket;
27-
import dev.ftb.mods.ftbchunks.net.SendGeneralDataPacket;
22+
import dev.ftb.mods.ftbchunks.net.*;
2823
import dev.ftb.mods.ftblibrary.math.ChunkDimPos;
2924
import dev.ftb.mods.ftblibrary.math.MathUtils;
3025
import dev.ftb.mods.ftbteams.api.FTBTeamsAPI;
@@ -34,7 +29,6 @@
3429
import it.unimi.dsi.fastutil.longs.Long2IntMaps;
3530
import it.unimi.dsi.fastutil.longs.Long2IntOpenHashMap;
3631
import net.minecraft.ChatFormatting;
37-
import net.minecraft.client.Minecraft;
3832
import net.minecraft.commands.CommandBuildContext;
3933
import net.minecraft.commands.CommandSourceStack;
4034
import net.minecraft.commands.Commands;
@@ -49,6 +43,7 @@
4943
import net.minecraft.network.chat.Component;
5044
import net.minecraft.resources.ResourceKey;
5145
import net.minecraft.resources.ResourceLocation;
46+
import net.minecraft.server.dedicated.DedicatedServer;
5247
import net.minecraft.server.level.ChunkHolder;
5348
import net.minecraft.server.level.ColumnPos;
5449
import net.minecraft.server.level.ServerLevel;
@@ -228,8 +223,13 @@ public static void registerCommands(CommandDispatcher<CommandSourceStack> dispat
228223
dispatcher.register(Commands.literal("ftbchunks_dev")
229224
.then(Commands.literal("create_gui")
230225
.executes(context -> {
231-
Minecraft.getInstance().submit(() -> new EntityIconSettingsScreen(true).openGui());
232-
return Command.SINGLE_SUCCESS;
226+
if (context.getSource().getServer() instanceof DedicatedServer) {
227+
context.getSource().sendFailure(Component.literal("Not on a dedicted server!"));
228+
return 0;
229+
} else {
230+
FTBChunksClient.openIconSettingsScreen();
231+
return Command.SINGLE_SUCCESS;
232+
}
233233
})
234234
)
235235
);

common/src/main/java/dev/ftb/mods/ftbchunks/api/client/waypoint/Waypoint.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package dev.ftb.mods.ftbchunks.api.client.waypoint;
22

33
import dev.ftb.mods.ftbchunks.api.client.icon.WaypointIcon;
4-
import dev.ftb.mods.ftbchunks.client.map.WaypointImpl;
54
import net.minecraft.core.BlockPos;
5+
import net.minecraft.network.chat.Component;
66
import net.minecraft.resources.ResourceKey;
77
import net.minecraft.world.entity.Entity;
88
import net.minecraft.world.level.Level;
@@ -44,12 +44,20 @@ public interface Waypoint {
4444
Waypoint setHidden(boolean hidden);
4545

4646
/**
47-
* Get the waypoint's displayed name.
47+
* Get the waypoint's raw name, which the player entered, and which is displayed in editing GUIs. This may be a
48+
* translation key, or just a literal string.
4849
*
49-
* @return the name
50+
* @return the waypoint's name
5051
*/
5152
String getName();
5253

54+
/**
55+
* {@return the displayed string for the waypoint, as shown on the large map, and for in-world waypoints}
56+
*/
57+
default Component getDisplayName() {
58+
return Component.translatable(getName());
59+
}
60+
5361
/**
5462
* Change the waypoint's displayed name.
5563
*

common/src/main/java/dev/ftb/mods/ftbchunks/client/FTBChunksClient.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import dev.ftb.mods.ftblibrary.config.ColorConfig;
4141
import dev.ftb.mods.ftblibrary.config.StringConfig;
4242
import dev.ftb.mods.ftblibrary.icon.Color4I;
43+
import dev.ftb.mods.ftblibrary.icon.EntityIconLoader;
4344
import dev.ftb.mods.ftblibrary.icon.FaceIcon;
4445
import dev.ftb.mods.ftblibrary.icon.Icon;
4546
import dev.ftb.mods.ftblibrary.math.MathUtils;
@@ -170,7 +171,7 @@ public void init() {
170171

171172
registerKeys();
172173

173-
ReloadListenerRegistry.register(PackType.CLIENT_RESOURCES, new EntityIcons());
174+
// ReloadListenerRegistry.register(PackType.CLIENT_RESOURCES, new EntityIcons());
174175
ReloadListenerRegistry.register(PackType.CLIENT_RESOURCES, new ColorMapLoader());
175176
ClientPlayerEvent.CLIENT_PLAYER_QUIT.register(this::loggedOut);
176177
CustomClickEvent.EVENT.register(this::customClick);
@@ -1106,16 +1107,16 @@ private void mapIcons(MapIconEvent event) {
11061107

11071108
if (FTBChunksClientConfig.MINIMAP_ENTITIES.get()) {
11081109
for (Entity entity : mc.level.entitiesForRendering()) {
1109-
if (!EntityIcons.shouldEntityRender(entity, mc.player)) {
1110+
if (!EntityIconUtils.shouldEntityRender(entity, mc.player)) {
11101111
continue;
11111112
}
11121113

1113-
Icon icon = EntityIcons.getIcon(entity);
1114-
Optional<EntityIcons.EntityIconSettings> settings = EntityIcons.getSettings(entity.getType());
1114+
Icon icon = EntityIconLoader.getIcon(entity);
1115+
Optional<EntityIconLoader.EntityIconSettings> settings = EntityIconLoader.getSettings(entity.getType());
11151116
if (settings.isEmpty()) {
11161117
continue;
11171118
}
1118-
EntityIcons.WidthHeight wh = settings.get().widthHeight();
1119+
EntityIconLoader.WidthHeight wh = settings.get().widthHeight();
11191120

11201121
if (!icon.isEmpty()) {
11211122
if (FTBChunksClientConfig.ONLY_SURFACE_ENTITIES.get() && !mc.level.dimensionType().hasCeiling()) {
@@ -1233,7 +1234,7 @@ public void maybeClearDeathpoint(Player player) {
12331234
if (wp.getDistanceSq(player) < maxDist * maxDist) {
12341235
wpm.remove(wp);
12351236
wpm.getNearestDeathpoint(player).ifPresent(wp1 -> wp1.setHidden(false));
1236-
player.displayClientMessage(Component.translatable("ftbchunks.deathpoint_removed", wp.getName()).withStyle(ChatFormatting.YELLOW), true);
1237+
player.displayClientMessage(Component.translatable("ftbchunks.deathpoint_removed", wp.getDisplayName()).withStyle(ChatFormatting.YELLOW), true);
12371238
}
12381239
});
12391240
}
@@ -1384,7 +1385,7 @@ public void addWidgets() {
13841385
Waypoint wp = addWaypoint(name.getValue(), globalPosConfig.getValue(), color.getValue().rgba());
13851386
Minecraft.getInstance().player.displayClientMessage(
13861387
Component.translatable("ftbchunks.waypoint_added",
1387-
Component.literal(wp.getName()).withStyle(ChatFormatting.YELLOW)
1388+
wp.getDisplayName().copy().withStyle(ChatFormatting.YELLOW)
13881389
), true);
13891390
}
13901391
}) {
@@ -1401,4 +1402,8 @@ public void onClosed() {
14011402
public int getRenderedDebugCount() {
14021403
return renderedDebugCount;
14031404
}
1405+
1406+
public static void openIconSettingsScreen() {
1407+
Minecraft.getInstance().submit(() -> new EntityIconSettingsScreen(true).openGui());
1408+
}
14041409
}

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/EntityIconSettingsScreen.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package dev.ftb.mods.ftbchunks.client.gui;
22

33
import dev.ftb.mods.ftbchunks.client.FTBChunksClientConfig;
4-
import dev.ftb.mods.ftbchunks.client.mapicon.EntityIcons;
4+
import dev.ftb.mods.ftbchunks.client.mapicon.EntityIconUtils;
5+
import dev.ftb.mods.ftblibrary.icon.EntityIconLoader;
56
import dev.ftb.mods.ftblibrary.icon.Icon;
67
import dev.ftb.mods.ftblibrary.icon.Icons;
78
import dev.ftb.mods.ftblibrary.ui.Panel;
@@ -36,7 +37,7 @@ protected List<GroupData<MobCategory, EntityType<?>>> getGroups() {
3637
for (MobCategory mobCategory : MobCategory.values()) {
3738
List<EntityType<?>> entityTypes = new ArrayList<>();
3839
for (EntityType<?> entityType : BuiltInRegistries.ENTITY_TYPE) {
39-
if (entityType.getCategory() == mobCategory && EntityIcons.canTypeRenderer(entityType)) {
40+
if (entityType.getCategory() == mobCategory && EntityIconUtils.canTypeRender(entityType)) {
4041
entityTypes.add(entityType);
4142
}
4243
}
@@ -60,7 +61,7 @@ private class RowPanel extends AbstractGroupedButtonListScreen<MobCategory, Enti
6061

6162
public RowPanel(Panel panel, EntityType<?> entityType) {
6263
super(panel, entityType);
63-
this.icon = EntityIcons.getIcon(entityType);
64+
this.icon = EntityIconLoader.getIcon(entityType);
6465
this.resourceKey = ResourceKey.create(Registries.ENTITY_TYPE, BuiltInRegistries.ENTITY_TYPE.getKey(entityType));
6566
setHeight(18);
6667
}
@@ -74,12 +75,11 @@ public void addWidgets() {
7475
}));
7576

7677
if (showCreationButton) {
77-
boolean isDynamicTexture = EntityIcons.IS_USING_NEW_JSON.getOrDefault(value, false);
78-
Icon icon = isDynamicTexture ? Icons.BOOK_RED : Icons.BOOK;
78+
Icon icon = EntityIconLoader.isDynamicTexture(value) ? Icons.BOOK_RED : Icons.BOOK;
7979
add(createButton = new SimpleButton(this, Component.translatable("ftbchunks.gui.open_creation_gui"), icon, (widget, button) -> new SliceCreationGUI(value).openGui()));
8080
}
8181

82-
EntityIcons.EntityIconSettings entityIconSettings = EntityIcons.getSettings(value).orElseThrow();
82+
var entityIconSettings = EntityIconLoader.getSettings(value).orElseThrow();
8383
add(nameField = new TextField(this) {
8484
@Override
8585
public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h) {

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/SliceCreationGUI.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,8 @@
44
import com.mojang.logging.LogUtils;
55
import com.mojang.serialization.JsonOps;
66
import dev.architectury.platform.Platform;
7-
import dev.ftb.mods.ftbchunks.client.mapicon.EntityIcons;
8-
import dev.ftb.mods.ftbchunks.client.mapicon.EntityImageIcon;
9-
import dev.ftb.mods.ftblibrary.icon.Color4I;
10-
import dev.ftb.mods.ftblibrary.icon.Icons;
11-
import dev.ftb.mods.ftblibrary.icon.ImageIcon;
12-
import dev.ftb.mods.ftblibrary.ui.BaseScreen;
13-
import dev.ftb.mods.ftblibrary.ui.Button;
14-
import dev.ftb.mods.ftblibrary.ui.IntTextBox;
15-
import dev.ftb.mods.ftblibrary.ui.Panel;
16-
import dev.ftb.mods.ftblibrary.ui.SimpleButton;
17-
import dev.ftb.mods.ftblibrary.ui.Theme;
18-
import dev.ftb.mods.ftblibrary.ui.ToggleableButton;
7+
import dev.ftb.mods.ftblibrary.icon.*;
8+
import dev.ftb.mods.ftblibrary.ui.*;
199
import dev.ftb.mods.ftblibrary.ui.misc.SimpleToast;
2010
import net.minecraft.client.Minecraft;
2111
import net.minecraft.client.gui.GuiGraphics;
@@ -39,7 +29,6 @@
3929
// Uses the entity texture to render the entity icon
4030
// Can create multiple slices and move them around.
4131
public class SliceCreationGUI extends BaseScreen {
42-
4332
private static final Logger LOGGER = LogUtils.getLogger();
4433

4534
private final EntityType<?> entityType;
@@ -107,7 +96,6 @@ public SliceCreationGUI(EntityType<?> entityType) {
10796
}
10897
});
10998

110-
11199
loadExistingSettings();
112100
}
113101

@@ -178,7 +166,6 @@ public void drawForeground(GuiGraphics graphics, Theme theme, int x, int y, int
178166

179167
// a "Control Box" that allows to create the overlays for the slices and move them around
180168
public static class SliceControlBox extends Panel {
181-
182169
private final ImageIcon mainIcon;
183170
private final ResourceLocation texture;
184171
private final IntTextBox xText;
@@ -289,7 +276,6 @@ public int getH() {
289276
}
290277
}
291278

292-
293279
private static class ColorButton extends SimpleButton {
294280
private Color4I color4I;
295281

@@ -314,26 +300,25 @@ public void draw(GuiGraphics graphics, Theme theme, int x, int y, int w, int h)
314300
Color4I.BLACK.withAlpha(125).draw(graphics, x + 2, y + 2, 12, 12);
315301
color4I.draw(graphics, x + 3, y + 3, 10, 10);
316302
}
317-
318303
}
319304

320305
private SimpleButton createExportButton() {
321306
return new SimpleButton(this, Component.literal("Export"), Icons.STAR, (button, mouseButton) -> {
322307
SliceCreationGUI bu = (SliceCreationGUI) button.getGui();
323-
EntityIcons.EntityIconSettings entityIconSettings = new EntityIcons.EntityIconSettings(
308+
EntityIconLoader.EntityIconSettings entityIconSettings = new EntityIconLoader.EntityIconSettings(
324309
true,
325310
Optional.empty(),
326311
Optional.of(bu.sliceControlBox.createSlice()),
327312
bu.sliceControlBoxes.stream().map(box -> new EntityImageIcon.ChildIconData(
328313
Optional.empty(),
329314
box.createSlice(),
330315
Optional.of(new EntityImageIcon.Offset(box.offsetXText.getIntValue(), box.offsetYText.getIntValue())))).toList(),
331-
EntityIcons.WidthHeight.DEFAULT,
316+
EntityIconLoader.WidthHeight.DEFAULT,
332317
Optional.empty(),
333318
1,
334319
true);
335320

336-
EntityIcons.EntityIconSettings.CODEC.encodeStart(JsonOps.INSTANCE, entityIconSettings).result().ifPresent(jsonElement -> {
321+
EntityIconLoader.EntityIconSettings.CODEC.encodeStart(JsonOps.INSTANCE, entityIconSettings).result().ifPresent(jsonElement -> {
337322
Path path = Platform.getGameFolder().resolve("export");
338323
try {
339324
ResourceLocation key = BuiltInRegistries.ENTITY_TYPE.getKey(entityType);
@@ -352,7 +337,7 @@ private SimpleButton createExportButton() {
352337
}
353338

354339
private void loadExistingSettings() {
355-
EntityIcons.getSettings(entityType).ifPresent(settings -> {
340+
EntityIconLoader.getSettings(entityType).ifPresent(settings -> {
356341
settings.mainSlice().ifPresent(slice -> {
357342
sliceControlBox.xText.setAmount(slice.x());
358343
sliceControlBox.yText.setAmount(slice.y());

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/WaypointEditorScreen.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import net.minecraft.client.Minecraft;
2424
import net.minecraft.client.gui.GuiGraphics;
2525
import net.minecraft.client.player.LocalPlayer;
26+
import net.minecraft.client.resources.language.I18n;
2627
import net.minecraft.commands.Commands;
2728
import net.minecraft.core.GlobalPos;
2829
import net.minecraft.network.chat.Component;
@@ -302,7 +303,7 @@ public void setWidth(int newWidth) {
302303
distField.setPos(hideButton.getPosX() - 5 - distField.width, yOff);
303304

304305
nameField.setPos(5, yOff);
305-
nameField.setText(ClientTextComponentUtils.ellipsize(getTheme().getFont(), Component.literal(wp.getName()), distField.getPosX() - 5).getString());
306+
nameField.setText(ClientTextComponentUtils.ellipsize(getTheme().getFont(), wp.getDisplayName(), distField.getPosX() - 5).getString());
306307
nameField.setHeight(getTheme().getFontHeight() + 2);
307308
}
308309
}
@@ -396,7 +397,7 @@ public boolean keyPressed(Key key) {
396397

397398
private void deleteWaypoint(boolean gui) {
398399
if (gui) {
399-
getGui().openYesNo(Component.translatable("ftbchunks.gui.delete_waypoint", Component.literal(wp.getName())
400+
getGui().openYesNo(Component.translatable("ftbchunks.gui.delete_waypoint", wp.getDisplayName().copy()
400401
.withStyle(Style.EMPTY.withColor(wp.getColor()))), Component.empty(), () -> {
401402
wp.removeFromManager();
402403
WaypointEditorScreen.this.waypoints.get(wp.getDimension()).remove(wp);
@@ -410,7 +411,7 @@ private void deleteWaypoint(boolean gui) {
410411
}
411412

412413
private ContextMenuItem makeTitleMenuItem() {
413-
return new ContextMenuItem(Component.literal(wp.getName()), Icon.empty(), null) {
414+
return new ContextMenuItem(wp.getDisplayName(), Icon.empty(), null) {
414415
@Override
415416
public Icon getIcon() {
416417
return wp.getType().getIcon().withTint(Color4I.rgb(wp.getColor()));

common/src/main/java/dev/ftb/mods/ftbchunks/client/gui/WaypointShareMenu.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static Optional<ContextMenuItem> makeShareMenu(Player sharingPlayer, Wayp
5454
private static void shareWaypoint(Waypoint waypoint, ShareWaypointPacket.ShareType type, List<UUID> targets) {
5555
GlobalPos waypointPos = new GlobalPos(waypoint.getDimension(), waypoint.getPos());
5656
NetworkManager.sendToServer(new ShareWaypointPacket(waypoint.getName(), waypointPos, type, targets));
57-
SimpleToast.info(Component.translatable("ftbchunks.waypoint.shared_by_you", waypoint.getName()), Component.empty());
57+
SimpleToast.info(Component.translatable("ftbchunks.waypoint.shared_by_you", waypoint.getDisplayName()), Component.empty());
5858
}
5959

6060
private static class ShareWaypointButtonList extends AbstractButtonListScreen {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package dev.ftb.mods.ftbchunks.client.mapicon;
2+
3+
import dev.ftb.mods.ftbchunks.client.FTBChunksClientConfig;
4+
import dev.ftb.mods.ftblibrary.icon.EntityIconLoader;
5+
import dev.ftb.mods.ftblibrary.icon.EntityIconLoader.EntityIconSettings;
6+
import net.minecraft.core.registries.BuiltInRegistries;
7+
import net.minecraft.resources.ResourceKey;
8+
import net.minecraft.world.entity.Entity;
9+
import net.minecraft.world.entity.EntityType;
10+
import net.minecraft.world.entity.player.Player;
11+
12+
public class EntityIconUtils {
13+
public static boolean canTypeRender(EntityType<?> type) {
14+
return type != EntityType.PLAYER && EntityIconLoader.getSettings(type).isPresent();
15+
}
16+
17+
public static boolean shouldEntityRender(Entity entity, Player player) {
18+
if (!canTypeRender(entity.getType()) || entity.isInvisibleTo(player)) {
19+
return false;
20+
}
21+
22+
return BuiltInRegistries.ENTITY_TYPE.getResourceKey(entity.getType())
23+
.map(key -> isIconEnabled(key, entity.getType()))
24+
.orElse(false);
25+
}
26+
27+
private static boolean isIconEnabled(ResourceKey<EntityType<?>> key, EntityType<?> type) {
28+
if (!FTBChunksClientConfig.ENTITY_ICON.get().containsKey(key)) {
29+
// entity not listed in the config (most likely a new mod was added) - get its defaults if possible
30+
EntityIconSettings settings = EntityIconLoader.getSettings(type).orElse(EntityIconSettings.legacy());
31+
FTBChunksClientConfig.ENTITY_ICON.get().put(key, settings.defaultEnabled());
32+
FTBChunksClientConfig.saveConfig();
33+
return settings.defaultEnabled();
34+
} else {
35+
return FTBChunksClientConfig.ENTITY_ICON.get().get(key);
36+
}
37+
}
38+
}

0 commit comments

Comments
 (0)