Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfa8a7babd | ||
|
|
ffbcddccac |
@@ -6,10 +6,10 @@ Subject: [PATCH] Kaiiju Configuration
|
||||
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..da7e04a93664e20b9187292ddb7c1f935f5f2883
|
||||
index 0000000000000000000000000000000000000000..ef48d534d239fc5fcfd1b0500cc7868c1cf63142
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
@@ -0,0 +1,193 @@
|
||||
@@ -0,0 +1,194 @@
|
||||
+package dev.kaiijumc.kaiiju;
|
||||
+
|
||||
+import com.google.common.base.Throwables;
|
||||
@@ -27,6 +27,7 @@ index 0000000000000000000000000000000000000000..da7e04a93664e20b9187292ddb7c1f93
|
||||
+import java.lang.reflect.InvocationTargetException;
|
||||
+import java.lang.reflect.Method;
|
||||
+import java.lang.reflect.Modifier;
|
||||
+import java.util.Arrays;
|
||||
+import java.util.HashMap;
|
||||
+import java.util.List;
|
||||
+import java.util.Map;
|
||||
|
||||
@@ -5,18 +5,10 @@ Subject: [PATCH] Kaiiju RegionFormat Configuration
|
||||
|
||||
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
index da7e04a93664e20b9187292ddb7c1f935f5f2883..66bbab7ebe1738cd937963b35fad9cdda763fa88 100644
|
||||
index ef48d534d239fc5fcfd1b0500cc7868c1cf63142..328fbed775c26faa9a87171bfda68d8ee977a889 100644
|
||||
--- a/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
@@ -15,6 +15,7 @@ import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
+import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -190,4 +191,15 @@ public class KaiijuConfig {
|
||||
@@ -191,4 +191,16 @@ public class KaiijuConfig {
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
@@ -27,8 +19,9 @@ index da7e04a93664e20b9187292ddb7c1f935f5f2883..66bbab7ebe1738cd937963b35fad9cdd
|
||||
+ private static void regionFormatSettings() {
|
||||
+ regionFormatName = getString("region-format.format", regionFormatName).toUpperCase();
|
||||
+ if (!regionFormatList.contains(regionFormatName)) {
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Unknown region format in fusion.yml: " + regionFormatName);
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Unknown region format in kaiiju.yml: " + regionFormatName);
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Falling back to ANVIL region file format.");
|
||||
+ regionFormatName = "ANVIL";
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@ Copyright xymb@endcrystal.me
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
diff --git a/build.gradle.kts b/build.gradle.kts
|
||||
index c6a4c48b14a8c927284720b79b93ee1aa9df7da6..2ea3d2f26d4547ea5094cc63d492ea1406ffbd44 100644
|
||||
index c6a4c48b14a8c927284720b79b93ee1aa9df7da6..cc727f183e0a2058c0b785efa9a95545b5ceb32a 100644
|
||||
--- a/build.gradle.kts
|
||||
+++ b/build.gradle.kts
|
||||
@@ -13,6 +13,10 @@ dependencies {
|
||||
@@ -16,7 +16,7 @@ index c6a4c48b14a8c927284720b79b93ee1aa9df7da6..2ea3d2f26d4547ea5094cc63d492ea14
|
||||
}
|
||||
// Pufferfish end
|
||||
+ // Kaiiju start - Linear format
|
||||
+ implementation("com.github.luben:zstd-jni:1.5.2-5")
|
||||
+ implementation("com.github.luben:zstd-jni:1.5.4-1")
|
||||
+ implementation("org.lz4:lz4-java:1.8.0")
|
||||
+ // Kaiiju end
|
||||
// Paper start
|
||||
@@ -38,18 +38,33 @@ index f2c27e0ac65be4b75c1d86ef6fd45fdb538d96ac..00724993d0448454d14a47652b039b88
|
||||
public static final class InProgressWrite {
|
||||
public long writeCounter;
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
index 66bbab7ebe1738cd937963b35fad9cdda763fa88..16ebf32e0c62025958c95216531f72cc418e8d14 100644
|
||||
index 328fbed775c26faa9a87171bfda68d8ee977a889..f5c9a42b98dceda2355a28591c59c383e7906421 100644
|
||||
--- a/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuConfig.java
|
||||
@@ -192,7 +192,7 @@ public class KaiijuConfig {
|
||||
@@ -192,8 +192,9 @@ public class KaiijuConfig {
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
- public static List<String> regionFormatList = Arrays.asList("ANVIL");
|
||||
+ public static List<String> regionFormatList = Arrays.asList("ANVIL", "LINEAR");
|
||||
public static String regionFormatName = "ANVIL";
|
||||
+ public static int regionFormatLinearCompressionLevel = 1;
|
||||
|
||||
private static void regionFormatSettings() {
|
||||
regionFormatName = getString("region-format.format", regionFormatName).toUpperCase();
|
||||
@@ -202,5 +203,11 @@ public class KaiijuConfig {
|
||||
Bukkit.getLogger().log(Level.SEVERE, "Falling back to ANVIL region file format.");
|
||||
regionFormatName = "ANVIL";
|
||||
}
|
||||
+ regionFormatLinearCompressionLevel = getInt("region-format.linear.compression-level", regionFormatLinearCompressionLevel);
|
||||
+ if (regionFormatLinearCompressionLevel > 23 || regionFormatLinearCompressionLevel < 1) {
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Linear region compression level should be between 1 and 22 in kaiiju.yml: " + regionFormatLinearCompressionLevel);
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Falling back to compression level 1.");
|
||||
+ regionFormatLinearCompressionLevel = 1;
|
||||
+ }
|
||||
}
|
||||
}
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/AbstractRegionFile.java b/src/main/java/dev/kaiijumc/kaiiju/region/AbstractRegionFile.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..70d53d80f474eb80acc93275ad6bf1da98ea8ae7
|
||||
@@ -134,7 +149,7 @@ index 0000000000000000000000000000000000000000..0b84b1aa4b822bdcb783285e8ea99a4f
|
||||
+}
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..ba4910d564064a1367cb9d727e8fcc52573d1944
|
||||
index 0000000000000000000000000000000000000000..0beed445c120e2ce299d4ec54a9f09389adb8e91
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/region/LinearRegionFile.java
|
||||
@@ -0,0 +1,338 @@
|
||||
@@ -143,7 +158,7 @@ index 0000000000000000000000000000000000000000..ba4910d564064a1367cb9d727e8fcc52
|
||||
+import com.github.luben.zstd.ZstdInputStream;
|
||||
+import com.github.luben.zstd.ZstdOutputStream;
|
||||
+import com.mojang.logging.LogUtils;
|
||||
+import net.jpountz.lz4.LZ4Compressor;
|
||||
+import dev.kaiijumc.kaiiju.KaiijuConfig;import net.jpountz.lz4.LZ4Compressor;
|
||||
+import net.jpountz.lz4.LZ4Factory;
|
||||
+import net.jpountz.lz4.LZ4FastDecompressor;
|
||||
+import net.jpountz.xxhash.XXHashFactory;
|
||||
@@ -173,7 +188,7 @@ index 0000000000000000000000000000000000000000..ba4910d564064a1367cb9d727e8fcc52
|
||||
+ private boolean close = false;
|
||||
+ public Path regionFile;
|
||||
+ public final ReentrantLock fileLock = new ReentrantLock(true);
|
||||
+ final byte COMPRESSION_LEVEL = 1;
|
||||
+ final byte COMPRESSION_LEVEL = (byte) KaiijuConfig.regionFormatLinearCompressionLevel;
|
||||
+
|
||||
+ public Path getRegionFile() {
|
||||
+ return this.regionFile;
|
||||
@@ -903,7 +918,7 @@ index bd502ca721de0cab438d995efa00ad0554c0d2fe..37242c6225795271e0ba6a853252f2da
|
||||
regionfile.flush();
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index b17bc6482d2bd97d2e48d3967dea72605cf13164..2a13629ffb60dc60706da446e6dc7f3683d0410b 100644
|
||||
index 9b5323edd99848b73ea0e34230e7bec8dc23be8c..619c7713d573e8f438ea23a3fcb185a98abf5100 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -552,7 +552,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
||||
|
||||
@@ -7,31 +7,33 @@ Inspired by "Lobotomized animals" by @KioProject123
|
||||
Checks might be a nuisance to performance.
|
||||
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
index ac4440f8d2bd30e3e074ef797d5138b64996fcbb..dbbba258dbdc465b89c71508d76c5c596fd03bea 100644
|
||||
index ac4440f8d2bd30e3e074ef797d5138b64996fcbb..d28f05943ef25aad1d5a0d4d3f72b991a3caaa5f 100644
|
||||
--- a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
@@ -123,6 +123,15 @@ public class KaiijuWorldConfig {
|
||||
@@ -123,6 +123,17 @@ public class KaiijuWorldConfig {
|
||||
return value.isEmpty() ? fallback : value;
|
||||
}
|
||||
|
||||
+ public boolean lobotomizeAnimalEnabled = false;
|
||||
+ public int lobotomizeAnimalCheckInterval = 100;
|
||||
+ public boolean lobotomizeAnimalCheckCanJump = true;
|
||||
+ public boolean lobotomizeAnimalLookAtPlayer = false;
|
||||
+ public boolean lobotomizeAnimalFloat = true;
|
||||
+
|
||||
private void lobotomizeSettings() {
|
||||
+ lobotomizeAnimalEnabled = getBoolean("lobotomize.animal.enabled", lobotomizeAnimalEnabled);
|
||||
+ lobotomizeAnimalCheckInterval = getInt("lobotomize.animal.check-interval", lobotomizeAnimalCheckInterval);
|
||||
+ lobotomizeAnimalCheckCanJump = getBoolean("lobotomize.animal.check-can-jump", lobotomizeAnimalCheckCanJump);
|
||||
+ lobotomizeAnimalLookAtPlayer = getBoolean("lobotomize.animal.look-at-player", lobotomizeAnimalLookAtPlayer);
|
||||
+ lobotomizeAnimalFloat = getBoolean("lobotomize.animal.float", lobotomizeAnimalFloat);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/entity/Lobotomized.java b/src/main/java/dev/kaiijumc/kaiiju/entity/Lobotomized.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..8912f25e94d5e7510d965aa02b73c87e0b75fb51
|
||||
index 0000000000000000000000000000000000000000..805df3e27cfbbdf3525c96942afca12d50abc350
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/entity/Lobotomized.java
|
||||
@@ -0,0 +1,56 @@
|
||||
@@ -0,0 +1,73 @@
|
||||
+package dev.kaiijumc.kaiiju.entity;
|
||||
+
|
||||
+import net.minecraft.core.BlockPos;
|
||||
@@ -52,15 +54,15 @@ index 0000000000000000000000000000000000000000..8912f25e94d5e7510d965aa02b73c87e
|
||||
+ this.isLobotomized = b;
|
||||
+ }
|
||||
+
|
||||
+ public boolean checkLobotomized(LivingEntity livingEntity) {
|
||||
+ Level level = livingEntity.getLevel();
|
||||
+ public boolean checkLobotomized(LivingEntity entity) {
|
||||
+ Level level = entity.getLevel();
|
||||
+ int interval = level.kaiijuConfig.lobotomizeAnimalCheckInterval;
|
||||
+ if (this.notLobotomizedCount > 3) {
|
||||
+ // check half as often if not lobotomized for the last 3+ consecutive checks
|
||||
+ interval *= 2;
|
||||
+ }
|
||||
+ if ((livingEntity.getId() + livingEntity.tickCount) % interval == 0) {
|
||||
+ this.isLobotomized = livingEntity.isOnGround() && !canTravelFrom(new BlockPos(livingEntity.getX(), livingEntity.getY() + 0.5D, livingEntity.getZ()), level, livingEntity.getBbHeight() <= 1.0F);
|
||||
+ if ((entity.getId() + entity.tickCount) % interval == 0) {
|
||||
+ this.isLobotomized = entity.isOnGround() && !canTravelFrom(entity, level, entity.getBbHeight() <= 1.0F);
|
||||
+
|
||||
+ if (this.isLobotomized) {
|
||||
+ this.notLobotomizedCount = 0;
|
||||
@@ -71,21 +73,38 @@ index 0000000000000000000000000000000000000000..8912f25e94d5e7510d965aa02b73c87e
|
||||
+ return this.isLobotomized;
|
||||
+ }
|
||||
+
|
||||
+ private boolean canTravelFrom(BlockPos pos, Level level, boolean ignoreTop) {
|
||||
+ return canTravelTo(pos.east(), level, ignoreTop)
|
||||
+ || canTravelTo(pos.west(), level, ignoreTop)
|
||||
+ || canTravelTo(pos.north(), level, ignoreTop)
|
||||
+ || canTravelTo(pos.south(), level, ignoreTop);
|
||||
+ private boolean canTravelFrom(LivingEntity entity, Level level, boolean ignoreTop) {
|
||||
+ BlockPos pos = new BlockPos(entity.getX(), entity.getY() + 0.5D, entity.getZ());
|
||||
+ return canTravelTo(entity, pos.east(), level, ignoreTop)
|
||||
+ || canTravelTo(entity, pos.west(), level, ignoreTop)
|
||||
+ || canTravelTo(entity, pos.north(), level, ignoreTop)
|
||||
+ || canTravelTo(entity, pos.south(), level, ignoreTop);
|
||||
+ }
|
||||
+
|
||||
+ private boolean canTravelTo(BlockPos pos, Level level, boolean ignoreTop) {
|
||||
+ private boolean canTravelTo(LivingEntity entity, BlockPos pos, Level level, boolean ignoreTop) {
|
||||
+ BlockState top;
|
||||
+ // Check if mob can jump over block
|
||||
+ if (level.kaiijuConfig.lobotomizeAnimalCheckCanJump && canJump(entity, level, ignoreTop)) {
|
||||
+ top = level.getBlockStateIfLoaded(pos.above());
|
||||
+ if (top == null) return false;
|
||||
+ if (top.isPathfindable(level, pos, net.minecraft.world.level.pathfinder.PathComputationType.LAND)) {
|
||||
+ if (ignoreTop) return true;
|
||||
+ net.minecraft.world.level.block.state.BlockState above = level.getBlockState(pos.above(2));
|
||||
+ if (above.isPathfindable(level, pos, net.minecraft.world.level.pathfinder.PathComputationType.LAND)) return true;
|
||||
+ }
|
||||
+ }
|
||||
+ BlockState bottom = level.getBlockStateIfLoaded(pos);
|
||||
+ if (bottom == null) return false; // Chunk not loaded
|
||||
+ if (!bottom.isPathfindable(level, pos, PathComputationType.LAND)) return false;
|
||||
+ if (ignoreTop) return true;
|
||||
+ BlockState top = level.getBlockState(pos.above());
|
||||
+ if (!top.isPathfindable(level, pos, PathComputationType.LAND)) return false;
|
||||
+ return true;
|
||||
+ top = level.getBlockState(pos.above());
|
||||
+ return top.isPathfindable(level, pos, PathComputationType.LAND);
|
||||
+ }
|
||||
+
|
||||
+ private boolean canJump(LivingEntity entity, Level level, boolean ignoreTop) {
|
||||
+ BlockPos pos = new BlockPos(entity.getX(), entity.getY() + 2.5D, entity.getZ());
|
||||
+ net.minecraft.world.level.block.Block above = level.getBlockIfLoaded(pos);
|
||||
+ return !above.hasCollision;
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
||||
|
||||
@@ -5,11 +5,11 @@ Subject: [PATCH] Kaiiju Lobotomize Villager
|
||||
|
||||
|
||||
diff --git a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
index dbbba258dbdc465b89c71508d76c5c596fd03bea..a213a3c447cd69b5dd88eefd48c2caa6d19f5abc 100644
|
||||
index d28f05943ef25aad1d5a0d4d3f72b991a3caaa5f..91034f553193381c470544ff068d4d7cfb82cc50 100644
|
||||
--- a/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
+++ b/src/main/java/dev/kaiijumc/kaiiju/KaiijuWorldConfig.java
|
||||
@@ -127,11 +127,21 @@ public class KaiijuWorldConfig {
|
||||
public int lobotomizeAnimalCheckInterval = 100;
|
||||
@@ -128,6 +128,11 @@ public class KaiijuWorldConfig {
|
||||
public boolean lobotomizeAnimalCheckCanJump = true;
|
||||
public boolean lobotomizeAnimalLookAtPlayer = false;
|
||||
public boolean lobotomizeAnimalFloat = true;
|
||||
+ public boolean lobotomizeVillagerEnabled = false;
|
||||
@@ -20,7 +20,8 @@ index dbbba258dbdc465b89c71508d76c5c596fd03bea..a213a3c447cd69b5dd88eefd48c2caa6
|
||||
|
||||
private void lobotomizeSettings() {
|
||||
lobotomizeAnimalEnabled = getBoolean("lobotomize.animal.enabled", lobotomizeAnimalEnabled);
|
||||
lobotomizeAnimalCheckInterval = getInt("lobotomize.animal.check-interval", lobotomizeAnimalCheckInterval);
|
||||
@@ -135,5 +140,10 @@ public class KaiijuWorldConfig {
|
||||
lobotomizeAnimalCheckCanJump = getBoolean("lobotomize.animal.check-can-jump", lobotomizeAnimalCheckCanJump);
|
||||
lobotomizeAnimalLookAtPlayer = getBoolean("lobotomize.animal.look-at-player", lobotomizeAnimalLookAtPlayer);
|
||||
lobotomizeAnimalFloat = getBoolean("lobotomize.animal.float", lobotomizeAnimalFloat);
|
||||
+ lobotomizeVillagerEnabled = getBoolean("lobotomize.villager.enabled", lobotomizeVillagerEnabled);
|
||||
|
||||
Reference in New Issue
Block a user