Page MenuHomeDevCentral

No OneTemporary

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

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)

Event Timeline