From 406099c12ca7e6aa586dcb03facb095771f3d85b Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Thu, 19 May 2022 21:07:00 +0200 Subject: [PATCH 01/14] Fix cycle button not handling item clicks --- .../inventoryframework/pane/component/CycleButton.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/component/CycleButton.java b/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/component/CycleButton.java index 709d7028..93bc3c47 100644 --- a/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/component/CycleButton.java +++ b/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/component/CycleButton.java @@ -61,6 +61,8 @@ public boolean click(@NotNull Gui gui, @NotNull InventoryComponent inventoryComp return false; } + int previousPosition = position; + position++; if (position == panes.size()) { @@ -69,7 +71,8 @@ public boolean click(@NotNull Gui gui, @NotNull InventoryComponent inventoryComp callOnClick(event); - Pane pane = panes.get(position); + //use the previous position, since that will have the pane we clicked on + Pane pane = panes.get(previousPosition); pane.click(gui, inventoryComponent, event, slot, paneOffsetX + x, paneOffsetY + y, length, height); From 3e0a47d269ccab47b94d4eb332734e57d19705e1 Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Mon, 2 May 2022 19:08:02 +0200 Subject: [PATCH 02/14] Add log files to gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 77a4b112..64169b5d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ target IF-Test *.iml *.txt -dependency-reduced-pom.xml \ No newline at end of file +dependency-reduced-pom.xml +*.log \ No newline at end of file From b0e617ced8f1bfc0c9647a3894a53b0953738528 Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Mon, 2 May 2022 19:11:24 +0200 Subject: [PATCH 03/14] Remove spurious log file --- hs_err_pid7296.log | 695 --------------------------------------------- 1 file changed, 695 deletions(-) delete mode 100644 hs_err_pid7296.log diff --git a/hs_err_pid7296.log b/hs_err_pid7296.log deleted file mode 100644 index de794618..00000000 --- a/hs_err_pid7296.log +++ /dev/null @@ -1,695 +0,0 @@ -# -# There is insufficient memory for the Java Runtime Environment to continue. -# Native memory allocation (mmap) failed to map 23068672 bytes for G1 virtual space -# Possible reasons: -# The system is out of physical RAM or swap space -# The process is running with CompressedOops enabled, and the Java Heap may be blocking the growth of the native heap -# Possible solutions: -# Reduce memory load on the system -# Increase physical memory or swap space -# Check if swap backing store is full -# Decrease Java heap size (-Xmx/-Xms) -# Decrease number of Java threads -# Decrease Java thread stack sizes (-Xss) -# Set larger code cache with -XX:ReservedCodeCacheSize= -# JVM is running with Unscaled Compressed Oops mode in which the Java heap is -# placed in the first 4GB address space. The Java Heap base address is the -# maximum limit for the native heap growth. Please use -XX:HeapBaseMinAddress -# to set the Java Heap base and to place the Java Heap above 4GB virtual address. -# This output file may be truncated or incomplete. -# -# Out of Memory Error (os_windows.cpp:3469), pid=7296, tid=6840 -# -# JRE version: OpenJDK Runtime Environment Temurin-17.0.1+12 (17.0.1+12) (build 17.0.1+12) -# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.1+12 (17.0.1+12, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, windows-amd64) -# No core dump will be written. Minidumps are not enabled by default on client versions of Windows -# - ---------------- S U M M A R Y ------------ - -Command Line: -Dmaven.multiModuleProjectDirectory=D:\IdeaProjects\IF-parent -Dmaven.home=D:\Maven\apache-maven-3.8.4 -Dclassworlds.conf=D:\Maven\apache-maven-3.8.4\bin\m2.conf -Dmaven.ext.class.path=C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\plugins\maven\lib\maven-event-listener.jar -javaagent:C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\lib\idea_rt.jar=52046:C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\bin -Dfile.encoding=UTF-8 org.codehaus.classworlds.Launcher -Didea.version=2021.3.1 clean install - -Host: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz, 2 cores, 3G, Windows 7 , 64 bit Build 7601 (6.1.7601.24545) -Time: Thu Jan 13 20:33:50 2022 West-Europa (standaardtijd) elapsed time: 23.224401 seconds (0d 0h 0m 23s) - ---------------- T H R E A D --------------- - -Current thread (0x00000000003cf6e0): VMThread "VM Thread" [stack: 0x000000001ec60000,0x000000001ed60000] [id=6840] - -Stack: [0x000000001ec60000,0x000000001ed60000] -Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) -V [jvm.dll+0x6744da] -V [jvm.dll+0x82e144] -V [jvm.dll+0x82f8ee] -V [jvm.dll+0x82ff53] -V [jvm.dll+0x245175] -V [jvm.dll+0x6714c9] -V [jvm.dll+0x665f92] -V [jvm.dll+0x303c3b] -V [jvm.dll+0x30b176] -V [jvm.dll+0x35af1e] -V [jvm.dll+0x35b14f] -V [jvm.dll+0x2dab78] -V [jvm.dll+0x2d8e2c] -V [jvm.dll+0x2d83fc] -V [jvm.dll+0x31c571] -V [jvm.dll+0x8343bb] -V [jvm.dll+0x8350f4] -V [jvm.dll+0x83560c] -V [jvm.dll+0x8359e4] -V [jvm.dll+0x835ab0] -V [jvm.dll+0x7de51a] -V [jvm.dll+0x673305] -C [ucrtbase.DLL+0x1c1ae] -C [kernel32.dll+0x1556d] -C [ntdll.dll+0x5372d] - -VM_Operation (0x000000000201d6c0): G1TryInitiateConcMark, mode: safepoint, requested by thread 0x0000000000330310 - - ---------------- P R O C E S S --------------- - -Threads class SMR info: -_java_thread_list=0x000000002211ea80, length=13, elements={ -0x0000000000330310, 0x000000001e008760, 0x000000001e00a320, 0x000000001e0155a0, -0x000000001e017fd0, 0x000000001e018890, 0x000000001e01be50, 0x000000001e02b810, -0x000000001e02c5e0, 0x000000001e02db40, 0x000000001e2b29e0, 0x000000001ff0e910, -0x000000001ff0ede0 -} - -Java Threads: ( => current thread ) - 0x0000000000330310 JavaThread "main" [_thread_blocked, id=7316, stack(0x0000000001f20000,0x0000000002020000)] - 0x000000001e008760 JavaThread "Reference Handler" daemon [_thread_blocked, id=7392, stack(0x000000001ef50000,0x000000001f050000)] - 0x000000001e00a320 JavaThread "Finalizer" daemon [_thread_blocked, id=9184, stack(0x000000001f0d0000,0x000000001f1d0000)] - 0x000000001e0155a0 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=6976, stack(0x000000001f240000,0x000000001f340000)] - 0x000000001e017fd0 JavaThread "Attach Listener" daemon [_thread_blocked, id=8308, stack(0x000000001ed90000,0x000000001ee90000)] - 0x000000001e018890 JavaThread "Service Thread" daemon [_thread_blocked, id=8888, stack(0x000000001f460000,0x000000001f560000)] - 0x000000001e01be50 JavaThread "Monitor Deflation Thread" daemon [_thread_blocked, id=7452, stack(0x000000001f710000,0x000000001f810000)] - 0x000000001e02b810 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=4884, stack(0x000000001f8d0000,0x000000001f9d0000)] - 0x000000001e02c5e0 JavaThread "C1 CompilerThread0" daemon [_thread_blocked, id=3892, stack(0x000000001fa40000,0x000000001fb40000)] - 0x000000001e02db40 JavaThread "Sweeper thread" daemon [_thread_blocked, id=6812, stack(0x000000001fbf0000,0x000000001fcf0000)] - 0x000000001e2b29e0 JavaThread "Common-Cleaner" daemon [_thread_blocked, id=1620, stack(0x000000001fdc0000,0x000000001fec0000)] - 0x000000001ff0e910 JavaThread "Monitor Ctrl-Break" daemon [_thread_in_native, id=7928, stack(0x0000000020370000,0x0000000020470000)] - 0x000000001ff0ede0 JavaThread "Notification Thread" daemon [_thread_blocked, id=5888, stack(0x000000001f590000,0x000000001f690000)] - -Other Threads: -=>0x00000000003cf6e0 VMThread "VM Thread" [stack: 0x000000001ec60000,0x000000001ed60000] [id=6840] - 0x000000001ff0f2b0 WatcherThread [stack: 0x000000001f350000,0x000000001f450000] [id=6304] - 0x0000000000363b00 GCTaskThread "GC Thread#0" [stack: 0x000000001b840000,0x000000001b940000] [id=6244] - 0x000000002017f2f0 GCTaskThread "GC Thread#1" [stack: 0x00000000206d0000,0x00000000207d0000] [id=9012] - 0x00000000003701d0 ConcurrentGCThread "G1 Main Marker" [stack: 0x000000001b980000,0x000000001ba80000] [id=1036] - 0x0000000000370af0 ConcurrentGCThread "G1 Conc#0" [stack: 0x000000001bb20000,0x000000001bc20000] [id=8296] - 0x00000000003b0cd0 ConcurrentGCThread "G1 Refine#0" [stack: 0x000000001de60000,0x000000001df60000] [id=4868] - 0x00000000003b1600 ConcurrentGCThread "G1 Service" [stack: 0x000000001e070000,0x000000001e170000] [id=6240] - -Threads with active compile tasks: - -VM state: at safepoint (normal execution) - -VM Mutex/Monitor currently owned by a thread: ([mutex/lock_event]) -[0x000000000032ade0] Threads_lock - owner thread: 0x00000000003cf6e0 -[0x000000000032b410] Heap_lock - owner thread: 0x0000000000330310 - -Heap address: 0x00000000c1a00000, size: 998 MB, Compressed Oops mode: 32-bit - -CDS archive(s) mapped at: [0x0000000800000000-0x0000000800bc0000-0x0000000800bc0000), size 12320768, SharedBaseAddress: 0x0000000800000000, ArchiveRelocationMode: 0. -Compressed class space mapped at: 0x0000000800c00000-0x0000000840c00000, reserved size: 1073741824 -Narrow klass base: 0x0000000800000000, Narrow klass shift: 0, Narrow klass range: 0x100000000 - -GC Precious Log: - CPUs: 2 total, 2 available - Memory: 3991M - Large Page Support: Disabled - NUMA Support: Disabled - Compressed Oops: Enabled (32-bit) - Heap Region Size: 1M - Heap Min Capacity: 8M - Heap Initial Capacity: 64M - Heap Max Capacity: 998M - Pre-touch: Disabled - Parallel Workers: 2 - Concurrent Workers: 1 - Concurrent Refinement Workers: 2 - Periodic GC: Disabled - -Heap: - garbage-first heap total 78848K, used 39429K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 2 young (2048K), 2 survivors (2048K) - Metaspace used 32402K, committed 32832K, reserved 1081344K - class space used 3764K, committed 3968K, reserved 1048576K - -Heap Regions: E=young(eden), S=young(survivor), O=old, HS=humongous(starts), HC=humongous(continues), CS=collection set, F=free, OA=open archive, CA=closed archive, TAMS=top-at-mark-start (previous, next) -| 0|0x00000000c1a00000, 0x00000000c1b00000, 0x00000000c1b00000|100%| O| |TAMS 0x00000000c1b00000, 0x00000000c1b00000| Untracked -| 1|0x00000000c1b00000, 0x00000000c1c00000, 0x00000000c1c00000|100%| O| |TAMS 0x00000000c1c00000, 0x00000000c1c00000| Untracked -| 2|0x00000000c1c00000, 0x00000000c1d00000, 0x00000000c1d00000|100%| O| |TAMS 0x00000000c1d00000, 0x00000000c1d00000| Untracked -| 3|0x00000000c1d00000, 0x00000000c1e00000, 0x00000000c1e00000|100%| O| |TAMS 0x00000000c1e00000, 0x00000000c1e00000| Untracked -| 4|0x00000000c1e00000, 0x00000000c1f00000, 0x00000000c1f00000|100%| O| |TAMS 0x00000000c1f00000, 0x00000000c1f00000| Untracked -| 5|0x00000000c1f00000, 0x00000000c2000000, 0x00000000c2000000|100%| O| |TAMS 0x00000000c2000000, 0x00000000c2000000| Untracked -| 6|0x00000000c2000000, 0x00000000c2100000, 0x00000000c2100000|100%| O| |TAMS 0x00000000c2100000, 0x00000000c2100000| Untracked -| 7|0x00000000c2100000, 0x00000000c2200000, 0x00000000c2200000|100%| O| |TAMS 0x00000000c2200000, 0x00000000c2200000| Untracked -| 8|0x00000000c2200000, 0x00000000c2300000, 0x00000000c2300000|100%| O| |TAMS 0x00000000c2300000, 0x00000000c2300000| Untracked -| 9|0x00000000c2300000, 0x00000000c2400000, 0x00000000c2400000|100%| O| |TAMS 0x00000000c2400000, 0x00000000c2400000| Untracked -| 10|0x00000000c2400000, 0x00000000c2500000, 0x00000000c2500000|100%| O| |TAMS 0x00000000c2500000, 0x00000000c2500000| Untracked -| 11|0x00000000c2500000, 0x00000000c2600000, 0x00000000c2600000|100%| O| |TAMS 0x00000000c2600000, 0x00000000c2600000| Untracked -| 12|0x00000000c2600000, 0x00000000c2700000, 0x00000000c2700000|100%| O| |TAMS 0x00000000c2700000, 0x00000000c2700000| Untracked -| 13|0x00000000c2700000, 0x00000000c2800000, 0x00000000c2800000|100%| O| |TAMS 0x00000000c2800000, 0x00000000c2800000| Untracked -| 14|0x00000000c2800000, 0x00000000c2900000, 0x00000000c2900000|100%| O| |TAMS 0x00000000c2900000, 0x00000000c2900000| Untracked -| 15|0x00000000c2900000, 0x00000000c2a00000, 0x00000000c2a00000|100%| O| |TAMS 0x00000000c2a00000, 0x00000000c2a00000| Untracked -| 16|0x00000000c2a00000, 0x00000000c2b00000, 0x00000000c2b00000|100%| O| |TAMS 0x00000000c2b00000, 0x00000000c2b00000| Untracked -| 17|0x00000000c2b00000, 0x00000000c2bef600, 0x00000000c2c00000| 93%| O| |TAMS 0x00000000c2bef600, 0x00000000c2bef600| Untracked -| 18|0x00000000c2c00000, 0x00000000c2d00000, 0x00000000c2d00000|100%| O| |TAMS 0x00000000c2c00000, 0x00000000c2d00000| Untracked -| 19|0x00000000c2d00000, 0x00000000c2e00000, 0x00000000c2e00000|100%| O| |TAMS 0x00000000c2d00000, 0x00000000c2e00000| Untracked -| 20|0x00000000c2e00000, 0x00000000c2f00000, 0x00000000c2f00000|100%| O| |TAMS 0x00000000c2e00000, 0x00000000c2f00000| Untracked -| 21|0x00000000c2f00000, 0x00000000c3000000, 0x00000000c3000000|100%|HS| |TAMS 0x00000000c2f00000, 0x00000000c3000000| Complete -| 22|0x00000000c3000000, 0x00000000c3100000, 0x00000000c3100000|100%|HC| |TAMS 0x00000000c3000000, 0x00000000c3100000| Complete -| 23|0x00000000c3100000, 0x00000000c3200000, 0x00000000c3200000|100%|HC| |TAMS 0x00000000c3100000, 0x00000000c3200000| Complete -| 24|0x00000000c3200000, 0x00000000c3300000, 0x00000000c3300000|100%|HC| |TAMS 0x00000000c3200000, 0x00000000c3300000| Complete -| 25|0x00000000c3300000, 0x00000000c3400000, 0x00000000c3400000|100%|HC| |TAMS 0x00000000c3300000, 0x00000000c3400000| Complete -| 26|0x00000000c3400000, 0x00000000c3500000, 0x00000000c3500000|100%| O| |TAMS 0x00000000c3400000, 0x00000000c3500000| Untracked -| 27|0x00000000c3500000, 0x00000000c3600000, 0x00000000c3600000|100%| O| |TAMS 0x00000000c3500000, 0x00000000c3600000| Untracked -| 28|0x00000000c3600000, 0x00000000c3700000, 0x00000000c3700000|100%|HS| |TAMS 0x00000000c3600000, 0x00000000c3700000| Complete -| 29|0x00000000c3700000, 0x00000000c3800000, 0x00000000c3800000|100%|HC| |TAMS 0x00000000c3700000, 0x00000000c3800000| Complete -| 30|0x00000000c3800000, 0x00000000c3900000, 0x00000000c3900000|100%|HC| |TAMS 0x00000000c3800000, 0x00000000c3900000| Complete -| 31|0x00000000c3900000, 0x00000000c3a00000, 0x00000000c3a00000|100%|HC| |TAMS 0x00000000c3900000, 0x00000000c3a00000| Complete -| 32|0x00000000c3a00000, 0x00000000c3b00000, 0x00000000c3b00000|100%|HC| |TAMS 0x00000000c3a00000, 0x00000000c3b00000| Complete -| 33|0x00000000c3b00000, 0x00000000c3b00000, 0x00000000c3c00000| 0%| F| |TAMS 0x00000000c3b00000, 0x00000000c3b00000| Untracked -| 34|0x00000000c3c00000, 0x00000000c3d00000, 0x00000000c3d00000|100%| O| |TAMS 0x00000000c3c00000, 0x00000000c3d00000| Untracked -| 35|0x00000000c3d00000, 0x00000000c3e00000, 0x00000000c3e00000|100%| O| |TAMS 0x00000000c3d00000, 0x00000000c3e00000| Untracked -| 36|0x00000000c3e00000, 0x00000000c3f00000, 0x00000000c3f00000|100%| O| |TAMS 0x00000000c3e00000, 0x00000000c3f00000| Untracked -| 37|0x00000000c3f00000, 0x00000000c3ffd600, 0x00000000c4000000| 98%| O| |TAMS 0x00000000c3f00000, 0x00000000c3ffd600| Untracked -| 38|0x00000000c4000000, 0x00000000c4000000, 0x00000000c4100000| 0%| F| |TAMS 0x00000000c4000000, 0x00000000c4000000| Untracked -| 39|0x00000000c4100000, 0x00000000c4100000, 0x00000000c4200000| 0%| F| |TAMS 0x00000000c4100000, 0x00000000c4100000| Untracked -| 40|0x00000000c4200000, 0x00000000c4200000, 0x00000000c4300000| 0%| F| |TAMS 0x00000000c4200000, 0x00000000c4200000| Untracked -| 41|0x00000000c4300000, 0x00000000c4300000, 0x00000000c4400000| 0%| F| |TAMS 0x00000000c4300000, 0x00000000c4300000| Untracked -| 42|0x00000000c4400000, 0x00000000c4400000, 0x00000000c4500000| 0%| F| |TAMS 0x00000000c4400000, 0x00000000c4400000| Untracked -| 43|0x00000000c4500000, 0x00000000c4500000, 0x00000000c4600000| 0%| F| |TAMS 0x00000000c4500000, 0x00000000c4500000| Untracked -| 44|0x00000000c4600000, 0x00000000c4600000, 0x00000000c4700000| 0%| F| |TAMS 0x00000000c4600000, 0x00000000c4600000| Untracked -| 45|0x00000000c4700000, 0x00000000c4700000, 0x00000000c4800000| 0%| F| |TAMS 0x00000000c4700000, 0x00000000c4700000| Untracked -| 46|0x00000000c4800000, 0x00000000c4800000, 0x00000000c4900000| 0%| F| |TAMS 0x00000000c4800000, 0x00000000c4800000| Untracked -| 47|0x00000000c4900000, 0x00000000c4900000, 0x00000000c4a00000| 0%| F| |TAMS 0x00000000c4900000, 0x00000000c4900000| Untracked -| 48|0x00000000c4a00000, 0x00000000c4a00000, 0x00000000c4b00000| 0%| F| |TAMS 0x00000000c4a00000, 0x00000000c4a00000| Untracked -| 49|0x00000000c4b00000, 0x00000000c4b00000, 0x00000000c4c00000| 0%| F| |TAMS 0x00000000c4b00000, 0x00000000c4b00000| Untracked -| 50|0x00000000c4c00000, 0x00000000c4c00000, 0x00000000c4d00000| 0%| F| |TAMS 0x00000000c4c00000, 0x00000000c4c00000| Untracked -| 51|0x00000000c4d00000, 0x00000000c4d00000, 0x00000000c4e00000| 0%| F| |TAMS 0x00000000c4d00000, 0x00000000c4d00000| Untracked -| 52|0x00000000c4e00000, 0x00000000c4e00000, 0x00000000c4f00000| 0%| F| |TAMS 0x00000000c4e00000, 0x00000000c4e00000| Untracked -| 53|0x00000000c4f00000, 0x00000000c4f00000, 0x00000000c5000000| 0%| F| |TAMS 0x00000000c4f00000, 0x00000000c4f00000| Untracked -| 54|0x00000000c5000000, 0x00000000c5000000, 0x00000000c5100000| 0%| F| |TAMS 0x00000000c5000000, 0x00000000c5000000| Untracked -| 55|0x00000000c5100000, 0x00000000c5100000, 0x00000000c5200000| 0%| F| |TAMS 0x00000000c5100000, 0x00000000c5100000| Untracked -| 56|0x00000000c5200000, 0x00000000c5200000, 0x00000000c5300000| 0%| F| |TAMS 0x00000000c5200000, 0x00000000c5200000| Untracked -| 57|0x00000000c5300000, 0x00000000c5300000, 0x00000000c5400000| 0%| F| |TAMS 0x00000000c5300000, 0x00000000c5300000| Untracked -| 58|0x00000000c5400000, 0x00000000c5400000, 0x00000000c5500000| 0%| F| |TAMS 0x00000000c5400000, 0x00000000c5400000| Untracked -| 59|0x00000000c5500000, 0x00000000c5500000, 0x00000000c5600000| 0%| F| |TAMS 0x00000000c5500000, 0x00000000c5500000| Untracked -| 60|0x00000000c5600000, 0x00000000c5600000, 0x00000000c5700000| 0%| F| |TAMS 0x00000000c5600000, 0x00000000c5600000| Untracked -| 61|0x00000000c5700000, 0x00000000c5700000, 0x00000000c5800000| 0%| F| |TAMS 0x00000000c5700000, 0x00000000c5700000| Untracked -| 62|0x00000000c5800000, 0x00000000c5800000, 0x00000000c5900000| 0%| F| |TAMS 0x00000000c5800000, 0x00000000c5800000| Untracked -| 63|0x00000000c5900000, 0x00000000c5900000, 0x00000000c5a00000| 0%| F| |TAMS 0x00000000c5900000, 0x00000000c5900000| Untracked -| 64|0x00000000c5a00000, 0x00000000c5a00000, 0x00000000c5b00000| 0%| F| |TAMS 0x00000000c5a00000, 0x00000000c5a00000| Untracked -| 65|0x00000000c5b00000, 0x00000000c5b00000, 0x00000000c5c00000| 0%| F| |TAMS 0x00000000c5b00000, 0x00000000c5b00000| Untracked -| 66|0x00000000c5c00000, 0x00000000c5c00000, 0x00000000c5d00000| 0%| F| |TAMS 0x00000000c5c00000, 0x00000000c5c00000| Untracked -| 67|0x00000000c5d00000, 0x00000000c5d00000, 0x00000000c5e00000| 0%| F| |TAMS 0x00000000c5d00000, 0x00000000c5d00000| Untracked -| 68|0x00000000c5e00000, 0x00000000c5e00000, 0x00000000c5f00000| 0%| F| |TAMS 0x00000000c5e00000, 0x00000000c5e00000| Untracked -| 69|0x00000000c5f00000, 0x00000000c5f00000, 0x00000000c6000000| 0%| F| |TAMS 0x00000000c5f00000, 0x00000000c5f00000| Untracked -| 70|0x00000000c6000000, 0x00000000c6000000, 0x00000000c6100000| 0%| F| |TAMS 0x00000000c6000000, 0x00000000c6000000| Untracked -| 71|0x00000000c6100000, 0x00000000c6100000, 0x00000000c6200000| 0%| F| |TAMS 0x00000000c6100000, 0x00000000c6100000| Untracked -| 72|0x00000000c6200000, 0x00000000c6200000, 0x00000000c6300000| 0%| F| |TAMS 0x00000000c6200000, 0x00000000c6200000| Untracked -| 73|0x00000000c6300000, 0x00000000c6300000, 0x00000000c6400000| 0%| F| |TAMS 0x00000000c6300000, 0x00000000c6300000| Untracked -| 74|0x00000000c6400000, 0x00000000c64948f0, 0x00000000c6500000| 58%| S|CS|TAMS 0x00000000c6400000, 0x00000000c6400000| Complete -| 75|0x00000000c6500000, 0x00000000c6600000, 0x00000000c6600000|100%| S|CS|TAMS 0x00000000c6500000, 0x00000000c6500000| Complete -| 76|0x00000000c6600000, 0x00000000c6600000, 0x00000000c6700000| 0%| F| |TAMS 0x00000000c6600000, 0x00000000c6600000| Untracked - -Card table byte_map: [0x0000000019420000,0x0000000019620000] _byte_map_base: 0x0000000018e13000 - -Marking Bits (Prev, Next): (CMBitMap*) 0x0000000000366020, (CMBitMap*) 0x0000000000366060 - Prev Bits: [0x0000000019820000, 0x000000001a7b8000) - Next Bits: [0x000000001a7c0000, 0x000000001b758000) - -Polling page: 0x00000000000a0000 - -Metaspace: - -Usage: - Non-class: 27.97 MB used. - Class: 3.68 MB used. - Both: 31.64 MB used. - -Virtual space: - Non-class space: 32.00 MB reserved, 28.19 MB ( 88%) committed, 4 nodes. - Class space: 1.00 GB reserved, 3.88 MB ( <1%) committed, 1 nodes. - Both: 1.03 GB reserved, 32.06 MB ( 3%) committed. - -Chunk freelists: - Non-Class: 2.98 MB - Class: 32.00 KB - Both: 3.02 MB - -MaxMetaspaceSize: unlimited -CompressedClassSpaceSize: 1.00 GB -Initial GC threshold: 21.00 MB -Current GC threshold: 49.63 MB -CDS: on -MetaspaceReclaimPolicy: balanced - - commit_granule_bytes: 65536. - - commit_granule_words: 8192. - - virtual_space_node_default_size: 1048576. - - enlarge_chunks_in_place: 1. - - new_chunks_are_fully_committed: 0. - - uncommit_free_chunks: 1. - - use_allocation_guard: 0. - - handle_deallocations: 1. - - -Internal statistics: - -num_allocs_failed_limit: 6. -num_arena_births: 204. -num_arena_deaths: 0. -num_vsnodes_births: 5. -num_vsnodes_deaths: 0. -num_space_committed: 513. -num_space_uncommitted: 0. -num_chunks_returned_to_freelist: 6. -num_chunks_taken_from_freelist: 1389. -num_chunk_merges: 6. -num_chunk_splits: 1009. -num_chunks_enlarged: 803. -num_purges: 0. -num_inconsistent_stats: 0. - -CodeHeap 'non-profiled nmethods': size=120064Kb used=2809Kb max_used=3011Kb free=117254Kb - bounds [0x00000000119d0000, 0x0000000011cd0000, 0x0000000018f10000] -CodeHeap 'profiled nmethods': size=120000Kb used=12119Kb max_used=12447Kb free=107880Kb - bounds [0x000000000a4a0000, 0x000000000b0d0000, 0x00000000119d0000] -CodeHeap 'non-nmethods': size=5696Kb used=1220Kb max_used=1262Kb free=4475Kb - bounds [0x0000000009f10000, 0x000000000a180000, 0x000000000a4a0000] - total_blobs=6237 nmethods=5706 adapters=442 - compilation: enabled - stopped_count=0, restarted_count=0 - full_count=0 - -Compilation events (20 events): -Event: 22.690 Thread 0x000000001e02c5e0 nmethod 6540 0x000000000abdb590 code [0x000000000abdb800, 0x000000000abdc5a8] -Event: 22.985 Thread 0x000000001e02b810 nmethod 6362 0x0000000011cc0e90 code [0x0000000011cc1360, 0x0000000011cc87e0] -Event: 22.985 Thread 0x000000001e02b810 6413 4 java.util.regex.Pattern$Start::match (90 bytes) -Event: 22.992 Thread 0x000000001e02b810 nmethod 6413 0x0000000011bded90 code [0x0000000011bdef60, 0x0000000011bdf588] -Event: 22.992 Thread 0x000000001e02b810 6357 4 org.eclipse.sisu.bean.DeclaredMembers$MemberIterator::hasNext (96 bytes) -Event: 23.058 Thread 0x000000001e02b810 nmethod 6357 0x0000000011b3c710 code [0x0000000011b3c9e0, 0x0000000011b3ed70] -Event: 23.102 Thread 0x000000001e02b810 6541 4 java.util.StringTokenizer::skipDelimiters (116 bytes) -Event: 23.102 Thread 0x000000001e02c5e0 6542 3 java.lang.String::substring (58 bytes) -Event: 23.103 Thread 0x000000001e02c5e0 nmethod 6542 0x000000000abdad10 code [0x000000000abdaf00, 0x000000000abdb3a8] -Event: 23.103 Thread 0x000000001e02c5e0 6544 3 org.codehaus.plexus.util.SelectorUtils::match (520 bytes) -Event: 23.104 Thread 0x000000001e02c5e0 nmethod 6544 0x000000000abcf910 code [0x000000000abcfc20, 0x000000000abd10b8] -Event: 23.105 Thread 0x000000001e02c5e0 6545 3 org.codehaus.plexus.util.SelectorUtils::equals (37 bytes) -Event: 23.105 Thread 0x000000001e02c5e0 nmethod 6545 0x000000000abda790 code [0x000000000abda960, 0x000000000abdac18] -Event: 23.108 Thread 0x000000001e02b810 nmethod 6541 0x0000000011bde590 code [0x0000000011bde720, 0x0000000011bdea68] -Event: 23.108 Thread 0x000000001e02b810 6543 4 java.lang.String::toCharArray (25 bytes) -Event: 23.109 Thread 0x000000001e02b810 nmethod 6543 0x0000000011a7cf10 code [0x0000000011a7d0a0, 0x0000000011a7d228] -Event: 23.134 Thread 0x000000001e02b810 6546 4 org.codehaus.plexus.classworlds.realm.ClassRealm::findClass (9 bytes) -Event: 23.135 Thread 0x000000001e02b810 nmethod 6546 0x0000000011b3c210 code [0x0000000011b3c3a0, 0x0000000011b3c488] -Event: 23.141 Thread 0x000000001e02b810 6547 4 java.lang.ReflectiveOperationException:: (7 bytes) -Event: 23.146 Thread 0x000000001e02b810 nmethod 6547 0x0000000011b3a890 code [0x0000000011b3aa20, 0x0000000011b3b148] - -GC Heap History (20 events): -Event: 5.477 GC heap after -{Heap after GC invocations=4 (full 0): - garbage-first heap total 65536K, used 5815K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 4 young (4096K), 4 survivors (4096K) - Metaspace used 10438K, committed 10560K, reserved 1064960K - class space used 1266K, committed 1344K, reserved 1048576K -} -Event: 8.029 GC heap before -{Heap before GC invocations=4 (full 0): - garbage-first heap total 65536K, used 40631K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 38 young (38912K), 4 survivors (4096K) - Metaspace used 12980K, committed 13184K, reserved 1064960K - class space used 1483K, committed 1600K, reserved 1048576K -} -Event: 8.074 GC heap after -{Heap after GC invocations=5 (full 0): - garbage-first heap total 65536K, used 8479K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 5 young (5120K), 5 survivors (5120K) - Metaspace used 12980K, committed 13184K, reserved 1064960K - class space used 1483K, committed 1600K, reserved 1048576K -} -Event: 9.632 GC heap before -{Heap before GC invocations=5 (full 0): - garbage-first heap total 65536K, used 42271K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 38 young (38912K), 5 survivors (5120K) - Metaspace used 14458K, committed 14656K, reserved 1064960K - class space used 1630K, committed 1728K, reserved 1048576K -} -Event: 9.709 GC heap after -{Heap after GC invocations=6 (full 0): - garbage-first heap total 78848K, used 11039K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 3 young (3072K), 3 survivors (3072K) - Metaspace used 14458K, committed 14656K, reserved 1064960K - class space used 1630K, committed 1728K, reserved 1048576K -} -Event: 11.260 GC heap before -{Heap before GC invocations=6 (full 0): - garbage-first heap total 78848K, used 55071K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 46 young (47104K), 3 survivors (3072K) - Metaspace used 15669K, committed 15872K, reserved 1064960K - class space used 1757K, committed 1856K, reserved 1048576K -} -Event: 11.302 GC heap after -{Heap after GC invocations=7 (full 0): - garbage-first heap total 78848K, used 14858K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 6 young (6144K), 6 survivors (6144K) - Metaspace used 15669K, committed 15872K, reserved 1064960K - class space used 1757K, committed 1856K, reserved 1048576K -} -Event: 12.807 GC heap before -{Heap before GC invocations=7 (full 0): - garbage-first heap total 78848K, used 55818K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 46 young (47104K), 6 survivors (6144K) - Metaspace used 16824K, committed 17088K, reserved 1064960K - class space used 1911K, committed 2048K, reserved 1048576K -} -Event: 12.875 GC heap after -{Heap after GC invocations=8 (full 0): - garbage-first heap total 78848K, used 17332K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 3 young (3072K), 3 survivors (3072K) - Metaspace used 16824K, committed 17088K, reserved 1064960K - class space used 1911K, committed 2048K, reserved 1048576K -} -Event: 14.388 GC heap before -{Heap before GC invocations=8 (full 0): - garbage-first heap total 78848K, used 59316K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 44 young (45056K), 3 survivors (3072K) - Metaspace used 17217K, committed 17472K, reserved 1064960K - class space used 1940K, committed 2048K, reserved 1048576K -} -Event: 14.397 GC heap after -{Heap after GC invocations=9 (full 0): - garbage-first heap total 78848K, used 18681K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 4 young (4096K), 4 survivors (4096K) - Metaspace used 17217K, committed 17472K, reserved 1064960K - class space used 1940K, committed 2048K, reserved 1048576K -} -Event: 15.637 GC heap before -{Heap before GC invocations=9 (full 0): - garbage-first heap total 78848K, used 60665K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 45 young (46080K), 4 survivors (4096K) - Metaspace used 19580K, committed 19904K, reserved 1073152K - class space used 2274K, committed 2432K, reserved 1048576K -} -Event: 15.650 GC heap after -{Heap after GC invocations=10 (full 0): - garbage-first heap total 78848K, used 21046K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 5 young (5120K), 5 survivors (5120K) - Metaspace used 19580K, committed 19904K, reserved 1073152K - class space used 2274K, committed 2432K, reserved 1048576K -} -Event: 18.749 GC heap before -{Heap before GC invocations=10 (full 0): - garbage-first heap total 78848K, used 56886K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 41 young (41984K), 5 survivors (5120K) - Metaspace used 21245K, committed 21504K, reserved 1073152K - class space used 2475K, committed 2624K, reserved 1048576K -} -Event: 18.774 GC heap after -{Heap after GC invocations=11 (full 0): - garbage-first heap total 78848K, used 22461K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 4 young (4096K), 4 survivors (4096K) - Metaspace used 21245K, committed 21504K, reserved 1073152K - class space used 2475K, committed 2624K, reserved 1048576K -} -Event: 20.888 GC heap before -{Heap before GC invocations=12 (full 0): - garbage-first heap total 78848K, used 62397K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 43 young (44032K), 4 survivors (4096K) - Metaspace used 30147K, committed 30464K, reserved 1081344K - class space used 3504K, committed 3648K, reserved 1048576K -} -Event: 20.919 GC heap after -{Heap after GC invocations=13 (full 0): - garbage-first heap total 78848K, used 27581K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 6 young (6144K), 6 survivors (6144K) - Metaspace used 30147K, committed 30464K, reserved 1081344K - class space used 3504K, committed 3648K, reserved 1048576K -} -Event: 23.155 GC heap before -{Heap before GC invocations=14 (full 0): - garbage-first heap total 78848K, used 64445K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 38 young (38912K), 6 survivors (6144K) - Metaspace used 32402K, committed 32832K, reserved 1081344K - class space used 3764K, committed 3968K, reserved 1048576K -} -Event: 23.188 GC heap after -{Heap after GC invocations=15 (full 0): - garbage-first heap total 78848K, used 34803K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 3 young (3072K), 3 survivors (3072K) - Metaspace used 32402K, committed 32832K, reserved 1081344K - class space used 3764K, committed 3968K, reserved 1048576K -} -Event: 23.194 GC heap before -{Heap before GC invocations=15 (full 0): - garbage-first heap total 78848K, used 39923K [0x00000000c1a00000, 0x0000000100000000) - region size 1024K, 4 young (4096K), 3 survivors (3072K) - Metaspace used 32402K, committed 32832K, reserved 1081344K - class space used 3764K, committed 3968K, reserved 1048576K -} - -Deoptimization events (20 events): -Event: 22.652 Thread 0x0000000000330310 DEOPT PACKING pc=0x0000000011b918c4 sp=0x000000000201de70 -Event: 22.652 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f6239d sp=0x000000000201de20 mode 2 -Event: 22.652 Thread 0x0000000000330310 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000000011b918c4 relative=0x00000000000004a4 -Event: 22.652 Thread 0x0000000000330310 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000000011b918c4 method=java.util.Hashtable.get(Ljava/lang/Object;)Ljava/lang/Object; @ 6 c2 -Event: 22.652 Thread 0x0000000000330310 DEOPT PACKING pc=0x0000000011b918c4 sp=0x000000000201de70 -Event: 22.652 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f6239d sp=0x000000000201de20 mode 2 -Event: 22.653 Thread 0x0000000000330310 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000000011b918c4 relative=0x00000000000004a4 -Event: 22.653 Thread 0x0000000000330310 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000000011b918c4 method=java.util.Hashtable.get(Ljava/lang/Object;)Ljava/lang/Object; @ 6 c2 -Event: 22.653 Thread 0x0000000000330310 DEOPT PACKING pc=0x0000000011b918c4 sp=0x000000000201de70 -Event: 22.653 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f6239d sp=0x000000000201de20 mode 2 -Event: 22.653 Thread 0x0000000000330310 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000000011b918c4 relative=0x00000000000004a4 -Event: 22.653 Thread 0x0000000000330310 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000000011b918c4 method=java.util.Hashtable.get(Ljava/lang/Object;)Ljava/lang/Object; @ 6 c2 -Event: 22.653 Thread 0x0000000000330310 DEOPT PACKING pc=0x0000000011b918c4 sp=0x000000000201de70 -Event: 22.653 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f6239d sp=0x000000000201de20 mode 2 -Event: 22.655 Thread 0x0000000000330310 DEOPT PACKING pc=0x000000000aee0488 sp=0x000000000201ddb0 -Event: 22.655 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f62b24 sp=0x000000000201d250 mode 0 -Event: 23.097 Thread 0x0000000000330310 Uncommon trap: trap_request=0xffffffde fr.pc=0x0000000011c49d84 relative=0x0000000000006844 -Event: 23.097 Thread 0x0000000000330310 Uncommon trap: reason=class_check action=maybe_recompile pc=0x0000000011c49d84 method=org.apache.maven.model.BuildBase.clone()Lorg/apache/maven/model/BuildBase; @ 30 c2 -Event: 23.097 Thread 0x0000000000330310 DEOPT PACKING pc=0x0000000011c49d84 sp=0x000000000201df00 -Event: 23.097 Thread 0x0000000000330310 DEOPT UNPACKING pc=0x0000000009f6239d sp=0x000000000201de40 mode 2 - -Classes unloaded (0 events): -No events - -Classes redefined (0 events): -No events - -Internal exceptions (20 events): -Event: 20.625 Thread 0x0000000000330310 Exception (0x00000000c45a8618) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.626 Thread 0x0000000000330310 Exception (0x00000000c45a88b8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.626 Thread 0x0000000000330310 Exception (0x00000000c45a9530) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.636 Thread 0x0000000000330310 Exception (0x00000000c45b4b10) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.652 Thread 0x0000000000330310 Exception (0x00000000c45caf28) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.653 Thread 0x0000000000330310 Exception (0x00000000c45cb248) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.653 Thread 0x0000000000330310 Exception (0x00000000c45ce348) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.653 Thread 0x0000000000330310 Exception (0x00000000c45ce5a8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.654 Thread 0x0000000000330310 Exception (0x00000000c45d2e38) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.655 Thread 0x0000000000330310 Exception (0x00000000c45d3150) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.667 Thread 0x0000000000330310 Exception (0x00000000c45f7150) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] -Event: 20.670 Thread 0x0000000000330310 Exception (0x00000000c4402b40) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] -Event: 20.671 Thread 0x0000000000330310 Exception (0x00000000c4407470) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] -Event: 20.719 Thread 0x0000000000330310 Exception (0x00000000c4472ab8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.744 Thread 0x0000000000330310 Exception (0x00000000c449aaa8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 20.792 Thread 0x0000000000330310 Exception (0x00000000c43061b8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\prims\jni.cpp, line 516] -Event: 21.266 Thread 0x0000000000330310 Exception (0x00000000c5622c28) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 862] -Event: 21.659 Thread 0x0000000020139240 Exception (0x00000000c534a4a8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] -Event: 21.659 Thread 0x0000000020139240 Exception (0x00000000c5350be8) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] -Event: 21.660 Thread 0x0000000020139240 Exception (0x00000000c5354758) -thrown [e:\jenkins\tmp\workspace\build\src\src\hotspot\share\interpreter\linkResolver.cpp, line 766] - -VM Operations (20 events): -Event: 20.640 Executing VM operation: ICBufferFull done -Event: 20.717 Executing VM operation: HandshakeAllThreads -Event: 20.717 Executing VM operation: HandshakeAllThreads done -Event: 20.813 Executing VM operation: ICBufferFull -Event: 20.826 Executing VM operation: ICBufferFull done -Event: 20.888 Executing VM operation: G1CollectForAllocation -Event: 20.919 Executing VM operation: G1CollectForAllocation done -Event: 21.015 Executing VM operation: G1Concurrent -Event: 21.031 Executing VM operation: G1Concurrent done -Event: 21.069 Executing VM operation: G1Concurrent -Event: 21.069 Executing VM operation: G1Concurrent done -Event: 21.247 Executing VM operation: HandshakeAllThreads -Event: 21.247 Executing VM operation: HandshakeAllThreads done -Event: 22.271 Executing VM operation: Cleanup -Event: 22.633 Executing VM operation: Cleanup done -Event: 22.881 Executing VM operation: HandshakeAllThreads -Event: 22.881 Executing VM operation: HandshakeAllThreads done -Event: 23.155 Executing VM operation: G1CollectForAllocation -Event: 23.189 Executing VM operation: G1CollectForAllocation done -Event: 23.194 Executing VM operation: G1TryInitiateConcMark - -Events (20 events): -Event: 21.661 loading class java/util/concurrent/SynchronousQueue$Transferer -Event: 21.661 loading class java/util/concurrent/SynchronousQueue$Transferer done -Event: 21.661 loading class java/util/concurrent/SynchronousQueue$TransferStack done -Event: 21.661 loading class java/util/concurrent/SynchronousQueue$TransferStack$SNode -Event: 21.661 loading class java/util/concurrent/ForkJoinPool$ManagedBlocker -Event: 21.662 loading class java/util/concurrent/ForkJoinPool$ManagedBlocker done -Event: 21.662 loading class java/util/concurrent/SynchronousQueue$TransferStack$SNode done -Event: 21.662 Thread 0x0000000020139240 Thread exited: 0x0000000020139240 -Event: 22.177 loading class java/util/Vector$Itr -Event: 22.177 loading class java/util/Vector$Itr done -Event: 22.193 loading class java/util/zip/Deflater -Event: 22.194 loading class java/util/zip/Deflater done -Event: 22.194 loading class java/util/zip/Deflater$DeflaterZStreamRef -Event: 22.194 loading class java/util/zip/Deflater$DeflaterZStreamRef done -Event: 22.197 loading class java/util/Vector$1 -Event: 22.197 loading class java/util/Vector$1 done -Event: 22.200 loading class java/io/DataOutputStream -Event: 22.625 loading class java/io/DataOutputStream done -Event: 23.139 loading class java/io/SequenceInputStream -Event: 23.139 loading class java/io/SequenceInputStream done - - -Dynamic libraries: -0x000000013f0d0000 - 0x000000013f0de000 C:\Program Files\Java\jdk-17\bin\java.exe -0x0000000077450000 - 0x00000000775ef000 C:\Windows\SYSTEM32\ntdll.dll -0x0000000077230000 - 0x000000007734f000 C:\Windows\system32\kernel32.dll -0x000007fefd0a0000 - 0x000007fefd107000 C:\Windows\system32\KERNELBASE.dll -0x000007feed7d0000 - 0x000007feed7e8000 C:\Program Files\Java\jdk-17\bin\jli.dll -0x000007fefb550000 - 0x000007fefb745000 C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.24483_none_e372d88f30fbb845\COMCTL32.dll -0x000007fefda30000 - 0x000007fefdacf000 C:\Windows\system32\msvcrt.dll -0x000007feff590000 - 0x000007feff5f7000 C:\Windows\system32\GDI32.dll -0x0000000077350000 - 0x000000007744b000 C:\Windows\system32\USER32.dll -0x000007fefdc00000 - 0x000007fefdc0e000 C:\Windows\system32\LPK.dll -0x000007fefeeb0000 - 0x000007fefef7b000 C:\Windows\system32\USP10.dll -0x000007feff130000 - 0x000007feff1a1000 C:\Windows\system32\SHLWAPI.dll -0x000007fee6950000 - 0x000007fee6969000 C:\Program Files\Java\jdk-17\bin\VCRUNTIME140.dll -0x000007feed7c0000 - 0x000007feed7c4000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-runtime-l1-1-0.dll -0x000007fee1890000 - 0x000007fee198a000 C:\Program Files\Java\jdk-17\bin\ucrtbase.DLL -0x000007fee9bb0000 - 0x000007fee9bb3000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-localization-l1-2-0.dll -0x000007fee7980000 - 0x000007fee7983000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-processthreads-l1-1-1.dll -0x000007fee6ae0000 - 0x000007fee6ae3000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-file-l1-2-0.dll -0x000007fee6940000 - 0x000007fee6943000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-timezone-l1-1-0.dll -0x000007fee6930000 - 0x000007fee6933000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-file-l2-1-0.dll -0x000007fee6920000 - 0x000007fee6923000 C:\Program Files\Java\jdk-17\bin\api-ms-win-core-synch-l1-2-0.dll -0x000007fee6910000 - 0x000007fee6913000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-heap-l1-1-0.dll -0x000007fee55a0000 - 0x000007fee55a4000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-string-l1-1-0.dll -0x000007fee3670000 - 0x000007fee3674000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-stdio-l1-1-0.dll -0x000007fee3660000 - 0x000007fee3664000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-convert-l1-1-0.dll -0x000007fee25d0000 - 0x000007fee25d3000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-environment-l1-1-0.dll -0x000007fee25c0000 - 0x000007fee25c3000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-filesystem-l1-1-0.dll -0x000007fee1c00000 - 0x000007fee1c05000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-math-l1-1-0.dll -0x000007fee1610000 - 0x000007fee1613000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-locale-l1-1-0.dll -0x000007fefdee0000 - 0x000007fefdf0e000 C:\Windows\system32\IMM32.DLL -0x000007feff020000 - 0x000007feff12b000 C:\Windows\system32\MSCTF.dll -0x000007fee1600000 - 0x000007fee160c000 C:\Program Files\Java\jdk-17\bin\vcruntime140_1.dll -0x000007fee1560000 - 0x000007fee15f1000 C:\Program Files\Java\jdk-17\bin\msvcp140.dll -0x000007fee1550000 - 0x000007fee1553000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-time-l1-1-0.dll -0x000007fee1540000 - 0x000007fee1543000 C:\Program Files\Java\jdk-17\bin\api-ms-win-crt-utility-l1-1-0.dll -0x000007fed4b30000 - 0x000007fed5776000 C:\Program Files\Java\jdk-17\bin\server\jvm.dll -0x000007fefdad0000 - 0x000007fefdbab000 C:\Windows\system32\ADVAPI32.dll -0x000007fefd360000 - 0x000007fefd37f000 C:\Windows\SYSTEM32\sechost.dll -0x000007feff610000 - 0x000007feff73c000 C:\Windows\system32\RPCRT4.dll -0x000007fee5d80000 - 0x000007fee5d89000 C:\Windows\system32\WSOCK32.dll -0x000007fefdbb0000 - 0x000007fefdbfd000 C:\Windows\system32\WS2_32.dll -0x000007feff600000 - 0x000007feff608000 C:\Windows\system32\NSI.dll -0x000007fefa2a0000 - 0x000007fefa2db000 C:\Windows\system32\WINMM.dll -0x000007fefbeb0000 - 0x000007fefbebc000 C:\Windows\system32\VERSION.dll -0x00000000775f0000 - 0x00000000775f7000 C:\Windows\system32\PSAPI.DLL -0x000007fee1530000 - 0x000007fee153a000 C:\Program Files\Java\jdk-17\bin\jimage.dll -0x000007fee5630000 - 0x000007fee5755000 C:\Windows\system32\DBGHELP.DLL -0x000007fee1520000 - 0x000007fee152e000 C:\Program Files\Java\jdk-17\bin\instrument.dll -0x000007fee14f0000 - 0x000007fee1515000 C:\Program Files\Java\jdk-17\bin\java.dll -0x000007fee0c20000 - 0x000007fee0cf6000 C:\Program Files\Java\jdk-17\bin\svml.dll -0x000007fefdf90000 - 0x000007fefed1b000 C:\Windows\system32\SHELL32.dll -0x000007feff1b0000 - 0x000007feff3af000 C:\Windows\system32\ole32.dll -0x000007fefcfb0000 - 0x000007fefcfbf000 C:\Windows\system32\profapi.dll -0x000007fee0c00000 - 0x000007fee0c18000 C:\Program Files\Java\jdk-17\bin\zip.dll -0x000007fee0be0000 - 0x000007fee0bf9000 C:\Program Files\Java\jdk-17\bin\net.dll -0x000007fefab40000 - 0x000007fefabb1000 C:\Windows\system32\WINHTTP.dll -0x000007fefaad0000 - 0x000007fefab35000 C:\Windows\system32\webio.dll -0x000007fefc4b0000 - 0x000007fefc505000 C:\Windows\system32\mswsock.dll -0x000007fefc590000 - 0x000007fefc597000 C:\Windows\System32\wship6.dll -0x000007fee0740000 - 0x000007fee0755000 C:\Program Files\Java\jdk-17\bin\nio.dll -0x000007fee0720000 - 0x000007fee073a000 C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\bin\breakgen64.dll -0x0000000069ac0000 - 0x0000000069ae4000 C:\Users\Stef\AppData\Local\Temp\jansi-2.4.0-9689c7ed58c33b92-jansi.dll -0x000007fee14e0000 - 0x000007fee14f0000 C:\Program Files\Java\jdk-17\bin\verify.dll - -dbghelp: loaded successfully - version: 4.0.5 - missing functions: none -symbol engine: initialized successfully - sym options: 0x614 - pdb path: .;C:\Program Files\Java\jdk-17\bin;C:\Windows\SYSTEM32;C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.24483_none_e372d88f30fbb845;C:\Program Files\Java\jdk-17\bin\server;C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\bin;C:\Users\Stef\AppData\Local\Temp - -VM Arguments: -jvm_args: -Dmaven.multiModuleProjectDirectory=D:\IdeaProjects\IF-parent -Dmaven.home=D:\Maven\apache-maven-3.8.4 -Dclassworlds.conf=D:\Maven\apache-maven-3.8.4\bin\m2.conf -Dmaven.ext.class.path=C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\plugins\maven\lib\maven-event-listener.jar -javaagent:C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\lib\idea_rt.jar=52046:C:\Users\Stef\AppData\Local\JetBrains\Toolbox\apps\IDEA-U\ch-0\213.6461.79\bin -Dfile.encoding=UTF-8 -java_command: org.codehaus.classworlds.Launcher -Didea.version=2021.3.1 clean install -java_class_path (initial): D:\Maven\apache-maven-3.8.4\boot\plexus-classworlds-2.6.0.jar;D:\Maven\apache-maven-3.8.4\boot\plexus-classworlds.license -Launcher Type: SUN_STANDARD - -[Global flags] - intx CICompilerCount = 2 {product} {ergonomic} - uint ConcGCThreads = 1 {product} {ergonomic} - uint G1ConcRefinementThreads = 2 {product} {ergonomic} - size_t G1HeapRegionSize = 1048576 {product} {ergonomic} - uintx GCDrainStackTargetSize = 64 {product} {ergonomic} - size_t InitialHeapSize = 67108864 {product} {ergonomic} - size_t MarkStackSize = 4194304 {product} {ergonomic} - size_t MaxHeapSize = 1046478848 {product} {ergonomic} - size_t MaxNewSize = 627048448 {product} {ergonomic} - size_t MinHeapDeltaBytes = 1048576 {product} {ergonomic} - size_t MinHeapSize = 8388608 {product} {ergonomic} - uintx NonNMethodCodeHeapSize = 5826188 {pd product} {ergonomic} - uintx NonProfiledCodeHeapSize = 122916026 {pd product} {ergonomic} - uintx ProfiledCodeHeapSize = 122916026 {pd product} {ergonomic} - uintx ReservedCodeCacheSize = 251658240 {pd product} {ergonomic} - bool SegmentedCodeCache = true {product} {ergonomic} - size_t SoftMaxHeapSize = 1046478848 {manageable} {ergonomic} - bool UseCompressedClassPointers = true {product lp64_product} {ergonomic} - bool UseCompressedOops = true {product lp64_product} {ergonomic} - bool UseG1GC = true {product} {ergonomic} - bool UseLargePagesIndividualAllocation = false {pd product} {ergonomic} - -Logging: -Log output configuration: - #0: stdout all=warning uptime,level,tags - #1: stderr all=off uptime,level,tags - -Environment Variables: -JAVA_HOME=C:\Program Files\Java\jdk-17\ -CLASSPATH=C:\Users\Stef\.m2\repository\com\thoughtworks\xstream\xstream\1.4.18\xstream-1.4.18.jar -PATH=C:\Program Files\ImageMagick-7.1.0-Q16-HDRI;C:\Ruby27-x64\bin;D:\NDS\MicroLua\devkitPro\msys2\usr\bin;C:\Python34;C:\Python34\Scripts;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\DMIX;C:\Program Files (x86)\Windows Live\Shared;%USERPROFILE%\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;"C:\Program Files\Java\jdk-17\bin";D:\CE Development\CEdev\bin;C:\ProgramData\chocolatey\bin;C:\Program Files (x86)\Gpg4win\..\GnuPG\bin;D:\Yarnpkg\bin\;D:\Node.js\;C:\Program Files\Microsoft Network Monitor 3\;C:\Program Files\dotnet\;C:\Program Files (x86)\scala\\bin;C:\Program Files\Git\cmd;C:\Program Files (x86)\dotnet\;C:\Gradle\gradle-7.0.2\bin;D:\Python\Scripts\;D:\Python\;C:\Users\Stef\AppData\Local\Programs\Python\Launcher\;D:\CEDevelopment\CEdev\bin;D:\Maven\apache-maven-3.8.4\bin;D:\Gradle\gradle-7.0.2\bin;C:\MinGW\bin;D:\LaTeX\miktex\bin\x64\;D:\Lua\lua53.dll;"C:\Program Files (x86)\";C:\Users\Stef\AppData\Local\Yarn\bin;C:\Users\Stef\AppData\Roaming\npm;C:\Program Files\CMake\bin;C:\cygwin64\bin -USERNAME=Stef -OS=Windows_NT -PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 23 Stepping 10, GenuineIntel - - - ---------------- S Y S T E M --------------- - -OS: - Windows 7 , 64 bit Build 7601 (6.1.7601.24545) -OS uptime: 0 days 6:52 hours - -CPU: total 2 (initial active 2) (2 cores per cpu, 1 threads per core) family 6 model 23 stepping 10 microcode 0x0, cx8, cmov, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, tsc, clflush - -Memory: 4k page, system-wide physical 3991M (144M free) -TotalPageFile size 8082M (AvailPageFile size 15M) -current process WorkingSet (physical memory assigned to process): 208M, peak: 209M -current process commit charge ("private bytes"): 235M, peak: 256M - -vm_info: OpenJDK 64-Bit Server VM (17.0.1+12) for windows-amd64 JRE (17.0.1+12), built on Oct 20 2021 07:42:55 by "" with MS VC++ 16.7 (VS2019) - -END. From 8d7a96147495f0fb9e27c41a0ddd16e793674432 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Sat, 7 May 2022 12:17:55 +0200 Subject: [PATCH 04/14] Replace BuildTools with the paper-nms-maven-plugin --- .github/workflows/maven.yml | 36 +++++++++---------------------- .gitignore | 3 ++- README.md | 19 ++++++++-------- nms/1_17_0/pom.xml | 43 +++++++++++++------------------------ nms/1_17_1/pom.xml | 42 ++++++++++++------------------------ nms/1_18_0/pom.xml | 42 ++++++++++++------------------------ nms/1_18_1/pom.xml | 42 ++++++++++++------------------------ nms/1_18_2/pom.xml | 42 ++++++++++++------------------------ 8 files changed, 92 insertions(+), 177 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 722bb53c..1cfd2f5b 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest name: 'Build' steps: - - name: Cache Paperclip Jars + - name: Cache Paper(clip) jars id: cache-paperclip-jars uses: actions/cache@v2 with: @@ -24,9 +24,8 @@ jobs: build paperclip ~/.m2/repository/io/papermc/paper - ~/.m2/repository/org/spigotmc key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-paperclip - - name: Download Paperclip Jars + - name: Download Paperclip jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' run: | mkdir -p paperclip @@ -39,7 +38,7 @@ jobs: uses: actions/setup-java@v1 with: java-version: 11 - - name: Generate 1.14 - 1.16 Paper Jars + - name: Generate 1.14 - 1.16 Paper jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' run: | cd paperclip/ @@ -49,7 +48,7 @@ jobs: java -jar paper-1.16.3.jar java -jar paper-1.16.4.jar cd ../ - - name: Install 1.14 - 1.16 Paper Jars + - name: Install 1.14 - 1.16 Paper jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' run: | cd paperclip/ @@ -59,33 +58,18 @@ jobs: mvn install:install-file -Dfile=cache/patched_1.16.3.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.3-R0.1-SNAPSHOT" -Dpackaging="jar" mvn install:install-file -Dfile=cache/patched_1.16.4.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.4-R0.1-SNAPSHOT" -Dpackaging="jar" cd ../ - - name: Set up JDK 16 - uses: actions/setup-java@v1 - with: - java-version: 16 - - name: Run BuildTools 1.17 - if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' - run: | - mkdir -p build - cd build/ - wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -O BuildTools.jar - java -jar BuildTools.jar --rev 1.17 --remapped --disable-java-check - java -jar BuildTools.jar --rev 1.17.1 --remapped --disable-java-check - cd ../ - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - - name: Run BuildTools 1.18 + - name: Run paper-nms init if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' run: | - mkdir -p build - cd build/ - wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -O BuildTools.jar - java -jar BuildTools.jar --rev 1.18 --remapped --disable-java-check - java -jar BuildTools.jar --rev 1.18.1 --remapped --disable-java-check - java -jar BuildTools.jar --rev 1.18.2 --remapped --disable-java-check - cd ../ + mvn paper-nms:init -pl nms/1_17_0 + mvn paper-nms:init -pl nms/1_17_1 + mvn paper-nms:init -pl nms/1_18_0 + mvn paper-nms:init -pl nms/1_18_1 + mvn paper-nms:init -pl nms/1_18_2 - uses: actions/checkout@v2 name: Checkout code - name: Build with Maven diff --git a/.gitignore b/.gitignore index 64169b5d..c7873373 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ IF-Test *.iml *.txt dependency-reduced-pom.xml -*.log \ No newline at end of file +*.log +.paper-nms \ No newline at end of file diff --git a/README.md b/README.md index c4924fcf..ecb0884a 100644 --- a/README.md +++ b/README.md @@ -86,8 +86,8 @@ If you want to build this project from source, run the following: This will clone this repository to your device. This project relies on NMS, for which the dependencies are not available online. Because of this, you'll need to follow additional steps to obtain all these dependencies locally. -### Installing Paper -For versions 1.14-1.16, we use Paper. Run the following scripts for each version to install the dependencies locally. Running these commands generate additional files in the folder where you execute them. To ensure that you don't accidentallly overwrite other files, execute this in an empty folder. The files that get created can be deleted afterwards (either after installing a single version or after installing all of them), since they're no longer necessary. +### Installing Paper manually +For versions 1.14-1.16, we have to manually install Paper. Run the following scripts for each version to install the dependencies locally. Running these commands generate additional files in the folder where you execute them. To ensure that you don't accidentallly overwrite other files, execute this in an empty folder. The files that get created can be deleted afterwards (either after installing a single version or after installing all of them), since they're no longer necessary. #### 1.14.4 ``` @@ -124,15 +124,14 @@ java -jar paper-1.16.4.jar mvn install:install-file -Dfile=cache/patched_1.16.4.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.4-R0.1-SNAPSHOT" -Dpackaging="jar" ``` -### Installing Spigot -For versions 1.17-1.18, we use Spigot. To install these versions locally, we use Spigot's BuildTools system. Using BuildTools will create additional files, so we recommend running the following in an empty folder. The files can be deleted afterwards. +### Installing Paper via the maven plugin +For versions 1.17-1.18, we use Paper via the [paper-nms-maven-plugin](https://github.com/Alvinn8/paper-nms-maven-plugin). To install these versions locally, we must run a few maven commands. These commands should be ran in the root directory of the project. ``` -wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar -O BuildTools.jar -java -jar BuildTools.jar --rev 1.17 --remapped --disable-java-check -java -jar BuildTools.jar --rev 1.17.1 --remapped --disable-java-check -java -jar BuildTools.jar --rev 1.18 --remapped --disable-java-check -java -jar BuildTools.jar --rev 1.18.1 --remapped --disable-java-check -java -jar BuildTools.jar --rev 1.18.2 --remapped --disable-java-check +mvn paper-nms:init -pl nms/1_17_0 +mvn paper-nms:init -pl nms/1_17_1 +mvn paper-nms:init -pl nms/1_18_0 +mvn paper-nms:init -pl nms/1_18_1 +mvn paper-nms:init -pl nms/1_18_2 ``` Your environment is now set up correctly. To create a build, run the following inside the root folder of the project. diff --git a/nms/1_17_0/pom.xml b/nms/1_17_0/pom.xml index 5290eac6..07005b1a 100644 --- a/nms/1_17_0/pom.xml +++ b/nms/1_17_0/pom.xml @@ -24,10 +24,9 @@ compile - org.spigotmc - spigot - 1.17-R0.1-SNAPSHOT - remapped-mojang + ca.bkaw + paper-nms + 1.17-SNAPSHOT provided @@ -35,38 +34,26 @@ - net.md-5 - specialsource-maven-plugin - 1.2.4 + ca.bkaw + paper-nms-maven-plugin + 1.2-SNAPSHOT - package + process-classes remap - remap-obf - - org.spigotmc:minecraft-server:1.17-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.17-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.17-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.17-R0.1-SNAPSHOT:jar:remapped-obf - + + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file diff --git a/nms/1_17_1/pom.xml b/nms/1_17_1/pom.xml index b4b09522..87fede8a 100644 --- a/nms/1_17_1/pom.xml +++ b/nms/1_17_1/pom.xml @@ -24,10 +24,9 @@ compile - org.spigotmc - spigot - 1.17.1-R0.1-SNAPSHOT - remapped-mojang + ca.bkaw + paper-nms + 1.17.1-SNAPSHOT provided @@ -35,39 +34,26 @@ - net.md-5 - specialsource-maven-plugin - 1.2.4 + ca.bkaw + paper-nms-maven-plugin + 1.2-SNAPSHOT - package + process-classes remap - remap-obf - - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.17.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT:jar:remapped-obf - + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file diff --git a/nms/1_18_0/pom.xml b/nms/1_18_0/pom.xml index 964257a1..14cde080 100644 --- a/nms/1_18_0/pom.xml +++ b/nms/1_18_0/pom.xml @@ -24,10 +24,9 @@ compile - org.spigotmc - spigot - 1.18-R0.1-SNAPSHOT - remapped-mojang + ca.bkaw + paper-nms + 1.18-SNAPSHOT provided @@ -35,39 +34,26 @@ - net.md-5 - specialsource-maven-plugin - 1.2.4 + ca.bkaw + paper-nms-maven-plugin + 1.2-SNAPSHOT - package + process-classes remap - remap-obf - - org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.18-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18-R0.1-SNAPSHOT:jar:remapped-obf - + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file diff --git a/nms/1_18_1/pom.xml b/nms/1_18_1/pom.xml index 5cfbddf7..c93d5f9b 100644 --- a/nms/1_18_1/pom.xml +++ b/nms/1_18_1/pom.xml @@ -24,10 +24,9 @@ compile - org.spigotmc - spigot - 1.18-R0.1-SNAPSHOT - remapped-mojang + ca.bkaw + paper-nms + 1.18.1-SNAPSHOT provided @@ -35,39 +34,26 @@ - net.md-5 - specialsource-maven-plugin - 1.2.4 + ca.bkaw + paper-nms-maven-plugin + 1.2-SNAPSHOT - package + process-classes remap - remap-obf - - org.spigotmc:minecraft-server:1.18.1-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.18.1-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.18.1-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18.1-R0.1-SNAPSHOT:jar:remapped-obf - + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file diff --git a/nms/1_18_2/pom.xml b/nms/1_18_2/pom.xml index 676b3dc4..151e925a 100644 --- a/nms/1_18_2/pom.xml +++ b/nms/1_18_2/pom.xml @@ -24,10 +24,9 @@ compile - org.spigotmc - spigot - 1.18.2-R0.1-SNAPSHOT - remapped-mojang + ca.bkaw + paper-nms + 1.18.2-SNAPSHOT provided @@ -35,39 +34,26 @@ - net.md-5 - specialsource-maven-plugin - 1.2.4 + ca.bkaw + paper-nms-maven-plugin + 1.2-SNAPSHOT - package + process-classes remap - remap-obf - - org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:txt:maps-mojang - true - org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-mojang - true - remapped-obf - - - - package - - remap - - remap-spigot - - ${project.build.directory}/${project.artifactId}-${project.version}-remapped-obf.jar - org.spigotmc:minecraft-server:1.18.2-R0.1-SNAPSHOT:csrg:maps-spigot - org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT:jar:remapped-obf - + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file From 6902d676f890bc6286cbae688df701834502a324 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Sat, 7 May 2022 12:23:02 +0200 Subject: [PATCH 05/14] check out before running task --- .github/workflows/maven.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 1cfd2f5b..c90f0034 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -40,16 +40,16 @@ jobs: java-version: 11 - name: Generate 1.14 - 1.16 Paper jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' + working-directory: paperclip run: | - cd paperclip/ java -jar paper-1.14.4.jar java -jar paper-1.15.2.jar java -jar paper-1.16.1.jar java -jar paper-1.16.3.jar java -jar paper-1.16.4.jar - cd ../ - name: Install 1.14 - 1.16 Paper jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' + working-directory: paperclip run: | cd paperclip/ mvn install:install-file -Dfile=cache/patched_1.14.4.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.14.4-R0.1-SNAPSHOT" -Dpackaging="jar" @@ -62,6 +62,8 @@ jobs: uses: actions/setup-java@v1 with: java-version: 17 + - uses: actions/checkout@v2 + name: Checkout code - name: Run paper-nms init if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' run: | @@ -70,7 +72,5 @@ jobs: mvn paper-nms:init -pl nms/1_18_0 mvn paper-nms:init -pl nms/1_18_1 mvn paper-nms:init -pl nms/1_18_2 - - uses: actions/checkout@v2 - name: Checkout code - name: Build with Maven run: mvn -B package --file pom.xml From e64cd116be599678749892b7c50b2b3b757df0d1 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Sat, 7 May 2022 12:24:45 +0200 Subject: [PATCH 06/14] remove leftover cd... --- .github/workflows/maven.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c90f0034..586e1491 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -51,13 +51,11 @@ jobs: if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' working-directory: paperclip run: | - cd paperclip/ mvn install:install-file -Dfile=cache/patched_1.14.4.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.14.4-R0.1-SNAPSHOT" -Dpackaging="jar" mvn install:install-file -Dfile=cache/patched_1.15.2.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.15.2-R0.1-SNAPSHOT" -Dpackaging="jar" mvn install:install-file -Dfile=cache/patched_1.16.1.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.1-R0.1-SNAPSHOT" -Dpackaging="jar" mvn install:install-file -Dfile=cache/patched_1.16.3.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.3-R0.1-SNAPSHOT" -Dpackaging="jar" mvn install:install-file -Dfile=cache/patched_1.16.4.jar -DgroupId="io.papermc" -DartifactId="paper" -Dversion="1.16.4-R0.1-SNAPSHOT" -Dpackaging="jar" - cd ../ - name: Set up JDK 17 uses: actions/setup-java@v1 with: From adb4175c637564c165098d06d6ee395dbec9480f Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Sat, 7 May 2022 12:38:51 +0200 Subject: [PATCH 07/14] update to stable release --- nms/1_17_0/pom.xml | 2 +- nms/1_17_1/pom.xml | 2 +- nms/1_18_0/pom.xml | 2 +- nms/1_18_1/pom.xml | 2 +- nms/1_18_2/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/nms/1_17_0/pom.xml b/nms/1_17_0/pom.xml index 07005b1a..3d5c9c3b 100644 --- a/nms/1_17_0/pom.xml +++ b/nms/1_17_0/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2-SNAPSHOT + 1.2 process-classes diff --git a/nms/1_17_1/pom.xml b/nms/1_17_1/pom.xml index 87fede8a..9d37aded 100644 --- a/nms/1_17_1/pom.xml +++ b/nms/1_17_1/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2-SNAPSHOT + 1.2 process-classes diff --git a/nms/1_18_0/pom.xml b/nms/1_18_0/pom.xml index 14cde080..3ae564f3 100644 --- a/nms/1_18_0/pom.xml +++ b/nms/1_18_0/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2-SNAPSHOT + 1.2 process-classes diff --git a/nms/1_18_1/pom.xml b/nms/1_18_1/pom.xml index c93d5f9b..71acb1d5 100644 --- a/nms/1_18_1/pom.xml +++ b/nms/1_18_1/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2-SNAPSHOT + 1.2 process-classes diff --git a/nms/1_18_2/pom.xml b/nms/1_18_2/pom.xml index 151e925a..7656dad2 100644 --- a/nms/1_18_2/pom.xml +++ b/nms/1_18_2/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2-SNAPSHOT + 1.2 process-classes From 4c6ff375a3b39d05c2fbaa9ef89da4417d7a7a16 Mon Sep 17 00:00:00 2001 From: Noah van der Aa Date: Sat, 7 May 2022 13:56:12 +0200 Subject: [PATCH 08/14] cache paper-nms jars --- .github/workflows/maven.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 586e1491..21006883 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -24,6 +24,7 @@ jobs: build paperclip ~/.m2/repository/io/papermc/paper + ~/.m2/repository/ca/bkaw/paper-nms key: ${{ runner.os }}-${{ secrets.CACHE_VERSION }}-paperclip - name: Download Paperclip jars if: steps.cache-paperclip-jars.outputs.cache-hit != 'true' From 4df4bff9eb9840bf6fe11c033a2f513016de424a Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Tue, 17 May 2022 20:13:14 +0200 Subject: [PATCH 09/14] Don't support using the libraries section in the plugin.yml --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index ecb0884a..75fa081f 100644 --- a/README.md +++ b/README.md @@ -73,11 +73,7 @@ shadowJar { ``` ## Dependency via plugin.yml -You can also specify your dependency directly in your plugin.yml. Please note that this downloads the dependency on the server, which means that you can only use the plugin on a server with an internet connection. -```yaml -libraries: - - com.github.stefvanschie.inventoryframework:IF:0.10.5 -``` +IF does **not** support declaring the dependency via the libraries section in the plugin.yml. Please make use of a build tool as described above to use IF as a dependency. ## Building from source If you want to build this project from source, run the following: From b2218b0b56bb33e58b5e626033df73624a9338e6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 May 2022 05:19:40 +0000 Subject: [PATCH 10/14] Bump paper-nms-maven-plugin from 1.2 to 1.2.1 Bumps paper-nms-maven-plugin from 1.2 to 1.2.1. --- updated-dependencies: - dependency-name: ca.bkaw:paper-nms-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- nms/1_17_0/pom.xml | 2 +- nms/1_17_1/pom.xml | 2 +- nms/1_18_0/pom.xml | 2 +- nms/1_18_1/pom.xml | 2 +- nms/1_18_2/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/nms/1_17_0/pom.xml b/nms/1_17_0/pom.xml index 3d5c9c3b..99be8eda 100644 --- a/nms/1_17_0/pom.xml +++ b/nms/1_17_0/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2 + 1.2.1 process-classes diff --git a/nms/1_17_1/pom.xml b/nms/1_17_1/pom.xml index 9d37aded..8e14cc36 100644 --- a/nms/1_17_1/pom.xml +++ b/nms/1_17_1/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2 + 1.2.1 process-classes diff --git a/nms/1_18_0/pom.xml b/nms/1_18_0/pom.xml index 3ae564f3..ee140c16 100644 --- a/nms/1_18_0/pom.xml +++ b/nms/1_18_0/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2 + 1.2.1 process-classes diff --git a/nms/1_18_1/pom.xml b/nms/1_18_1/pom.xml index 71acb1d5..c4c9fb64 100644 --- a/nms/1_18_1/pom.xml +++ b/nms/1_18_1/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2 + 1.2.1 process-classes diff --git a/nms/1_18_2/pom.xml b/nms/1_18_2/pom.xml index 7656dad2..04a62c9b 100644 --- a/nms/1_18_2/pom.xml +++ b/nms/1_18_2/pom.xml @@ -36,7 +36,7 @@ ca.bkaw paper-nms-maven-plugin - 1.2 + 1.2.1 process-classes From eed1a908d0e5f8ce4e80c02c5ba4f95038996964 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Mon, 30 May 2022 06:19:30 +0200 Subject: [PATCH 11/14] Added support for CustomModelData for gui items in XML files. --- .../github/stefvanschie/inventoryframework/pane/Pane.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/Pane.java b/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/Pane.java index 381993fc..734cd36b 100644 --- a/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/Pane.java +++ b/IF/src/main/java/com/github/stefvanschie/inventoryframework/pane/Pane.java @@ -391,6 +391,12 @@ public static GuiItem loadItem(@NotNull Object instance, @NotNull Element elemen TextHolder.deserialize(item.getTextContent()) .asItemDisplayName(itemMeta); + itemStack.setItemMeta(itemMeta); + } else if (nodeName.equals("modeldata")) { + ItemMeta itemMeta = Objects.requireNonNull(itemStack.getItemMeta()); + + itemMeta.setCustomModelData(Integer.parseInt(item.getTextContent())); + itemStack.setItemMeta(itemMeta); } else if (nodeName.equals("skull") && itemStack.getItemMeta() instanceof SkullMeta) { SkullMeta skullMeta = (SkullMeta) itemStack.getItemMeta(); From f197761f0afe2565519ebc30761ed9cec527fe1d Mon Sep 17 00:00:00 2001 From: jdkeke142 Date: Fri, 3 Jun 2022 07:07:04 +0200 Subject: [PATCH 12/14] Fixed a typo with dirty rows --- .../stefvanschie/inventoryframework/gui/type/ChestGui.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IF/src/main/java/com/github/stefvanschie/inventoryframework/gui/type/ChestGui.java b/IF/src/main/java/com/github/stefvanschie/inventoryframework/gui/type/ChestGui.java index fd2c46bc..33ba4c60 100644 --- a/IF/src/main/java/com/github/stefvanschie/inventoryframework/gui/type/ChestGui.java +++ b/IF/src/main/java/com/github/stefvanschie/inventoryframework/gui/type/ChestGui.java @@ -81,7 +81,7 @@ public ChestGui(int rows, @NotNull TextHolder title) { public void show(@NotNull HumanEntity humanEntity) { if (isDirty() || dirtyRows) { this.inventory = createInventory(); - this.dirtyRows = true; + this.dirtyRows = false; markChanges(); } From 1112dc4340a3981b98b86d2b7385f251ba0b79ee Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Mon, 13 Jun 2022 19:53:01 +0200 Subject: [PATCH 13/14] Add 1.19 support --- .github/workflows/maven.yml | 1 + IF/pom.xml | 6 + .../util/version/Version.java | 11 +- .../util/version/VersionMatcher.java | 16 ++ nms/1_19/pom.xml | 58 ++++ .../nms/v1_19/AnvilInventoryImpl.java | 266 ++++++++++++++++++ .../nms/v1_19/BeaconInventoryImpl.java | 199 +++++++++++++ .../v1_19/CartographyTableInventoryImpl.java | 213 ++++++++++++++ .../v1_19/EnchantingTableInventoryImpl.java | 213 ++++++++++++++ .../nms/v1_19/GrindstoneInventoryImpl.java | 247 ++++++++++++++++ .../nms/v1_19/MerchantInventoryImpl.java | 97 +++++++ .../nms/v1_19/SmithingTableInventoryImpl.java | 251 +++++++++++++++++ .../nms/v1_19/StonecutterInventoryImpl.java | 219 ++++++++++++++ .../nms/v1_19/util/CustomInventoryUtil.java | 41 +++ .../nms/v1_19/util/TextHolderUtil.java | 65 +++++ pom.xml | 1 + 16 files changed, 1903 insertions(+), 1 deletion(-) create mode 100644 nms/1_19/pom.xml create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/AnvilInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/BeaconInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/CartographyTableInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/EnchantingTableInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/GrindstoneInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/MerchantInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/SmithingTableInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/StonecutterInventoryImpl.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/CustomInventoryUtil.java create mode 100644 nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/TextHolderUtil.java diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 21006883..fe964532 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -71,5 +71,6 @@ jobs: mvn paper-nms:init -pl nms/1_18_0 mvn paper-nms:init -pl nms/1_18_1 mvn paper-nms:init -pl nms/1_18_2 + mvn paper-nms:init -pl nms/1_19 - name: Build with Maven run: mvn -B package --file pom.xml diff --git a/IF/pom.xml b/IF/pom.xml index 6da0262c..72bdbf77 100644 --- a/IF/pom.xml +++ b/IF/pom.xml @@ -100,6 +100,12 @@ ${project.version} compile + + com.github.stefvanschie.inventoryframework + 1_19 + ${project.version} + compile + org.spigotmc spigot-api diff --git a/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/Version.java b/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/Version.java index cd71bd4a..a3bf3087 100644 --- a/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/Version.java +++ b/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/Version.java @@ -80,7 +80,14 @@ public enum Version { * * @since 0.10.5 */ - V1_18_2; + V1_18_2, + + /** + * Version 1.19 + * + * @since 0.10.6 + */ + V1_19; /** * Gets the version currently being used. If the used version is not supported, an @@ -123,6 +130,8 @@ public static Version getVersion() { return V1_18_1; case "1.18.2": return V1_18_2; + case "1.19": + return V1_19; default: throw new UnsupportedVersionException("The server version provided is not supported"); } diff --git a/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/VersionMatcher.java b/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/VersionMatcher.java index c9830865..debac58c 100644 --- a/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/VersionMatcher.java +++ b/IF/src/main/java/com/github/stefvanschie/inventoryframework/util/version/VersionMatcher.java @@ -252,6 +252,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.AnvilInventoryImpl.class); ANVIL_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.AnvilInventoryImpl.class); + ANVIL_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.AnvilInventoryImpl.class); BEACON_INVENTORIES = new EnumMap<>(Version.class); BEACON_INVENTORIES.put(Version.V1_14, @@ -274,6 +276,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.BeaconInventoryImpl.class); BEACON_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.BeaconInventoryImpl.class); + BEACON_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.BeaconInventoryImpl.class); CARTOGRAPHY_TABLE_INVENTORIES = new EnumMap<>(Version.class); CARTOGRAPHY_TABLE_INVENTORIES.put(Version.V1_14, @@ -296,6 +300,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.CartographyTableInventoryImpl.class); CARTOGRAPHY_TABLE_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.CartographyTableInventoryImpl.class); + CARTOGRAPHY_TABLE_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.CartographyTableInventoryImpl.class); ENCHANTING_TABLE_INVENTORIES = new EnumMap<>(Version.class); ENCHANTING_TABLE_INVENTORIES.put(Version.V1_14, @@ -318,6 +324,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.EnchantingTableInventoryImpl.class); ENCHANTING_TABLE_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.EnchantingTableInventoryImpl.class); + ENCHANTING_TABLE_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.EnchantingTableInventoryImpl.class); GRINDSTONE_INVENTORIES = new EnumMap<>(Version.class); GRINDSTONE_INVENTORIES.put(Version.V1_14, @@ -340,6 +348,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.GrindstoneInventoryImpl.class); GRINDSTONE_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.GrindstoneInventoryImpl.class); + GRINDSTONE_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.GrindstoneInventoryImpl.class); MERCHANT_INVENTORIES = new EnumMap<>(Version.class); MERCHANT_INVENTORIES.put(Version.V1_14, @@ -362,6 +372,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.MerchantInventoryImpl.class); MERCHANT_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.MerchantInventoryImpl.class); + MERCHANT_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.MerchantInventoryImpl.class); SMITHING_TABLE_INVENTORIES = new EnumMap<>(Version.class); SMITHING_TABLE_INVENTORIES.put(Version.V1_16_1, @@ -380,6 +392,8 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.SmithingTableInventoryImpl.class); SMITHING_TABLE_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.SmithingTableInventoryImpl.class); + SMITHING_TABLE_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.SmithingTableInventoryImpl.class); STONECUTTER_INVENTORIES = new EnumMap<>(Version.class); STONECUTTER_INVENTORIES.put(Version.V1_14, @@ -402,5 +416,7 @@ public static StonecutterInventory newStonecutterInventory(@NotNull Version vers com.github.stefvanschie.inventoryframework.nms.v1_18_1.StonecutterInventoryImpl.class); STONECUTTER_INVENTORIES.put(Version.V1_18_2, com.github.stefvanschie.inventoryframework.nms.v1_18_2.StonecutterInventoryImpl.class); + STONECUTTER_INVENTORIES.put(Version.V1_19, + com.github.stefvanschie.inventoryframework.nms.v1_19.StonecutterInventoryImpl.class); } } diff --git a/nms/1_19/pom.xml b/nms/1_19/pom.xml new file mode 100644 index 00000000..24912d23 --- /dev/null +++ b/nms/1_19/pom.xml @@ -0,0 +1,58 @@ + + + + IF-parent + com.github.stefvanschie.inventoryframework + 0.10.5 + ../../pom.xml + + 4.0.0 + + 1_19 + + + true + + + + + com.github.stefvanschie.inventoryframework + abstraction + ${project.version} + compile + + + ca.bkaw + paper-nms + 1.19-SNAPSHOT + provided + + + + + + + ca.bkaw + paper-nms-maven-plugin + 1.2.1 + + + process-classes + + remap + + + + + + + + + + bytecode.space + https://repo.bytecode.space/repository/maven-public/ + + + \ No newline at end of file diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/AnvilInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/AnvilInventoryImpl.java new file mode 100644 index 00000000..545d5512 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/AnvilInventoryImpl.java @@ -0,0 +1,266 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.AnvilInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.CustomInventoryUtil; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.AnvilMenu; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.Location; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryAnvil; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Internal anvil inventory for 1.19 + * + * @since 0.10.6 + */ +public class AnvilInventoryImpl extends AnvilInventory { + + public AnvilInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 3) { + throw new IllegalArgumentException( + "The amount of items for an anvil should be 3, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerAnvilImpl containerAnvil = new ContainerAnvilImpl(serverPlayer, items); + + serverPlayer.containerMenu = containerAnvil; + + int id = containerAnvil.containerId; + Component message = TextHolderUtil.toComponent(title); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.ANVIL, message)); + + sendItems(player, items); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items) { + NonNullList nmsItems = CustomInventoryUtil.convertToNMSItems(items); + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack cursor = CraftItemStack.asNMSCopy(player.getItemOnCursor()); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, cursor)); + } + + @Override + public void sendFirstItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 0, nmsItem)); + } + + @Override + public void sendSecondItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 1, nmsItem)); + } + + @Override + public void sendResultItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + sendResultItem(player, CraftItemStack.asNMSCopy(item)); + } + + @Override + public void clearResultItem(@NotNull Player player) { + sendResultItem(player, ItemStack.EMPTY); + } + + @Override + public void setCursor(@NotNull Player player, @NotNull org.bukkit.inventory.ItemStack item) { + setCursor(player, CraftItemStack.asNMSCopy(item)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Sets the cursor of the given player + * + * @param player the player to set the cursor + * @param item the item to set the cursor to + * @since 0.10.6 + */ + private void setCursor(@NotNull Player player, @NotNull ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, item)); + } + + /** + * Sends the result item to the specified player with the given item + * + * @param player the player to send the result item to + * @param item the result item + * @since 0.10.6 + */ + private void sendResultItem(@NotNull Player player, @NotNull ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 2, item)); + } + + /** + * Gets the container id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the container id for + * @return the container id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container anvil for responding to item renaming + * + * @since 0.10.6 + */ + private class ContainerAnvilImpl extends AnvilMenu { + + /** + * The player for whom this anvil container is + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container anvil + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Creates a new custom anvil container for the specified player + * + * @param serverPlayer the player for who this anvil container is + * @since 0.10.6 + */ + public ContainerAnvilImpl(@NotNull ServerPlayer serverPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory(), + ContainerLevelAccess.create(serverPlayer.getCommandSenderWorld(), new BlockPos(0, 0, 0))); + + this.player = serverPlayer.getBukkitEntity(); + + inputSlots.setItem(0, CraftItemStack.asNMSCopy(items[0])); + inputSlots.setItem(1, CraftItemStack.asNMSCopy(items[1])); + resultSlots.setItem(0, CraftItemStack.asNMSCopy(items[2])); + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + Location location = access.getLocation(); + CraftInventory inventory = new CraftInventoryAnvil(location, inputSlots, resultSlots, + this) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } + + return bukkitEntity; + } + + @Override + public void setItemName(@Nullable String name) { + text = name == null ? "" : name; + + sendResultItem(player, resultSlots.getItem(0)); + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/BeaconInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/BeaconInventoryImpl.java new file mode 100644 index 00000000..793e7917 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/BeaconInventoryImpl.java @@ -0,0 +1,199 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.BeaconInventory; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.BeaconMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryBeacon; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; + +/** + * Internal beacon inventory for 1.19 + * + * @since 0.10.6 + */ +public class BeaconInventoryImpl extends BeaconInventory { + + public BeaconInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerBeaconImpl containerBeacon = new ContainerBeaconImpl(serverPlayer, item); + + serverPlayer.containerMenu = containerBeacon; + + int id = containerBeacon.containerId; + Component beacon = Component.literal("Beacon"); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.BEACON, beacon)); + + sendItem(player, item); + } + + @Override + public void sendItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + NonNullList items = NonNullList.of( + ItemStack.EMPTY, //the first item doesn't count for some reason, so send a dummy item + CraftItemStack.asNMSCopy(item) + ); + + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack cursor = CraftItemStack.asNMSCopy(player.getItemOnCursor()); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, items, cursor)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Gets the container id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the container id for + * @return the container id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container beacon + * + * @since 0.10.6 + */ + private class ContainerBeaconImpl extends BeaconMenu { + + /** + * The player for this beacon container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container beacon + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Field for accessing the beacon field + */ + @NotNull + private final Field beaconField; + + public ContainerBeaconImpl(@NotNull ServerPlayer serverPlayer, @Nullable org.bukkit.inventory.ItemStack item) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory()); + + this.player = serverPlayer.getBukkitEntity(); + + try { + //noinspection JavaReflectionMemberAccess + this.beaconField = BeaconMenu.class.getDeclaredField("r"); //beacon + this.beaconField.setAccessible(true); + } catch (NoSuchFieldException exception) { + throw new RuntimeException(exception); + } + + try { + ItemStack itemStack = CraftItemStack.asNMSCopy(item); + + ((Container) beaconField.get(this)).setItem(0, itemStack); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + try { + CraftInventory inventory = new CraftInventoryBeacon((Container) beaconField.get(this)) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/CartographyTableInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/CartographyTableInventoryImpl.java new file mode 100644 index 00000000..fef036b0 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/CartographyTableInventoryImpl.java @@ -0,0 +1,213 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.CartographyTableInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.CustomInventoryUtil; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.CartographyTableMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryCartography; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; + +/** + * Internal cartography table inventory for 1.19 + * + * @since 0.10.6 + */ +public class CartographyTableInventoryImpl extends CartographyTableInventory { + + public CartographyTableInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 3) { + throw new IllegalArgumentException( + "The amount of items for a cartography table should be 3, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerCartographyTableImpl containerCartographyTable = new ContainerCartographyTableImpl( + serverPlayer, items + ); + + serverPlayer.containerMenu = containerCartographyTable; + + int id = containerCartographyTable.containerId; + Component message = TextHolderUtil.toComponent(title); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.CARTOGRAPHY_TABLE, message)); + + sendItems(player, items); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items) { + NonNullList nmsItems = CustomInventoryUtil.convertToNMSItems(items); + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack cursor = CraftItemStack.asNMSCopy(player.getItemOnCursor()); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, cursor)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Gets the container id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the container id for + * @return the container id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container cartography table + * + * @since 0.10.6 + */ + private class ContainerCartographyTableImpl extends CartographyTableMenu { + + /** + * The player for this cartography table container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container cartography table + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Field for accessing the result inventory field + */ + @NotNull + private final Field resultContainerField; + + public ContainerCartographyTableImpl(@NotNull ServerPlayer serverPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory()); + + this.player = serverPlayer.getBukkitEntity(); + + try { + //noinspection JavaReflectionMemberAccess + this.resultContainerField = CartographyTableMenu.class.getDeclaredField("u"); //resultContainer + this.resultContainerField.setAccessible(true); + } catch (NoSuchFieldException exception) { + throw new RuntimeException(exception); + } + + container.setItem(0, CraftItemStack.asNMSCopy(items[0])); + container.setItem(1, CraftItemStack.asNMSCopy(items[1])); + + getResultInventory().setItem(0, CraftItemStack.asNMSCopy(items[2])); + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + CraftInventory inventory = new CraftInventoryCartography(super.container, getResultInventory()) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + + @NotNull + @Contract(pure = true) + private Container getResultInventory() { + try { + return (Container) resultContainerField.get(this); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/EnchantingTableInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/EnchantingTableInventoryImpl.java new file mode 100644 index 00000000..25b50c11 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/EnchantingTableInventoryImpl.java @@ -0,0 +1,213 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.EnchantingTableInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.EnchantmentMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryEnchanting; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; + +/** + * Internal enchanting table inventory for 1.19 + * + * @since 0.10.6 + */ +public class EnchantingTableInventoryImpl extends EnchantingTableInventory { + + public EnchantingTableInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 2) { + throw new IllegalArgumentException( + "The amount of items for an enchanting table should be 2, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerEnchantingTableImpl containerEnchantmentTable = new ContainerEnchantingTableImpl(serverPlayer, items); + + serverPlayer.containerMenu = containerEnchantmentTable; + + int id = containerEnchantmentTable.containerId; + Component message = TextHolderUtil.toComponent(title); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.ENCHANTMENT, message)); + + sendItems(player, items); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items) { + NonNullList nmsItems = NonNullList.of( + ItemStack.EMPTY, + CraftItemStack.asNMSCopy(items[0]), + CraftItemStack.asNMSCopy(items[1]) + ); + + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack cursor = CraftItemStack.asNMSCopy(player.getItemOnCursor()); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, cursor)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Gets the containerId id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the containerId id for + * @return the containerId id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container enchanting table + * + * @since 0.10.6 + */ + private class ContainerEnchantingTableImpl extends EnchantmentMenu { + + /** + * The player for this enchanting table container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container enchanting table + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Field for accessing the enchant slots field + */ + @NotNull + private final Field enchantSlotsField; + + public ContainerEnchantingTableImpl(@NotNull ServerPlayer serverPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory()); + + this.player = serverPlayer.getBukkitEntity(); + + try { + //noinspection JavaReflectionMemberAccess + this.enchantSlotsField = EnchantmentMenu.class.getDeclaredField("n"); //enchantSlots + this.enchantSlotsField.setAccessible(true); + } catch (NoSuchFieldException exception) { + throw new RuntimeException(exception); + } + + try { + Container input = (Container) enchantSlotsField.get(this); + + input.setItem(0, CraftItemStack.asNMSCopy(items[0])); + input.setItem(1, CraftItemStack.asNMSCopy(items[1])); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + try { + CraftInventory inventory = new CraftInventoryEnchanting((Container) enchantSlotsField.get(this)) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } catch (IllegalAccessException exception) { + exception.printStackTrace(); + } + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/GrindstoneInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/GrindstoneInventoryImpl.java new file mode 100644 index 00000000..933d50c5 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/GrindstoneInventoryImpl.java @@ -0,0 +1,247 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.GrindstoneInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.CustomInventoryUtil; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.GrindstoneMenu; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryGrindstone; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; + +/** + * Internal grindstone inventory for 1.19 + * + * @since 0.10.6 + */ +public class GrindstoneInventoryImpl extends GrindstoneInventory { + + public GrindstoneInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 3) { + throw new IllegalArgumentException( + "The amount of items for a grindstone should be 3, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerGrindstoneImpl containerGrindstone = new ContainerGrindstoneImpl(serverPlayer, items); + + serverPlayer.containerMenu = containerGrindstone; + + int id = containerGrindstone.containerId; + Component message = TextHolderUtil.toComponent(title); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.GRINDSTONE, message)); + + sendItems(player, items, player.getItemOnCursor()); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items, + @Nullable org.bukkit.inventory.ItemStack cursor) { + if (cursor == null) { + throw new IllegalArgumentException("Cursor may not be null on version 1.17.1"); + } + + NonNullList nmsItems = CustomInventoryUtil.convertToNMSItems(items); + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack nmsCursor = CraftItemStack.asNMSCopy(cursor); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, nmsCursor)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Gets the containerId id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the containerId id for + * @return the containerId id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container grindstone + * + * @since 0.10.6 + */ + private class ContainerGrindstoneImpl extends GrindstoneMenu { + + /** + * The player for this grindstone container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container grindstone + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Field for accessing the craft inventory field + */ + @NotNull + private final Field repairSlotsField; + + /** + * Field for accessing the result inventory field + */ + @NotNull + private final Field resultSlotsField; + + public ContainerGrindstoneImpl(@NotNull ServerPlayer serverPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory()); + + this.player = serverPlayer.getBukkitEntity(); + + try { + //noinspection JavaReflectionMemberAccess + this.repairSlotsField = GrindstoneMenu.class.getDeclaredField("t"); //repairSlots + this.repairSlotsField.setAccessible(true); + + //noinspection JavaReflectionMemberAccess + this.resultSlotsField = GrindstoneMenu.class.getDeclaredField("s"); //resultSlots + this.resultSlotsField.setAccessible(true); + } catch (NoSuchFieldException exception) { + throw new RuntimeException(exception); + } + + getCraftInventory().setItem(0, CraftItemStack.asNMSCopy(items[0])); + getCraftInventory().setItem(1, CraftItemStack.asNMSCopy(items[1])); + + getResultInventory().setItem(2, CraftItemStack.asNMSCopy(items[2])); + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + CraftInventory inventory = new CraftInventoryGrindstone(getCraftInventory(), getResultInventory()) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + + /** + * Gets the craft inventory + * + * @return the craft inventory + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private Container getCraftInventory() { + try { + return (Container) repairSlotsField.get(this); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + + /** + * Gets the result inventory + * + * @return the result inventory + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private Container getResultInventory() { + try { + return (Container) resultSlotsField.get(this); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/MerchantInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/MerchantInventoryImpl.java new file mode 100644 index 00000000..d93a58a3 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/MerchantInventoryImpl.java @@ -0,0 +1,97 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.MerchantInventory; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.trading.MerchantOffer; +import net.minecraft.world.item.trading.MerchantOffers; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MerchantRecipe; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.Map; + +/** + * Internal merchant inventory for 1.19 + * + * @since 0.10.6 + */ +public class MerchantInventoryImpl extends MerchantInventory { + + @Override + public void sendMerchantOffers(@NotNull Player player, + @NotNull List> trades, + int level, int experience) { + MerchantOffers offers = new MerchantOffers(); + + for (Map.Entry entry : trades) { + MerchantRecipe recipe = entry.getKey(); + List ingredients = recipe.getIngredients(); + + if (ingredients.size() < 1) { + throw new IllegalStateException("Merchant recipe has no ingredients"); + } + + ItemStack itemA = ingredients.get(0); + ItemStack itemB = null; + + if (ingredients.size() >= 2) { + itemB = ingredients.get(1); + } + + net.minecraft.world.item.ItemStack nmsItemA = CraftItemStack.asNMSCopy(itemA); + net.minecraft.world.item.ItemStack nmsItemB = net.minecraft.world.item.ItemStack.EMPTY; + net.minecraft.world.item.ItemStack nmsItemResult = CraftItemStack.asNMSCopy(recipe.getResult()); + + if (itemB != null) { + nmsItemB = CraftItemStack.asNMSCopy(itemB); + } + + int uses = recipe.getUses(); + int maxUses = recipe.getMaxUses(); + int exp = recipe.getVillagerExperience(); + float multiplier = recipe.getPriceMultiplier(); + + MerchantOffer merchantOffer = new MerchantOffer( + nmsItemA, nmsItemB, nmsItemResult, uses, maxUses, exp, multiplier + ); + merchantOffer.setSpecialPriceDiff(entry.getValue()); + + offers.add(merchantOffer); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + + serverPlayer.sendMerchantOffers(containerId, offers, level, experience, true, false); + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * Gets the containerId id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the containerId id for + * @return the containerId id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/SmithingTableInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/SmithingTableInventoryImpl.java new file mode 100644 index 00000000..c317dae8 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/SmithingTableInventoryImpl.java @@ -0,0 +1,251 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.SmithingTableInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.CustomInventoryUtil; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.BlockPos; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.SmithingMenu; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventorySmithing; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Internal smithing table inventory for 1.19 + * + * @since 0.10.6 + */ +public class SmithingTableInventoryImpl extends SmithingTableInventory { + + public SmithingTableInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 3) { + throw new IllegalArgumentException( + "The amount of items for a smithing table should be 3, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerSmithingTableImpl containerSmithingTable = new ContainerSmithingTableImpl(serverPlayer, items); + + serverPlayer.containerMenu = containerSmithingTable; + + int id = containerSmithingTable.containerId; + Component message = TextHolderUtil.toComponent(title); + + serverPlayer.connection.send(new ClientboundOpenScreenPacket(id, MenuType.SMITHING, message)); + + sendItems(player, items, player.getItemOnCursor()); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items, + @Nullable org.bukkit.inventory.ItemStack cursor) { + NonNullList nmsItems = CustomInventoryUtil.convertToNMSItems(items); + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack nmsCursor = CraftItemStack.asNMSCopy(cursor); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, nmsCursor)); + } + + @Override + public void sendFirstItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 0, nmsItem)); + } + + @Override + public void sendSecondItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + ItemStack nmsItem = CraftItemStack.asNMSCopy(item); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 1, nmsItem)); + } + + @Override + public void sendResultItem(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack item) { + sendResultItem(player, CraftItemStack.asNMSCopy(item)); + } + + @Override + public void clearResultItem(@NotNull Player player) { + sendResultItem(player, ItemStack.EMPTY); + } + + @Override + public void setCursor(@NotNull Player player, @NotNull org.bukkit.inventory.ItemStack item) { + setCursor(player, CraftItemStack.asNMSCopy(item)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Sets the cursor of the given player + * + * @param player the player to set the cursor + * @param item the item to set the cursor to + * @since 0.10.6 + */ + private void setCursor(@NotNull Player player, @NotNull ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, item)); + } + + /** + * Sends the result item to the specified player with the given item + * + * @param player the player to send the result item to + * @param item the result item + * @since 0.10.6 + */ + private void sendResultItem(@NotNull Player player, @NotNull ItemStack item) { + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(containerId, state, 2, item)); + } + + /** + * Gets the container id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the container id for + * @return the container id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container smithing table + * + * @since 0.10.6 + */ + private class ContainerSmithingTableImpl extends SmithingMenu { + + /** + * The player for this smithing table container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container smithing table + */ + @Nullable + private CraftInventoryView bukkitEntity; + + public ContainerSmithingTableImpl(@NotNull ServerPlayer serverPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(serverPlayer.nextContainerCounter(), serverPlayer.getInventory(), + ContainerLevelAccess.create(serverPlayer.getCommandSenderWorld(), new BlockPos(0, 0, 0))); + + this.player = serverPlayer.getBukkitEntity(); + + inputSlots.setItem(0, CraftItemStack.asNMSCopy(items[0])); + inputSlots.setItem(1, CraftItemStack.asNMSCopy(items[1])); + resultSlots.setItem(0, CraftItemStack.asNMSCopy(items[2])); + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + CraftInventory inventory = new CraftInventorySmithing(access.getLocation(), inputSlots, resultSlots) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/StonecutterInventoryImpl.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/StonecutterInventoryImpl.java new file mode 100644 index 00000000..eafd1cbb --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/StonecutterInventoryImpl.java @@ -0,0 +1,219 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19; + +import com.github.stefvanschie.inventoryframework.abstraction.StonecutterInventory; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import com.github.stefvanschie.inventoryframework.nms.v1_19.util.TextHolderUtil; +import net.minecraft.core.NonNullList; +import net.minecraft.network.chat.Component; +import net.minecraft.network.protocol.game.ClientboundContainerSetContentPacket; +import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket; +import net.minecraft.network.protocol.game.ClientboundOpenScreenPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.server.network.ServerPlayerConnection; +import net.minecraft.world.Container; +import net.minecraft.world.inventory.MenuType; +import net.minecraft.world.inventory.StonecutterMenu; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventory; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryStonecutter; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftInventoryView; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.lang.reflect.Field; + +/** + * Internal stonecutter inventory for 1.19 + * + * @since 0.10.6 + */ +public class StonecutterInventoryImpl extends StonecutterInventory { + + public StonecutterInventoryImpl(@NotNull InventoryHolder inventoryHolder) { + super(inventoryHolder); + } + + @Override + public void openInventory(@NotNull Player player, @NotNull TextHolder title, + @Nullable org.bukkit.inventory.ItemStack[] items) { + int itemAmount = items.length; + + if (itemAmount != 2) { + throw new IllegalArgumentException( + "The amount of items for a stonecutter should be 2, but is '" + itemAmount + "'" + ); + } + + ServerPlayer serverPlayer = getServerPlayer(player); + ContainerStonecutterImpl containerEnchantmentTable = new ContainerStonecutterImpl(serverPlayer, items); + + serverPlayer.containerMenu = containerEnchantmentTable; + + int id = containerEnchantmentTable.containerId; + Component message = TextHolderUtil.toComponent(title); + ClientboundOpenScreenPacket packet = new ClientboundOpenScreenPacket(id, MenuType.STONECUTTER, message); + + serverPlayer.connection.send(packet); + + sendItems(player, items); + } + + @Override + public void sendItems(@NotNull Player player, @Nullable org.bukkit.inventory.ItemStack[] items) { + NonNullList nmsItems = NonNullList.of( + ItemStack.EMPTY, + CraftItemStack.asNMSCopy(items[0]), + CraftItemStack.asNMSCopy(items[1]) + ); + + ServerPlayer serverPlayer = getServerPlayer(player); + int containerId = getContainerId(serverPlayer); + int state = serverPlayer.containerMenu.incrementStateId(); + ItemStack cursor = CraftItemStack.asNMSCopy(player.getItemOnCursor()); + ServerPlayerConnection playerConnection = getPlayerConnection(serverPlayer); + + playerConnection.send(new ClientboundContainerSetContentPacket(containerId, state, nmsItems, cursor)); + } + + @Override + public void clearCursor(@NotNull Player player) { + ServerPlayer serverPlayer = getServerPlayer(player); + int state = serverPlayer.containerMenu.incrementStateId(); + + getPlayerConnection(serverPlayer).send(new ClientboundContainerSetSlotPacket(-1, state, -1, ItemStack.EMPTY)); + } + + /** + * Gets the container id for the inventory view the player currently has open + * + * @param nmsPlayer the player to get the container id for + * @return the container id + * @since 0.10.6 + */ + @Contract(pure = true) + private int getContainerId(@NotNull net.minecraft.world.entity.player.Player nmsPlayer) { + return nmsPlayer.containerMenu.containerId; + } + + /** + * Gets the player connection for the specified player + * + * @param serverPlayer the player to get the player connection from + * @return the player connection + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayerConnection getPlayerConnection(@NotNull ServerPlayer serverPlayer) { + return serverPlayer.connection; + } + + /** + * Gets the server player associated to this player + * + * @param player the player to get the server player from + * @return the server player + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private ServerPlayer getServerPlayer(@NotNull Player player) { + return ((CraftPlayer) player).getHandle(); + } + + /** + * A custom container enchanting table + * + * @since 0.10.6 + */ + private class ContainerStonecutterImpl extends StonecutterMenu { + + /** + * The player for this enchanting table container + */ + @NotNull + private final Player player; + + /** + * The internal bukkit entity for this container enchanting table + */ + @Nullable + private CraftInventoryView bukkitEntity; + + /** + * Field for accessing the result inventory field + */ + @NotNull + private final Field resultContainerField; + + public ContainerStonecutterImpl(@NotNull ServerPlayer entityPlayer, + @Nullable org.bukkit.inventory.ItemStack[] items) { + super(entityPlayer.nextContainerCounter(), entityPlayer.getInventory()); + + this.player = entityPlayer.getBukkitEntity(); + + try { + //noinspection JavaReflectionMemberAccess + this.resultContainerField = StonecutterMenu.class.getDeclaredField("A"); //resultContainer + this.resultContainerField.setAccessible(true); + } catch (NoSuchFieldException exception) { + throw new RuntimeException(exception); + } + + container.setItem(0, CraftItemStack.asNMSCopy(items[0])); + getResultInventory().setItem(0, CraftItemStack.asNMSCopy(items[1])); + } + + @NotNull + @Override + public CraftInventoryView getBukkitView() { + if (bukkitEntity == null) { + CraftInventory inventory = new CraftInventoryStonecutter(this.container, getResultInventory()) { + @NotNull + @Contract(pure = true) + @Override + public InventoryHolder getHolder() { + return inventoryHolder; + } + }; + + bukkitEntity = new CraftInventoryView(player, inventory, this); + } + + return bukkitEntity; + } + + @Contract(pure = true, value = "_ -> true") + @Override + public boolean stillValid(@Nullable net.minecraft.world.entity.player.Player nmsPlayer) { + return true; + } + + @Override + public void slotsChanged(Container container) {} + + @Override + public void removed(net.minecraft.world.entity.player.Player nmsPlayer) {} + + /** + * Gets the result inventory + * + * @return the result inventory + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + public Container getResultInventory() { + try { + return (Container) resultContainerField.get(this); + } catch (IllegalAccessException exception) { + throw new RuntimeException(exception); + } + } + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/CustomInventoryUtil.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/CustomInventoryUtil.java new file mode 100644 index 00000000..30d58cdd --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/CustomInventoryUtil.java @@ -0,0 +1,41 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19.util; + +import net.minecraft.core.NonNullList; +import net.minecraft.world.item.ItemStack; +import org.bukkit.craftbukkit.v1_19_R1.inventory.CraftItemStack; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * A utility class for custom inventories + * + * @since 0.10.6 + */ +public final class CustomInventoryUtil { + + /** + * A private constructor to prevent construction. + */ + private CustomInventoryUtil() {} + + /** + * Converts an array of Bukkit items into a non null list of NMS items. The returned list is modifiable. If no items + * were specified, this returns an empty list. + * + * @param items the items to convert + * @return a list of converted items + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + public static NonNullList convertToNMSItems(@Nullable org.bukkit.inventory.ItemStack @NotNull [] items) { + NonNullList nmsItems = NonNullList.create(); + + for (org.bukkit.inventory.ItemStack item : items) { + nmsItems.add(CraftItemStack.asNMSCopy(item)); + } + + return nmsItems; + } +} diff --git a/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/TextHolderUtil.java b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/TextHolderUtil.java new file mode 100644 index 00000000..c3df6407 --- /dev/null +++ b/nms/1_19/src/main/java/com/github/stefvanschie/inventoryframework/nms/v1_19/util/TextHolderUtil.java @@ -0,0 +1,65 @@ +package com.github.stefvanschie.inventoryframework.nms.v1_19.util; + +import com.github.stefvanschie.inventoryframework.adventuresupport.ComponentHolder; +import com.github.stefvanschie.inventoryframework.adventuresupport.StringHolder; +import com.github.stefvanschie.inventoryframework.adventuresupport.TextHolder; +import net.minecraft.network.chat.Component; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import java.util.Objects; + +/** + * A utility class for adding {@link TextHolder} support. + * + * @since 0.10.6 + */ +public final class TextHolderUtil { + + private TextHolderUtil() { + //private constructor to prevent construction + } + + /** + * Converts the specified value to a vanilla component. + * + * @param holder the value to convert + * @return the value as a vanilla component + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + public static Component toComponent(@NotNull TextHolder holder) { + if (holder instanceof StringHolder) { + return toComponent((StringHolder) holder); + } else { + return toComponent((ComponentHolder) holder); + } + } + + /** + * Converts the specified legacy string holder to a vanilla component. + * + * @param holder the value to convert + * @return the value as a vanilla component + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private static Component toComponent(@NotNull StringHolder holder) { + return Component.literal(holder.asLegacyString()); + } + + /** + * Converts the specified Adventure component holder to a vanilla component. + * + * @param holder the value to convert + * @return the value as a vanilla component + * @since 0.10.6 + */ + @NotNull + @Contract(pure = true) + private static Component toComponent(@NotNull ComponentHolder holder) { + return Objects.requireNonNull(Component.Serializer.fromJson(holder.asJson())); + } +} diff --git a/pom.xml b/pom.xml index 25bd9b2c..98a7a245 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ IF nms/abstraction + nms/1_19 nms/1_18_2 nms/1_18_1 nms/1_18_0 From 8d70a9669177c0ba249da4823fecc9b0d6944fc9 Mon Sep 17 00:00:00 2001 From: stefvanschie Date: Mon, 13 Jun 2022 20:13:31 +0200 Subject: [PATCH 14/14] Version 0.10.6 --- IF/pom.xml | 2 +- README.md | 7 ++++--- adventure-support/pom.xml | 2 +- nms/1_14/pom.xml | 2 +- nms/1_15/pom.xml | 2 +- nms/1_16_1/pom.xml | 2 +- nms/1_16_2-3/pom.xml | 2 +- nms/1_16_4-5/pom.xml | 2 +- nms/1_17_0/pom.xml | 2 +- nms/1_17_1/pom.xml | 2 +- nms/1_18_0/pom.xml | 2 +- nms/1_18_1/pom.xml | 2 +- nms/1_18_2/pom.xml | 2 +- nms/1_19/pom.xml | 2 +- nms/abstraction/pom.xml | 2 +- pom.xml | 2 +- 16 files changed, 19 insertions(+), 18 deletions(-) diff --git a/IF/pom.xml b/IF/pom.xml index 72bdbf77..83cac916 100644 --- a/IF/pom.xml +++ b/IF/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 4.0.0 diff --git a/README.md b/README.md index 75fa081f..d27a92dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # IF Discord guild -*This framework works for Minecraft versions 1.14-1.18* +*This framework works for Minecraft versions 1.14-1.19* An inventory framework for managing GUIs @@ -14,7 +14,7 @@ To add this project as a dependency to your pom.xml, add the following to your p com.github.stefvanschie.inventoryframework IF - 0.10.5 + 0.10.6 ``` The project is in the Central Repository, so specifying a repository is not needed. @@ -50,7 +50,7 @@ Replace [YOUR PACKAGE] with the top-level package of your project. To add this project as a dependency for your Gradle project, make sure your `dependencies` section of your build.gradle looks like the following: ```Groovy dependencies { - compile 'com.github.stefvanschie.inventoryframework:IF:0.10.5' + compile 'com.github.stefvanschie.inventoryframework:IF:0.10.6' // ... } ``` @@ -128,6 +128,7 @@ mvn paper-nms:init -pl nms/1_17_1 mvn paper-nms:init -pl nms/1_18_0 mvn paper-nms:init -pl nms/1_18_1 mvn paper-nms:init -pl nms/1_18_2 +mvn paper-nms:init -pl nms/1_19 ``` Your environment is now set up correctly. To create a build, run the following inside the root folder of the project. diff --git a/adventure-support/pom.xml b/adventure-support/pom.xml index 89cf9fa4..a5521d71 100644 --- a/adventure-support/pom.xml +++ b/adventure-support/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 4.0.0 diff --git a/nms/1_14/pom.xml b/nms/1_14/pom.xml index 33cffb51..ea9d4cb3 100644 --- a/nms/1_14/pom.xml +++ b/nms/1_14/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_15/pom.xml b/nms/1_15/pom.xml index f7f50b56..5d318207 100644 --- a/nms/1_15/pom.xml +++ b/nms/1_15/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_16_1/pom.xml b/nms/1_16_1/pom.xml index 6b3aba55..21ad9a5f 100644 --- a/nms/1_16_1/pom.xml +++ b/nms/1_16_1/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_16_2-3/pom.xml b/nms/1_16_2-3/pom.xml index 9779b9b4..383f3dfe 100644 --- a/nms/1_16_2-3/pom.xml +++ b/nms/1_16_2-3/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_16_4-5/pom.xml b/nms/1_16_4-5/pom.xml index a4c442fa..90265ab9 100644 --- a/nms/1_16_4-5/pom.xml +++ b/nms/1_16_4-5/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_17_0/pom.xml b/nms/1_17_0/pom.xml index 99be8eda..f51760b4 100644 --- a/nms/1_17_0/pom.xml +++ b/nms/1_17_0/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_17_1/pom.xml b/nms/1_17_1/pom.xml index 8e14cc36..3a02e871 100644 --- a/nms/1_17_1/pom.xml +++ b/nms/1_17_1/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_18_0/pom.xml b/nms/1_18_0/pom.xml index ee140c16..f48b74b9 100644 --- a/nms/1_18_0/pom.xml +++ b/nms/1_18_0/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_18_1/pom.xml b/nms/1_18_1/pom.xml index c4c9fb64..5bd4d221 100644 --- a/nms/1_18_1/pom.xml +++ b/nms/1_18_1/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_18_2/pom.xml b/nms/1_18_2/pom.xml index 04a62c9b..40241565 100644 --- a/nms/1_18_2/pom.xml +++ b/nms/1_18_2/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/1_19/pom.xml b/nms/1_19/pom.xml index 24912d23..32c4bed6 100644 --- a/nms/1_19/pom.xml +++ b/nms/1_19/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/nms/abstraction/pom.xml b/nms/abstraction/pom.xml index c13a0141..9c2de33e 100644 --- a/nms/abstraction/pom.xml +++ b/nms/abstraction/pom.xml @@ -5,7 +5,7 @@ IF-parent com.github.stefvanschie.inventoryframework - 0.10.5 + 0.10.6 ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 98a7a245..a534700d 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ com.github.stefvanschie.inventoryframework IF-parent - 0.10.5 + 0.10.6 pom IF