Skip to content

Commit b3fe549

Browse files
committed
Add 1.21.7 compatibility layer
1 parent bbcd1aa commit b3fe549

25 files changed

+3583
-0
lines changed

CompatibilityLib/main/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,12 @@
7575
<type>jar</type>
7676
<scope>compile</scope>
7777
</dependency>
78+
<dependency>
79+
<groupId>${project.groupId}</groupId>
80+
<artifactId>CompatibilityLib-v1_21_7</artifactId>
81+
<version>${project.version}</version>
82+
<type>jar</type>
83+
<scope>compile</scope>
84+
</dependency>
7885
</dependencies>
7986
</project>

CompatibilityLib/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
<module>v1_21_4</module>
5454
<module>v1_21_5</module>
5555
<module>v1_21_6</module>
56+
<module>v1_21_7</module>
5657
<module>main</module>
5758
</modules>
5859

CompatibilityLib/v1_21_7/pom.xml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>com.elmakers.mine.bukkit.compatibility</groupId>
7+
<artifactId>CompatibilityLib-parent</artifactId>
8+
<version>10.10.2-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>CompatibilityLib-v1_21_7</artifactId>
11+
12+
<properties>
13+
<bukkit.version>1.21.7-R0.1-SNAPSHOT</bukkit.version>
14+
</properties>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.spigotmc</groupId>
19+
<artifactId>spigot-api</artifactId>
20+
<version>${bukkit.version}</version>
21+
<scope>provided</scope>
22+
</dependency>
23+
<dependency>
24+
<groupId>org.spigotmc</groupId>
25+
<artifactId>spigot</artifactId>
26+
<version>${bukkit.version}</version>
27+
<classifier>remapped-mojang</classifier>
28+
<scope>provided</scope>
29+
</dependency>
30+
<dependency>
31+
<groupId>${project.groupId}</groupId>
32+
<artifactId>CompatibilityLib-base_v1_21_4</artifactId>
33+
<version>${project.version}</version>
34+
<scope>compile</scope>
35+
</dependency>
36+
</dependencies>
37+
38+
<build>
39+
<plugins>
40+
<plugin>
41+
<groupId>net.md-5</groupId>
42+
<artifactId>specialsource-maven-plugin</artifactId>
43+
<version>2.0.3</version>
44+
<executions>
45+
<execution>
46+
<phase>package</phase>
47+
<goals>
48+
<goal>remap</goal>
49+
</goals>
50+
<id>remap-obf</id>
51+
<configuration>
52+
<srgIn>org.spigotmc:minecraft-server:${bukkit.version}:txt:maps-mojang</srgIn>
53+
<reverse>true</reverse>
54+
<remappedDependencies>org.spigotmc:spigot:${bukkit.version}:jar:remapped-mojang</remappedDependencies>
55+
<remappedArtifactAttached>true</remappedArtifactAttached>
56+
<remappedClassifierName>remapped-obf</remappedClassifierName>
57+
</configuration>
58+
</execution>
59+
<execution>
60+
<phase>package</phase>
61+
<goals>
62+
<goal>remap</goal>
63+
</goals>
64+
<id>remap-spigot</id>
65+
<configuration>
66+
<inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>
67+
<srgIn>org.spigotmc:minecraft-server:${bukkit.version}:csrg:maps-spigot</srgIn>
68+
<remappedDependencies>org.spigotmc:spigot:${bukkit.version}:jar:remapped-obf</remappedDependencies>
69+
</configuration>
70+
</execution>
71+
</executions>
72+
</plugin>
73+
</plugins>
74+
</build>
75+
76+
</project>

CompatibilityLib/v1_21_7/src/main/java/com/elmakers/mine/bukkit/utility/platform/v1_21_7/CompatibilityUtils.java

