mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-06-21 09:47:45 +02:00
apply almost all the source file patches
This commit is contained in:
@@ -1,19 +0,0 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
|
||||||
index 2940dbc31a20eb49e24418ec84b73f2bfbdcfc32..812cd00f750197f9bdde6f2295c27172ae463414 100644
|
|
||||||
--- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
|
||||||
+++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
|
||||||
@@ -96,7 +96,7 @@ public class AcquirePoi {
|
|
||||||
};
|
|
||||||
// Paper start - optimise POI searches
|
|
||||||
java.util.List<Pair<Holder<PoiType>, BlockPos>> poiPositionsRaw = new java.util.ArrayList<>();
|
|
||||||
- ca.spottedleaf.moonrise.patches.poi_lookup.PoiAccess.findNearestPoiPositions(poiManager, poiType, cacheTest, body.blockPosition(), SCAN_RANGE, Double.MAX_VALUE, PoiManager.Occupancy.HAS_SPACE, ca.spottedleaf.moonrise.patches.poi_lookup.PoiAccess.LOAD_FOR_SEARCHING, 5, poiPositionsRaw);
|
|
||||||
+ ca.spottedleaf.moonrise.patches.poi_lookup.PoiAccess.findNearestPoiPositions(poiManager, poiType, cacheTest, body.blockPosition(), level.purpurConfig.villagerAcquirePoiSearchRadius, Double.MAX_VALUE, PoiManager.Occupancy.HAS_SPACE, ca.spottedleaf.moonrise.patches.poi_lookup.PoiAccess.LOAD_FOR_SEARCHING, 5, poiPositionsRaw); // Purpur - Configurable villager search radius
|
|
||||||
Set<Pair<Holder<PoiType>, BlockPos>> poiPositions = new java.util.HashSet<>(poiPositionsRaw.size());
|
|
||||||
for (Pair<Holder<PoiType>, BlockPos> pair : poiPositionsRaw) {
|
|
||||||
if (validPoi.test(level, pair.getSecond())) {
|
|
||||||
@@ -17,42 +17,3 @@ index 637cdcf459aaf78dc381d8a990b0e2c571c06de8..45e170bbcc72206ed0018440c4353590
|
|||||||
this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
|
this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ // Purpur start - Stop squids floating on top of water
|
|
||||||
+ @Override
|
|
||||||
+ public net.minecraft.world.phys.AABB getAxisForFluidCheck() {
|
|
||||||
+ // Stops squids from floating just over the water
|
|
||||||
+ return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck);
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - Stop squids floating on top of water
|
|
||||||
+
|
|
||||||
+ // Purpur start - Flying squids! Oh my!
|
|
||||||
+ public boolean canFly() {
|
|
||||||
+ return this.level().purpurConfig.squidsCanFly;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ @Override
|
|
||||||
+ public boolean isInWater() {
|
|
||||||
+ return this.wasTouchingWater || canFly();
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - Flying squids! Oh my!
|
|
||||||
+
|
|
||||||
@Override
|
|
||||||
protected void registerGoals() {
|
|
||||||
this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this));
|
|
||||||
@@ -131,6 +150,7 @@ public class Squid extends AgeableWaterCreature {
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.isInWater()) {
|
|
||||||
+ if (canFly()) setNoGravity(!wasTouchingWater); // Purpur - Flying squids! Oh my!
|
|
||||||
if (this.tentacleMovement < Mth.PI) {
|
|
||||||
float tentacleScale = this.tentacleMovement / Mth.PI;
|
|
||||||
this.tentacleAngle = Mth.sin(tentacleScale * tentacleScale * Mth.PI) * Mth.PI * 0.25F;
|
|
||||||
@@ -316,7 +336,7 @@ public class Squid extends AgeableWaterCreature {
|
|
||||||
int noActionTime = this.squid.getNoActionTime();
|
|
||||||
if (noActionTime > 100) {
|
|
||||||
this.squid.movementVector = Vec3.ZERO;
|
|
||||||
- } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.wasTouchingWater || !this.squid.hasMovementVector()) {
|
|
||||||
+ } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.isInWater() || !this.squid.hasMovementVector()) { // Purpur - Flying squids! Oh my!
|
|
||||||
float angle = this.squid.getRandom().nextFloat() * (float) (Math.PI * 2);
|
|
||||||
this.squid.movementVector = new Vec3(Mth.cos(angle) * 0.2F, -0.1F + this.squid.getRandom().nextFloat() * 0.2F, Mth.sin(angle) * 0.2F);
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/MagmaCube.java b/net/minecraft/world/entity/monster/MagmaCube.java
|
|
||||||
index eed2e3f9f46f5950615b201706e9fecfae903e0f..f6021d3e41bcf7c65c708f9937bafafecea34ce3 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/MagmaCube.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/MagmaCube.java
|
|
||||||
@@ -31,6 +31,11 @@ public class MagmaCube extends Slime {
|
|
||||||
public static boolean checkMagmaCubeSpawnRules(
|
|
||||||
final EntityType<MagmaCube> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
|
||||||
) {
|
|
||||||
+ // Purpur start - Config to disable hostile mob spawn on ice
|
|
||||||
+ if (net.minecraft.world.entity.monster.Monster.canSpawnInBlueAndPackedIce(level, pos)) {
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
+ // Purpur end - Config to disable hostile mob spawn on ice
|
|
||||||
return level.getDifficulty() != Difficulty.PEACEFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/item/Items.java b/net/minecraft/world/item/Items.java
|
|
||||||
index 20738a373069ee391e7a9cdb99338028a7a1fff8..cb336a31df9f484f9dbee8ef744fd82ac363ed51 100644
|
|
||||||
--- a/net/minecraft/world/item/Items.java
|
|
||||||
+++ b/net/minecraft/world/item/Items.java
|
|
||||||
@@ -396,7 +396,7 @@ public class Items {
|
|
||||||
public static final Item PURPUR_BLOCK = registerBlock(Blocks.PURPUR_BLOCK);
|
|
||||||
public static final Item PURPUR_PILLAR = registerBlock(Blocks.PURPUR_PILLAR);
|
|
||||||
public static final Item PURPUR_STAIRS = registerBlock(Blocks.PURPUR_STAIRS);
|
|
||||||
- public static final Item SPAWNER = registerBlock(Blocks.SPAWNER);
|
|
||||||
+ public static final Item SPAWNER = registerBlock(Blocks.SPAWNER, org.purpurmc.purpur.item.SpawnerItem::new, new Item.Properties().rarity(Rarity.EPIC)); // Purpur - Silk touch spawners
|
|
||||||
public static final Item CREAKING_HEART = registerBlock(Blocks.CREAKING_HEART);
|
|
||||||
public static final Item CHEST = registerBlock(Blocks.CHEST, p -> p.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
|
|
||||||
public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE);
|
|
||||||
@@ -2105,7 +2105,7 @@ public class Items {
|
|
||||||
"sweet_berries", createBlockItemWithCustomItemName(Blocks.SWEET_BERRY_BUSH), new Item.Properties().food(Foods.SWEET_BERRIES)
|
|
||||||
);
|
|
||||||
public static final Item GLOW_BERRIES = registerItem(
|
|
||||||
- "glow_berries", createBlockItemWithCustomItemName(Blocks.CAVE_VINES), new Item.Properties().food(Foods.GLOW_BERRIES)
|
|
||||||
+ "glow_berries", settings -> new org.purpurmc.purpur.item.GlowBerryItem(Blocks.CAVE_VINES, settings.useItemDescriptionPrefix()), new Item.Properties().food(Foods.GLOW_BERRIES) // Purpur - Eating glow berries adds glow effect
|
|
||||||
);
|
|
||||||
public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, p -> p.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
|
|
||||||
public static final Item SOUL_CAMPFIRE = registerBlock(Blocks.SOUL_CAMPFIRE, p -> p.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
|
|
||||||
@@ -1,17 +1,9 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/core/dispenser/DispenseItemBehavior.java b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
|
||||||
index b851968a97a0f6df597a9f1fc91517b6835adf68..56b9f9016a652a704d785de683738efcf02a44f9 100644
|
|
||||||
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
--- a/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
+++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
@@ -683,5 +683,22 @@ public interface DispenseItemBehavior {
|
@@ -625,5 +_,22 @@
|
||||||
DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityType.TNT_MINECART));
|
DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityTypes.TNT_MINECART));
|
||||||
DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityType.HOPPER_MINECART));
|
DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityTypes.HOPPER_MINECART));
|
||||||
DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityType.COMMAND_BLOCK_MINECART));
|
DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityTypes.COMMAND_BLOCK_MINECART));
|
||||||
+ // Purpur start - Dispensers place anvils option
|
+ // Purpur start - Dispensers place anvils option
|
||||||
+ DispenserBlock.registerBehavior(Items.ANVIL, (new OptionalDispenseItemBehavior() {
|
+ DispenserBlock.registerBehavior(Items.ANVIL, (new OptionalDispenseItemBehavior() {
|
||||||
+ @Override
|
+ @Override
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/gui/MinecraftServerGui.java b/net/minecraft/server/gui/MinecraftServerGui.java
|
|
||||||
index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16e06a72a5 100644
|
|
||||||
--- a/net/minecraft/server/gui/MinecraftServerGui.java
|
--- a/net/minecraft/server/gui/MinecraftServerGui.java
|
||||||
+++ b/net/minecraft/server/gui/MinecraftServerGui.java
|
+++ b/net/minecraft/server/gui/MinecraftServerGui.java
|
||||||
@@ -39,6 +39,11 @@ public class MinecraftServerGui extends JComponent {
|
@@ -41,6 +_,11 @@
|
||||||
private Thread logAppenderThread;
|
private Thread logAppenderThread;
|
||||||
private final Collection<Runnable> finalizers = Lists.newArrayList();
|
private final Collection<Runnable> finalizers = Lists.newArrayList();
|
||||||
private final AtomicBoolean isClosing = new AtomicBoolean();
|
private final AtomicBoolean isClosing = new AtomicBoolean();
|
||||||
@@ -20,16 +12,16 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
|
|
||||||
public static MinecraftServerGui showFrameFor(final DedicatedServer server) {
|
public static MinecraftServerGui showFrameFor(final DedicatedServer server) {
|
||||||
try {
|
try {
|
||||||
@@ -46,7 +51,7 @@ public class MinecraftServerGui extends JComponent {
|
@@ -48,7 +_,7 @@
|
||||||
} catch (Exception var3) {
|
} catch (Exception var3) {
|
||||||
}
|
}
|
||||||
|
|
||||||
- final JFrame frame = new JFrame("Minecraft server");
|
- final JFrame frame = new JFrame("Minecraft server");
|
||||||
+ final JFrame frame = new JFrame("Purpur Minecraft server"); // Purpur - Improve GUI
|
+ final JFrame frame = new JFrame("Purpur Minecraft server"); // Purpur - Improve GUI
|
||||||
final MinecraftServerGui gui = new MinecraftServerGui(server);
|
final MinecraftServerGui gui = new MinecraftServerGui(server);
|
||||||
frame.setDefaultCloseOperation(2);
|
frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
frame.add(gui);
|
frame.add(gui);
|
||||||
@@ -54,7 +59,7 @@ public class MinecraftServerGui extends JComponent {
|
@@ -56,7 +_,7 @@
|
||||||
frame.setLocationRelativeTo(null);
|
frame.setLocationRelativeTo(null);
|
||||||
frame.setVisible(true);
|
frame.setVisible(true);
|
||||||
// Paper start - Improve ServerGUI
|
// Paper start - Improve ServerGUI
|
||||||
@@ -38,7 +30,7 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
try {
|
try {
|
||||||
frame.setIconImage(javax.imageio.ImageIO.read(java.util.Objects.requireNonNull(MinecraftServerGui.class.getClassLoader().getResourceAsStream("logo.png"))));
|
frame.setIconImage(javax.imageio.ImageIO.read(java.util.Objects.requireNonNull(MinecraftServerGui.class.getClassLoader().getResourceAsStream("logo.png"))));
|
||||||
} catch (java.io.IOException ignore) {
|
} catch (java.io.IOException ignore) {
|
||||||
@@ -64,7 +69,7 @@ public class MinecraftServerGui extends JComponent {
|
@@ -66,7 +_,7 @@
|
||||||
@Override
|
@Override
|
||||||
public void windowClosing(final WindowEvent event) {
|
public void windowClosing(final WindowEvent event) {
|
||||||
if (!gui.isClosing.getAndSet(true)) {
|
if (!gui.isClosing.getAndSet(true)) {
|
||||||
@@ -47,16 +39,16 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
server.halt(true);
|
server.halt(true);
|
||||||
gui.runFinalizers();
|
gui.runFinalizers();
|
||||||
}
|
}
|
||||||
@@ -112,7 +117,7 @@ public class MinecraftServerGui extends JComponent {
|
@@ -114,7 +_,7 @@
|
||||||
|
|
||||||
private JComponent buildChatPanel() {
|
private JComponent buildChatPanel() {
|
||||||
JPanel panel = new JPanel(new BorderLayout());
|
JPanel panel = new JPanel(new BorderLayout());
|
||||||
- JTextArea chatArea = new JTextArea();
|
- JTextArea chatArea = new JTextArea();
|
||||||
+ org.purpurmc.purpur.gui.JColorTextPane chatArea = new org.purpurmc.purpur.gui.JColorTextPane(); // Purpur - GUI Improvements
|
+ org.purpurmc.purpur.gui.JColorTextPane chatArea = new org.purpurmc.purpur.gui.JColorTextPane(); // Purpur - GUI Improvements
|
||||||
JScrollPane scrollPane = new JScrollPane(chatArea, 22, 30);
|
JScrollPane scrollPane = new JScrollPane(chatArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
chatArea.setEditable(false);
|
chatArea.setEditable(false);
|
||||||
chatArea.setFont(MONOSPACED);
|
chatArea.setFont(MONOSPACED);
|
||||||
@@ -121,10 +126,43 @@ public class MinecraftServerGui extends JComponent {
|
@@ -123,10 +_,43 @@
|
||||||
String text = chatField.getText().trim();
|
String text = chatField.getText().trim();
|
||||||
if (!text.isEmpty()) {
|
if (!text.isEmpty()) {
|
||||||
this.server.handleConsoleInput(text, this.server.createCommandSourceStack());
|
this.server.handleConsoleInput(text, this.server.createCommandSourceStack());
|
||||||
@@ -100,7 +92,7 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
chatArea.addFocusListener(new FocusAdapter() {
|
chatArea.addFocusListener(new FocusAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void focusGained(final FocusEvent arg0) {
|
public void focusGained(final FocusEvent arg0) {
|
||||||
@@ -159,7 +197,7 @@ public class MinecraftServerGui extends JComponent {
|
@@ -161,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final java.util.regex.Pattern ANSI = java.util.regex.Pattern.compile("\\e\\[[\\d;]*[^\\d;]"); // CraftBukkit // Paper
|
private static final java.util.regex.Pattern ANSI = java.util.regex.Pattern.compile("\\e\\[[\\d;]*[^\\d;]"); // CraftBukkit // Paper
|
||||||
@@ -109,7 +101,7 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
if (!SwingUtilities.isEventDispatchThread()) {
|
if (!SwingUtilities.isEventDispatchThread()) {
|
||||||
SwingUtilities.invokeLater(() -> this.print(console, scrollPane, line));
|
SwingUtilities.invokeLater(() -> this.print(console, scrollPane, line));
|
||||||
} else {
|
} else {
|
||||||
@@ -170,10 +208,11 @@ public class MinecraftServerGui extends JComponent {
|
@@ -172,16 +_,29 @@
|
||||||
shouldScroll = scrollBar.getValue() + scrollBar.getSize().getHeight() + MONOSPACED.getSize() * 4 > scrollBar.getMaximum();
|
shouldScroll = scrollBar.getValue() + scrollBar.getSize().getHeight() + MONOSPACED.getSize() * 4 > scrollBar.getMaximum();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,10 +115,10 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
|
|
||||||
if (shouldScroll) {
|
if (shouldScroll) {
|
||||||
scrollBar.setValue(Integer.MAX_VALUE);
|
scrollBar.setValue(Integer.MAX_VALUE);
|
||||||
@@ -181,6 +220,18 @@ public class MinecraftServerGui extends JComponent {
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
+
|
||||||
+ // Purpur start - GUI Improvements
|
+ // Purpur start - GUI Improvements
|
||||||
+ public static class CommandHistory extends java.util.LinkedList<String> {
|
+ public static class CommandHistory extends java.util.LinkedList<String> {
|
||||||
+ @Override
|
+ @Override
|
||||||
@@ -138,7 +130,6 @@ index b810cb0a9dd8713aed70cc9fdeea1bc249c8e0dc..f5c52f0aa85d8ae66215fbbe94773b16
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - GUI Improvements
|
+ // Purpur end - GUI Improvements
|
||||||
+
|
|
||||||
// Paper start - Add onboarding message for initial server start
|
// Paper start - Add onboarding message for initial server start
|
||||||
private JComponent buildOnboardingPanel() {
|
private JComponent buildOnboardingPanel() {
|
||||||
String onboardingLink = "https://docs.papermc.io/paper/next-steps";
|
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
|
|
||||||
index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb37d1cdbf 100644
|
|
||||||
--- a/net/minecraft/server/level/ServerLevel.java
|
--- a/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/net/minecraft/server/level/ServerLevel.java
|
+++ b/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -219,6 +219,8 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -220,6 +_,8 @@
|
||||||
private final StructureManager structureManager;
|
private final StructureManager structureManager;
|
||||||
private final StructureCheck structureCheck;
|
private final StructureCheck structureCheck;
|
||||||
private final boolean tickTime;
|
private final boolean tickTime;
|
||||||
@@ -17,7 +9,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
private final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this);
|
private final LevelDebugSynchronizers debugSynchronizers = new LevelDebugSynchronizers(this);
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -643,8 +645,25 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -389,8 +_,25 @@
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
this.tickTime = tickTime;
|
this.tickTime = tickTime;
|
||||||
this.server = server;
|
this.server = server;
|
||||||
@@ -44,15 +36,15 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
ChunkGenerator generator = levelStem.generator();
|
ChunkGenerator generator = levelStem.generator();
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
// Paper start - per-world time
|
// Paper start - per-world time
|
||||||
@@ -738,6 +757,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -481,6 +_,7 @@
|
||||||
this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler);
|
this.environmentAttributes = EnvironmentAttributeSystem.builder().addDefaultLayers(this).build();
|
||||||
// Paper end - rewrite chunk system
|
this.updateSkyBrightness();
|
||||||
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
|
this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit
|
||||||
+ this.preciseTime = this.serverLevelData.getGameTime(); // Purpur - Configurable daylight cycle
|
+ this.preciseTime = this.serverLevelData.getGameTime(); // Purpur - Configurable daylight cycle
|
||||||
}
|
}
|
||||||
|
|
||||||
// Paper start
|
// Paper start
|
||||||
@@ -794,7 +814,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -549,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
|
int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
|
||||||
@@ -61,27 +53,27 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
Optional<Holder<WorldClock>> defaultClock = this.dimensionType().defaultClock();
|
Optional<Holder<WorldClock>> defaultClock = this.dimensionType().defaultClock();
|
||||||
org.bukkit.event.world.ClockTimeSkipEvent event = null; // Paper - per-world time
|
org.bukkit.event.world.ClockTimeSkipEvent event = null; // Paper - per-world time
|
||||||
if (this.getGameRules().get(GameRules.ADVANCE_TIME) && defaultClock.isPresent()) {
|
if (this.getGameRules().get(GameRules.ADVANCE_TIME) && defaultClock.isPresent()) {
|
||||||
@@ -1036,9 +1056,18 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -759,9 +_,18 @@
|
||||||
&& this.random.nextDouble() < difficulty.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses
|
&& this.random.nextDouble() < difficulty.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses
|
||||||
&& !this.getBlockState(pos.below()).is(BlockTags.LIGHTNING_RODS);
|
&& !this.getBlockState(pos.below()).is(BlockTags.LIGHTNING_RODS);
|
||||||
if (isTrap) {
|
if (isTrap) {
|
||||||
+ // Purpur start - Special mobs naturally spawn
|
+ // Purpur start - Special mobs naturally spawn
|
||||||
+ net.minecraft.world.entity.animal.equine.AbstractHorse skeletonHorse;
|
+ net.minecraft.world.entity.animal.equine.AbstractHorse skeletonHorse;
|
||||||
+ if (purpurConfig.zombieHorseSpawnChance > 0D && random.nextDouble() <= purpurConfig.zombieHorseSpawnChance) {
|
+ if (purpurConfig.zombieHorseSpawnChance > 0D && random.nextDouble() <= purpurConfig.zombieHorseSpawnChance) {
|
||||||
+ skeletonHorse = EntityType.ZOMBIE_HORSE.create(this, EntitySpawnReason.EVENT);
|
+ skeletonHorse = EntityTypes.ZOMBIE_HORSE.create(this, EntitySpawnReason.EVENT);
|
||||||
+ } else {
|
+ } else {
|
||||||
+ skeletonHorse = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT);
|
+ skeletonHorse = EntityTypes.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT);
|
||||||
+ if (skeletonHorse != null) ((SkeletonHorse) skeletonHorse).setTrap(true);
|
+ if (skeletonHorse != null) ((SkeletonHorse) skeletonHorse).setTrap(true);
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Special mobs naturally spawn
|
+ // Purpur end - Special mobs naturally spawn
|
||||||
SkeletonHorse horse = EntityType.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT);
|
SkeletonHorse horse = EntityTypes.SKELETON_HORSE.create(this, EntitySpawnReason.EVENT);
|
||||||
if (horse != null) {
|
if (horse != null) {
|
||||||
- horse.setTrap(true);
|
- horse.setTrap(true);
|
||||||
+ //horse.setTrap(true); // Purpur - Special mobs naturally spawn - moved up
|
+ //horse.setTrap(true); // Purpur - Special mobs naturally spawn - moved up
|
||||||
horse.setAge(0);
|
horse.setAge(0);
|
||||||
horse.setPos(pos.getX(), pos.getY(), pos.getZ());
|
horse.setPos(pos.getX(), pos.getY(), pos.getZ());
|
||||||
this.addFreshEntity(horse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
|
this.addFreshEntity(horse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit
|
||||||
@@ -1073,9 +1102,35 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -796,9 +_,35 @@
|
||||||
if (state.is(Blocks.SNOW)) {
|
if (state.is(Blocks.SNOW)) {
|
||||||
int currentLayers = state.getValue(SnowLayerBlock.LAYERS);
|
int currentLayers = state.getValue(SnowLayerBlock.LAYERS);
|
||||||
if (currentLayers < Math.min(maxHeight, 8)) {
|
if (currentLayers < Math.min(maxHeight, 8)) {
|
||||||
@@ -117,7 +109,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(this, topPos, Blocks.SNOW.defaultBlockState(), Block.UPDATE_ALL, null); // CraftBukkit
|
org.bukkit.craftbukkit.event.CraftEventFactory.handleBlockFormEvent(this, topPos, Blocks.SNOW.defaultBlockState(), Block.UPDATE_ALL, null); // CraftBukkit
|
||||||
@@ -1096,7 +1151,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -819,7 +_,7 @@
|
||||||
p -> p.is(PoiTypes.LIGHTNING_ROD),
|
p -> p.is(PoiTypes.LIGHTNING_ROD),
|
||||||
lightningRodPos -> lightningRodPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, lightningRodPos.getX(), lightningRodPos.getZ()) - 1,
|
lightningRodPos -> lightningRodPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, lightningRodPos.getX(), lightningRodPos.getZ()) - 1,
|
||||||
center,
|
center,
|
||||||
@@ -126,7 +118,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
PoiManager.Occupancy.ANY
|
PoiManager.Occupancy.ANY
|
||||||
);
|
);
|
||||||
return nearbyLightningRod.map(blockPos -> blockPos.above(1));
|
return nearbyLightningRod.map(blockPos -> blockPos.above(1));
|
||||||
@@ -1144,8 +1199,26 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -867,8 +_,26 @@
|
||||||
int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
|
int percentage = this.getGameRules().get(GameRules.PLAYERS_SLEEPING_PERCENTAGE);
|
||||||
Component message;
|
Component message;
|
||||||
if (this.sleepStatus.areEnoughSleeping(percentage)) {
|
if (this.sleepStatus.areEnoughSleeping(percentage)) {
|
||||||
@@ -153,7 +145,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
message = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(percentage));
|
message = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(percentage));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1311,6 +1384,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -1034,6 +_,7 @@
|
||||||
public void resetWeatherCycle() {
|
public void resetWeatherCycle() {
|
||||||
WeatherData weatherData = this.getWeatherData();
|
WeatherData weatherData = this.getWeatherData();
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
@@ -161,7 +153,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
weatherData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
|
weatherData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
|
||||||
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
||||||
// Not that everyone ever manages to get the whole server to sleep at the same time....
|
// Not that everyone ever manages to get the whole server to sleep at the same time....
|
||||||
@@ -1318,6 +1392,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -1041,6 +_,7 @@
|
||||||
weatherData.setRainTime(0);
|
weatherData.setRainTime(0);
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
@@ -169,7 +161,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
weatherData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
|
weatherData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
// If we stop due to everyone sleeping we should reset the weather duration to some other random value.
|
||||||
@@ -1989,7 +2064,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -1690,7 +_,7 @@
|
||||||
Explosion.BlockInteraction blockInteraction = switch (interactionType) {
|
Explosion.BlockInteraction blockInteraction = switch (interactionType) {
|
||||||
case NONE -> Explosion.BlockInteraction.KEEP;
|
case NONE -> Explosion.BlockInteraction.KEEP;
|
||||||
case BLOCK -> this.getDestroyType(GameRules.BLOCK_EXPLOSION_DROP_DECAY);
|
case BLOCK -> this.getDestroyType(GameRules.BLOCK_EXPLOSION_DROP_DECAY);
|
||||||
@@ -178,7 +170,7 @@ index 229ff740e0418a05d824a67401ae6f105b4c3642..316fece122a3b71b5c809ed15c46c8cb
|
|||||||
? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY)
|
? this.getDestroyType(GameRules.MOB_EXPLOSION_DROP_DECAY)
|
||||||
: Explosion.BlockInteraction.KEEP;
|
: Explosion.BlockInteraction.KEEP;
|
||||||
case TNT -> this.getDestroyType(GameRules.TNT_EXPLOSION_DROP_DECAY);
|
case TNT -> this.getDestroyType(GameRules.TNT_EXPLOSION_DROP_DECAY);
|
||||||
@@ -2914,7 +2989,7 @@ public class ServerLevel extends Level implements WorldGenLevel, ServerEntityGet
|
@@ -2586,7 +_,7 @@
|
||||||
// Spigot start
|
// Spigot start
|
||||||
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
|
if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message
|
||||||
// Paper start - Fix merchant inventory not closing on entity removal
|
// Paper start - Fix merchant inventory not closing on entity removal
|
||||||
@@ -1,22 +1,14 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
|
|
||||||
index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f899b1550 100644
|
|
||||||
--- a/net/minecraft/world/entity/Entity.java
|
--- a/net/minecraft/world/entity/Entity.java
|
||||||
+++ b/net/minecraft/world/entity/Entity.java
|
+++ b/net/minecraft/world/entity/Entity.java
|
||||||
@@ -168,6 +168,7 @@ public abstract class Entity
|
@@ -165,6 +_,7 @@
|
||||||
SlotProvider,
|
SlotProvider,
|
||||||
DebugValueSource,
|
DebugValueSource,
|
||||||
TypedInstance<EntityType<?>>, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity, ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity { // Paper - rewrite chunk system // Paper - optimise entity tracker
|
TypedInstance<EntityType<?>> {
|
||||||
+ public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur - Configurable entity base attributes
|
+ public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur - Configurable entity base attributes
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
private static final int CURRENT_LEVEL = 2;
|
private static final int CURRENT_LEVEL = 2;
|
||||||
static boolean isLevelAtLeast(ValueInput input, int level) {
|
static boolean isLevelAtLeast(ValueInput input, int level) {
|
||||||
@@ -297,8 +298,9 @@ public abstract class Entity
|
@@ -341,8 +_,9 @@
|
||||||
public double xOld;
|
public double xOld;
|
||||||
public double yOld;
|
public double yOld;
|
||||||
public double zOld;
|
public double zOld;
|
||||||
@@ -27,7 +19,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
public int tickCount;
|
public int tickCount;
|
||||||
private int remainingFireTicks;
|
private int remainingFireTicks;
|
||||||
private final EntityFluidInteraction fluidInteraction = new EntityFluidInteraction(Set.of(FluidTags.WATER, FluidTags.LAVA));
|
private final EntityFluidInteraction fluidInteraction = new EntityFluidInteraction(Set.of(FluidTags.WATER, FluidTags.LAVA));
|
||||||
@@ -330,8 +332,8 @@ public abstract class Entity
|
@@ -375,8 +_,8 @@
|
||||||
public @Nullable PortalProcessor portalProcess;
|
public @Nullable PortalProcessor portalProcess;
|
||||||
public int portalCooldown;
|
public int portalCooldown;
|
||||||
private boolean invulnerable;
|
private boolean invulnerable;
|
||||||
@@ -38,7 +30,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
private boolean hasGlowingTag;
|
private boolean hasGlowingTag;
|
||||||
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
|
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
|
||||||
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
|
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
|
||||||
@@ -382,6 +384,7 @@ public abstract class Entity
|
@@ -427,6 +_,7 @@
|
||||||
private final int despawnTime; // Paper - entity despawn time limit
|
private final int despawnTime; // Paper - entity despawn time limit
|
||||||
public int totalEntityAge; // Paper - age-like counter for all entities
|
public int totalEntityAge; // Paper - age-like counter for all entities
|
||||||
public final io.papermc.paper.entity.activation.ActivationType activationType = io.papermc.paper.entity.activation.ActivationType.activationTypeFor(this); // Paper - EAR 2/tracking ranges
|
public final io.papermc.paper.entity.activation.ActivationType activationType = io.papermc.paper.entity.activation.ActivationType.activationTypeFor(this); // Paper - EAR 2/tracking ranges
|
||||||
@@ -46,9 +38,9 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
// Paper start - EAR 2
|
// Paper start - EAR 2
|
||||||
public final boolean defaultActivationState;
|
public final boolean defaultActivationState;
|
||||||
public long activatedTick = Integer.MIN_VALUE;
|
public long activatedTick = Integer.MIN_VALUE;
|
||||||
@@ -549,10 +552,22 @@ public abstract class Entity
|
@@ -444,11 +_,23 @@
|
||||||
}
|
}
|
||||||
// Paper end - optimise entity tracker
|
// Paper end
|
||||||
|
|
||||||
+ // Purpur start - Add canSaveToDisk to Entity
|
+ // Purpur start - Add canSaveToDisk to Entity
|
||||||
+ public boolean canSaveToDisk() {
|
+ public boolean canSaveToDisk() {
|
||||||
@@ -59,6 +51,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
public Entity(final EntityType<?> type, final Level level) {
|
public Entity(final EntityType<?> type, final Level level) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.level = level;
|
this.level = level;
|
||||||
|
this.id = level.getNextEntityId();
|
||||||
this.dimensions = type.getDimensions();
|
this.dimensions = type.getDimensions();
|
||||||
+ this.maxAirTicks = level == null || this.getDefaultMaxAirSupply() != Entity.TOTAL_AIR_SUPPLY ? this.getDefaultMaxAirSupply() : this.level.purpurConfig.drowningAirTicks; // Purpur - Drowning Settings
|
+ this.maxAirTicks = level == null || this.getDefaultMaxAirSupply() != Entity.TOTAL_AIR_SUPPLY ? this.getDefaultMaxAirSupply() : this.level.purpurConfig.drowningAirTicks; // Purpur - Drowning Settings
|
||||||
+ // Purpur start - Add toggle for RNG manipulation
|
+ // Purpur start - Add toggle for RNG manipulation
|
||||||
@@ -69,7 +62,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
this.position = Vec3.ZERO;
|
this.position = Vec3.ZERO;
|
||||||
this.blockPosition = BlockPos.ZERO;
|
this.blockPosition = BlockPos.ZERO;
|
||||||
this.chunkPosition = ChunkPos.ZERO;
|
this.chunkPosition = ChunkPos.ZERO;
|
||||||
@@ -950,6 +965,7 @@ public abstract class Entity
|
@@ -850,6 +_,7 @@
|
||||||
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
|
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
|
||||||
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
|
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
|
||||||
// Paper end - Configurable nether ceiling damage
|
// Paper end - Configurable nether ceiling damage
|
||||||
@@ -77,7 +70,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
this.onBelowWorld();
|
this.onBelowWorld();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2007,7 +2023,7 @@ public abstract class Entity
|
@@ -1945,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean fireImmune() {
|
public boolean fireImmune() {
|
||||||
@@ -86,7 +79,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) {
|
public boolean causeFallDamage(final double fallDistance, final float damageModifier, final DamageSource damageSource) {
|
||||||
@@ -2593,7 +2609,7 @@ public abstract class Entity
|
@@ -2531,7 +_,7 @@
|
||||||
output.putBoolean("Bukkit.invisible", this.persistentInvisibility);
|
output.putBoolean("Bukkit.invisible", this.persistentInvisibility);
|
||||||
}
|
}
|
||||||
// SPIGOT-6907: re-implement LivingEntity#setMaximumAir()
|
// SPIGOT-6907: re-implement LivingEntity#setMaximumAir()
|
||||||
@@ -95,7 +88,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
output.putInt("Bukkit.MaxAirSupply", this.getMaxAirSupply());
|
output.putInt("Bukkit.MaxAirSupply", this.getMaxAirSupply());
|
||||||
}
|
}
|
||||||
output.putInt("Spigot.ticksLived", this.totalEntityAge); // Paper
|
output.putInt("Spigot.ticksLived", this.totalEntityAge); // Paper
|
||||||
@@ -2679,6 +2695,11 @@ public abstract class Entity
|
@@ -2617,6 +_,11 @@
|
||||||
output.putBoolean("Paper.FreezeLock", true);
|
output.putBoolean("Paper.FreezeLock", true);
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
||||||
@@ -107,7 +100,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
CrashReport report = CrashReport.forThrowable(t, "Saving entity NBT");
|
CrashReport report = CrashReport.forThrowable(t, "Saving entity NBT");
|
||||||
CrashReportCategory category = report.addCategory("Entity being saved");
|
CrashReportCategory category = report.addCategory("Entity being saved");
|
||||||
@@ -2802,6 +2823,9 @@ public abstract class Entity
|
@@ -2740,6 +_,9 @@
|
||||||
}
|
}
|
||||||
freezeLocked = input.getBooleanOr("Paper.FreezeLock", false);
|
freezeLocked = input.getBooleanOr("Paper.FreezeLock", false);
|
||||||
// Paper end
|
// Paper end
|
||||||
@@ -117,7 +110,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
CrashReport report = CrashReport.forThrowable(t, "Loading entity NBT");
|
CrashReport report = CrashReport.forThrowable(t, "Loading entity NBT");
|
||||||
CrashReportCategory category = report.addCategory("Entity being loaded");
|
CrashReportCategory category = report.addCategory("Entity being loaded");
|
||||||
@@ -3067,6 +3091,7 @@ public abstract class Entity
|
@@ -2916,6 +_,7 @@
|
||||||
if (this.isAlive() && this instanceof Leashable leashable) {
|
if (this.isAlive() && this instanceof Leashable leashable) {
|
||||||
if (leashable.getLeashHolder() == player) {
|
if (leashable.getLeashHolder() == player) {
|
||||||
if (!this.level().isClientSide()) {
|
if (!this.level().isClientSide()) {
|
||||||
@@ -125,7 +118,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
// Paper start - EntityUnleashEvent
|
// Paper start - EntityUnleashEvent
|
||||||
if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent(
|
if (!org.bukkit.craftbukkit.event.CraftEventFactory.handlePlayerUnleashEntityEvent(
|
||||||
leashable, player, hand, !player.hasInfiniteMaterials(), true
|
leashable, player, hand, !player.hasInfiniteMaterials(), true
|
||||||
@@ -3500,15 +3525,18 @@ public abstract class Entity
|
@@ -3323,15 +_,18 @@
|
||||||
return Vec3.directionFromRotation(this.getRotationVector());
|
return Vec3.directionFromRotation(this.getRotationVector());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +138,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4238,7 +4266,7 @@ public abstract class Entity
|
@@ -4065,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean canUsePortal(final boolean ignorePassenger) {
|
public boolean canUsePortal(final boolean ignorePassenger) {
|
||||||
@@ -154,7 +147,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean canTeleport(final Level from, final Level to) {
|
public boolean canTeleport(final Level from, final Level to) {
|
||||||
@@ -4788,6 +4816,12 @@ public abstract class Entity
|
@@ -4615,6 +_,12 @@
|
||||||
return Mth.lerp(partial, this.yRotO, this.yRot);
|
return Mth.lerp(partial, this.yRotO, this.yRot);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +160,7 @@ index 3623fa8e923e3d417b073aed03f7be931285e3e5..a4a0683c0287da0543a5c869163c925f
|
|||||||
public boolean touchingUnloadedChunk() {
|
public boolean touchingUnloadedChunk() {
|
||||||
AABB box = this.getBoundingBox().inflate(1.0);
|
AABB box = this.getBoundingBox().inflate(1.0);
|
||||||
int x0 = Mth.floor(box.minX);
|
int x0 = Mth.floor(box.minX);
|
||||||
@@ -5091,7 +5125,7 @@ public abstract class Entity
|
@@ -4909,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public float maxUpStep() {
|
public float maxUpStep() {
|
||||||
@@ -1,16 +1,8 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/EntityType.java b/net/minecraft/world/entity/EntityType.java
|
|
||||||
index 0840d69c9e80a2df01737a2980f0b5d6a6ca7691..c2d4f6a164a18c8809d143793921567907363a17 100644
|
|
||||||
--- a/net/minecraft/world/entity/EntityType.java
|
--- a/net/minecraft/world/entity/EntityType.java
|
||||||
+++ b/net/minecraft/world/entity/EntityType.java
|
+++ b/net/minecraft/world/entity/EntityType.java
|
||||||
@@ -1238,6 +1238,16 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T>,
|
@@ -74,6 +_,16 @@
|
||||||
return register(vanillaEntityId(vanillaId), builder);
|
private final FeatureFlagSet requiredFeatures;
|
||||||
}
|
private final boolean allowedInPeaceful;
|
||||||
|
|
||||||
+ // Purpur start - PlayerSetSpawnerTypeWithEggEvent
|
+ // Purpur start - PlayerSetSpawnerTypeWithEggEvent
|
||||||
+ public static EntityType<?> getFromBukkitType(org.bukkit.entity.EntityType bukkitType) {
|
+ public static EntityType<?> getFromBukkitType(org.bukkit.entity.EntityType bukkitType) {
|
||||||
@@ -25,7 +17,7 @@ index 0840d69c9e80a2df01737a2980f0b5d6a6ca7691..c2d4f6a164a18c8809d1437939215679
|
|||||||
public static Identifier getKey(final EntityType<?> type) {
|
public static Identifier getKey(final EntityType<?> type) {
|
||||||
return BuiltInRegistries.ENTITY_TYPE.getKey(type);
|
return BuiltInRegistries.ENTITY_TYPE.getKey(type);
|
||||||
}
|
}
|
||||||
@@ -1495,6 +1505,16 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T>,
|
@@ -329,6 +_,16 @@
|
||||||
return this.category;
|
return this.category;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +34,7 @@ index 0840d69c9e80a2df01737a2980f0b5d6a6ca7691..c2d4f6a164a18c8809d1437939215679
|
|||||||
public String getDescriptionId() {
|
public String getDescriptionId() {
|
||||||
return this.descriptionId;
|
return this.descriptionId;
|
||||||
}
|
}
|
||||||
@@ -1556,6 +1576,7 @@ public class EntityType<T extends Entity> implements EntityTypeTest<Entity, T>,
|
@@ -405,6 +_,7 @@
|
||||||
// Paper start - Add logging for debugging entity tags with invalid ids
|
// Paper start - Add logging for debugging entity tags with invalid ids
|
||||||
() -> {
|
() -> {
|
||||||
LOGGER.warn("Skipping Entity with id {}", input.getStringOr("id", "[invalid]"));
|
LOGGER.warn("Skipping Entity with id {}", input.getStringOr("id", "[invalid]"));
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
|
|
||||||
index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700dbe18d0212 100644
|
|
||||||
--- a/net/minecraft/world/entity/LivingEntity.java
|
--- a/net/minecraft/world/entity/LivingEntity.java
|
||||||
+++ b/net/minecraft/world/entity/LivingEntity.java
|
+++ b/net/minecraft/world/entity/LivingEntity.java
|
||||||
@@ -441,6 +441,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -460,6 +_,12 @@
|
||||||
if (dist < 0.0) {
|
if (dist < 0.0) {
|
||||||
double damagePerBlock = level.getWorldBorder().getDamagePerBlock();
|
double damagePerBlock = level.getWorldBorder().getDamagePerBlock();
|
||||||
if (damagePerBlock > 0.0) {
|
if (damagePerBlock > 0.0) {
|
||||||
@@ -21,7 +13,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
this.hurtServer(level, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-dist * damagePerBlock)));
|
this.hurtServer(level, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-dist * damagePerBlock)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -456,7 +462,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -475,7 +_,7 @@
|
||||||
if (this.shouldTakeDrowningDamage()) {
|
if (this.shouldTakeDrowningDamage()) {
|
||||||
this.setAirSupply(0);
|
this.setAirSupply(0);
|
||||||
level.broadcastEntityEvent(this, EntityEvent.DROWN_PARTICLES);
|
level.broadcastEntityEvent(this, EntityEvent.DROWN_PARTICLES);
|
||||||
@@ -30,7 +22,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
}
|
}
|
||||||
} else if (this.getAirSupply() < this.getMaxAirSupply() && MobEffectUtil.shouldEffectsRefillAirsupply(this)) {
|
} else if (this.getAirSupply() < this.getMaxAirSupply() && MobEffectUtil.shouldEffectsRefillAirsupply(this)) {
|
||||||
this.setAirSupply(this.increaseAirSupply(this.getAirSupply()));
|
this.setAirSupply(this.increaseAirSupply(this.getAirSupply()));
|
||||||
@@ -516,7 +522,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -535,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean shouldTakeDrowningDamage() {
|
protected boolean shouldTakeDrowningDamage() {
|
||||||
@@ -39,34 +31,34 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1048,16 +1054,34 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1070,14 +_,32 @@
|
||||||
}
|
|
||||||
|
|
||||||
if (targetingEntity != null) {
|
if (targetingEntity != null) {
|
||||||
- ItemStack itemStack = this.getItemBySlot(EquipmentSlot.HEAD);
|
ItemStack itemStack = this.getItemBySlot(EquipmentSlot.HEAD);
|
||||||
- if (targetingEntity.is(EntityType.SKELETON) && itemStack.is(Items.SKELETON_SKULL)
|
- if (targetingEntity.is(EntityTypes.SKELETON) && itemStack.is(Items.SKELETON_SKULL)
|
||||||
- || targetingEntity.is(EntityType.ZOMBIE) && itemStack.is(Items.ZOMBIE_HEAD)
|
- || targetingEntity.is(EntityTypes.ZOMBIE) && itemStack.is(Items.ZOMBIE_HEAD)
|
||||||
- || targetingEntity.is(EntityType.PIGLIN) && itemStack.is(Items.PIGLIN_HEAD)
|
- || targetingEntity.is(EntityTypes.PIGLIN) && itemStack.is(Items.PIGLIN_HEAD)
|
||||||
- || targetingEntity.is(EntityType.PIGLIN_BRUTE) && itemStack.is(Items.PIGLIN_HEAD)
|
- || targetingEntity.is(EntityTypes.PIGLIN_BRUTE) && itemStack.is(Items.PIGLIN_HEAD)
|
||||||
- || targetingEntity.is(EntityType.CREEPER) && itemStack.is(Items.CREEPER_HEAD)) {
|
- || targetingEntity.is(EntityTypes.CREEPER) && itemStack.is(Items.CREEPER_HEAD)) {
|
||||||
- visibilityPercent *= 0.5;
|
- visibilityPercent *= 0.5;
|
||||||
+ ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD);
|
- }
|
||||||
|
- }
|
||||||
+ // Purpur start - Mob head visibility percent
|
+ // Purpur start - Mob head visibility percent
|
||||||
+ if (targetingEntity.is(EntityType.SKELETON) && itemBySlot.is(Items.SKELETON_SKULL)) {
|
+ if (targetingEntity.is(EntityTypes.SKELETON) && itemStack.is(Items.SKELETON_SKULL)) {
|
||||||
+ visibilityPercent *= targetingEntity.level().purpurConfig.skeletonHeadVisibilityPercent;
|
+ visibilityPercent *= targetingEntity.level().purpurConfig.skeletonHeadVisibilityPercent;
|
||||||
+ }
|
+ }
|
||||||
+ else if (targetingEntity.is(EntityType.ZOMBIE) && itemBySlot.is(Items.ZOMBIE_HEAD)) {
|
+ else if (targetingEntity.is(EntityTypes.ZOMBIE) && itemStack.is(Items.ZOMBIE_HEAD)) {
|
||||||
+ visibilityPercent *= targetingEntity.level().purpurConfig.zombieHeadVisibilityPercent;
|
+ visibilityPercent *= targetingEntity.level().purpurConfig.zombieHeadVisibilityPercent;
|
||||||
}
|
+ }
|
||||||
+ else if ((targetingEntity.is(EntityType.PIGLIN) || targetingEntity.is(EntityType.PIGLIN_BRUTE)) && itemBySlot.is(Items.PIGLIN_HEAD)) {
|
+ else if ((targetingEntity.is(EntityTypes.PIGLIN) || targetingEntity.is(EntityTypes.PIGLIN_BRUTE)) && itemStack.is(Items.PIGLIN_HEAD)) {
|
||||||
+ visibilityPercent *= targetingEntity.level().purpurConfig.piglinHeadVisibilityPercent;
|
+ visibilityPercent *= targetingEntity.level().purpurConfig.piglinHeadVisibilityPercent;
|
||||||
+ }
|
+ }
|
||||||
+ else if (targetingEntity.is(EntityType.CREEPER) && itemBySlot.is(Items.CREEPER_HEAD)) {
|
+ else if (targetingEntity.is(EntityTypes.CREEPER) && itemStack.is(Items.CREEPER_HEAD)) {
|
||||||
+ visibilityPercent *= targetingEntity.level().purpurConfig.creeperHeadVisibilityPercent;
|
+ visibilityPercent *= targetingEntity.level().purpurConfig.creeperHeadVisibilityPercent;
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Mob head visibility percent
|
+ // Purpur end - Mob head visibility percent
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
+ // Purpur start - Configurable mob blindness
|
+ // Purpur start - Configurable mob blindness
|
||||||
+ if (targetingEntity instanceof LivingEntity entityliving) {
|
+ if (targetingEntity instanceof LivingEntity entityliving) {
|
||||||
+ if (entityliving.hasEffect(MobEffects.BLINDNESS)) {
|
+ if (entityliving.hasEffect(MobEffects.BLINDNESS)) {
|
||||||
@@ -77,11 +69,10 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Configurable mob blindness
|
+ // Purpur end - Configurable mob blindness
|
||||||
+
|
|
||||||
return visibilityPercent;
|
return visibilityPercent;
|
||||||
}
|
}
|
||||||
|
@@ -1127,6 +_,7 @@
|
||||||
@@ -1106,6 +1130,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
|
||||||
Iterator<MobEffectInstance> iterator = this.activeEffects.values().iterator();
|
Iterator<MobEffectInstance> iterator = this.activeEffects.values().iterator();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
MobEffectInstance effect = iterator.next();
|
MobEffectInstance effect = iterator.next();
|
||||||
@@ -89,7 +80,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED);
|
EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED);
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
continue;
|
continue;
|
||||||
@@ -1438,7 +1463,23 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1459,7 +_,23 @@
|
||||||
this.stopSleeping();
|
this.stopSleeping();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -114,7 +105,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
if (damage < 0.0F) {
|
if (damage < 0.0F) {
|
||||||
damage = 0.0F;
|
damage = 0.0F;
|
||||||
}
|
}
|
||||||
@@ -1699,10 +1740,10 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1724,10 +_,10 @@
|
||||||
protected @Nullable Player resolvePlayerResponsibleForDamage(final DamageSource source) {
|
protected @Nullable Player resolvePlayerResponsibleForDamage(final DamageSource source) {
|
||||||
Entity sourceEntity = source.getEntity();
|
Entity sourceEntity = source.getEntity();
|
||||||
if (sourceEntity instanceof Player playerSource) {
|
if (sourceEntity instanceof Player playerSource) {
|
||||||
@@ -127,7 +118,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
} else {
|
} else {
|
||||||
this.lastHurtByPlayer = null;
|
this.lastHurtByPlayer = null;
|
||||||
this.lastHurtByPlayerMemoryTime = 0;
|
this.lastHurtByPlayerMemoryTime = 0;
|
||||||
@@ -1754,6 +1795,17 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1779,6 +_,17 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,7 +136,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
final org.bukkit.inventory.EquipmentSlot handSlot = (usedHand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(usedHand) : null;
|
final org.bukkit.inventory.EquipmentSlot handSlot = (usedHand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(usedHand) : null;
|
||||||
final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
|
final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
|
||||||
event.setCancelled(protectionItem == null);
|
event.setCancelled(protectionItem == null);
|
||||||
@@ -1927,6 +1979,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1956,6 +_,7 @@
|
||||||
boolean playerKilled = this.lastHurtByPlayerMemoryTime > 0;
|
boolean playerKilled = this.lastHurtByPlayerMemoryTime > 0;
|
||||||
this.dropEquipment(level); // CraftBukkit - from below
|
this.dropEquipment(level); // CraftBukkit - from below
|
||||||
if (this.shouldDropLoot(level)) {
|
if (this.shouldDropLoot(level)) {
|
||||||
@@ -153,7 +144,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
this.dropFromLootTable(level, source, playerKilled);
|
this.dropFromLootTable(level, source, playerKilled);
|
||||||
// Paper start
|
// Paper start
|
||||||
final boolean prev = this.clearEquipmentSlots;
|
final boolean prev = this.clearEquipmentSlots;
|
||||||
@@ -1935,6 +1988,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -1964,6 +_,7 @@
|
||||||
// Paper end
|
// Paper end
|
||||||
this.dropCustomDeathLoot(level, source, playerKilled);
|
this.dropCustomDeathLoot(level, source, playerKilled);
|
||||||
this.clearEquipmentSlots = prev; // Paper
|
this.clearEquipmentSlots = prev; // Paper
|
||||||
@@ -161,7 +152,7 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment
|
// CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment
|
||||||
@@ -3264,6 +3318,7 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -3313,6 +_,7 @@
|
||||||
float dmg = (float)(diff * 10.0 - 3.0);
|
float dmg = (float)(diff * 10.0 - 3.0);
|
||||||
if (dmg > 0.0F) {
|
if (dmg > 0.0F) {
|
||||||
this.playSound(this.getFallDamageSound((int)dmg), 1.0F, 1.0F);
|
this.playSound(this.getFallDamageSound((int)dmg), 1.0F, 1.0F);
|
||||||
@@ -169,16 +160,16 @@ index 4bb708ef6601ee0512974b23fd98acc4e6bf81bb..93191aa5a24f9390d0d8c7c384c700db
|
|||||||
this.hurt(this.damageSources().flyIntoWall(), dmg);
|
this.hurt(this.damageSources().flyIntoWall(), dmg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4750,6 +4805,12 @@ public abstract class LivingEntity extends Entity implements Attackable, Waypoin
|
@@ -4801,6 +_,12 @@
|
||||||
|
? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND)
|
||||||
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.typeHolder());
|
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.typeHolder());
|
||||||
}
|
}
|
||||||
|
+
|
||||||
+ // Purpur start - Dispenser curse of binding protection
|
+ // Purpur start - Dispenser curse of binding protection
|
||||||
+ public @Nullable EquipmentSlot getEquipmentSlotForDispenserItem(ItemStack itemstack) {
|
+ public @Nullable EquipmentSlot getEquipmentSlotForDispenserItem(ItemStack itemstack) {
|
||||||
+ return EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.BINDING_CURSE, itemstack) > 0 ? null : this.getEquipmentSlotForItem(itemstack);
|
+ return EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.BINDING_CURSE, itemstack) > 0 ? null : this.getEquipmentSlotForItem(itemstack);
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Dispenser curse of binding protection
|
+ // Purpur end - Dispenser curse of binding protection
|
||||||
+
|
|
||||||
private static SlotAccess createEquipmentSlotAccess(final LivingEntity entity, final EquipmentSlot equipmentSlot) {
|
private static SlotAccess createEquipmentSlotAccess(final LivingEntity entity, final EquipmentSlot equipmentSlot) {
|
||||||
return equipmentSlot != EquipmentSlot.HEAD && equipmentSlot != EquipmentSlot.MAINHAND && equipmentSlot != EquipmentSlot.OFFHAND
|
return equipmentSlot != EquipmentSlot.HEAD && equipmentSlot != EquipmentSlot.MAINHAND && equipmentSlot != EquipmentSlot.OFFHAND
|
||||||
? SlotAccess.forEquipmentSlot(entity, equipmentSlot, stack -> stack.isEmpty() || entity.getEquipmentSlotForItem(stack) == equipmentSlot)
|
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
--- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
||||||
|
+++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java
|
||||||
|
@@ -95,7 +_,7 @@
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
Set<Pair<Holder<PoiType>, BlockPos>> poiPositions = poiManager.findAllClosestFirstWithType(
|
||||||
|
- poiType, cacheTest, body.blockPosition(), SCAN_RANGE, PoiManager.Occupancy.HAS_SPACE
|
||||||
|
+ poiType, cacheTest, body.blockPosition(), level.purpurConfig.villagerAcquirePoiSearchRadius, PoiManager.Occupancy.HAS_SPACE // Purpur - Configurable villager search radius
|
||||||
|
)
|
||||||
|
.limit(5L)
|
||||||
|
.filter(px -> validPoi.test(level, (BlockPos)px.getSecond()))
|
||||||
@@ -1,23 +1,15 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/bee/Bee.java b/net/minecraft/world/entity/animal/bee/Bee.java
|
|
||||||
index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617af9b83e15 100644
|
|
||||||
--- a/net/minecraft/world/entity/animal/bee/Bee.java
|
--- a/net/minecraft/world/entity/animal/bee/Bee.java
|
||||||
+++ b/net/minecraft/world/entity/animal/bee/Bee.java
|
+++ b/net/minecraft/world/entity/animal/bee/Bee.java
|
||||||
@@ -171,7 +171,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -169,7 +_,7 @@
|
||||||
// Paper end - Fix MC-167279
|
// Paper end - Fix MC-167279
|
||||||
this.lookControl = new Bee.BeeLookControl(this);
|
this.lookControl = new Bee.BeeLookControl(this);
|
||||||
this.setPathfindingMalus(PathType.FIRE_IN_NEIGHBOR, -1.0F);
|
this.setPathfindingMalus(PathType.FIRE, -1.0F);
|
||||||
- this.setPathfindingMalus(PathType.WATER, -1.0F);
|
- this.setPathfindingMalus(PathType.WATER, -1.0F);
|
||||||
+ if (this.level().purpurConfig.beeCanInstantlyStartDrowning) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - bee can instantly start drowning in water option
|
+ if (this.level().purpurConfig.beeCanInstantlyStartDrowning) this.setPathfindingMalus(PathType.WATER, -1.0F); // Purpur - bee can instantly start drowning in water option
|
||||||
this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F);
|
this.setPathfindingMalus(PathType.WATER_BORDER, 16.0F);
|
||||||
this.setPathfindingMalus(PathType.COCOA, -1.0F);
|
this.setPathfindingMalus(PathType.COCOA, -1.0F);
|
||||||
this.setPathfindingMalus(PathType.FENCE, -1.0F);
|
this.setPathfindingMalus(PathType.FENCE, -1.0F);
|
||||||
@@ -362,13 +362,19 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -360,13 +_,19 @@
|
||||||
if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) {
|
if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) {
|
||||||
boolean wantsToEnterHive = this.hasNectar()
|
boolean wantsToEnterHive = this.hasNectar()
|
||||||
|| this.isTiredOfLookingForNectar()
|
|| this.isTiredOfLookingForNectar()
|
||||||
@@ -38,7 +30,7 @@ index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617a
|
|||||||
public void setStayOutOfHiveCountdown(final int ticks) {
|
public void setStayOutOfHiveCountdown(final int ticks) {
|
||||||
this.stayOutOfHiveCountdown = ticks;
|
this.stayOutOfHiveCountdown = ticks;
|
||||||
}
|
}
|
||||||
@@ -389,7 +395,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -387,7 +_,7 @@
|
||||||
@Override
|
@Override
|
||||||
protected void customServerAiStep(final ServerLevel level) {
|
protected void customServerAiStep(final ServerLevel level) {
|
||||||
boolean hasStung = this.hasStung();
|
boolean hasStung = this.hasStung();
|
||||||
@@ -47,7 +39,7 @@ index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617a
|
|||||||
this.underWaterTicks++;
|
this.underWaterTicks++;
|
||||||
} else {
|
} else {
|
||||||
this.underWaterTicks = 0;
|
this.underWaterTicks = 0;
|
||||||
@@ -399,6 +405,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -397,6 +_,7 @@
|
||||||
this.hurtServer(level, this.damageSources().drown(), 1.0F);
|
this.hurtServer(level, this.damageSources().drown(), 1.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +47,7 @@ index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617a
|
|||||||
if (hasStung) {
|
if (hasStung) {
|
||||||
this.timeSinceSting++;
|
this.timeSinceSting++;
|
||||||
if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) {
|
if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) {
|
||||||
@@ -1132,6 +1139,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -1128,6 +_,7 @@
|
||||||
Bee.this.savedFlowerPos = nearbyPos.get();
|
Bee.this.savedFlowerPos = nearbyPos.get();
|
||||||
Bee.this.navigation
|
Bee.this.navigation
|
||||||
.moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F);
|
.moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F);
|
||||||
@@ -63,7 +55,7 @@ index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617a
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60);
|
Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60);
|
||||||
@@ -1178,6 +1186,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -1174,6 +_,7 @@
|
||||||
this.pollinating = false;
|
this.pollinating = false;
|
||||||
Bee.this.navigation.stop();
|
Bee.this.navigation.stop();
|
||||||
Bee.this.remainingCooldownBeforeLocatingNewFlower = 200;
|
Bee.this.remainingCooldownBeforeLocatingNewFlower = 200;
|
||||||
@@ -71,7 +63,7 @@ index 899481ad0108bd06fb09727bf59827a7227e0c80..28cf7f1b7b947639a686b83a5a7d617a
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1224,6 +1233,7 @@ public class Bee extends Animal implements FlyingAnimal, NeutralMob {
|
@@ -1220,6 +_,7 @@
|
||||||
this.setWantedPos();
|
this.setWantedPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
--- a/net/minecraft/world/entity/animal/squid/Squid.java
|
||||||
|
+++ b/net/minecraft/world/entity/animal/squid/Squid.java
|
||||||
|
@@ -55,6 +_,25 @@
|
||||||
|
this.tentacleSpeed = 1.0F / (this.random.nextFloat() + 1.0F) * 0.2F;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ // Purpur start - Stop squids floating on top of water
|
||||||
|
+ @Override
|
||||||
|
+ public net.minecraft.world.phys.AABB getAxisForFluidCheck() {
|
||||||
|
+ // Stops squids from floating just over the water
|
||||||
|
+ return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck);
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Stop squids floating on top of water
|
||||||
|
+
|
||||||
|
+ // Purpur start - Flying squids! Oh my!
|
||||||
|
+ public boolean canFly() {
|
||||||
|
+ return this.level().purpurConfig.squidsCanFly;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ @Override
|
||||||
|
+ public boolean isInWater() {
|
||||||
|
+ return this.wasTouchingWater || canFly();
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Flying squids! Oh my!
|
||||||
|
+
|
||||||
|
@Override
|
||||||
|
protected void registerGoals() {
|
||||||
|
this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this));
|
||||||
|
@@ -131,6 +_,7 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.isInWater()) {
|
||||||
|
+ if (canFly()) setNoGravity(!wasTouchingWater); // Purpur - Flying squids! Oh my!
|
||||||
|
if (this.tentacleMovement < Mth.PI) {
|
||||||
|
float tentacleScale = this.tentacleMovement / Mth.PI;
|
||||||
|
this.tentacleAngle = Mth.sin(tentacleScale * tentacleScale * Mth.PI) * Mth.PI * 0.25F;
|
||||||
|
@@ -316,7 +_,7 @@
|
||||||
|
int noActionTime = this.squid.getNoActionTime();
|
||||||
|
if (noActionTime > 100) {
|
||||||
|
this.squid.movementVector = Vec3.ZERO;
|
||||||
|
- } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.wasTouchingWater || !this.squid.hasMovementVector()) {
|
||||||
|
+ } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.isInWater() || !this.squid.hasMovementVector()) { // Purpur - Flying squids! Oh my!
|
||||||
|
float angle = this.squid.getRandom().nextFloat() * (float) (Math.PI * 2);
|
||||||
|
this.squid.movementVector = new Vec3(Mth.cos(angle) * 0.2F, -0.1F + this.squid.getRandom().nextFloat() * 0.2F, Mth.sin(angle) * 0.2F);
|
||||||
|
}
|
||||||
@@ -1,17 +1,9 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/animal/wolf/Wolf.java b/net/minecraft/world/entity/animal/wolf/Wolf.java
|
|
||||||
index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe07657018aa607f 100644
|
|
||||||
--- a/net/minecraft/world/entity/animal/wolf/Wolf.java
|
--- a/net/minecraft/world/entity/animal/wolf/Wolf.java
|
||||||
+++ b/net/minecraft/world/entity/animal/wolf/Wolf.java
|
+++ b/net/minecraft/world/entity/animal/wolf/Wolf.java
|
||||||
@@ -96,6 +96,37 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -104,6 +_,37 @@
|
||||||
public static final TargetingConditions.Selector PREY_SELECTOR = (target, level) -> target.is(EntityType.SHEEP)
|
private static final EntityDimensions BABY_DIMENSIONS = EntityDimensions.scalable(0.3F, 0.425F)
|
||||||
|| target.is(EntityType.RABBIT)
|
.withEyeHeight(0.34375F)
|
||||||
|| target.is(EntityType.FOX);
|
.withAttachments(EntityAttachments.builder().attach(EntityAttachment.PASSENGER, 0.0F, 0.4375F, 0.0F));
|
||||||
+ // Purpur start - Configurable chance for wolves to spawn rabid
|
+ // Purpur start - Configurable chance for wolves to spawn rabid
|
||||||
+ private boolean isRabid = false;
|
+ private boolean isRabid = false;
|
||||||
+ private static final TargetingConditions.Selector RABID_PREDICATE = (entity, ignored) -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof net.minecraft.world.entity.Mob;
|
+ private static final TargetingConditions.Selector RABID_PREDICATE = (entity, ignored) -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof net.minecraft.world.entity.Mob;
|
||||||
@@ -46,7 +38,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
private static final float START_HEALTH = 8.0F;
|
private static final float START_HEALTH = 8.0F;
|
||||||
private static final float TAME_HEALTH = 40.0F;
|
private static final float TAME_HEALTH = 40.0F;
|
||||||
private static final float ARMOR_REPAIR_UNIT = 0.125F;
|
private static final float ARMOR_REPAIR_UNIT = 0.125F;
|
||||||
@@ -117,12 +148,47 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -125,12 +_,47 @@
|
||||||
this.setPathfindingMalus(PathType.ON_TOP_OF_POWDER_SNOW, -1.0F);
|
this.setPathfindingMalus(PathType.ON_TOP_OF_POWDER_SNOW, -1.0F);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +86,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F));
|
this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F));
|
||||||
this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0, true));
|
this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0, true));
|
||||||
this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0, 10.0F, 2.0F));
|
this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0, 10.0F, 2.0F));
|
||||||
@@ -135,7 +201,7 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -143,7 +_,7 @@
|
||||||
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
|
this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this));
|
||||||
this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers());
|
this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers());
|
||||||
this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt));
|
this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt));
|
||||||
@@ -103,7 +95,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR));
|
this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR));
|
||||||
this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false));
|
this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false));
|
||||||
this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true));
|
this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true));
|
||||||
@@ -230,6 +296,7 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -238,6 +_,7 @@
|
||||||
protected void addAdditionalSaveData(final ValueOutput output) {
|
protected void addAdditionalSaveData(final ValueOutput output) {
|
||||||
super.addAdditionalSaveData(output);
|
super.addAdditionalSaveData(output);
|
||||||
output.store("CollarColor", DyeColor.LEGACY_ID_CODEC, this.getCollarColor());
|
output.store("CollarColor", DyeColor.LEGACY_ID_CODEC, this.getCollarColor());
|
||||||
@@ -111,7 +103,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
VariantUtils.writeVariant(output, this.getVariant());
|
VariantUtils.writeVariant(output, this.getVariant());
|
||||||
this.addPersistentAngerSaveData(output);
|
this.addPersistentAngerSaveData(output);
|
||||||
this.getSoundVariant()
|
this.getSoundVariant()
|
||||||
@@ -244,6 +311,10 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -252,6 +_,10 @@
|
||||||
super.readAdditionalSaveData(input);
|
super.readAdditionalSaveData(input);
|
||||||
VariantUtils.readVariant(input, Registries.WOLF_VARIANT).ifPresent(this::setVariant);
|
VariantUtils.readVariant(input, Registries.WOLF_VARIANT).ifPresent(this::setVariant);
|
||||||
this.setCollarColor(input.read("CollarColor", DyeColor.LEGACY_ID_CODEC).orElse(DEFAULT_COLLAR_COLOR));
|
this.setCollarColor(input.read("CollarColor", DyeColor.LEGACY_ID_CODEC).orElse(DEFAULT_COLLAR_COLOR));
|
||||||
@@ -122,7 +114,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
this.readPersistentAngerSaveData(this.level(), input);
|
this.readPersistentAngerSaveData(this.level(), input);
|
||||||
input.read("sound_variant", ResourceKey.codec(Registries.WOLF_SOUND_VARIANT))
|
input.read("sound_variant", ResourceKey.codec(Registries.WOLF_SOUND_VARIANT))
|
||||||
.flatMap(soundVariant -> this.registryAccess().lookupOrThrow(Registries.WOLF_SOUND_VARIANT).get((ResourceKey<WolfSoundVariant>)soundVariant))
|
.flatMap(soundVariant -> this.registryAccess().lookupOrThrow(Registries.WOLF_SOUND_VARIANT).get((ResourceKey<WolfSoundVariant>)soundVariant))
|
||||||
@@ -267,6 +338,10 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -275,6 +_,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
this.setSoundVariant(WolfSoundVariants.pickRandomSoundVariant(this.registryAccess(), level.getRandom()));
|
this.setSoundVariant(WolfSoundVariants.pickRandomSoundVariant(this.registryAccess(), level.getRandom()));
|
||||||
@@ -133,7 +125,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
return super.finalizeSpawn(level, difficulty, spawnReason, groupData);
|
return super.finalizeSpawn(level, difficulty, spawnReason, groupData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -315,6 +390,11 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -323,6 +_,11 @@
|
||||||
public void tick() {
|
public void tick() {
|
||||||
super.tick();
|
super.tick();
|
||||||
if (this.isAlive()) {
|
if (this.isAlive()) {
|
||||||
@@ -145,7 +137,7 @@ index a2e1cfc50356142e08134df9123139f2025cb414..3519e9289f79d89bcaa3ad51fe076570
|
|||||||
this.interestedAngleO = this.interestedAngle;
|
this.interestedAngleO = this.interestedAngle;
|
||||||
if (this.isInterested()) {
|
if (this.isInterested()) {
|
||||||
this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F;
|
this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F;
|
||||||
@@ -516,13 +596,27 @@ public class Wolf extends TamableAnimal implements NeutralMob {
|
@@ -524,13 +_,27 @@
|
||||||
itemStack.consume(1, player);
|
itemStack.consume(1, player);
|
||||||
this.tryToTame(player);
|
this.tryToTame(player);
|
||||||
return InteractionResult.SUCCESS_SERVER;
|
return InteractionResult.SUCCESS_SERVER;
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Monster.java b/net/minecraft/world/entity/monster/Monster.java
|
|
||||||
index c55b51ed7ed27cc658170d5c35c81a818b8867f2..0ce15ca820010f2dd44488e60ac06517968884bb 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Monster.java
|
--- a/net/minecraft/world/entity/monster/Monster.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Monster.java
|
+++ b/net/minecraft/world/entity/monster/Monster.java
|
||||||
@@ -84,6 +84,11 @@ public abstract class Monster extends PathfinderMob implements Enemy {
|
@@ -83,6 +_,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isDarkEnoughToSpawn(final ServerLevelAccessor level, final BlockPos pos, final RandomSource random) {
|
public static boolean isDarkEnoughToSpawn(final ServerLevelAccessor level, final BlockPos pos, final RandomSource random) {
|
||||||
@@ -20,7 +12,7 @@ index c55b51ed7ed27cc658170d5c35c81a818b8867f2..0ce15ca820010f2dd44488e60ac06517
|
|||||||
if (level.getBrightness(LightLayer.SKY, pos) > random.nextInt(32)) {
|
if (level.getBrightness(LightLayer.SKY, pos) > random.nextInt(32)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -113,6 +118,11 @@ public abstract class Monster extends PathfinderMob implements Enemy {
|
@@ -111,6 +_,11 @@
|
||||||
public static boolean checkAnyLightMonsterSpawnRules(
|
public static boolean checkAnyLightMonsterSpawnRules(
|
||||||
final EntityType<? extends Monster> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
final EntityType<? extends Monster> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
||||||
) {
|
) {
|
||||||
@@ -29,10 +21,10 @@ index c55b51ed7ed27cc658170d5c35c81a818b8867f2..0ce15ca820010f2dd44488e60ac06517
|
|||||||
+ return false;
|
+ return false;
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Config to disable hostile mob spawn on ice
|
+ // Purpur end - Config to disable hostile mob spawn on ice
|
||||||
return level.getDifficulty() != Difficulty.PEACEFUL && checkMobSpawnRules(type, level, spawnReason, pos, random);
|
return checkMobSpawnRules(type, level, spawnReason, pos, random);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -154,4 +164,12 @@ public abstract class Monster extends PathfinderMob implements Enemy {
|
@@ -152,4 +_,12 @@
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Shulker.java b/net/minecraft/world/entity/monster/Shulker.java
|
|
||||||
index 86ca7f79741373fb54a4a90645fe080879edb416..1f7a8b12a37b42fa38cb7136cd9ef5b3bab45d6b 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Shulker.java
|
--- a/net/minecraft/world/entity/monster/Shulker.java
|
||||||
+++ b/net/minecraft/world/entity/monster/Shulker.java
|
+++ b/net/minecraft/world/entity/monster/Shulker.java
|
||||||
@@ -93,6 +93,22 @@ public class Shulker extends AbstractGolem implements Enemy {
|
@@ -93,6 +_,22 @@
|
||||||
this.lookControl = new Shulker.ShulkerLookControl(this);
|
this.lookControl = new Shulker.ShulkerLookControl(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,19 +23,19 @@ index 86ca7f79741373fb54a4a90645fe080879edb416..1f7a8b12a37b42fa38cb7136cd9ef5b3
|
|||||||
@Override
|
@Override
|
||||||
protected void registerGoals() {
|
protected void registerGoals() {
|
||||||
this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true));
|
this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true));
|
||||||
@@ -454,11 +470,21 @@ public class Shulker extends AbstractGolem implements Enemy {
|
@@ -466,11 +_,21 @@
|
||||||
private void hitByShulkerBullet() {
|
private void hitByShulkerBullet() {
|
||||||
Vec3 oldPosition = this.position();
|
Vec3 oldPosition = this.position();
|
||||||
AABB oldAabb = this.getBoundingBox();
|
AABB oldAabb = this.getBoundingBox();
|
||||||
- if (!this.isClosed() && this.teleportSomewhere()) {
|
- if (!this.isClosed() && this.teleportSomewhere()) {
|
||||||
- int shulkerCount = this.level().getEntities(EntityType.SHULKER, oldAabb.inflate(8.0), Entity::isAlive).size();
|
- int shulkerCount = this.level().getEntities(EntityTypes.SHULKER, oldAabb.inflate(8.0), Entity::isAlive).size();
|
||||||
- float failureChance = (shulkerCount - 1) / 5.0F;
|
- float failureChance = (shulkerCount - 1) / 5.0F;
|
||||||
- if (!(this.level().getRandom().nextFloat() < failureChance)) {
|
- if (!(this.level().getRandom().nextFloat() < failureChance)) {
|
||||||
+ // Purpur start - Shulker spawn from bullet options
|
+ // Purpur start - Shulker spawn from bullet options
|
||||||
+ if ((!this.level().purpurConfig.shulkerSpawnFromBulletRequireOpenLid || !this.isClosed()) && this.teleportSomewhere()) {
|
+ if ((!this.level().purpurConfig.shulkerSpawnFromBulletRequireOpenLid || !this.isClosed()) && this.teleportSomewhere()) {
|
||||||
+ float failureChance = this.level().purpurConfig.shulkerSpawnFromBulletBaseChance;
|
+ float failureChance = this.level().purpurConfig.shulkerSpawnFromBulletBaseChance;
|
||||||
+ if (!this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation.isBlank()) {
|
+ if (!this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation.isBlank()) {
|
||||||
+ int shulkerCount = this.level().getEntities((net.minecraft.world.level.entity.EntityTypeTest) EntityType.SHULKER, oldAabb.inflate(this.level().purpurConfig.shulkerSpawnFromBulletNearbyRange), Entity::isAlive).size();
|
+ int shulkerCount = this.level().getEntities(EntityTypes.SHULKER, oldAabb.inflate(this.level().purpurConfig.shulkerSpawnFromBulletNearbyRange), Entity::isAlive).size();
|
||||||
+ try {
|
+ try {
|
||||||
+ failureChance -= ((Number) scriptEngine.eval("let nearby = " + shulkerCount + "; " + this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation)).floatValue();
|
+ failureChance -= ((Number) scriptEngine.eval("let nearby = " + shulkerCount + "; " + this.level().purpurConfig.shulkerSpawnFromBulletNearbyEquation)).floatValue();
|
||||||
+ } catch (javax.script.ScriptException e) {
|
+ } catch (javax.script.ScriptException e) {
|
||||||
@@ -52,12 +44,12 @@ index 86ca7f79741373fb54a4a90645fe080879edb416..1f7a8b12a37b42fa38cb7136cd9ef5b3
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ if (this.level().getRandom().nextFloat() <= failureChance) {
|
+ if (this.level().getRandom().nextFloat() <= failureChance) {
|
||||||
Shulker baby = EntityType.SHULKER.create(this.level(), EntitySpawnReason.BREEDING);
|
Shulker baby = EntityTypes.SHULKER.create(this.level(), EntitySpawnReason.BREEDING);
|
||||||
+ // Purpur end - Shulker spawn from bullet options
|
+ // Purpur end - Shulker spawn from bullet options
|
||||||
if (baby != null) {
|
if (baby != null) {
|
||||||
baby.setVariant(this.getVariant());
|
baby.setVariant(this.getVariant());
|
||||||
baby.snapTo(oldPosition);
|
baby.snapTo(oldPosition);
|
||||||
@@ -565,7 +591,7 @@ public class Shulker extends AbstractGolem implements Enemy {
|
@@ -577,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<DyeColor> getVariant() {
|
public Optional<DyeColor> getVariant() {
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
--- a/net/minecraft/world/entity/monster/cubemob/MagmaCube.java
|
||||||
|
+++ b/net/minecraft/world/entity/monster/cubemob/MagmaCube.java
|
||||||
|
@@ -53,6 +_,11 @@
|
||||||
|
public static boolean checkMagmaCubeSpawnRules(
|
||||||
|
final EntityType<MagmaCube> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
||||||
|
) {
|
||||||
|
+ // Purpur start - Config to disable hostile mob spawn on ice
|
||||||
|
+ if (net.minecraft.world.entity.monster.Monster.canSpawnInBlueAndPackedIce(level, pos)) {
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+ // Purpur end - Config to disable hostile mob spawn on ice
|
||||||
|
return level.getDifficulty() != Difficulty.PEACEFUL;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
--- a/net/minecraft/world/entity/monster/cubemob/Slime.java
|
||||||
From: File <noreply+automated@papermc.io>
|
+++ b/net/minecraft/world/entity/monster/cubemob/Slime.java
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
@@ -73,6 +_,11 @@
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/monster/Slime.java b/net/minecraft/world/entity/monster/Slime.java
|
|
||||||
index e19da253db0b1840f582b09a45d73638438afcfd..04f0c15a891c86ab42fe5aa719cb1357f68dd0f6 100644
|
|
||||||
--- a/net/minecraft/world/entity/monster/Slime.java
|
|
||||||
+++ b/net/minecraft/world/entity/monster/Slime.java
|
|
||||||
@@ -299,6 +299,11 @@ public class Slime extends Mob implements Enemy {
|
|
||||||
public static boolean checkSlimeSpawnRules(
|
public static boolean checkSlimeSpawnRules(
|
||||||
final EntityType<Slime> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
final EntityType<Slime> type, final LevelAccessor level, final EntitySpawnReason spawnReason, final BlockPos pos, final RandomSource random
|
||||||
) {
|
) {
|
||||||
@@ -1,17 +1,9 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java
|
|
||||||
index 4dea05ff63055803e7f41b729fdeca35879bc0d8..d53c8c684615421b982272bbb84a40cdcb0387f5 100644
|
|
||||||
--- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java
|
--- a/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java
|
||||||
+++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java
|
+++ b/net/minecraft/world/entity/npc/wanderingtrader/WanderingTraderSpawner.java
|
||||||
@@ -135,7 +135,17 @@ public class WanderingTraderSpawner implements CustomSpawner {
|
@@ -135,7 +_,17 @@
|
||||||
int xPosition = referencePosition.getX() + this.random.nextInt(radius * 2) - radius;
|
int xPosition = referencePosition.getX() + this.random.nextInt(radius * 2) - radius;
|
||||||
int zPosition = referencePosition.getZ() + this.random.nextInt(radius * 2) - radius;
|
int zPosition = referencePosition.getZ() + this.random.nextInt(radius * 2) - radius;
|
||||||
int yPosition = level.getHeight(SpawnPlacements.getHeightmapType(EntityType.WANDERING_TRADER), xPosition, zPosition);
|
int yPosition = level.getHeight(SpawnPlacements.getHeightmapType(EntityTypes.WANDERING_TRADER), xPosition, zPosition);
|
||||||
- BlockPos spawnPos = new BlockPos(xPosition, yPosition, zPosition);
|
- BlockPos spawnPos = new BlockPos(xPosition, yPosition, zPosition);
|
||||||
+ // Purpur start - Allow toggling special MobSpawners per world - allow traders to spawn below nether roof
|
+ // Purpur start - Allow toggling special MobSpawners per world - allow traders to spawn below nether roof
|
||||||
+ BlockPos.MutableBlockPos spawnPos = new BlockPos.MutableBlockPos(xPosition, yPosition, zPosition);
|
+ BlockPos.MutableBlockPos spawnPos = new BlockPos.MutableBlockPos(xPosition, yPosition, zPosition);
|
||||||
@@ -24,6 +16,6 @@ index 4dea05ff63055803e7f41b729fdeca35879bc0d8..d53c8c684615421b982272bbb84a40cd
|
|||||||
+ } while (level.getBlockState(spawnPos).isAir() && spawnPos.getY() > 0);
|
+ } while (level.getBlockState(spawnPos).isAir() && spawnPos.getY() > 0);
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Allow toggling special MobSpawners per world
|
+ // Purpur end - Allow toggling special MobSpawners per world
|
||||||
if (wanderingTraderSpawnType.isSpawnPositionOk(level, spawnPos, EntityType.WANDERING_TRADER)) {
|
if (wanderingTraderSpawnType.isSpawnPositionOk(level, spawnPos, EntityTypes.WANDERING_TRADER)) {
|
||||||
spawnPosition = spawnPos;
|
spawnPosition = spawnPos;
|
||||||
break;
|
break;
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java
|
|
||||||
index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9cebb161d9 100644
|
|
||||||
--- a/net/minecraft/world/entity/player/Player.java
|
--- a/net/minecraft/world/entity/player/Player.java
|
||||||
+++ b/net/minecraft/world/entity/player/Player.java
|
+++ b/net/minecraft/world/entity/player/Player.java
|
||||||
@@ -173,11 +173,20 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -174,11 +_,20 @@
|
||||||
public float hurtDir;
|
public float hurtDir;
|
||||||
public boolean affectsSpawning = true; // Paper - Affects Spawning API
|
public boolean affectsSpawning = true; // Paper - Affects Spawning API
|
||||||
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage
|
public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage
|
||||||
@@ -29,7 +21,7 @@ index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9c
|
|||||||
@Override
|
@Override
|
||||||
public org.bukkit.craftbukkit.entity.CraftHumanEntity getBukkitEntity() {
|
public org.bukkit.craftbukkit.entity.CraftHumanEntity getBukkitEntity() {
|
||||||
return (org.bukkit.craftbukkit.entity.CraftHumanEntity) super.getBukkitEntity();
|
return (org.bukkit.craftbukkit.entity.CraftHumanEntity) super.getBukkitEntity();
|
||||||
@@ -242,6 +251,12 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -243,6 +_,12 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
@@ -42,7 +34,7 @@ index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9c
|
|||||||
this.noPhysics = this.isSpectator();
|
this.noPhysics = this.isSpectator();
|
||||||
if (this.isSpectator() || this.isPassenger()) {
|
if (this.isSpectator() || this.isPassenger()) {
|
||||||
this.setOnGround(false);
|
this.setOnGround(false);
|
||||||
@@ -299,6 +314,17 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -300,6 +_,17 @@
|
||||||
this.turtleHelmetTick();
|
this.turtleHelmetTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,16 +52,16 @@ index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9c
|
|||||||
this.cooldowns.tick();
|
this.cooldowns.tick();
|
||||||
this.updatePlayerPose();
|
this.updatePlayerPose();
|
||||||
}
|
}
|
||||||
@@ -504,7 +530,7 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -505,7 +_,7 @@
|
||||||
List<Entity> orbs = Lists.newArrayList();
|
List<Entity> orbs = Lists.newArrayList();
|
||||||
|
|
||||||
for (Entity entity : entities) {
|
for (Entity entity : entities) {
|
||||||
- if (entity.is(EntityType.EXPERIENCE_ORB)) {
|
- if (entity.is(EntityTypes.EXPERIENCE_ORB)) {
|
||||||
+ if (entity.is(EntityType.EXPERIENCE_ORB) && entity.level().purpurConfig.playerExpPickupDelay >= 0) { // Purpur - Configurable player pickup exp delay
|
+ if (entity.is(EntityTypes.EXPERIENCE_ORB) && entity.level().purpurConfig.playerExpPickupDelay >= 0) { // Purpur - Configurable player pickup exp delay
|
||||||
orbs.add(entity);
|
orbs.add(entity);
|
||||||
} else if (!entity.isRemoved()) {
|
} else if (!entity.isRemoved()) {
|
||||||
this.touch(entity);
|
this.touch(entity);
|
||||||
@@ -1052,7 +1078,7 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -1053,7 +_,7 @@
|
||||||
criticalAttack = criticalAttack && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
|
criticalAttack = criticalAttack && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
|
||||||
if (criticalAttack) {
|
if (criticalAttack) {
|
||||||
damageSource = damageSource.critical(); // Paper - critical damage API
|
damageSource = damageSource.critical(); // Paper - critical damage API
|
||||||
@@ -78,7 +70,7 @@ index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9c
|
|||||||
}
|
}
|
||||||
|
|
||||||
float totalDamage = baseDamage + magicBoost;
|
float totalDamage = baseDamage + magicBoost;
|
||||||
@@ -1748,7 +1774,23 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -1757,7 +_,23 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getBaseExperienceReward(final ServerLevel level) {
|
protected int getBaseExperienceReward(final ServerLevel level) {
|
||||||
@@ -103,17 +95,17 @@ index 5788ace1dfaf600833d8ce5e3742fb3a907d87d4..7c4ae5904081da7b0e4c135c243f2d9c
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -1792,6 +1834,13 @@ public abstract class Player extends Avatar implements ContainerUser {
|
@@ -1800,6 +_,13 @@
|
||||||
|
public boolean addItem(final ItemStack itemStack) {
|
||||||
return this.inventory.add(itemStack);
|
return this.inventory.add(itemStack);
|
||||||
}
|
}
|
||||||
|
+
|
||||||
+ // Purpur start - Player ridable in water option
|
+ // Purpur start - Player ridable in water option
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public boolean dismountsUnderwater() {
|
+ public boolean dismountsUnderwater() {
|
||||||
+ return !level().purpurConfig.playerRidableInWater;
|
+ return !level().purpurConfig.playerRidableInWater;
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Player ridable in water option
|
+ // Purpur end - Player ridable in water option
|
||||||
+
|
|
||||||
public abstract @Nullable GameType gameMode();
|
public abstract @Nullable GameType gameMode();
|
||||||
|
|
||||||
@Override
|
|
||||||
@@ -1,26 +1,18 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
|
|
||||||
index cd0191ab65e7d829cfa055fe8978ea14c14a3bfe..5967bfd4e738b82480f158de0c144e4b416de9b8 100644
|
|
||||||
--- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
|
--- a/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
|
||||||
+++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
|
+++ b/net/minecraft/world/entity/projectile/throwableitemprojectile/ThrownEnderpearl.java
|
||||||
@@ -113,9 +113,10 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -115,9 +_,10 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
- if (this.random.nextFloat() < 0.05F && level.isSpawningMonsters()) {
|
- if (this.random.nextFloat() < 0.05F && level.isSpawningMonsters() && level.getLevelData().getDifficulty() != Difficulty.PEACEFUL) {
|
||||||
+ if (this.random.nextFloat() < level.purpurConfig.enderPearlEndermiteChance && level.isSpawningMonsters()) { // Purpur - Configurable Ender Pearl RNG
|
+ if (this.random.nextFloat() < level.purpurConfig.enderPearlEndermiteChance && level.isSpawningMonsters() && level.getLevelData().getDifficulty() != Difficulty.PEACEFUL) { // Purpur - Configurable Ender Pearl RNG
|
||||||
Endermite endermite = EntityType.ENDERMITE.create(level, EntitySpawnReason.TRIGGERED);
|
Endermite endermite = EntityTypes.ENDERMITE.create(level, EntitySpawnReason.TRIGGERED);
|
||||||
if (endermite != null) {
|
if (endermite != null) {
|
||||||
+ endermite.setPlayerSpawned(true); // Purpur - Add back player spawned endermite API
|
+ endermite.setPlayerSpawned(true); // Purpur - Add back player spawned endermite API
|
||||||
endermite.snapTo(preTeleportX, preTeleportY, preTeleportZ, preTeleportYRot, preTeleportXRot); // Paper - spawn endermite at pre teleport position as teleport has been moved up
|
endermite.snapTo(preTeleportX, preTeleportY, preTeleportZ, preTeleportYRot, preTeleportXRot); // Paper - spawn endermite at pre teleport position as teleport has been moved up
|
||||||
level.addFreshEntity(endermite, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_PEARL); // Paper - add reason
|
level.addFreshEntity(endermite, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_PEARL); // Paper - add reason
|
||||||
}
|
}
|
||||||
@@ -135,7 +136,7 @@ public class ThrownEnderpearl extends ThrowableItemProjectile {
|
@@ -137,7 +_,7 @@
|
||||||
if (newOwner != null) {
|
if (newOwner != null) {
|
||||||
newOwner.resetFallDistance();
|
newOwner.resetFallDistance();
|
||||||
newOwner.resetCurrentImpulseContext();
|
newOwner.resetCurrentImpulseContext();
|
||||||
@@ -1,29 +1,21 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/inventory/GrindstoneMenu.java b/net/minecraft/world/inventory/GrindstoneMenu.java
|
|
||||||
index e074c3f28599f650fab9bda25b69c596d6129781..cbb50aedac2a2cafa5ca34140ba28b02e118b458 100644
|
|
||||||
--- a/net/minecraft/world/inventory/GrindstoneMenu.java
|
--- a/net/minecraft/world/inventory/GrindstoneMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/GrindstoneMenu.java
|
+++ b/net/minecraft/world/inventory/GrindstoneMenu.java
|
||||||
@@ -92,11 +92,13 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
@@ -92,11 +_,13 @@
|
||||||
@Override
|
@Override
|
||||||
public void onTake(final Player player, final ItemStack carried) {
|
public void onTake(final Player player, final ItemStack carried) {
|
||||||
access.execute((level, pos) -> {
|
access.execute((level, pos) -> {
|
||||||
+ ItemStack itemstack = activeQuickItem == null ? carried : activeQuickItem; // Purpur - Grindstone API
|
+ ItemStack itemstack = activeQuickItem == null ? carried : activeQuickItem; // Purpur - Grindstone API
|
||||||
if (level instanceof ServerLevel) {
|
if (level instanceof ServerLevel serverLevel) {
|
||||||
// Paper start - Fire BlockExpEvent on grindstone use
|
// Paper start - Fire BlockExpEvent on grindstone use
|
||||||
org.bukkit.event.block.BlockExpEvent event = new org.bukkit.event.block.BlockExpEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), this.getExperienceAmount(level));
|
org.bukkit.event.block.BlockExpEvent event = new org.bukkit.event.block.BlockExpEvent(org.bukkit.craftbukkit.block.CraftBlock.at(level, pos), this.getExperienceAmount(level));
|
||||||
event.callEvent();
|
event.callEvent();
|
||||||
- ExperienceOrb.awardWithDirection((ServerLevel) level, Vec3.atCenterOf(pos), Vec3.ZERO, event.getExpToDrop(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player, null);
|
- ExperienceOrb.awardWithDirection(serverLevel, Vec3.atCenterOf(pos), Vec3.ZERO, event.getExpToDrop(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player, null);
|
||||||
+ org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent grindstoneTakeResultEvent = new org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), event.getExpToDrop()); grindstoneTakeResultEvent.callEvent(); // Purpur - Grindstone API
|
+ org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent grindstoneTakeResultEvent = new org.purpurmc.purpur.event.inventory.GrindstoneTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), event.getExpToDrop()); grindstoneTakeResultEvent.callEvent(); // Purpur - Grindstone API
|
||||||
+ ExperienceOrb.awardWithDirection((ServerLevel) level, Vec3.atCenterOf(pos), Vec3.ZERO, grindstoneTakeResultEvent.getExperienceAmount(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player, null); // Purpur - Grindstone API
|
+ ExperienceOrb.awardWithDirection(serverLevel, Vec3.atCenterOf(pos), Vec3.ZERO, grindstoneTakeResultEvent.getExperienceAmount(), org.bukkit.entity.ExperienceOrb.SpawnReason.GRINDSTONE, player, null); // Purpur - Grindstone API
|
||||||
// Paper end - Fire BlockExpEvent on grindstone use
|
// Paper end - Fire BlockExpEvent on grindstone use
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +127,7 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
@@ -125,7 +_,7 @@
|
||||||
for (Entry<Holder<Enchantment>> entry : enchantments.entrySet()) {
|
for (Entry<Holder<Enchantment>> entry : enchantments.entrySet()) {
|
||||||
Holder<Enchantment> enchant = entry.getKey();
|
Holder<Enchantment> enchant = entry.getKey();
|
||||||
int lvl = entry.getIntValue();
|
int lvl = entry.getIntValue();
|
||||||
@@ -32,7 +24,7 @@ index e074c3f28599f650fab9bda25b69c596d6129781..cbb50aedac2a2cafa5ca34140ba28b02
|
|||||||
amount += enchant.value().getMinCost(lvl);
|
amount += enchant.value().getMinCost(lvl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -205,16 +207,76 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
@@ -205,16 +_,76 @@
|
||||||
|
|
||||||
for (Entry<Holder<Enchantment>> entry : enchantments.entrySet()) {
|
for (Entry<Holder<Enchantment>> entry : enchantments.entrySet()) {
|
||||||
Holder<Enchantment> enchant = entry.getKey();
|
Holder<Enchantment> enchant = entry.getKey();
|
||||||
@@ -111,7 +103,7 @@ index e074c3f28599f650fab9bda25b69c596d6129781..cbb50aedac2a2cafa5ca34140ba28b02
|
|||||||
);
|
);
|
||||||
if (item.is(Items.ENCHANTED_BOOK) && newEnchantments.isEmpty()) {
|
if (item.is(Items.ENCHANTED_BOOK) && newEnchantments.isEmpty()) {
|
||||||
item = item.transmuteCopy(Items.BOOK);
|
item = item.transmuteCopy(Items.BOOK);
|
||||||
@@ -227,6 +289,22 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
@@ -227,6 +_,22 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
item.set(DataComponents.REPAIR_COST, repairCost);
|
item.set(DataComponents.REPAIR_COST, repairCost);
|
||||||
@@ -134,7 +126,7 @@ index e074c3f28599f650fab9bda25b69c596d6129781..cbb50aedac2a2cafa5ca34140ba28b02
|
|||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -283,7 +361,9 @@ public class GrindstoneMenu extends AbstractContainerMenu {
|
@@ -283,7 +_,9 @@
|
||||||
return ItemStack.EMPTY;
|
return ItemStack.EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
--- a/net/minecraft/world/item/Items.java
|
||||||
|
+++ b/net/minecraft/world/item/Items.java
|
||||||
|
@@ -416,7 +_,7 @@
|
||||||
|
public static final Item PURPUR_BLOCK = registerBlock(BlockItemIds.PURPUR_BLOCK, Blocks.PURPUR_BLOCK);
|
||||||
|
public static final Item PURPUR_PILLAR = registerBlock(BlockItemIds.PURPUR_PILLAR, Blocks.PURPUR_PILLAR);
|
||||||
|
public static final Item PURPUR_STAIRS = registerBlock(BlockItemIds.PURPUR_STAIRS, Blocks.PURPUR_STAIRS);
|
||||||
|
- public static final Item SPAWNER = registerBlock(BlockItemIds.SPAWNER, Blocks.SPAWNER);
|
||||||
|
+ public static final Item SPAWNER = registerBlock(BlockItemIds.SPAWNER, Blocks.SPAWNER, org.purpurmc.purpur.item.SpawnerItem::new, new Item.Properties().rarity(Rarity.EPIC)); // Purpur - Silk touch spawners
|
||||||
|
public static final Item CREAKING_HEART = registerBlock(BlockItemIds.CREAKING_HEART, Blocks.CREAKING_HEART);
|
||||||
|
public static final Item CHEST = registerBlock(BlockItemIds.CHEST, Blocks.CHEST, p -> p.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
|
||||||
|
public static final Item CRAFTING_TABLE = registerBlock(BlockItemIds.CRAFTING_TABLE, Blocks.CRAFTING_TABLE);
|
||||||
|
@@ -1903,7 +_,7 @@
|
||||||
|
BlockItemIds.SWEET_BERRY_CROP, createBlockItemWithCustomItemName(Blocks.SWEET_BERRY_BUSH), new Item.Properties().food(Foods.SWEET_BERRIES)
|
||||||
|
);
|
||||||
|
public static final Item GLOW_BERRIES = registerItem(
|
||||||
|
- BlockItemIds.GLOW_BERRY_CROP, createBlockItemWithCustomItemName(Blocks.CAVE_VINES), new Item.Properties().food(Foods.GLOW_BERRIES)
|
||||||
|
+ BlockItemIds.GLOW_BERRY_CROP, settings -> new org.purpurmc.purpur.item.GlowBerryItem(Blocks.CAVE_VINES, settings.useItemDescriptionPrefix()), new Item.Properties().food(Foods.GLOW_BERRIES) // Purpur - Eating glow berries adds glow effect
|
||||||
|
);
|
||||||
|
public static final Item CAMPFIRE = registerBlock(
|
||||||
|
BlockItemIds.CAMPFIRE, Blocks.CAMPFIRE, p -> p.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/ServerExplosion.java b/net/minecraft/world/level/ServerExplosion.java
|
|
||||||
index 34d7eef8b2540172bd4dcdbf80df45e9cbfcb43c..be97308736a54c8415f1b32f66c42afe8e0e5b4f 100644
|
|
||||||
--- a/net/minecraft/world/level/ServerExplosion.java
|
--- a/net/minecraft/world/level/ServerExplosion.java
|
||||||
+++ b/net/minecraft/world/level/ServerExplosion.java
|
+++ b/net/minecraft/world/level/ServerExplosion.java
|
||||||
@@ -623,6 +623,23 @@ public class ServerExplosion implements Explosion {
|
@@ -342,6 +_,23 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public int explode() {
|
public int explode() {
|
||||||
@@ -29,6 +21,6 @@ index 34d7eef8b2540172bd4dcdbf80df45e9cbfcb43c..be97308736a54c8415f1b32f66c42afe
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ // Purpur end - Add PreExplodeEvents
|
+ // Purpur end - Add PreExplodeEvents
|
||||||
// Paper start - collision optimisations
|
this.level.gameEvent(this.source, GameEvent.EXPLODE, this.center);
|
||||||
this.blockCache = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>();
|
List<BlockPos> toBlow = this.calculateExplodedPositions();
|
||||||
this.chunkPosCache = new long[CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH];
|
this.hurtEntities();
|
||||||
@@ -1,32 +1,24 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/BedBlock.java b/net/minecraft/world/level/block/BedBlock.java
|
|
||||||
index 3ab00a55523bb4ab79c346df5c83993cecb3154c..23d6d30a386816c7af0fdafc4b446a61a7d66763 100644
|
|
||||||
--- a/net/minecraft/world/level/block/BedBlock.java
|
--- a/net/minecraft/world/level/block/BedBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/BedBlock.java
|
+++ b/net/minecraft/world/level/block/BedBlock.java
|
||||||
@@ -101,7 +101,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
@@ -99,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 boomPos = pos.getCenter();
|
Vec3 boomPos = Vec3.atCenterOf(pos);
|
||||||
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos), null, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos), null, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
||||||
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos), null, boomPos, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // Purpur - Implement bed explosion options
|
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos), null, boomPos, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // Purpur - Implement bed explosion options
|
||||||
return InteractionResult.SUCCESS_SERVER;
|
return InteractionResult.SUCCESS_SERVER;
|
||||||
} else if (state.getValue(OCCUPIED)) {
|
} else if (state.getValue(OCCUPIED)) {
|
||||||
if (bedRule.explodes()) return this.explodeBed(state, level, pos); // Paper - check explode first
|
if (bedRule.explodes()) return this.explodeBed(state, level, pos); // Paper - check explode first
|
||||||
@@ -153,7 +153,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
@@ -151,7 +_,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3 boomPos = pos.getCenter();
|
Vec3 boomPos = Vec3.atCenterOf(pos);
|
||||||
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), null, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
|
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), null, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
|
||||||
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), null, boomPos, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options
|
+ if (level.purpurConfig.bedExplode) level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), null, boomPos, (float) level.purpurConfig.bedExplosionPower, level.purpurConfig.bedExplosionFire, level.purpurConfig.bedExplosionEffect); // CraftBukkit - add state // Purpur - Implement bed explosion options
|
||||||
return InteractionResult.SUCCESS_SERVER;
|
return InteractionResult.SUCCESS_SERVER;
|
||||||
}
|
}
|
||||||
// CraftBukkit end
|
// CraftBukkit end
|
||||||
@@ -170,7 +170,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
@@ -168,7 +_,7 @@
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void fallOn(final Level level, final BlockState state, final BlockPos pos, final Entity entity, final double fallDistance) {
|
public void fallOn(final Level level, final BlockState state, final BlockPos pos, final Entity entity, final double fallDistance) {
|
||||||
@@ -1,17 +1,9 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/block/RespawnAnchorBlock.java b/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
|
||||||
index 8675c1f34cc595b3cf5fb7bcfebf3b17c9b959d7..9975afaca9702394a05da502b17badb0ba261575 100644
|
|
||||||
--- a/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
--- a/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
||||||
+++ b/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
+++ b/net/minecraft/world/level/block/RespawnAnchorBlock.java
|
||||||
@@ -176,7 +176,7 @@ public class RespawnAnchorBlock extends Block {
|
@@ -176,7 +_,7 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Vec3 boomPos = pos.getCenter();
|
Vec3 boomPos = Vec3.atCenterOf(pos);
|
||||||
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), damageCalculator, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
|
- level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), damageCalculator, boomPos, 5.0F, true, Level.ExplosionInteraction.BLOCK); // CraftBukkit - add state
|
||||||
+ level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), damageCalculator, boomPos, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect); // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options
|
+ level.explode(null, level.damageSources().badRespawnPointExplosion(boomPos).causingBlockSnapshot(blockState), damageCalculator, boomPos, (float) level.purpurConfig.respawnAnchorExplosionPower, level.purpurConfig.respawnAnchorExplosionFire, level.purpurConfig.respawnAnchorExplosionEffect); // CraftBukkit - add state // Purpur - Implement respawn anchor explosion options
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,6 @@
|
|||||||
From d44c75e006d2ffe1b3217d503036c0a070fc63ba Mon Sep 17 00:00:00 2001
|
|
||||||
From: File <noreply+automated@papermc.io>
|
|
||||||
Date: Sun, 20 Apr 1997 06:37:42 -0700
|
|
||||||
Subject: [PATCH] purpur File Patches
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/level/portal/PortalShape.java b/net/minecraft/world/level/portal/PortalShape.java
|
|
||||||
index 45cad44bcc715d111c168bad84b7a7c47a6b7517..28760a5e04b659dd7eca7953d6a12e9818d4ada0 100644
|
|
||||||
--- a/net/minecraft/world/level/portal/PortalShape.java
|
--- a/net/minecraft/world/level/portal/PortalShape.java
|
||||||
+++ b/net/minecraft/world/level/portal/PortalShape.java
|
+++ b/net/minecraft/world/level/portal/PortalShape.java
|
||||||
@@ -29,7 +29,7 @@ public class PortalShape {
|
@@ -29,7 +_,7 @@
|
||||||
public static final int MAX_WIDTH = 21;
|
public static final int MAX_WIDTH = 21;
|
||||||
private static final int MIN_HEIGHT = 3;
|
private static final int MIN_HEIGHT = 3;
|
||||||
public static final int MAX_HEIGHT = 21;
|
public static final int MAX_HEIGHT = 21;
|
||||||
Reference in New Issue
Block a user