mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
all the patches are done
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
group = org.purpurmc.purpur
|
group = org.purpurmc.purpur
|
||||||
version = 1.19-R0.1-SNAPSHOT
|
version = 1.19-R0.1-SNAPSHOT
|
||||||
|
|
||||||
paperCommit = a93aa05bf8ed7d293f4ecba432491ab481eec05d
|
paperCommit = 29e918948a445eb0da7c2ec36a689731d9f90125
|
||||||
|
|
||||||
org.gradle.caching = true
|
org.gradle.caching = true
|
||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
|
|||||||
39
patches/server/0273-Add-config-for-snow-on-blue-ice.patch
Normal file
39
patches/server/0273-Add-config-for-snow-on-blue-ice.patch
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||||
|
Date: Wed, 8 Jun 2022 15:19:41 -0400
|
||||||
|
Subject: [PATCH] Add config for snow on blue ice
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
||||||
|
index 14e00c7feb1c051d56a3d27cd00dcef072dd771a..4952fb1aaaafb55baa0fddb389f966a120a4786c 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
||||||
|
@@ -81,6 +81,12 @@ public class SnowLayerBlock extends Block {
|
||||||
|
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
|
||||||
|
BlockState iblockdata1 = world.getBlockState(pos.below());
|
||||||
|
|
||||||
|
+ // Purpur start
|
||||||
|
+ if (iblockdata1.is(Blocks.BLUE_ICE) && !world.getWorldBorder().world.purpurConfig.snowOnBlueIce) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ // Purpur end
|
||||||
|
+
|
||||||
|
return iblockdata1.is(BlockTags.SNOW_LAYER_CANNOT_SURVIVE_ON) ? false : (iblockdata1.is(BlockTags.SNOW_LAYER_CAN_SURVIVE_ON) ? true : Block.isFaceFull(iblockdata1.getCollisionShape(world, pos.below()), Direction.UP) || iblockdata1.is((Block) this) && (Integer) iblockdata1.getValue(SnowLayerBlock.LAYERS) == 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||||
|
index 322eecc6688df6c3c56d88632993ad7f960156c1..e4dd5b270441276c18d8d7578f8ad8519278fafd 100644
|
||||||
|
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||||
|
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
||||||
|
@@ -878,9 +878,11 @@ public class PurpurWorldConfig {
|
||||||
|
|
||||||
|
public boolean mobsSpawnOnPackedIce = true;
|
||||||
|
public boolean mobsSpawnOnBlueIce = true;
|
||||||
|
+ public boolean snowOnBlueIce = true;
|
||||||
|
private void iceSettings() {
|
||||||
|
mobsSpawnOnPackedIce = getBoolean("blocks.packed_ice.allow-mob-spawns", mobsSpawnOnPackedIce);
|
||||||
|
mobsSpawnOnBlueIce = getBoolean("blocks.blue_ice.allow-mob-spawns", mobsSpawnOnBlueIce);
|
||||||
|
+ snowOnBlueIce = getBoolean("blocks.blue_ice.allow-snow-formation", snowOnBlueIce);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int kelpMaxGrowthAge = 25;
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
||||||
Date: Fri, 5 Mar 2021 17:59:05 -0600
|
|
||||||
Subject: [PATCH] Add config for snow on blue ice
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
|
||||||
index fbbb0155bd66f1daa160e03f866741d903e1869e..86f7b4117b8b9bd36e38962e3290f7b909ed9b29 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/SnowLayerBlock.java
|
|
||||||
@@ -75,7 +75,18 @@ public class SnowLayerBlock extends Block {
|
|
||||||
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
|
|
||||||
BlockState iblockdata1 = world.getBlockState(pos.below());
|
|
||||||
|
|
||||||
- return !iblockdata1.is(Blocks.ICE) && !iblockdata1.is(Blocks.PACKED_ICE) && !iblockdata1.is(Blocks.BARRIER) ? (!iblockdata1.is(Blocks.HONEY_BLOCK) && !iblockdata1.is(Blocks.SOUL_SAND) ? Block.isFaceFull(iblockdata1.getCollisionShape(world, pos.below()), Direction.UP) || iblockdata1.is((Block) this) && (Integer) iblockdata1.getValue(SnowLayerBlock.LAYERS) == 8 : true) : false;
|
|
||||||
+ // Purpur start - rewrite this whole return to make more sense
|
|
||||||
+ if (iblockdata1.is(Blocks.ICE) || iblockdata1.is(Blocks.PACKED_ICE) || iblockdata1.is(Blocks.BARRIER)) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ if (iblockdata1.is(Blocks.BLUE_ICE) && !world.getWorldBorder().world.purpurConfig.snowOnBlueIce) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ if (iblockdata1.is(Blocks.HONEY_BLOCK) || iblockdata1.is(Blocks.SOUL_SAND)) {
|
|
||||||
+ return true;
|
|
||||||
+ }
|
|
||||||
+ return Block.isFaceFull(iblockdata1.getCollisionShape(world, pos.below()), Direction.UP) || iblockdata1.is(this) && iblockdata1.getValue(LAYERS) == 8;
|
|
||||||
+ // Purpur end
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index eee1d4fd7901e341908ff1b6bf0e5d5c6df3e428..df0397ea8bc4396ede6b357577677b9ae1c2a557 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -512,6 +512,11 @@ public class PurpurWorldConfig {
|
|
||||||
furnaceUseLavaFromUnderneath = getBoolean("blocks.furnace.use-lava-from-underneath", furnaceUseLavaFromUnderneath);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ public boolean snowOnBlueIce = true;
|
|
||||||
+ private void iceSettings() {
|
|
||||||
+ snowOnBlueIce = getBoolean("blocks.blue_ice.allow-snow-formation", snowOnBlueIce);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
public boolean lavaInfinite = false;
|
|
||||||
public int lavaInfiniteRequiredSources = 2;
|
|
||||||
public int lavaSpeedNether = 10;
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,143 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
|
||||||
Date: Thu, 3 Dec 2020 17:56:18 -0600
|
|
||||||
Subject: [PATCH] Lobotomize stuck villagers
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
||||||
index 59bfaf90d448223c5aee9b18d2915539f54f0d4b..b5db8212aa6b20fbaa8ea7dbcd14c9cc13460fe0 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java
|
|
||||||
@@ -140,6 +140,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
||||||
return villageplacetype == PoiType.MEETING;
|
|
||||||
});
|
|
||||||
private final int brainTickOffset; // Purpur
|
|
||||||
+ private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur
|
|
||||||
+ private int notLobotomizedCount = 0; // Purpur
|
|
||||||
|
|
||||||
public long nextGolemPanic = -1; // Pufferfish
|
|
||||||
|
|
||||||
@@ -198,6 +200,47 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
||||||
protected boolean isAlwaysExperienceDropper() {
|
|
||||||
return this.level.purpurConfig.villagerAlwaysDropExp;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ private boolean checkLobotomized() {
|
|
||||||
+ int interval = this.level.purpurConfig.villagerLobotomizeCheckInterval;
|
|
||||||
+ if (this.notLobotomizedCount > 3) {
|
|
||||||
+ // check half as often if not lobotomized for the last 3+ consecutive checks
|
|
||||||
+ interval *= 2;
|
|
||||||
+ }
|
|
||||||
+ if ((this.level.getGameTime() + brainTickOffset) % interval == 0) {
|
|
||||||
+ // offset Y for short blocks like dirt_path/farmland
|
|
||||||
+ this.isLobotomized = !canTravelFrom(new BlockPos(getX(), getY() + 0.0625D, getZ()));
|
|
||||||
+
|
|
||||||
+ if (this.isLobotomized) {
|
|
||||||
+ this.notLobotomizedCount = 0;
|
|
||||||
+ } else {
|
|
||||||
+ this.notLobotomizedCount++;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ return this.isLobotomized;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private boolean canTravelFrom(BlockPos pos) {
|
|
||||||
+ return canTravelTo(pos.east()) || canTravelTo(pos.west()) || canTravelTo(pos.north()) || canTravelTo(pos.south());
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ private boolean canTravelTo(BlockPos pos) {
|
|
||||||
+ BlockState state = this.level.getBlockStateIfLoaded(pos);
|
|
||||||
+ if (state == null) {
|
|
||||||
+ // chunk not loaded
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ net.minecraft.world.level.block.Block bottom = state.getBlock();
|
|
||||||
+ if (bottom instanceof net.minecraft.world.level.block.FenceBlock ||
|
|
||||||
+ bottom instanceof net.minecraft.world.level.block.FenceGateBlock ||
|
|
||||||
+ bottom instanceof net.minecraft.world.level.block.WallBlock) {
|
|
||||||
+ // bottom block is too tall to get over
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ net.minecraft.world.level.block.Block top = level.getBlockState(pos.above()).getBlock();
|
|
||||||
+ // only if both blocks have no collision
|
|
||||||
+ return !bottom.hasCollision && !top.hasCollision;
|
|
||||||
+ }
|
|
||||||
// Purpur end
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@@ -295,6 +338,15 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
||||||
protected void customServerAiStep() { mobTick(false); }
|
|
||||||
protected void mobTick(boolean inactive) {
|
|
||||||
this.level.getProfiler().push("villagerBrain");
|
|
||||||
+ // Purpur start
|
|
||||||
+ if (this.level.purpurConfig.villagerLobotomizeEnabled) {
|
|
||||||
+ // treat as inactive if lobotomized
|
|
||||||
+ inactive = inactive || checkLobotomized();
|
|
||||||
+ } else {
|
|
||||||
+ // clean up state for API
|
|
||||||
+ this.isLobotomized = false;
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
// Pufferfish start
|
|
||||||
if (!inactive) {
|
|
||||||
// Purpur start
|
|
||||||
@@ -305,6 +357,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler
|
|
||||||
this.getBrain().tick((ServerLevel) this.level, this); // Paper
|
|
||||||
}
|
|
||||||
// Pufferfish end
|
|
||||||
+ // Purpur start
|
|
||||||
+ else if (this.isLobotomized && shouldRestock()) {
|
|
||||||
+ // make sure we restock if needed when lobotomized
|
|
||||||
+ restock();
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
this.level.getProfiler().pop();
|
|
||||||
if (this.assignProfessionWhenSpawned) {
|
|
||||||
this.assignProfessionWhenSpawned = false;
|
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
||||||
index f0b910df1ee471b4d72d97c6197ab14f2854976e..6ce32a52d621a0c2629568ea07e445f50160d97d 100644
|
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
||||||
@@ -194,4 +194,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
|
||||||
getHandle().getGossips().getReputations().clear();
|
|
||||||
}
|
|
||||||
// Paper end
|
|
||||||
+
|
|
||||||
+ // Purpur start
|
|
||||||
+ @Override
|
|
||||||
+ public boolean isLobotomized() {
|
|
||||||
+ return getHandle().isLobotomized();
|
|
||||||
+ }
|
|
||||||
+ // Purpur end
|
|
||||||
}
|
|
||||||
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
index a5ec57fc61835e9dd69bc2222084e13018c459bb..2dc8f909431735aa31dd9ac93cba93dbab98b405 100644
|
|
||||||
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
|
|
||||||
@@ -2666,6 +2666,8 @@ public class PurpurWorldConfig {
|
|
||||||
public boolean villagerAllowTrading = true;
|
|
||||||
public boolean villagerAlwaysDropExp = false;
|
|
||||||
public int villagerMinimumDemand = 0;
|
|
||||||
+ public boolean villagerLobotomizeEnabled = false;
|
|
||||||
+ public int villagerLobotomizeCheckInterval = 100;
|
|
||||||
private void villagerSettings() {
|
|
||||||
villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable);
|
|
||||||
villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater);
|
|
||||||
@@ -2691,6 +2693,17 @@ public class PurpurWorldConfig {
|
|
||||||
villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading);
|
|
||||||
villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp);
|
|
||||||
villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand);
|
|
||||||
+ if (PurpurConfig.version < 9) {
|
|
||||||
+ boolean oldValue = getBoolean("mobs.villager.lobotomize-1x1", villagerLobotomizeEnabled);
|
|
||||||
+ set("mobs.villager.lobotomize.enabled", oldValue);
|
|
||||||
+ set("mobs.villager.lobotomize-1x1", null);
|
|
||||||
+ }
|
|
||||||
+ if (PurpurConfig.version < 27) {
|
|
||||||
+ int oldValue = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
|
|
||||||
+ set("mobs.villager.lobotomize.check-interval", oldValue == 60 ? 100 : oldValue);
|
|
||||||
+ }
|
|
||||||
+ villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled);
|
|
||||||
+ villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean vindicatorRidable = false;
|
|
||||||
Reference in New Issue
Block a user