Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ private static String getPackageFromVersion(String version) {
case "1.21.9", "1.21.10" -> "v1_21_10";
case "1.21.11" -> "v1_21_11";
case "26.1.2", "26.2" -> "v26_2";
case "26.3" -> "v26_3";
default -> throw new UnsupportedVersionException("Unknown version " + version);
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public enum Version {
V1_21_R5,
V1_21_R6,
V1_21_R7,
V26_R1;
V26_R1,
V26_R2;

public static final Version CURRENT;

Expand Down Expand Up @@ -57,6 +58,7 @@ else if (versionRaw.equals("craftbukkit")) {
case "1.21.9-R0.1-SNAPSHOT", "1.21.10-R0.1-SNAPSHOT" -> Version.V1_21_R6;
case "1.21.11-R0.1-SNAPSHOT" -> Version.V1_21_R7;
case "26.1.2-R0.1-SNAPSHOT", "26.1.2", "26.2-R0.1-SNAPSHOT", "26.2" -> Version.V26_R1;
case "26.3-R0.1-SNAPSHOT", "26.3" -> Version.V26_R2;
default -> throw new IllegalStateException("Unexpected version: " + version);
};
} else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,13 @@ void getPackageFromVersion_supportsPurpur2612() throws Exception {
Object packageName = method.invoke(null, "26.1.2");
assert packageName.equals("v26_2");
}

@Test
void getPackageFromVersion_supports263() throws Exception {
Method method = VersionManager.class.getDeclaredMethod("getPackageFromVersion", String.class);
method.setAccessible(true);

Object packageName = method.invoke(null, "26.3");
assert packageName.equals("v26_3");
}
}
5 changes: 5 additions & 0 deletions codex-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@
<artifactId>codex-nms-v26_2</artifactId>
<version>${nms.version}</version>
</dependency>
<dependency>
<groupId>studio.magemonkey</groupId>
<artifactId>codex-nms-v26_3</artifactId>
<version>${nms.version}</version>
</dependency>
</dependencies>

<licenses>
Expand Down
62 changes: 62 additions & 0 deletions codex-nms/codex-nms-v26_3/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>studio.magemonkey</groupId>
<artifactId>codex-nms</artifactId>
<version>1.2.0-R0.1-SNAPSHOT</version>
</parent>

<artifactId>codex-nms-v26_3</artifactId>
<name>CodexNMS-26.3</name>
<description>26.3 NMS utilities for Codex</description>
<url>https://www.spigotmc.org/resources/93608/</url>

<properties>
<java.version>21</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>26.3-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>26.3-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>it.unimi.dsi</groupId>
<artifactId>fastutil</artifactId>
<version>8.5.19</version>
<scope>provided</scope>
</dependency>
</dependencies>

<licenses>
<license>
<name>MIT License</name>
<url>https://www.opensource.org/licenses/mit-license.php</url>
</license>
</licenses>

<developers>
<developer>
<name>VoidEdge</name>
<organization>VoidEdge</organization>
<organizationUrl>https://void.travja.dev</organizationUrl>
</developer>
</developers>

<scm>
<connection>scm:git:git://github.com/magemonkeystudio/codex.git</connection>
<developerConnection>scm:git:ssh://github.com:magemonkeystudio/codex.git</developerConnection>
<url>https://github.com/magemonkeystudio/codex</url>
</scm>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package studio.magemonkey.codex.nms.v26_3;

import org.bukkit.NamespacedKey;
import org.bukkit.Registry;
import org.bukkit.inventory.meta.ArmorMeta;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.trim.ArmorTrim;
import org.bukkit.inventory.meta.trim.TrimMaterial;
import org.bukkit.inventory.meta.trim.TrimPattern;
import studio.magemonkey.codex.compat.ArmorUtil;
import studio.magemonkey.codex.util.random.Rnd;

import java.util.Objects;

