Skip to content
This repository was archived by the owner on Jul 30, 2025. It is now read-only.

Commit fe056e7

Browse files
authored
feat: window title translation (#31)
1 parent a7e4d9e commit fe056e7

6 files changed

Lines changed: 87 additions & 6 deletions

File tree

src/main/java/net/guizhanss/slimefuntranslation/core/services/ListenerService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import net.guizhanss.slimefuntranslation.SlimefunTranslation;
66
import net.guizhanss.slimefuntranslation.implementation.listeners.PlayerJoinListener;
77
import net.guizhanss.slimefuntranslation.implementation.listeners.PlayerQuitListener;
8+
import net.guizhanss.slimefuntranslation.implementation.listeners.SlimefunBlockRightClickListener;
89
import net.guizhanss.slimefuntranslation.implementation.listeners.SlimefunItemLoadListener;
910
import net.guizhanss.slimefuntranslation.implementation.listeners.SlimefunLanguageChangeListener;
1011
import net.guizhanss.slimefuntranslation.implementation.listeners.TranslationsLoadListener;
@@ -13,6 +14,7 @@ public final class ListenerService {
1314
public ListenerService(@Nonnull SlimefunTranslation plugin) {
1415
new PlayerJoinListener(plugin);
1516
new PlayerQuitListener(plugin);
17+
new SlimefunBlockRightClickListener(plugin);
1618
new SlimefunItemLoadListener(plugin);
1719
new SlimefunLanguageChangeListener(plugin);
1820
new TranslationsLoadListener(plugin);

src/main/java/net/guizhanss/slimefuntranslation/core/services/PacketListenerService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.client.items.SetCreativeSlotListener;
88
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.client.items.WindowClickListener;
99
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.server.EntityMetadataListener;
10+
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.server.OpenWindowListener;
1011
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.server.items.SetSlotListener;
1112
import net.guizhanss.slimefuntranslation.implementation.packetlisteners.server.items.WindowItemListener;
1213

@@ -15,11 +16,12 @@ public final class PacketListenerService {
1516
public PacketListenerService() {
1617
List<AListener> packetListeners = new ArrayList<>();
1718

18-
packetListeners.add(new SetSlotListener());
19-
packetListeners.add(new WindowItemListener());
2019
packetListeners.add(new SetCreativeSlotListener());
2120
packetListeners.add(new WindowClickListener());
21+
packetListeners.add(new SetSlotListener());
22+
packetListeners.add(new WindowItemListener());
2223
packetListeners.add(new EntityMetadataListener());
24+
packetListeners.add(new OpenWindowListener());
2325

2426
for (var listener : packetListeners) {
2527
listener.register();

src/main/java/net/guizhanss/slimefuntranslation/core/users/User.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
import java.util.UUID;
44

55
import javax.annotation.Nonnull;
6+
import javax.annotation.Nullable;
67

78
import com.google.common.base.Preconditions;
89

910
import org.bukkit.Bukkit;
1011
import org.bukkit.entity.Player;
1112

13+
import io.github.thebusybiscuit.slimefun4.api.items.SlimefunItem;
1214
import io.github.thebusybiscuit.slimefun4.implementation.Slimefun;
1315

1416
import lombok.Getter;
@@ -23,6 +25,7 @@ public class User {
2325
private final Player player;
2426
private final UUID uuid;
2527
private String locale;
28+
private SlimefunItem recentClickedBlock;
2629

2730
public User(@Nonnull Player player) {
2831
this.player = player;
@@ -43,14 +46,18 @@ private void init() {
4346
public void updateLocale() {
4447
var lang = Slimefun.getLocalization().getLanguage(player);
4548
if (lang != null) {
46-
locale = lang.getId();
49+
setLocale(lang.getId());
4750
} else {
48-
locale = Slimefun.getLocalization().getDefaultLanguage().getId();
51+
setLocale(Slimefun.getLocalization().getDefaultLanguage().getId());
4952
}
5053
}
5154

52-
public void updateLocale(@Nonnull String newLocale) {
55+
public void setLocale(@Nonnull String newLocale) {
5356
Preconditions.checkArgument(newLocale != null, "Locale cannot be null");
5457
locale = newLocale;
5558
}
59+
60+
public void setRecentClickedBlock(@Nullable SlimefunItem block) {
61+
recentClickedBlock = block;
62+
}
5663
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.guizhanss.slimefuntranslation.implementation.listeners;
2+
3+
import javax.annotation.Nonnull;
4+
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.Listener;
7+
8+
import io.github.thebusybiscuit.slimefun4.api.events.PlayerRightClickEvent;
9+
10+
import net.guizhanss.slimefuntranslation.SlimefunTranslation;
11+
import net.guizhanss.slimefuntranslation.core.users.User;
12+
13+
public class SlimefunBlockRightClickListener implements Listener {
14+
public SlimefunBlockRightClickListener(@Nonnull SlimefunTranslation plugin) {
15+
plugin.getServer().getPluginManager().registerEvents(this, plugin);
16+
}
17+
18+
@EventHandler
19+
public void onRightClick(@Nonnull PlayerRightClickEvent e) {
20+
User user = SlimefunTranslation.getUserService().getUser(e.getPlayer());
21+
var sfBlock = e.getSlimefunBlock();
22+
user.setRecentClickedBlock(sfBlock.orElse(null));
23+
}
24+
}

src/main/java/net/guizhanss/slimefuntranslation/implementation/listeners/SlimefunLanguageChangeListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ public SlimefunLanguageChangeListener(@Nonnull SlimefunTranslation plugin) {
1818
@EventHandler
1919
public void onLanguageChange(@Nonnull PlayerLanguageChangeEvent e) {
2020
User user = SlimefunTranslation.getUserService().getUser(e.getPlayer());
21-
user.updateLocale(e.getNewLanguage().getId());
21+
user.setLocale(e.getNewLanguage().getId());
2222
}
2323
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package net.guizhanss.slimefuntranslation.implementation.packetlisteners.server;
2+
3+
import java.util.stream.Collectors;
4+
import java.util.stream.Stream;
5+
6+
import javax.annotation.Nonnull;
7+
8+
import com.comphenix.protocol.PacketType;
9+
import com.comphenix.protocol.events.PacketContainer;
10+
import com.comphenix.protocol.events.PacketEvent;
11+
import com.comphenix.protocol.reflect.StructureModifier;
12+
import com.comphenix.protocol.wrappers.WrappedChatComponent;
13+
14+
import net.guizhanss.slimefuntranslation.SlimefunTranslation;
15+
import net.md_5.bungee.api.chat.BaseComponent;
16+
import net.md_5.bungee.chat.ComponentSerializer;
17+
18+
public class OpenWindowListener extends AServerListener {
19+
public OpenWindowListener() {
20+
super(PacketType.Play.Server.OPEN_WINDOW);
21+
}
22+
23+
@Override
24+
protected void process(@Nonnull PacketEvent event) {
25+
var user = getUser(event);
26+
if (user == null) {
27+
return;
28+
}
29+
var block = user.getRecentClickedBlock();
30+
if (block == null) {
31+
return;
32+
}
33+
34+
final PacketContainer packet = event.getPacket();
35+
StructureModifier<WrappedChatComponent> modifier = packet.getChatComponents();
36+
WrappedChatComponent wrappedChatComponent = modifier.read(0);
37+
BaseComponent[] components = ComponentSerializer.parse(wrappedChatComponent.getJson());
38+
String title = Stream.of(components).map(c -> c.toLegacyText()).collect(Collectors.joining());
39+
if (!block.getItemName().equals(title)) {
40+
return;
41+
}
42+
modifier.write(0, WrappedChatComponent.fromLegacyText(
43+
SlimefunTranslation.getTranslationService().getTranslatedItemName(user, block)
44+
));
45+
}
46+
}

0 commit comments

Comments
 (0)