Skip to content

Commit 0c33ec3

Browse files
1.20 Support
1 parent 0cdbf5b commit 0c33ec3

File tree

26 files changed

+754
-19
lines changed

26 files changed

+754
-19
lines changed

inventoryaccess/inventory-access-r1/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>xyz.xenondevs.invui</groupId>
77
<artifactId>invui-parent</artifactId>
8-
<version>1.9</version>
8+
<version>1.10</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>

inventoryaccess/inventory-access-r10/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>xyz.xenondevs.invui</groupId>
77
<artifactId>invui-parent</artifactId>
8-
<version>1.9</version>
8+
<version>1.10</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>

inventoryaccess/inventory-access-r11/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>xyz.xenondevs.invui</groupId>
77
<artifactId>invui-parent</artifactId>
8-
<version>1.9</version>
8+
<version>1.10</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>

inventoryaccess/inventory-access-r12/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>xyz.xenondevs.invui</groupId>
77
<artifactId>invui-parent</artifactId>
8-
<version>1.9</version>
8+
<version>1.10</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>

inventoryaccess/inventory-access-r13/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>xyz.xenondevs.invui</groupId>
77
<artifactId>invui-parent</artifactId>
8-
<version>1.9</version>
8+
<version>1.10</version>
99
<relativePath>../../pom.xml</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>
Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<parent>
6+
<groupId>xyz.xenondevs.invui</groupId>
7+
<artifactId>invui-parent</artifactId>
8+
<version>1.10</version>
9+
<relativePath>../../pom.xml</relativePath>
10+
</parent>
11+
<modelVersion>4.0.0</modelVersion>
12+
13+
<artifactId>inventory-access-r14</artifactId>
14+
15+
<properties>
16+
<maven.compiler.source>17</maven.compiler.source>
17+
<maven.compiler.target>17</maven.compiler.target>
18+
<spigot.version>1.20-R0.1-SNAPSHOT</spigot.version>
19+
</properties>
20+
21+
<dependencies>
22+
<dependency>
23+
<groupId>org.spigotmc</groupId>
24+
<artifactId>spigot</artifactId>
25+
<version>${spigot.version}</version>
26+
<classifier>remapped-mojang</classifier>
27+
<scope>provided</scope>
28+
</dependency>
29+
<dependency>
30+
<groupId>xyz.xenondevs.invui</groupId>
31+
<artifactId>inventory-access</artifactId>
32+
<version>${project.parent.version}</version>
33+
</dependency>
34+
</dependencies>
35+
36+
<build>
37+
<plugins>
38+
<plugin>
39+
<groupId>xyz.xenondevs.string-remapper</groupId>
40+
<artifactId>string-remapper-maven-plugin</artifactId>
41+
<version>1.2</version>
42+
43+
<executions>
44+
<execution>
45+
<id>remap-spigot</id>
46+
<goals>
47+
<goal>remap</goal>
48+
</goals>
49+
<configuration>
50+
<spigotVersion>${spigot.version}</spigotVersion>
51+
<goal>spigot</goal>
52+
<classesIn>${project.build.directory}/classes</classesIn>
53+
<classesOut>${project.build.directory}/classes-spigot</classesOut>
54+
</configuration>
55+
</execution>
56+
57+
<execution>
58+
<id>remap-mojang</id>
59+
<goals>
60+
<goal>remap</goal>
61+
</goals>
62+
<configuration>
63+
<spigotVersion>${spigot.version}</spigotVersion>
64+
<goal>mojang</goal>
65+
<classesIn>${project.build.directory}/classes</classesIn>
66+
<classesOut>${project.build.directory}/classes-mojang</classesOut>
67+
</configuration>
68+
</execution>
69+
</executions>
70+
</plugin>
71+
72+
<plugin>
73+
<groupId>org.apache.maven.plugins</groupId>
74+
<artifactId>maven-jar-plugin</artifactId>
75+
<version>3.2.2</version>
76+
<executions>
77+
<execution>
78+
<id>default-jar</id>
79+
<phase>none</phase>
80+
</execution>
81+
<execution>
82+
<id>spigot</id>
83+
<goals>
84+
<goal>jar</goal>
85+
</goals>
86+
<configuration>
87+
<classesDirectory>${project.build.directory}/classes-spigot</classesDirectory>
88+
</configuration>
89+
</execution>
90+
<execution>
91+
<id>mojang</id>
92+
<goals>
93+
<goal>jar</goal>
94+
</goals>
95+
<configuration>
96+
<classesDirectory>${project.build.directory}/classes-mojang</classesDirectory>
97+
<classifier>remapped-mojang</classifier>
98+
</configuration>
99+
</execution>
100+
</executions>
101+
</plugin>
102+
103+
<plugin>
104+
<groupId>net.md-5</groupId>
105+
<artifactId>specialsource-maven-plugin</artifactId>
106+
<version>1.2.2</version>
107+
<executions>
108+
<execution>
109+
<phase>package</phase>
110+
<goals>
111+
<goal>remap</goal>
112+
</goals>
113+
<id>remap-obf</id>
114+
<configuration>
115+
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:txt:maps-mojang</srgIn>
116+
<reverse>true</reverse>
117+
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-mojang</remappedDependencies>
118+
<remappedArtifactAttached>false</remappedArtifactAttached>
119+
<finalName>${project.artifactId}-${project.version}-remapped-obf</finalName>
120+
</configuration>
121+
</execution>
122+
<execution>
123+
<phase>package</phase>
124+
<goals>
125+
<goal>remap</goal>
126+
</goals>
127+
<id>remap-spigot</id>
128+
<configuration>
129+
<inputFile>${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar</inputFile>
130+
<srgIn>org.spigotmc:minecraft-server:${spigot.version}:csrg:maps-spigot</srgIn>
131+
<remappedDependencies>org.spigotmc:spigot:${spigot.version}:jar:remapped-obf</remappedDependencies>
132+
</configuration>
133+
</execution>
134+
</executions>
135+
</plugin>
136+
</plugins>
137+
</build>
138+
139+
</project>
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
package xyz.xenondevs.inventoryaccess.r14;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.core.NonNullList;
5+
import net.minecraft.network.chat.Component;
6+
import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket;
7+
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
8+
import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket;
9+
import net.minecraft.server.level.ServerPlayer;
10+
import net.minecraft.world.Container;
11+
import net.minecraft.world.entity.player.Player;
12+
import net.minecraft.world.inventory.AbstractContainerMenu;
13+
import net.minecraft.world.inventory.AnvilMenu;
14+
import net.minecraft.world.inventory.ContainerLevelAccess;
15+
import net.minecraft.world.inventory.MenuType;
16+
import net.minecraft.world.item.ItemStack;
17+
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
18+
import org.bukkit.craftbukkit.v1_20_R1.event.CraftEventFactory;
19+
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryAnvil;
20+
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftInventoryView;
21+
import org.bukkit.craftbukkit.v1_20_R1.inventory.CraftItemStack;
22+
import org.bukkit.event.inventory.PrepareAnvilEvent;
23+
import org.bukkit.inventory.Inventory;
24+
import org.jetbrains.annotations.NotNull;
25+
import xyz.xenondevs.inventoryaccess.abstraction.inventory.AnvilInventory;
26+
import xyz.xenondevs.inventoryaccess.component.ComponentWrapper;
27+
28+
import java.util.List;
29+
import java.util.function.Consumer;
30+
31+
class AnvilInventoryImpl extends AnvilMenu implements AnvilInventory {
32+
33+
private final List<Consumer<String>> renameHandlers;
34+
private final CraftInventoryView view;
35+
private final ServerPlayer player;
36+
37+
private String text;
38+
private boolean open;
39+
40+
public AnvilInventoryImpl(org.bukkit.entity.Player player, @NotNull ComponentWrapper title, List<Consumer<String>> renameHandlers) {
41+
this(((CraftPlayer) player).getHandle(), InventoryUtilsImpl.createNMSComponent(title), renameHandlers);
42+
}
43+
44+
public AnvilInventoryImpl(ServerPlayer player, Component title, List<Consumer<String>> renameHandlers) {
45+
super(player.nextContainerCounter(), player.getInventory(),
46+
ContainerLevelAccess.create(player.level(), new BlockPos(0, 0, 0)));
47+
48+
setTitle(title);
49+
this.renameHandlers = renameHandlers;
50+
this.player = player;
51+
52+
CraftInventoryAnvil inventory = new CraftInventoryAnvil(access.getLocation(),
53+
inputSlots, resultSlots, this);
54+
this.view = new CraftInventoryView(player.getBukkitEntity(), inventory, this);
55+
}
56+
57+
public void open() {
58+
open = true;
59+
60+
// call the InventoryOpenEvent
61+
CraftEventFactory.callInventoryOpenEvent(player, this);
62+
63+
// set active container
64+
player.containerMenu = this;
65+
66+
// send open packet
67+
player.connection.send(new ClientboundOpenScreenPacket(containerId, MenuType.ANVIL, getTitle()));
68+
69+
// send initial items
70+
NonNullList<ItemStack> itemsList = NonNullList.of(ItemStack.EMPTY, getItem(0), getItem(1), getItem(2));
71+
player.connection.send(new ClientboundContainerSetContentPacket(getActiveWindowId(player), incrementStateId(), itemsList, ItemStack.EMPTY));
72+
73+
// init menu
74+
player.initMenu(this);
75+
}
76+
77+
public void sendItem(int slot) {
78+
player.connection.send(new ClientboundContainerSetSlotPacket(getActiveWindowId(player), incrementStateId(), slot, getItem(slot)));
79+
}
80+
81+
public void setItem(int slot, ItemStack item) {
82+
if (slot < 2) inputSlots.setItem(slot, item);
83+
else resultSlots.setItem(0, item);
84+
85+
if (open) sendItem(slot);
86+
}
87+
88+
private ItemStack getItem(int slot) {
89+
if (slot < 2) return inputSlots.getItem(slot);
90+
else return resultSlots.getItem(0);
91+
}
92+
93+
private int getActiveWindowId(ServerPlayer player) {
94+
AbstractContainerMenu container = player.containerMenu;
95+
return container == null ? -1 : container.containerId;
96+
}
97+
98+
@Override
99+
public void setItem(int slot, org.bukkit.inventory.ItemStack itemStack) {
100+
setItem(slot, CraftItemStack.asNMSCopy(itemStack));
101+
}
102+
103+
@Override
104+
public @NotNull Inventory getBukkitInventory() {
105+
return view.getTopInventory();
106+
}
107+
108+
@Override
109+
public String getRenameText() {
110+
return text;
111+
}
112+
113+
@Override
114+
public boolean isOpen() {
115+
return open;
116+
}
117+
118+
// --- AnvilMenu ---
119+
120+
@Override
121+
public CraftInventoryView getBukkitView() {
122+
return view;
123+
}
124+
125+
/**
126+
* Called every tick to see if the {@link Player} can still use that container.
127+
* (Used to for checking the distance between the {@link Player} and the container
128+
* and closing the window when the distance gets too big.)
129+
*
130+
* @param player The {@link Player}
131+
* @return If the {@link Player} can still use that container
132+
*/
133+
@Override
134+
public boolean stillValid(Player player) {
135+
return true;
136+
}
137+
138+
/**
139+
* Called when the rename text gets changed.
140+
*
141+
* @param s The new rename text
142+
*/
143+
@Override
144+
public boolean setItemName(String s) {
145+
// save rename text
146+
text = s;
147+
148+
// call rename handlers
149+
if (renameHandlers != null)
150+
renameHandlers.forEach(handler -> handler.accept(s));
151+
152+
// the client expects the item to change to its new name and removes it from the inventory, so it needs to be sent again
153+
sendItem(2);
154+
155+
return false;
156+
}
157+
158+
/**
159+
* Called when the container is closed to give the items back.
160+
*
161+
* @param player The {@link Player} that closed this container
162+
*/
163+
@Override
164+
public void removed(Player player) {
165+
open = false;
166+
}
167+
168+
169+
/**
170+
* Called when the container gets closed to put items back into a players
171+
* inventory or drop them in the world.
172+
*
173+
* @param player The {@link Player} that closed this container
174+
* @param container The container
175+
*/
176+
@Override
177+
protected void clearContainer(Player player, Container container) {
178+
open = false;
179+
}
180+
181+
/**
182+
* Called when both items in the {@link AnvilMenu#inputSlots} were set to create
183+
* the resulting product, calculate the level cost and call the {@link PrepareAnvilEvent}.
184+
*/
185+
@Override
186+
public void createResult() {
187+
// empty
188+
}
189+
190+
}

0 commit comments

Comments
 (0)