@SuppressWarnings("UnstableApiUsage")
public class ArmorUtilImpl implements ArmorUtil {
@Override
public Object getTrimMaterial(NamespacedKey key) {
return Registry.TRIM_MATERIAL.get(key);
}

@Override
public Object getTrimPattern(NamespacedKey key) {
return Registry.TRIM_PATTERN.get(key);
}

@Override
public void addTrim(ItemMeta meta, String material, String pattern) {
if (!(meta instanceof ArmorMeta)) return;
ArmorMeta armorMeta = (ArmorMeta) meta;

TrimMaterial trimMaterial = null;
if (material.equals("*")) {
int size = 0;
for (TrimMaterial ignored : Registry.TRIM_MATERIAL) {
size++;
}
int index = Rnd.get(size);
int i = 0;
for (TrimMaterial next : Registry.TRIM_MATERIAL) {
if (index == i) {
trimMaterial = next;
break;
}
i++;
}
} else {
trimMaterial = Registry.TRIM_MATERIAL.get(NamespacedKey.minecraft(material));
}

TrimPattern trimPattern = null;
if (pattern.equals("*")) {
int size = 0;
for (TrimPattern ignored : Registry.TRIM_PATTERN) size++;

int index = Rnd.get(size);
int i = 0;
for (TrimPattern next : Registry.TRIM_PATTERN) {
if (index == i++) {
trimPattern = next;
break;
}
}
} else {
trimPattern = Registry.TRIM_PATTERN.get(NamespacedKey.minecraft(pattern));
}

ArmorTrim armorTrim =
new ArmorTrim(Objects.requireNonNull(trimMaterial), Objects.requireNonNull(trimPattern));
armorMeta.setTrim(armorTrim);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package studio.magemonkey.codex.nms.v26_3;

import net.minecraft.locale.Language;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.InventoryEvent;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import studio.magemonkey.codex.api.meta.NBTAttribute;
import studio.magemonkey.codex.compat.Compat;

public class CompatImpl implements Compat {
@Override
@SuppressWarnings("UnstableApiUsage")
public AttributeModifier createAttributeModifier(NBTAttribute attribute,
double amount,
AttributeModifier.Operation operation,
@Nullable EquipmentSlot slot) {
return new AttributeModifier(attribute.getAttribute().getKey(), amount, operation, toSlotGroup(slot));
}

private static EquipmentSlotGroup toSlotGroup(@Nullable EquipmentSlot slot) {
if (slot == null) return EquipmentSlotGroup.ANY;
return switch (slot) {
case HAND -> EquipmentSlotGroup.MAINHAND;
case OFF_HAND -> EquipmentSlotGroup.OFFHAND;
case FEET -> EquipmentSlotGroup.FEET;
case LEGS -> EquipmentSlotGroup.LEGS;
case CHEST -> EquipmentSlotGroup.CHEST;
case HEAD -> EquipmentSlotGroup.HEAD;
default -> EquipmentSlotGroup.ANY;
};
}

@Override
public String getAttributeKey(AttributeModifier attributeModifier) {
return attributeModifier.getKey().toString();
}

@Override
public String getAttributeKey(NBTAttribute attribute) {
return attribute.getAttribute().getKey().toString();
}

@Override
public Inventory getTopInventory(InventoryEvent event) {
InventoryView view = event.getView();
return view.getTopInventory();
}

@Override
@NotNull
public Inventory getTopInventory(Player player) {
InventoryView view = player.getOpenInventory();
return view.getTopInventory();
}

@Override
public Inventory getBottomInventory(InventoryEvent event) {
InventoryView view = event.getView();
return view.getBottomInventory();
}

@Override
public void setCursor(InventoryEvent event, ItemStack item) {
InventoryView view = event.getView();
view.setCursor(item);
}

@Override
public void setItem(Player player, int slot, ItemStack item) {
InventoryView view = player.getOpenInventory();
view.setItem(slot, item);
}

@Override
public Inventory getInventory(InventoryEvent event, int slot) {
InventoryView view = event.getView();
return view.getInventory(slot);
}

@Override
public ItemStack getItem(InventoryEvent event, int slot) {
InventoryView view = event.getView();
return view.getItem(slot);
}

@Override
public int convertSlot(InventoryEvent event, int slot) {
InventoryView view = event.getView();
return view.convertSlot(slot);
}

@Override
public String getItemName(ItemStack item) {
ItemMeta meta = item.getItemMeta();
if (meta == null) {
return item.getType().toString();
}

String name = null;

if (meta.hasDisplayName()) name = meta.getDisplayName();
if (name == null && meta.hasItemName()) name = meta.getItemName();
if (name == null && meta.getLore() != null && !meta.getLore().isEmpty()) name = meta.getLore().get(0);
if (name == null) name = Language.getInstance().getOrDefault(item.getTranslationKey());

return name == null ? item.getType().toString() : name;
}
}
Loading
Loading