diff --git a/patches/server/0009-Boat-Settings.patch b/patches/server/0009-Boat-Settings.patch new file mode 100644 index 0000000..e17bfb2 --- /dev/null +++ b/patches/server/0009-Boat-Settings.patch @@ -0,0 +1,77 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> +Date: Sun, 2 Apr 2023 22:02:28 +0300 +Subject: [PATCH] Boat Settings + + +diff --git a/src/main/java/gq/bxteam/divinemc/configuration/DivineWorldConfig.java b/src/main/java/gq/bxteam/divinemc/configuration/DivineWorldConfig.java +index 5d16d2250bae9c982a0af9ad2580a63532b140f7..9eede8eb7fefc414f3a1207cd3ca2b33deb5ea13 100644 +--- a/src/main/java/gq/bxteam/divinemc/configuration/DivineWorldConfig.java ++++ b/src/main/java/gq/bxteam/divinemc/configuration/DivineWorldConfig.java +@@ -77,4 +77,11 @@ public class DivineWorldConfig { + final Map value = DivineConfig.getMap("world-settings." + worldName + "." + path, null); + return value.isEmpty() ? fallback : value; + } ++ ++ public boolean dontEjectPlayerFromBoatUnderwater = true; ++ public boolean alwaysAllowToEnterTheBoat = true; ++ private void boatFeatures() { ++ dontEjectPlayerFromBoatUnderwater = getBoolean("gameplay-mechanics.boat.dont-eject-players-from-boat-underwater", dontEjectPlayerFromBoatUnderwater); ++ alwaysAllowToEnterTheBoat = getBoolean("gameplay-mechanics.boat.always-allow-to-enter-the-boat", alwaysAllowToEnterTheBoat); ++ } + } +\ No newline at end of file +diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +index 49660b0b9ee24de96006441a46bf6efa95873db3..ebd35ca6833aa5cfb913be96ca0c8c13cef45872 100644 +--- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java ++++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +@@ -356,7 +356,18 @@ public class Boat extends Entity implements VariantHolder { + } + + if (!this.level.isClientSide && this.outOfControlTicks >= 60.0F) { +- this.ejectPassengers(); ++ // DivineMC start - Don't eject players ++ if (this.level.divinemcConfig.dontEjectPlayerFromBoatUnderwater) { ++ for (int i = this.passengers.size() - 1; i >= 0; --i) { ++ Entity passenger = this.passengers.get(i); ++ if (!(passenger instanceof Player)) { ++ passenger.stopRiding(); ++ } ++ } ++ } else { ++ this.ejectPassengers(); ++ } ++ // DivineMC end + } + + if (this.getHurtTime() > 0) { +@@ -897,7 +908,13 @@ public class Boat extends Entity implements VariantHolder { + + @Override + public InteractionResult interact(Player player, InteractionHand hand) { +- return player.isSecondaryUseActive() ? InteractionResult.PASS : (this.outOfControlTicks < 60.0F ? (!this.level.isClientSide ? (player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS) : InteractionResult.SUCCESS) : InteractionResult.PASS); ++ // DivineMC start - always allow to enter the boat ++ if (this.level.divinemcConfig.alwaysAllowToEnterTheBoat) { ++ return player.isSecondaryUseActive() ? InteractionResult.PASS : (true || this.outOfControlTicks < 60.0F ? (!this.level.isClientSide ? (player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS) : InteractionResult.SUCCESS) : InteractionResult.PASS); ++ } else { ++ return player.isSecondaryUseActive() ? InteractionResult.PASS : (this.outOfControlTicks < 60.0F ? (!this.level.isClientSide ? (player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS) : InteractionResult.SUCCESS) : InteractionResult.PASS); ++ } ++ // DivineMC end + } + + @Override +@@ -993,7 +1010,13 @@ public class Boat extends Entity implements VariantHolder { + + @Override + protected boolean canAddPassenger(Entity passenger) { +- return this.getPassengers().size() < this.getMaxPassengers() && !this.isEyeInFluid(FluidTags.WATER); ++ // DivineMC start - always allow to enter the boat ++ if (this.level.divinemcConfig.alwaysAllowToEnterTheBoat) { ++ return this.getPassengers().size() < this.getMaxPassengers()/* && !this.isEyeInFluid(FluidTags.WATER)*/; ++ } else { ++ return this.getPassengers().size() < this.getMaxPassengers() && !this.isEyeInFluid(FluidTags.WATER); ++ } ++ // DivineMC end + } + + protected int getMaxPassengers() { diff --git a/patches/server/0009-Some-boat-fixes.patch b/patches/server/0009-Some-boat-fixes.patch deleted file mode 100644 index 628b66d..0000000 --- a/patches/server/0009-Some-boat-fixes.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> -Date: Fri, 31 Mar 2023 01:12:40 +0300 -Subject: [PATCH] Some boat fixes - -This patch always allow to enter the boat and removes that player can be ejected from the boat underwater automatically - -diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index 49660b0b9ee24de96006441a46bf6efa95873db3..c9050b9c019541557bf0916838cd49e3f6a7bfe9 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -356,7 +356,14 @@ public class Boat extends Entity implements VariantHolder { - } - - if (!this.level.isClientSide && this.outOfControlTicks >= 60.0F) { -- this.ejectPassengers(); -+ // DivineMC start - Don't eject players -+ for (int i = this.passengers.size() - 1; i >= 0; --i) { -+ Entity passenger = this.passengers.get(i); -+ if (!(passenger instanceof Player)) { -+ passenger.stopRiding(); -+ } -+ } -+ // DivineMC end - } - - if (this.getHurtTime() > 0) { -@@ -897,7 +904,7 @@ public class Boat extends Entity implements VariantHolder { - - @Override - public InteractionResult interact(Player player, InteractionHand hand) { -- return player.isSecondaryUseActive() ? InteractionResult.PASS : (this.outOfControlTicks < 60.0F ? (!this.level.isClientSide ? (player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS) : InteractionResult.SUCCESS) : InteractionResult.PASS); -+ return player.isSecondaryUseActive() ? InteractionResult.PASS : (true || this.outOfControlTicks < 60.0F ? (!this.level.isClientSide ? (player.startRiding(this) ? InteractionResult.CONSUME : InteractionResult.PASS) : InteractionResult.SUCCESS) : InteractionResult.PASS); // DivineMC - always allow to enter the boat - } - - @Override -@@ -993,7 +1000,7 @@ public class Boat extends Entity implements VariantHolder { - - @Override - protected boolean canAddPassenger(Entity passenger) { -- return this.getPassengers().size() < this.getMaxPassengers() && !this.isEyeInFluid(FluidTags.WATER); -+ return this.getPassengers().size() < this.getMaxPassengers()/* && !this.isEyeInFluid(FluidTags.WATER)*/; // DivineMC - always allow to enter the boat - } - - protected int getMaxPassengers() { diff --git a/patches/server/0011-Campfires-burn-out-in-rain.patch b/patches/server/0011-Campfires-burn-out-in-rain.patch deleted file mode 100644 index aa37619..0000000 --- a/patches/server/0011-Campfires-burn-out-in-rain.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> -Date: Fri, 31 Mar 2023 22:47:12 +0300 -Subject: [PATCH] Campfires burn out in rain - -It can be annoying, but it adds more realistic. If you want to remove it - i will do this - -diff --git a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java -index 91feee1e284c929b008bc2df7ab548df898b3ef7..e0227afe23c69386e181fc9ba681f80a0d21832e 100644 ---- a/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java -+++ b/src/main/java/net/minecraft/world/level/block/entity/CampfireBlockEntity.java -@@ -55,6 +55,20 @@ public class CampfireBlockEntity extends BlockEntity implements Clearable { - public static void cookTick(Level world, BlockPos pos, BlockState state, CampfireBlockEntity campfire) { - boolean flag = false; - -+ // DivineMC start -+ if (world.random.nextDouble() < 0.2) { -+ if (state.getValue(CampfireBlock.WATERLOGGED) || world.isRainingAt(pos.above())) { -+ world.setBlock(pos, state.setValue(CampfireBlock.LIT, false), 3); -+ world.playSound(null, pos.getX() + 0.5, pos.getY() + 1D, pos.getZ() + 0.5, net.minecraft.sounds.SoundEvents.FIRE_EXTINGUISH, net.minecraft.sounds.SoundSource.BLOCKS, 1F, 1F); -+ flag = true; -+ } -+ if (flag) { -+ setChanged(world, pos, state); -+ return; -+ } -+ } -+ // DivineMC end -+ - for (int i = 0; i < campfire.items.size(); ++i) { - ItemStack itemstack = (ItemStack) campfire.items.get(i); - diff --git a/patches/server/0012-Don-t-save-Fireworks.patch b/patches/server/0011-Don-t-save-Fireworks.patch similarity index 100% rename from patches/server/0012-Don-t-save-Fireworks.patch rename to patches/server/0011-Don-t-save-Fireworks.patch diff --git a/patches/server/0013-Remove-Spigot-tick-limiter.patch b/patches/server/0012-Remove-Spigot-tick-limiter.patch similarity index 100% rename from patches/server/0013-Remove-Spigot-tick-limiter.patch rename to patches/server/0012-Remove-Spigot-tick-limiter.patch diff --git a/patches/server/0014-Paper-PR-Add-Movement-Direction-API.patch b/patches/server/0013-Paper-PR-Add-Movement-Direction-API.patch similarity index 100% rename from patches/server/0014-Paper-PR-Add-Movement-Direction-API.patch rename to patches/server/0013-Paper-PR-Add-Movement-Direction-API.patch diff --git a/patches/server/0015-Paper-PR-BoneMeal-API.patch b/patches/server/0014-Paper-PR-BoneMeal-API.patch similarity index 100% rename from patches/server/0015-Paper-PR-BoneMeal-API.patch rename to patches/server/0014-Paper-PR-BoneMeal-API.patch diff --git a/patches/server/0016-Paper-PR-Add-sendTitleUpdate-for-inventories.patch b/patches/server/0015-Paper-PR-Add-sendTitleUpdate-for-inventories.patch similarity index 100% rename from patches/server/0016-Paper-PR-Add-sendTitleUpdate-for-inventories.patch rename to patches/server/0015-Paper-PR-Add-sendTitleUpdate-for-inventories.patch diff --git a/patches/server/0017-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch b/patches/server/0016-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch similarity index 100% rename from patches/server/0017-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch rename to patches/server/0016-Paper-PR-Fire-ServerListPingEvent-for-secondary-motd.patch diff --git a/patches/server/0018-Additional-pathfinding-API.patch b/patches/server/0017-Additional-pathfinding-API.patch similarity index 100% rename from patches/server/0018-Additional-pathfinding-API.patch rename to patches/server/0017-Additional-pathfinding-API.patch diff --git a/patches/server/0019-EMC-Allow-negative-Amplifier-values.patch b/patches/server/0018-EMC-Allow-negative-Amplifier-values.patch similarity index 100% rename from patches/server/0019-EMC-Allow-negative-Amplifier-values.patch rename to patches/server/0018-EMC-Allow-negative-Amplifier-values.patch diff --git a/patches/server/0020-Fix-MC-110386.patch b/patches/server/0019-Fix-MC-110386.patch similarity index 100% rename from patches/server/0020-Fix-MC-110386.patch rename to patches/server/0019-Fix-MC-110386.patch diff --git a/patches/server/0021-Include-time-in-startup-logs.patch b/patches/server/0020-Include-time-in-startup-logs.patch similarity index 100% rename from patches/server/0021-Include-time-in-startup-logs.patch rename to patches/server/0020-Include-time-in-startup-logs.patch diff --git a/patches/server/0021-Fallback-to-Dimension-if-World-UUID-is-unknown.patch b/patches/server/0021-Fallback-to-Dimension-if-World-UUID-is-unknown.patch new file mode 100644 index 0000000..10b0ac1 --- /dev/null +++ b/patches/server/0021-Fallback-to-Dimension-if-World-UUID-is-unknown.patch @@ -0,0 +1,49 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> +Date: Sun, 2 Apr 2023 21:27:33 +0300 +Subject: [PATCH] Fallback to Dimension if World UUID is unknown + + +diff --git a/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java b/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java +index 0a8baeb94ae553c4759b065eafd9e242153cf991..f89cc1a3209b189bce1eca8131b175c8f0419525 100644 +--- a/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java ++++ b/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java +@@ -152,4 +152,9 @@ public class DivineConfig { + } + return builder.build(); + } ++ ++ public static boolean fallbackToDimensionIfWorldUUIDUnknown = true; ++ public static void fallbackToDimensionIfWorldUUIDUnknown() { ++ fallbackToDimensionIfWorldUUIDUnknown = getBoolean("settings.fallback-to-dimension-if-world-uuid-unknown", fallbackToDimensionIfWorldUUIDUnknown); ++ } + } +\ No newline at end of file +diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java +index 9d96965d7940fdfe1087ce61c076001bf4d11b4a..0f0fa88a9acf465de0b9659f3ed7f89c551fe010 100644 +--- a/src/main/java/net/minecraft/server/players/PlayerList.java ++++ b/src/main/java/net/minecraft/server/players/PlayerList.java +@@ -8,6 +8,7 @@ import com.mojang.authlib.GameProfile; + import com.mojang.logging.LogUtils; + import com.mojang.serialization.DataResult; + import com.mojang.serialization.Dynamic; ++import gq.bxteam.divinemc.configuration.DivineConfig; + import io.netty.buffer.Unpooled; + import io.papermc.paper.adventure.PaperAdventure; + import java.io.File; +@@ -210,7 +211,14 @@ public abstract class PlayerList { + if (bWorld != null) { + resourcekey = ((CraftWorld) bWorld).getHandle().dimension(); + } else { +- resourcekey = Level.OVERWORLD; ++ // DivineMC start - Fallback to Dimension if World UUID is unknown ++ if (DivineConfig.fallbackToDimensionIfWorldUUIDUnknown) { ++ DataResult> dataResult = Level.RESOURCE_KEY_CODEC.parse(new Dynamic<>(NbtOps.INSTANCE, nbttagcompound.get("Dimension"))); ++ resourcekey = dataResult.result().orElse(Level.OVERWORLD); ++ } else { ++ resourcekey = Level.OVERWORLD; ++ } ++ // DivineMC end + } + } else if (nbttagcompound != null) { + // Vanilla migration support