Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

60 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Locale-API

With this API you can easily translate

  • Biomes
  • Materials
  • Effects
  • Enchantments
  • Entities
  • Potions
  • Tropical fish pattern
  • Profession of a Villager

For more translations use Translate.getCustomValue(...) and lookup for keys here.

Setup

Make sure to add depend: [Locale-API] to your plugin.yml file and the Locale-API.jar to the plugins folder of your server.

Maven

<dependency>
<groupId>de.unpixelt</groupId>
<artifactId>locale-api</artifactId>
<version>1.0</version>
</dependency>

Caution

Some Locale's like got_de, gv_im, kab_kab, mi_nz, moh_ca, nuk, oj_ca, qya_aa, tzl_tzl have a high amount of untranslated Strings (over 100) and should not be used.
If used and the key is not found, it will use the translation of Locale.en_us.

Events

On the below shown events prefer using the giving locale instead of the player object when translating. Doing so is better for performance.

+ Good+ Translate.getMaterial(e.getLocale(), Material.GRASS_BLOCK);+ Translate.getMaterial(e.getOldLocale(), Material.GRASS_BLOCK);- Bad- Translate.getMaterial(p, Material.GRASS_BLOCK);

PlayerJoinEvent >> LocalePlayerJoinEvent

When you want to translate something when a player joins the server use the LocalePlayerJoinEvent.
DO ONLY use this event if you translate something or need the player's locale for any reason. It does NOT include the joinMessage.

@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Materialmat = Material.GOLD_BLOCK;
ItemStackitem = newItemStack(mat);
Stringtranslation = Translate.getMaterial(e.getLocale(), mat);
ItemMetameta = item.getItemMeta();
meta.setDisplayName(translation);
item.setItemMeta(meta);
e.getPlayer().getInventory().addItem(item);
...
}

PlayerLocaleChangeEvent >> LocalePlayerLocaleChangeEvent

Use LocalePlayerLocaleChangeEvent instead of PlayerLocaleChangeEvent.
This event also give you the ability to get the locale the player used before.

@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
LocaleoldLocale = e.getOldLocale(); // change fromLocalenewLocale = e.getLocale(); // to 
...
}

Debugger

With the debugger you can enable/disable sending a message to the console when a Locale is loaded into or cleared from the cache.

Translate.getDebugger().setShowCaching(true);

Command

The command /usedlocales can only be executed in the console. It shows what Locale's are used and how many.

Example

In this example we create a special chest item with a lore which shows the Material requirements to open it in the player's language used.

First we create the lore, but we save it in the LocalizedName. We separate each line with a , but you can use any character you like to use.

publicItemStackgetSpecialChest() {
ItemStackitem = newItemStack(Material.ENDER_CHEST);
ItemMetameta = item.getItemMeta();
List<String> lore = newArrayList<>();
lore.add("Required to open: ");
lore.add("- §4{0}");
lore.add("- §a{1}");
meta.setLocalizedName(String.join(",", lore));
item.setItemMeta(meta);
returnitem;
}


You can also instantly write it formatted.

Stringlore = "Required to open: ,- $4{0},- §a{1}";
meta.setLocalizedName(lore);


After that we create a method that replaces {0} and {1} with the required Materials to open the special chest in the locale the player is using.

publicvoidupdateLore(Localelocale, ItemStackitem) {
ItemMetameta = item.getItemMeta();
// Replace {0} and {1} with the Materials that are requiredStringformat = MessageFormat.format(meta.getLocalizedName(),
Translate.getMaterial(locale, Material.REDSTONE_BLOCK), // {0} Translate.getMaterial(locale, Material.EMERALD)); // {1}meta.setLore(Arrays.asList(format.split(",")));
item.setItemMeta(meta);
}
publicvoidupdateLore(Playerp, ItemStackitem) {
updateLore(Translate.getLocale(p), item);
}


Last but not least events.

// Give every player that joins a special chest.@EventHandlerprivatevoidonPlayerJoinEvent(LocalePlayerJoinEvente) {
Playerp = e.getPlayer();
ItemStackspecialChest = getSpecialChest();
updateLore(e.getLocale(), specialChest);
p.getInventory().addItem(specialChest);
}
// When a special chest is picked up it will update the requirements in the lore to// the player's locale.@EventHandlerprivatevoidonPlayerPickup(EntityPickupItemEvente) {
if (e.getEntity() instanceofPlayer) {
Playerp = (Player) e.getEntity();
ItemStackitem = e.getItem().getItemStack();
if (item.getType() == Material.ENDER_CHEST) {
updateLore(p, item);
}
}
}
// When the player change his locale it will also update the requirements in the // lore to the new selected locale.@EventHandlerprivatevoidonPlayerLocaleChange(LocalePlayerLocaleChangeEvente) {
for (ItemStackitem : e.getPlayer().getInventory()) {
if (item == null) continue;
if (item.getType() == Material.ENDER_CHEST) {
updateLore(e.getLocale(), item);
}
}
}

It's not the best for performance but this example is used to show what you can do with this API.


Have fun coding ❤️🦊

About

Spigot library for translating Minecraft objects like Materials

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages