Skip to content
This repository was archived by the owner on Apr 22, 2025. It is now read-only.

Commit 8db2192

Browse files
committed
Update Configuration
The old configuration files should be deleted
1 parent 4ea52ad commit 8db2192

8 files changed

+97
-92
lines changed

patches/server/0002-Vine-Config.patch

Lines changed: 57 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ index efed51a692d94acd9126f6eb2866755567c2e636..fd308bb5dc3f90d7b76240dd0d5026b7
2424

2525
}
2626
diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java
27-
index a7ffbbfd2a9fdeae0953ec8753ce48e93ccce086..d7891588cd7dbc9e5f9921cc2f5bf5145678f27e 100644
27+
index a7ffbbfd2a9fdeae0953ec8753ce48e93ccce086..32d9eba81500be7ab64bd027499c96f6804a68cd 100644
2828
--- a/src/main/java/net/minecraft/server/Main.java
2929
+++ b/src/main/java/net/minecraft/server/Main.java
3030
@@ -58,6 +58,7 @@ import net.minecraft.world.level.storage.LevelResource;
3131
import net.minecraft.world.level.storage.LevelStorageSource;
3232
import net.minecraft.world.level.storage.LevelSummary;
3333
import net.minecraft.world.level.storage.PrimaryLevelData;
34-
+import one.tranic.levelpowered.vine.config.VineConfig;
34+
+import one.tranic.vine.config.VineConfig;
3535
import org.slf4j.Logger;
3636

3737
// CraftBukkit start
@@ -45,7 +45,7 @@ index a7ffbbfd2a9fdeae0953ec8753ce48e93ccce086..d7891588cd7dbc9e5f9921cc2f5bf514
4545

4646
// Purpur start - load config files early
4747
diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
48-
index d281fe5f75f6f99f869fa3cc8da4f1ff9f96a7bf..a7c3e628762a93803418f462ef57741183345ebc 100644
48+
index d281fe5f75f6f99f869fa3cc8da4f1ff9f96a7bf..09c17974579797588d5fbd290bc2ce9b3ebab89b 100644
4949
--- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
5050
+++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java
5151
@@ -1,20 +1,14 @@
@@ -73,7 +73,7 @@ index d281fe5f75f6f99f869fa3cc8da4f1ff9f96a7bf..a7c3e628762a93803418f462ef577411
7373
import net.minecraft.world.level.GameType;
7474
import net.minecraft.world.level.block.entity.SkullBlockEntity;
7575
import net.minecraft.world.level.storage.LevelStorageSource;
76-
+import one.tranic.levelpowered.vine.config.VineConfig;
76+
+import one.tranic.vine.config.VineConfig;
7777
import org.slf4j.Logger;
7878

7979
// CraftBukkit start
@@ -97,15 +97,15 @@ index d281fe5f75f6f99f869fa3cc8da4f1ff9f96a7bf..a7c3e628762a93803418f462ef577411
9797
// Paper start - fix converting txt to json file; convert old users earlier after PlayerList creation but before file load/save
9898
if (this.convertOldUsers()) {
9999
this.getProfileCache().save(false); // Paper
100-
diff --git a/src/main/kotlin/one/tranic/levelpowered/vine/commands/VineCfgCommand.kt b/src/main/kotlin/one/tranic/levelpowered/vine/commands/VineCfgCommand.kt
100+
diff --git a/src/main/kotlin/one/tranic/vine/commands/VineCfgCommand.kt b/src/main/kotlin/one/tranic/vine/commands/VineCfgCommand.kt
101101
new file mode 100644
102-
index 0000000000000000000000000000000000000000..dd96b107b3208707958735ef059c6b20115cdcad
102+
index 0000000000000000000000000000000000000000..6feb7269907d2c88a9eb5b52204e55c10a8b7262
103103
--- /dev/null
104-
+++ b/src/main/kotlin/one/tranic/levelpowered/vine/commands/VineCfgCommand.kt
104+
+++ b/src/main/kotlin/one/tranic/vine/commands/VineCfgCommand.kt
105105
@@ -0,0 +1,34 @@
106-
+package one.tranic.levelpowered.vine.commands
106+
+package one.tranic.vine.commands
107107
+
108-
+import one.tranic.levelpowered.vine.config.VineConfig
108+
+import one.tranic.vine.config.VineConfig
109109
+import org.bukkit.command.Command
110110
+import org.bukkit.command.CommandSender
111111
+import net.kyori.adventure.text.Component
@@ -138,23 +138,24 @@ index 0000000000000000000000000000000000000000..dd96b107b3208707958735ef059c6b20
138138
+ }
139139
+}
140140
\ No newline at end of file
141-
diff --git a/src/main/kotlin/one/tranic/levelpowered/vine/config/VineConfig.kt b/src/main/kotlin/one/tranic/levelpowered/vine/config/VineConfig.kt
141+
diff --git a/src/main/kotlin/one/tranic/vine/config/VineConfig.kt b/src/main/kotlin/one/tranic/vine/config/VineConfig.kt
142142
new file mode 100644
143-
index 0000000000000000000000000000000000000000..960b0d79a27c111d2d9750c05e04f8a0f216b7b0
143+
index 0000000000000000000000000000000000000000..c0f0466810dc9764b69dda0aeae3fae53054dcd8
144144
--- /dev/null
145-
+++ b/src/main/kotlin/one/tranic/levelpowered/vine/config/VineConfig.kt
146-
@@ -0,0 +1,225 @@
147-
+package one.tranic.levelpowered.vine.config
145+
+++ b/src/main/kotlin/one/tranic/vine/config/VineConfig.kt
146+
@@ -0,0 +1,223 @@
147+
+package one.tranic.vine.config
148148
+
149149
+import gg.pufferfish.pufferfish.simd.SIMDDetection
150150
+import net.minecraft.server.MinecraftServer
151-
+import one.tranic.levelpowered.vine.commands.VineCfgCommand
151+
+import one.tranic.vine.commands.VineCfgCommand
152152
+import org.bukkit.Bukkit
153153
+import org.bukkit.configuration.file.YamlConfiguration
154154
+import java.io.File
155155
+
156156
+object VineConfig {
157-
+ var logger: org.slf4j.Logger = MinecraftServer.LOGGER
157+
+ val logger: org.slf4j.Logger = MinecraftServer.LOGGER
158+
+ private const val CONFIG_VERSION = "2.0"
158159
+ private lateinit var configuration: YamlConfiguration
159160
+
160161
+ @JvmStatic
@@ -180,6 +181,7 @@ index 0000000000000000000000000000000000000000..960b0d79a27c111d2d9750c05e04f8a0
180181
+ @JvmStatic
181182
+ fun load() {
182183
+ reload()
184+
+ reload()
183185
+ // Pufferfish start
184186
+ // Attempt to detect vectorization
185187
+ runCatching {
@@ -205,20 +207,20 @@ index 0000000000000000000000000000000000000000..960b0d79a27c111d2d9750c05e04f8a0
205207
+ private fun addDefault(configFile: File) {
206208
+ addDefault(
207209
+ "info",
208-
+ "1.0",
210+
+ CONFIG_VERSION,
209211
+ listOf("Vine Abstract Configuration", "Vine Github: https://github.com/LevelTranic/Vine")
210212
+ )
211213
+
212214
+ addDefault(
213-
+ "vine.fix.incorrect-bounce-logic",
215+
+ "fix.incorrect-bounce-logic",
214216
+ false,
215217
+ listOf(
216218
+ "Fixes some entities not bouncing on slime blocks and getting stuck",
217219
+ "Fixes: https://bugs.mojang.com/browse/MC-216985"
218220
+ )
219221
+ )
220222
+ addDefault(
221-
+ "vine.fix.explosion-breaks-item-frame-in-water",
223+
+ "fix.explosion-breaks-item-frame-in-water",
222224
+ false,
223225
+ listOf(
224226
+ "Fixes Explosions being able to destroy item frames in water",
@@ -227,66 +229,66 @@ index 0000000000000000000000000000000000000000..960b0d79a27c111d2d9750c05e04f8a0
227229
+ )
228230
+
229231
+ addDefault(
230-
+ "levelbukkit.try-fix-anvil-drop.enabled",
232+
+ "fix.anvil-drop.enabled",
231233
+ true,
232234
+ listOf(
233235
+ "This fix will attempt to prevent the bug in https://github.com/PaperMC/Folia/issues/217, ",
234236
+ "it may cause some unexpected effects but should be harmless."
235237
+ )
236238
+ )
237239
+ addDefault(
238-
+ "levelbukkit.try-fix-anvil-drop.debug", false,
240+
+ "fix.anvil-drop.debug", false,
239241
+ "Whether to print detailed information to the console when this issue is triggered"
240242
+ )
241243
+
242244
+ addDefault(
243-
+ "leaf.optimize-minecart.enabled", true,
245+
+ "optimize.minecart.enabled", true,
244246
+ listOf(
245247
+ "Enable this feature to handle large amount of stacked Minecart better.",
246248
+ "By skipping tick collisions to reduce expense getting entities list",
247249
+ "and bukkit event calls, useful for the anarchy server."
248250
+ )
249251
+ )
250-
+ addDefault("leaf.optimize-minecart.skipTickCount", 30)
252+
+ addDefault("optimize.optimize-minecart.skipTickCount", 30)
251253
+
252254
+ addDefault(
253-
+ "mobtimizations.optimizationMobRePathfinding",
255+
+ "optimize.mob-re-pathfinding",
254256
+ true,
255257
+ "If true, disables the frequent pathfinds done while already following a path"
256258
+ )
257259
+ addDefault(
258-
+ "mobtimizations.optimizationZombieSearchAndDestroyTurtleEgg",
260+
+ "optimize.zombie-search-and-destroy-turtle-egg.enabled",
259261
+ false,
260262
+ "If true, optimizes the expensive searching done to find a turtle egg to crush, for zombies/husks, by default fully disabling it"
261263
+ )
262264
+ addDefault(
263-
+ "mobtimizations.zombieSearchAndDestroyTurtleEggPercentChance",
265+
+ "optimize.zombie-search-and-destroy-turtle-egg.percent-chance",
264266
+ 40,
265267
+ "Percent chance to run for task: zombie seeking turtle eggs to destroy"
266268
+ )
267269
+
268-
+ addDefault("divine.optimize-noise-generation", true)
270+
+ addDefault("optimize.noise-generation", true)
269271
+
270272
+ configuration.options().copyDefaults(true)
271273
+ configuration.save(configFile)
272274
+ }
273275
+
274276
+ private fun loadConfigValue() {
275-
+ Fix.incorrectBounceLogic = getBoolean("vine.fix.incorrect-bounce-logic")
276-
+ Fix.explosionBreaksItemFrameInWater = getBoolean("vine.fix.explosion-breaks-item-frame-in-water")
277+
+ Fix.incorrectBounceLogic = getBoolean("fix.incorrect-bounce-logic")
278+
+ Fix.explosionBreaksItemFrameInWater = getBoolean("fix.explosion-breaks-item-frame-in-water")
277279
+
278-
+ LevelBukkit.tryFixAnvilDrop = getBoolean("levelbukkit.try-fix-anvil-drop.enabled")
279-
+ LevelBukkit.tryFixAnvilDropLogger = getBoolean("levelbukkit.try-fix-anvil-drop.debug")
280-
+ Leaf.OptimizeMinecart.enabled = getBoolean("leaf.optimize-minecart.enabled")
281-
+ Leaf.OptimizeMinecart.skipTickCount = getInt("leaf.optimize-minecart.skipTickCount")
280+
+ Fix.anvilDrop = getBoolean("fix.anvil-drop.enabled")
281+
+ Fix.anvilDropLogger = getBoolean("fix.anvil-drop.debug")
282+
+ Optimize.Minecart.enabled = getBoolean("optimize.minecart.enabled")
283+
+ Optimize.Minecart.skipTickCount = getInt("optimize.minecart.skipTickCount")
282284
+
283-
+ Mobtimizations.optimizationMobRePathfinding = getBoolean("mobtimizations.optimizationMobRePathfinding")
284-
+ Mobtimizations.optimizationZombieSearchAndDestroyTurtleEgg =
285-
+ getBoolean("mobtimizations.optimizationZombieSearchAndDestroyTurtleEgg")
286-
+ Mobtimizations.zombieSearchAndDestroyTurtleEggPercentChance =
287-
+ getInt("mobtimizations.zombieSearchAndDestroyTurtleEggPercentChance")
285+
+ Optimize.mobRePathfinding = getBoolean("optimize.mob-re-pathfinding")
286+
+ Optimize.TurtleEggSearch.enabled =
287+
+ getBoolean("optimize.zombie-search-and-destroy-turtle-egg.enabled")
288+
+ Optimize.TurtleEggSearch.percentChance =
289+
+ getInt("optimize.zombie-search-and-destroy-turtle-egg.percent-chance")
288290
+
289-
+ Divine.optimizeNoiseGeneration = getBoolean("divine.optimize-noise-generation")
291+
+ Optimize.noiseGeneration = getBoolean("optimize.noise-generation")
290292
+ }
291293
+
292294
+ private fun addDefault(path: String, value: Any) {
@@ -329,44 +331,40 @@ index 0000000000000000000000000000000000000000..960b0d79a27c111d2d9750c05e04f8a0
329331
+
330332
+ object Fix {
331333
+ @JvmField
332-
+ var incorrectBounceLogic = false
334+
+ var anvilDrop = true
333335
+
334336
+ @JvmField
335-
+ var explosionBreaksItemFrameInWater = false
336-
+ }
337+
+ var anvilDropLogger = false
337338
+
338-
+ object LevelBukkit {
339339
+ @JvmField
340-
+ var tryFixAnvilDrop = true
340+
+ var explosionBreaksItemFrameInWater = false
341341
+
342342
+ @JvmField
343-
+ var tryFixAnvilDropLogger = false
343+
+ var incorrectBounceLogic = false
344344
+ }
345345
+
346-
+ object Leaf {
347-
+ object OptimizeMinecart {
346+
+ object Optimize {
347+
+ @JvmField
348+
+ var noiseGeneration = true
349+
+
350+
+ object Minecart {
348351
+ @JvmField
349352
+ var enabled = true
350353
+
351354
+ @JvmField
352355
+ var skipTickCount = 30
353356
+ }
354-
+ }
355357
+
356-
+ object Mobtimizations {
357358
+ @JvmField
358-
+ var optimizationMobRePathfinding = true
359+
+ var mobRePathfinding = true
359360
+
360-
+ @JvmField
361-
+ var optimizationZombieSearchAndDestroyTurtleEgg = false
362-
+
363-
+ @JvmField
364-
+ var zombieSearchAndDestroyTurtleEggPercentChance = 40
365-
+ }
361+
+ object TurtleEggSearch {
362+
+ @JvmField
363+
+ var enabled = false
366364
+
367-
+ object Divine {
368-
+ @JvmField
369-
+ var optimizeNoiseGeneration = true
365+
+ @JvmField
366+
+ var percentChance = 40
367+
+ }
370368
+ }
371369
+}
372370
\ No newline at end of file

patches/server/0003-Leaf-Optimize-Minecart-collisions.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ index f1b9e83206cc67e6ef29ebe088351b0aaa5eb349..e0a51e269aa076def275710174d3654d
2828
Team.CollisionRule scoreboardteambase_enumteampush = scoreboardteam == null ? Team.CollisionRule.ALWAYS : scoreboardteam.getCollisionRule();
2929

3030
diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
31-
index de2ea35a226c5f595a2ab53beda8238a806c2bad..66d98dbec18f1d497151a5678b08320e0511da4e 100644
31+
index de2ea35a226c5f595a2ab53beda8238a806c2bad..30d756aee64e0215540f27b6d75d29ca03d6823a 100644
3232
--- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
3333
+++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java
3434
@@ -3,9 +3,8 @@ package net.minecraft.world.entity.vehicle;
@@ -127,8 +127,8 @@ index de2ea35a226c5f595a2ab53beda8238a806c2bad..66d98dbec18f1d497151a5678b08320e
127127
+ // Leaf start - Optimize Minecart collision handling
128128
+ // The logic below is used to get list of entities around Minecart
129129
+ // and handle behaviors for their collisions with each other
130-
+ if (!one.tranic.levelpowered.vine.config.VineConfig.Leaf.OptimizeMinecart.enabled || this.tickCount % one.tranic.levelpowered.vine.config.VineConfig.Leaf.OptimizeMinecart.skipTickCount == 0) {
131-
+ if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && (one.tranic.levelpowered.vine.config.VineConfig.Leaf.OptimizeMinecart.enabled || this.getDeltaMovement().horizontalDistanceSqr() > 0.01D)) {
130+
+ if (!one.tranic.vine.config.VineConfig.Optimize.Minecart.enabled || this.tickCount % one.tranic.vine.config.VineConfig.Optimize.Minecart.skipTickCount == 0) {
131+
+ if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && (one.tranic.vine.config.VineConfig.Optimize.Minecart.enabled || this.getDeltaMovement().horizontalDistanceSqr() > 0.01D)) {
132132
List<Entity> list = this.level().getEntities((Entity) this, this.getBoundingBox().inflate(0.20000000298023224D, 0.0D, 0.20000000298023224D), EntitySelector.pushableBy(this));
133133

134134
if (!list.isEmpty()) {

patches/server/0011-Mobtimizations-RePathing-optimization.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,22 @@ You can find the original code on https://github.com/Corosauce/mobtimizations
99
disables the frequent pathfinds done while already following a path
1010

1111
diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java
12-
index 544920a31b649985333f82beafa94a3392f5853e..fe3e39b4526ee1cfb9d426df8bc81a62a1c044b8 100644
12+
index 544920a31b649985333f82beafa94a3392f5853e..f014649faee00cbacf6a92cf327d71a7c53c1ac4 100644
1313
--- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java
1414
+++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java
1515
@@ -80,6 +80,7 @@ public abstract class PathNavigation {
1616
}
1717

1818
public void recomputePath() {
19-
+ if (one.tranic.levelpowered.vine.config.VineConfig.Mobtimizations.optimizationMobRePathfinding) return; // Vine
19+
+ if (one.tranic.vine.config.VineConfig.Optimize.mobRePathfinding) return; // Vine
2020
if (this.level.getGameTime() - this.timeLastRecompute > 20L) {
2121
if (this.targetPos != null) {
2222
this.path = null;
2323
@@ -437,6 +438,7 @@ public abstract class PathNavigation {
2424
}
2525

2626
public boolean shouldRecomputePath(BlockPos pos) {
27-
+ if (one.tranic.levelpowered.vine.config.VineConfig.Mobtimizations.optimizationMobRePathfinding) return false; // Vine
27+
+ if (one.tranic.vine.config.VineConfig.Optimize.mobRePathfinding) return false; // Vine
2828
if (this.hasDelayedRecomputation) {
2929
return false;
3030
} else if (this.path != null && !this.path.isDone() && this.path.getNodeCount() != 0) {

patches/server/0012-Mobtimizations-Optimization-Zombie-Search-And-Destro.patch

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,18 @@ Original code by Corosauce
88
You can find the original code on https://github.com/Corosauce/mobtimizations
99

1010
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
11-
index a61abba840a55fb4fbc9716a5e05eb2778068785..a8e364aa57cd31c94f8bb585a89d07463386f3d3 100644
11+
index a61abba840a55fb4fbc9716a5e05eb2778068785..3ad6c7bec14b2d02d0f109101b5d68972f619fa2 100644
1212
--- a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
1313
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
14-
@@ -17,10 +17,13 @@ import net.minecraft.world.level.Level;
14+
@@ -2,7 +2,6 @@ package net.minecraft.world.entity.ai.goal;
15+
16+
import javax.annotation.Nullable;
17+
import net.minecraft.core.BlockPos;
18+
-import net.minecraft.core.SectionPos;
19+
import net.minecraft.core.particles.ItemParticleOption;
20+
import net.minecraft.core.particles.ParticleTypes;
21+
import net.minecraft.server.level.ServerLevel;
22+
@@ -17,10 +16,12 @@ import net.minecraft.world.level.Level;
1523
import net.minecraft.world.level.LevelAccessor;
1624
import net.minecraft.world.level.LevelReader;
1725
import net.minecraft.world.level.block.Block;
@@ -20,26 +28,25 @@ index a61abba840a55fb4fbc9716a5e05eb2778068785..a8e364aa57cd31c94f8bb585a89d0746
2028
import net.minecraft.world.level.chunk.status.ChunkStatus;
2129
import net.minecraft.world.phys.Vec3;
2230
// CraftBukkit start
23-
+import one.tranic.levelpowered.vine.config.VineConfig;
24-
+import one.tranic.levelpowered.vine.util.VineUtils;
31+
+import one.tranic.vine.util.VineUtils;
2532
import org.bukkit.craftbukkit.block.CraftBlock;
2633
import org.bukkit.craftbukkit.event.CraftEventFactory;
2734
// CraftBukkit end
28-
@@ -40,6 +43,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
35+
@@ -40,6 +41,7 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
2936

3037
@Override
3138
public boolean canUse() {
32-
+ if (VineConfig.Mobtimizations.optimizationZombieSearchAndDestroyTurtleEgg && blockToRemove == Blocks.TURTLE_EGG && !VineUtils.rollPercentChance(VineConfig.Mobtimizations.zombieSearchAndDestroyTurtleEggPercentChance)) return false;
39+
+ if (one.tranic.vine.config.VineConfig.Optimize.TurtleEggSearch.enabled && blockToRemove == Blocks.TURTLE_EGG && !VineUtils.rollPercentChance(one.tranic.vine.config.VineConfig.Optimize.TurtleEggSearch.percentChance)) return false;
3340
if (!this.removerMob.level().purpurConfig.zombieBypassMobGriefing && !this.removerMob.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { // Purpur
3441
return false;
3542
} else if (this.nextStartTick > 0) {
36-
diff --git a/src/main/kotlin/one/tranic/levelpowered/vine/util/VineUtils.kt b/src/main/kotlin/one/tranic/levelpowered/vine/util/VineUtils.kt
43+
diff --git a/src/main/kotlin/one/tranic/vine/util/VineUtils.kt b/src/main/kotlin/one/tranic/vine/util/VineUtils.kt
3744
new file mode 100644
38-
index 0000000000000000000000000000000000000000..b8d791bd93c649c0a75ce6e0f9baa8d7963b970c
45+
index 0000000000000000000000000000000000000000..808ae0c4afea99a5f76a5acb76e3096e83b19771
3946
--- /dev/null
40-
+++ b/src/main/kotlin/one/tranic/levelpowered/vine/util/VineUtils.kt
47+
+++ b/src/main/kotlin/one/tranic/vine/util/VineUtils.kt
4148
@@ -0,0 +1,12 @@
42-
+package one.tranic.levelpowered.vine.util
49+
+package one.tranic.vine.util
4350
+
4451
+import io.netty.util.internal.ThreadLocalRandom
4552
+

0 commit comments

Comments
 (0)