Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F24894965
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/config/SuhaylTranslationRegistry.java b/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/config/SuhaylTranslationRegistry.java
index 1cc27a6..891b0d4 100644
--- a/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/config/SuhaylTranslationRegistry.java
+++ b/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/config/SuhaylTranslationRegistry.java
@@ -1,72 +1,73 @@
package org.eu.loupsgris.quilvaryn.config;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.translation.GlobalTranslator;
import net.kyori.adventure.translation.TranslationRegistry;
import org.eu.loupsgris.quilvaryn.SuhaylPlugin;
import org.eu.loupsgris.quilvaryn.utils.ResourceLoader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SuhaylTranslationRegistry {
private final Logger logger;
private final ResourceLoader loader;
public SuhaylTranslationRegistry(
Logger logger,
ResourceLoader loader
) {
this.logger = logger;
this.loader = loader;
}
public void load() {
Key key = Key.key(SuhaylPlugin.NAMESPACE, "translations");
TranslationRegistry registry = TranslationRegistry.create(key);
Locale[] frenchLocales = new Locale[]{
Locale.FRENCH,
Locale.FRANCE,
Locale.CANADA_FRENCH,
};
loadBundle("l10n/messages_en.properties", Locale.ENGLISH, registry);
loadBundle("l10n/messages_fr.properties", frenchLocales, registry);
registry.defaultLocale(Locale.ENGLISH);
GlobalTranslator.translator().addSource(registry);
}
private void loadBundle(String path, Locale locale, TranslationRegistry registry) {
Locale[] locales = {locale};
loadBundle(path, locales, registry);
}
private void loadBundle(String path, Locale[] locales, TranslationRegistry registry) {
try (var stream = loader.open(path)) {
if (stream == null) {
logger.warning("Missing translation file: " + path);
return;
}
ResourceBundle bundle = new PropertyResourceBundle(
new InputStreamReader(stream, StandardCharsets.UTF_8)
);
for (Locale locale : locales) {
registry.registerAll(locale, bundle, true);
}
} catch (Exception e) {
logger.log(Level.SEVERE, "Error loading translations file: " + path, e);
}
}
+
}
diff --git a/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/services/WanderingTraderService.java b/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/services/WanderingTraderService.java
index 91f5aa4..8e9dacb 100644
--- a/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/services/WanderingTraderService.java
+++ b/plugins/suhayl/src/main/java/org/eu/loupsgris/quilvaryn/services/WanderingTraderService.java
@@ -1,139 +1,138 @@
package org.eu.loupsgris.quilvaryn.services;
import org.bukkit.World;
import org.bukkit.entity.*;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.eu.loupsgris.quilvaryn.config.SuhaylConfig;
import org.eu.loupsgris.quilvaryn.config.SuhaylMessages;
import org.eu.loupsgris.quilvaryn.menus.WanderingTraderMenu;
import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.logging.Logger;
public class WanderingTraderService {
private final SuhaylConfig config;
private final Logger logger;
private long banishUntil = 0L;
private final Map<UUID, WanderingTraderMenu> openMenus;
public WanderingTraderService(SuhaylConfig config, Logger logger) {
this.config = config;
this.logger = logger;
this.openMenus = new HashMap<>();
}
public void openMenuFor(Player player, UUID traderId) {
WanderingTraderMenu menu = new WanderingTraderMenu(
this,
player,
traderId
);
openMenus.put(player.getUniqueId(), menu);
menu.open();
}
public Optional<WanderingTraderMenu> getMenuFor(Player player) {
UUID key = player.getUniqueId();
if (openMenus.containsKey(key)) {
return Optional.of(openMenus.get(key));
}
return Optional.empty();
}
public void removeMenuFor(Player player) {
openMenus.remove(player.getUniqueId());
}
public void askToLeave(@NotNull Player requester, UUID traderId) {
World world = requester.getWorld();
Entity entity = world.getEntity(traderId);
if (!(entity instanceof WanderingTrader trader)) {
logger.info("Potential plugin issue - askToLeave called on non wandering trader");
return;
}
sendMessageToPlayer(requester, "left");
// Brief particles and invisibility before removal
// That allows to render the disapproval of the trader of the request
trader.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, 40, 1, true, false, false));
removeLeashedTraderLlamas(trader);
trader.remove();
logger.info("Wandering trader removed.");
}
public void banish(Player requester, UUID traderId) {
askToLeave(requester, traderId);
long banTime = (long) (this.config.commandmentStickBanTime * 60_000);
banishUntil = System.currentTimeMillis() + banTime;
sendMessageToPlayer(requester, "ban");
}
public void toggleSilence(Player requester, UUID traderId) {
World world = requester.getWorld();
Entity entity = world.getEntity(traderId);
if (!(entity instanceof WanderingTrader trader)) {
logger.info("Potential plugin issue - toggleSilence called on non wandering trader");
return;
}
if (trader.isSilent()) {
trader.setSilent(false);
sendMessageToPlayer(requester, "unsilenced");
} else {
// Shhh!
trader.setSilent(true);
sendMessageToPlayer(requester, "silenced");
}
}
private void sendMessageToPlayer(Player player, String messageKey) {
Locale locale = player.locale();
String fullKey = "wandering_trader_menu.actions." + messageKey;
String message = SuhaylMessages.get(fullKey, locale);
player.sendMessage(message);
}
private void removeLeashedTraderLlamas(WanderingTrader trader) {
trader
.getWorld()
.getNearbyEntities(trader.getLocation(), 16, 16, 16)
.forEach(this::tryToRemoveLlama);
}
private void tryToRemoveLlama(Entity entity) {
if (!(entity instanceof TraderLlama llama)) {
return;
}
if (isUnderTraderControl(llama)) {
llama.remove();
}
}
private boolean isUnderTraderControl(TraderLlama llama) {
return llama.isLeashed() && llama.getLeashHolder() instanceof WanderingTrader;
}
public boolean canTradersVisit() {
return System.currentTimeMillis() > banishUntil;
}
-
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Wed, Mar 18, 13:26 (14 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3540017
Default Alt Text
(7 KB)
Attached To
Mode
rQVR Quilvaryn
Attached
Detach File
Event Timeline
Log In to Comment