Lines changed: 899 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
package com.elmakers.mine.bukkit.utility.platform.v1_21_7;
2+
3+
import java.util.ArrayList;
4+
import java.util.Collection;
5+
import java.util.List;
6+
import java.util.Optional;
7+
8+
import org.bukkit.Bukkit;
9+
import org.bukkit.Material;
10+
import org.bukkit.craftbukkit.v1_21_R5.CraftWorld;
11+
import org.bukkit.craftbukkit.v1_21_R5.inventory.CraftItemStack;
12+
import org.bukkit.inventory.ItemStack;
13+
14+
import com.elmakers.mine.bukkit.utility.ReflectionUtils;
15+
import com.elmakers.mine.bukkit.utility.platform.Platform;
16+
import com.elmakers.mine.bukkit.utility.platform.base_v1_21_4.ItemUtilsBase_v1_21_4;
17+
18+
import net.minecraft.core.component.DataComponents;
19+
import net.minecraft.nbt.CompoundTag;
20+
import net.minecraft.nbt.ListTag;
21+
import net.minecraft.nbt.StringTag;
22+
import net.minecraft.nbt.Tag;
23+
import net.minecraft.util.ProblemReporter;
24+
import net.minecraft.world.ItemStackWithSlot;
25+
import net.minecraft.world.item.component.CustomData;
26+
import net.minecraft.world.level.storage.TagValueInput;
27+
import net.minecraft.world.level.storage.ValueInput;
28+
29+
public class ItemUtils extends ItemUtilsBase_v1_21_4 {
30+
public ItemUtils(Platform platform) {
31+
super(platform);
32+
}
33+
34+
@Override
35+
public Object getHandle(org.bukkit.inventory.ItemStack stack) {
36+
if (stack == null || !(stack instanceof CraftItemStack)) {
37+
return null;
38+
}
39+
return ReflectionUtils.getHandle(platform.getLogger(), stack, CraftItemStack.class);
40+
}
41+
42+
@Override
43+
public CompoundTag getTag(Object mcItemStack) {
44+
if (mcItemStack == null || !(mcItemStack instanceof net.minecraft.world.item.ItemStack)) return null;
45+
net.minecraft.world.item.ItemStack itemStack = (net.minecraft.world.item.ItemStack)mcItemStack;
46+
CustomData customData = itemStack.get(DataComponents.CUSTOM_DATA);
47+
return customData == null ? null : customData.getUnsafe();
48+
}
49+
50+
@Override
51+
public CompoundTag getTag(ItemStack itemStack) {
52+
CompoundTag tag = null;
53+
try {
54+
Object mcItemStack = getHandle(itemStack);
55+
if (mcItemStack == null) {
56+
if (itemStack.hasItemMeta()) {
57+
itemStack = makeReal(itemStack);
58+
mcItemStack = getHandle(itemStack);
59+
}
60+
}
61+
if (mcItemStack == null) return null;
62+
net.minecraft.world.item.ItemStack stack = (net.minecraft.world.item.ItemStack)mcItemStack;
63+
tag = getTag(stack);
64+
} catch (Throwable ex) {
65+
ex.printStackTrace();
66+
}
67+
return tag;
68+
}
69+
70+
@Override
71+
public CompoundTag getOrCreateTag(Object mcItemStack) {
72+
if (mcItemStack == null || !(mcItemStack instanceof net.minecraft.world.item.ItemStack)) return null;
73+
net.minecraft.world.item.ItemStack itemStack = (net.minecraft.world.item.ItemStack)mcItemStack;
74+
CustomData customData = itemStack.get(DataComponents.CUSTOM_DATA);
75+
CompoundTag tag = null;
76+
if (customData == null) {
77+
tag = new CompoundTag();
78+
// This makes a copy
79+
customData = CustomData.of(tag);
80+
tag = customData.getUnsafe();
81+
((net.minecraft.world.item.ItemStack)mcItemStack).set(DataComponents.CUSTOM_DATA, customData);
82+
} else {
83+
tag = customData.getUnsafe();
84+
}
85+
return tag;
86+
}
87+
88+
@Override
89+
public CompoundTag getOrCreateTag(ItemStack itemStack) {
90+
CompoundTag tag = null;
91+
try {
92+
Object mcItemStack = getHandle(itemStack);
93+
if (mcItemStack == null) {
94+
if (itemStack.hasItemMeta()) {
95+
itemStack = makeReal(itemStack);
96+
mcItemStack = getHandle(itemStack);
97+
}
98+
}
99+
if (mcItemStack == null) return null;
100+
net.minecraft.world.item.ItemStack stack = (net.minecraft.world.item.ItemStack)mcItemStack;
101+
tag = getOrCreateTag(stack);
102+
} catch (Throwable ex) {
103+
ex.printStackTrace();
104+
}
105+
return tag;
106+
}
107+
108+
protected net.minecraft.world.item.ItemStack getNMSCopy(ItemStack stack) {
109+
net.minecraft.world.item.ItemStack nms = null;
110+
try {
111+
nms = CraftItemStack.asNMSCopy(stack);
112+
} catch (Throwable ex) {
113+
ex.printStackTrace();
114+
}
115+
return nms;
116+
}
117+
118+
@Override
119+
public ItemStack getCopy(ItemStack stack) {
120+
if (stack == null) return null;
121+
net.minecraft.world.item.ItemStack craft = getNMSCopy(stack);
122+
return CraftItemStack.asCraftMirror(craft);
123+
}
124+
125+
@Override
126+
public boolean isEmpty(ItemStack itemStack) {
127+
if (itemStack == null || itemStack.getType() == Material.AIR) return true;
128+
Object handle = getHandle(itemStack);
129+
if (handle == null || !(handle instanceof net.minecraft.world.item.ItemStack)) return false;
130+
net.minecraft.world.item.ItemStack mcItem = (net.minecraft.world.item.ItemStack)handle;
131+
return mcItem.isEmpty();
132+
}
133+
134+
protected StringTag getTagString(String value) {
135+
return StringTag.valueOf(value);
136+
}
137+
138+
@Override
139+
public Object setStringList(Object nbtBase, String tag, Collection<String> values) {
140+
if (nbtBase == null || !(nbtBase instanceof CompoundTag)) return null;
141+
CompoundTag compoundTag = (CompoundTag)nbtBase;
142+
ListTag listTag = new ListTag();
143+
144+
for (String value : values) {
145+
StringTag nbtString = getTagString(value);
146+
listTag.add(nbtString);
147+
}
148+
149+
compoundTag.put(tag, listTag);
150+
return listTag;
151+
}
152+
153+
@Override
154+
public List<String> getStringList(Object nbtBase, String key) {
155+
List<String> list = new ArrayList<>();
156+
if (nbtBase == null || !(nbtBase instanceof CompoundTag)) return list;
157+
CompoundTag compoundTag = (CompoundTag)nbtBase;
158+
Optional<ListTag> listTagOptional = compoundTag.getList(key);
159+
160+
if (listTagOptional.isPresent()) {
161+
ListTag listTag = listTagOptional.get();
162+
int size = listTag.size();
163+
for (int i = 0; i < size; i++) {
164+
Tag entry = listTag.get(i);
165+
Optional<String> optionalString = entry.asString();
166+
if (!optionalString.isPresent()) continue;
167+
list.add(optionalString.get());
168+
}
169+
}
170+
return list;
171+
}
172+
173+
@Override
174+
public ItemStack getItem(Object itemTag) {
175+
// This was only called by getItems, which no longer uses this method
176+
throw new RuntimeException("The getItem method is no longer supported");
177+
178+
}
179+
180+
@Override
181+
public ItemStack[] getItems(Object rootTag, String tagName) {
182+
if (rootTag == null || !(rootTag instanceof CompoundTag)) return null;
183+
CompoundTag compoundTag = (CompoundTag)rootTag;
184+
185+
try {
186+
CraftWorld world = (CraftWorld)Bukkit.getWorlds().get(0);
187+
ProblemReporter discard = ProblemReporter.DISCARDING;
188+
ValueInput valueInput = TagValueInput.create(discard, world.getHandle().registryAccess(), compoundTag);
189+
ValueInput.TypedInputList<ItemStackWithSlot> list = valueInput.listOrEmpty(tagName, ItemStackWithSlot.CODEC);
190+
List<ItemStack> itemList = new ArrayList<>();
191+
for (ItemStackWithSlot stackWithSlot : list) {
192+
ItemStack item = CraftItemStack.asCraftMirror(stackWithSlot.stack());
193+
itemList.add(item);
194+
}
195+
return itemList.toArray(new ItemStack[itemList.size()]);
196+
} catch (Exception ex) {
197+
ex.printStackTrace();
198+
}
199+
return null;
200+
}
201+
}

0 commit comments

Comments
 (0)