it compiles \o/

This commit is contained in:
granny
2024-10-26 23:46:33 -07:00
parent ab8264ec21
commit 76614d2235
92 changed files with 484 additions and 443 deletions

View File

@@ -179,10 +179,10 @@ index a7524d3853d5b67b6385d2b74832b9267503dfe6..bc0353e4f41680d04f4d5e2dd85640d9
.withRequiredArg()
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668bfbe8eac
index 0000000000000000000000000000000000000000..ceb45f313869ac3a0f650a4ee43ecff782c1be5f
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -0,0 +1,177 @@
@@ -0,0 +1,178 @@
+package org.purpurmc.purpur;
+
+import com.google.common.base.Throwables;
@@ -204,6 +204,7 @@ index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668
+import net.minecraft.world.item.enchantment.Enchantment;
+import net.minecraft.world.level.block.Block;
+import net.minecraft.world.level.block.Blocks;
+import net.minecraft.world.level.block.state.BlockBehaviour;
+import org.bukkit.Bukkit;
+import org.bukkit.command.Command;
+import org.bukkit.configuration.ConfigurationSection;
@@ -267,7 +268,7 @@ index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668
+
+ readConfig(PurpurConfig.class, null);
+
+ Blocks.rebuildCache();
+ Block.BLOCK_STATE_REGISTRY.forEach(BlockBehaviour.BlockStateBase::initCache);
+ }
+
+ protected static void log(String s) {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index eb6f95a37b26ac077423accc93492d9957456a1a..f00e708fe38454e228cf126199651b8104375891 100644
index eb6f95a37b26ac077423accc93492d9957456a1a..894f330399282c9db0b5c5dadc1d8502a06bac3e 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2246,6 +2246,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -35,6 +35,27 @@ index eb6f95a37b26ac077423accc93492d9957456a1a..f00e708fe38454e228cf126199651b81
@Override
public void displayClientMessage(Component message, boolean overlay) {
this.sendSystemMessage(message, overlay);
@@ -2470,6 +2490,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
return new CommandSourceStack(this.commandSource(), this.position(), this.getRotationVector(), this.serverLevel(), this.getPermissionLevel(), this.getName().getString(), this.getDisplayName(), this.server, this);
}
+ // Purpur Start
+ public void sendMiniMessage(@Nullable String message) {
+ if (message != null && !message.isEmpty()) {
+ this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message));
+ }
+ }
+
+ public void sendMessage(@Nullable net.kyori.adventure.text.Component message) {
+ if (message != null) {
+ this.sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message));
+ }
+ }
+ // Purpur end
+
public void sendSystemMessage(Component message) {
this.sendSystemMessage(message, false);
}
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index 511e7254d938733aca508efd5de82e61678c7620..75e5e540f03d28b64fa5fef1f342a157598c3fa7 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -80,28 +101,3 @@ index bb1a60180e58c1333e7bb33e8acf1b0225eda8a8..c83e80ebdbbfb2d0e08561a44486a308
public String getMsgId() {
return this.type().msgId();
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 6817015f0cf39df03029e36cd845d590618031dc..62af796b2b883856a904647f504ff064a5fed463 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4468,6 +4468,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return SlotAccess.NULL;
}
+ // Purpur Start
+ public void sendMiniMessage(@Nullable String message) {
+ if (message != null && !message.isEmpty()) {
+ this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message));
+ }
+ }
+
+ public void sendMessage(@Nullable net.kyori.adventure.text.Component message) {
+ if (message != null) {
+ this.sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message));
+ }
+ }
+ // Purpur end
+
public Level getCommandSenderWorld() {
return this.level();
}

View File

@@ -46,7 +46,7 @@ index a7420e4522e0dff72ce7f8a791b9cd4bfa270106..0fa5e0c80ad09e03452c4d412390cb8f
public LevelChunk getChunkIfLoaded(int x, int z) {
return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index f00e708fe38454e228cf126199651b8104375891..7e796655dec9eb48d0c29c9ed06d30ebf67c25a5 100644
index 894f330399282c9db0b5c5dadc1d8502a06bac3e..d7b828937e58eea5f095863129a0844f25a25336 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1026,6 +1026,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -79,7 +79,7 @@ index eef96e946b80064fe211039a65db4192ea7a52d3..352ade7acc9052e4d74ef840e085a86f
if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) {
entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 62af796b2b883856a904647f504ff064a5fed463..49a8b0d4f4a18c91a48291c316c420bd78428ca5 100644
index 6817015f0cf39df03029e36cd845d590618031dc..aa73875d8cb701d233ffa79c9bda4b7b474ba667 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -383,7 +383,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -120,7 +120,7 @@ index 62af796b2b883856a904647f504ff064a5fed463..49a8b0d4f4a18c91a48291c316c420bd
if (this.passengers.size() == 1 && this.passengers.get(0) == entity) {
this.passengers = ImmutableList.of();
} else {
@@ -5343,4 +5358,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -5329,4 +5344,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this);
}
// Paper end - Expose entity id counter
@@ -259,7 +259,7 @@ index 22b3d3d945cbddae25abfca7d900324c79d32293..7f896777fcff72230142fbe231471782
// Paper end - Add EntityMoveEvent
world = this.level();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2bf9112fc2 100644
index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee25346ffee 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -163,8 +163,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -282,7 +282,7 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2b
}
public boolean isWithinRestriction() {
@@ -1813,4 +1813,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -1813,4 +1813,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
public float[] getArmorDropChances() {
return this.armorDropChances;
}
@@ -326,7 +326,9 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2b
+ }
+ }
+ if (!player.getBukkitEntity().hasPermission("allow.ride." + net.minecraft.core.registries.BuiltInRegistries.ENTITY_TYPE.getKey(getType()).getPath())) {
+ player.sendMiniMessage(org.purpurmc.purpur.PurpurConfig.cannotRideMob);
+ if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) {
+ serverPlayer.sendMiniMessage(org.purpurmc.purpur.PurpurConfig.cannotRideMob);
+ }
+ return InteractionResult.PASS;
+ }
+ player.setYRot(this.getYRot());
@@ -1792,7 +1794,7 @@ index fd9f6c17448a4d87f940eb8f544ecb9669068582..3a0b71cad2c68e972c5989bd37de8395
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index f9fdc600dc680c55219fcbf9bc8f151a733a093c..93c16d7522d76f35de2c87cab0e7db3d6f7ab6c7 100644
index f9fdc600dc680c55219fcbf9bc8f151a733a093c..4144d82ca0a9c5b5384d4ab080013ad76014199b 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -50,9 +50,32 @@ public class Squid extends AgeableWaterCreature {
@@ -1856,9 +1858,9 @@ index f9fdc600dc680c55219fcbf9bc8f151a733a093c..93c16d7522d76f35de2c87cab0e7db3d
+ }
+ }
+ if (forward != 0.0F || strafe != 0.0F) {
+ squid.setMovementVector((float) dir.getX(), (float) dir.getY(), (float) dir.getZ());
+ squid.movementVector = new Vec3((float) dir.getX(), (float) dir.getY(), (float) dir.getZ());
+ } else {
+ squid.setMovementVector(0.0F, 0.0F, 0.0F);
+ squid.movementVector = Vec3.ZERO;
+ }
+ return;
+ }
@@ -2445,7 +2447,7 @@ index b5ec7c8ad0e482930d1a54b590b26093f4e477ea..0ec18aecb7774db219a8ca5ed60ae999
protected void randomizeAttributes(RandomSource random) {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt));
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 18bd483fe46de3d9dc129bffbccfba9d4cab9550..f373728d357faf68a576dc2f6363e36f5ac2a4b4 100644
index 18bd483fe46de3d9dc129bffbccfba9d4cab9550..29b4c4ba7e80fe58a005064da4b0479e367d90b0 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -77,7 +77,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder<Llama.V
@@ -2494,7 +2496,7 @@ index 18bd483fe46de3d9dc129bffbccfba9d4cab9550..f373728d357faf68a576dc2f6363e36f
+
+ @Override
+ public boolean isSaddled() {
+ return super.isSaddled() || (isTamed() && getSwag() != null);
+ return super.isSaddled() || (isTamed());
}
+ // Purpur end
@@ -3167,7 +3169,7 @@ index 4e621a7f36b3d718695434a2a4e3060283667bb2..86a14550482438bfaad47f9bf96d336a
public boolean doHurtTarget(ServerLevel world, Entity target) {
if (super.doHurtTarget(world, target)) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 1906dfc22af208d6e801ad4a8f2f9e9702432691..6d5ad18bc85769737060b5dff520fc4a87e30e57 100644
index 1906dfc22af208d6e801ad4a8f2f9e9702432691..7e5f447c23c817bf89508dc4049df2b6b7efbab9 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -60,21 +60,98 @@ public class Creeper extends Monster {
@@ -3201,7 +3203,7 @@ index 1906dfc22af208d6e801ad4a8f2f9e9702432691..6d5ad18bc85769737060b5dff520fc4a
+ }
+
+ @Override
+ protected void customServerAiStep() {
+ protected void customServerAiStep(ServerLevel world) {
+ if (powerToggleDelay > 0) {
+ powerToggleDelay--;
+ }
@@ -3216,7 +3218,7 @@ index 1906dfc22af208d6e801ad4a8f2f9e9702432691..6d5ad18bc85769737060b5dff520fc4a
+ }
+ prevSpacebarCharge = spacebarCharge;
+ }
+ super.customServerAiStep();
+ super.customServerAiStep(world);
+ }
+
+ @Override
@@ -3365,7 +3367,7 @@ index 378694a38115c012978e1fea59d049d1ebd04110..4364ac531826524fc3c099b9900406b2
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..9e90b2c3474bb6c4ea6caf3f060dcb668c4bd15b 100644
index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..bd08a90aa9128d7d31dbbe7e075d32a8b8aad724 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -3417,7 +3419,7 @@ index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..9e90b2c3474bb6c4ea6caf3f060dcb66
public boolean hurtServer(ServerLevel world, DamageSource source, float amount) {
if (this.isInvulnerableTo(world, source)) {
return false;
+ } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage
+ } else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage
} else {
boolean flag = source.getDirectEntity() instanceof ThrownPotion;
boolean flag1;
@@ -4403,7 +4405,7 @@ index 711b7eb8e9fdedbc87965828e573fe8d5c357d53..2214e3e473214a8e8340c4ded0e2c797
if (flag && !this.isSilent()) {
this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index 183a33b7d666d652b455baa7e8339e9c4a870a58..06269780121424129be777e83e2ad4ca3e616b23 100644
index 183a33b7d666d652b455baa7e8339e9c4a870a58..3452623771ba6856e5c4049a0c932440b93db412 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -59,6 +59,50 @@ public class Vex extends Monster implements TraceableEntity {
@@ -4443,7 +4445,7 @@ index 183a33b7d666d652b455baa7e8339e9c4a870a58..06269780121424129be777e83e2ad4ca
+ }
+ setSpeed(speed);
+ Vec3 mot = getDeltaMovement();
+ move(MoverType.SELF, mot.multiply(speed, 1.0, speed));
+ move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, 1.0, speed));
+ setDeltaMovement(mot.scale(0.9D));
+ }
+ }
@@ -5138,10 +5140,10 @@ index 6c60bb4f4d1133844a4232df518c062216847fdc..c9f5047bfa48c12a9090cb8da4bb9045
event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 6176bc84e6896d2e60bb219e92e1d668bfbe8eac..f34d12ea5681a944ae2c08fb2cb69b8f662fcdf6 100644
index ceb45f313869ac3a0f650a4ee43ecff782c1be5f..09e7a11a241b6e306d5043fe66f14fd4f2aae963 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -174,4 +174,9 @@ public class PurpurConfig {
@@ -175,4 +175,9 @@ public class PurpurConfig {
}
return builder.build();
}
@@ -6390,10 +6392,10 @@ index 0000000000000000000000000000000000000000..89c476c740b4efb4f44c1dcd384b9086
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
new file mode 100644
index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3e6fa2148
index 0000000000000000000000000000000000000000..d7f5686fe897f3c2424b146c8e7d2862223d1eaf
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java
@@ -0,0 +1,114 @@
@@ -0,0 +1,122 @@
+package org.purpurmc.purpur.entity;
+
+import net.minecraft.core.particles.ParticleTypes;
@@ -6484,13 +6486,17 @@ index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3
+
+ @Override
+ protected void onHitEntity(EntityHitResult entityHitResult) {
+ Entity shooter = this.getOwner();
+ if (shooter instanceof LivingEntity) {
+ Entity target = entityHitResult.getEntity();
+ if (canGrief || (target instanceof LivingEntity && !(target instanceof ArmorStand))) {
+ boolean hurt = target.hurt(target.damageSources().mobProjectile(this, (LivingEntity) shooter), level().purpurConfig.phantomFlameDamage);
+ if (hurt && level().purpurConfig.phantomFlameFireTime > 0) {
+ target.igniteForSeconds(level().purpurConfig.phantomFlameFireTime);
+ Level world = this.level();
+
+ if (world instanceof ServerLevel worldserver) {
+ Entity shooter = this.getOwner();
+ if (shooter instanceof LivingEntity) {
+ Entity target = entityHitResult.getEntity();
+ if (canGrief || (target instanceof LivingEntity && !(target instanceof ArmorStand))) {
+ boolean hurt = target.hurtServer(worldserver, target.damageSources().mobProjectile(this, (LivingEntity) shooter), worldserver.purpurConfig.phantomFlameDamage);
+ if (hurt && worldserver.purpurConfig.phantomFlameFireTime > 0) {
+ target.igniteForSeconds(worldserver.purpurConfig.phantomFlameFireTime);
+ }
+ }
+ }
+ }
@@ -6498,14 +6504,18 @@ index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3
+
+ @Override
+ protected void onHitBlock(BlockHitResult blockHitResult) {
+ if (this.hitCancelled) {
+ return;
+ Level world = this.level();
+
+ if (world instanceof ServerLevel worldserver) {
+ if (this.hitCancelled) {
+ return;
+ }
+ if (this.canGrief) {
+ BlockState state = worldserver.getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(worldserver, state, blockHitResult, this);
+ }
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ }
+ if (this.canGrief) {
+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos());
+ state.onProjectileHit(this.level(), state, blockHitResult, this);
+ }
+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD);
+ }
+}
diff --git a/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java b/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Barrels and enderchests 6 rows
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
index a4454289fb92cf7b97ee77db422c328f008521f1..7ec26117aa6d98140e994567fd0ded33d308e3d4 100644
index 75e5e540f03d28b64fa5fef1f342a157598c3fa7..0dace6f1e1377c9eb5ae70524edf1e3aae2cfc91 100644
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
@@ -1110,6 +1110,27 @@ public abstract class PlayerList {
@@ -253,10 +253,10 @@ index af1ae3dacb628da23f7d2988c6e76d3fb2d64103..4ee2d501f882279b48edb4b8bf082458
for (int i = 0; i < this.getSize(); i++) {
if (i >= items.length) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index f34d12ea5681a944ae2c08fb2cb69b8f662fcdf6..db93b3aa3883707c0e16745a9afee532fed9379f 100644
index 09e7a11a241b6e306d5043fe66f14fd4f2aae963..a83117ed0a0c98d7ae18e925338b58930946c96a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -179,4 +179,39 @@ public class PurpurConfig {
@@ -180,4 +180,39 @@ public class PurpurConfig {
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] AFK API
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 7e796655dec9eb48d0c29c9ed06d30ebf67c25a5..00a768a9bef0f60ee43e6e1becc6ba9424ba6dda 100644
index d7b828937e58eea5f095863129a0844f25a25336..f0a2c618fb2040282406af90ff0d2ac5a63b0c35 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -2623,8 +2623,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -2637,8 +2637,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void resetLastActionTime() {
this.lastActionTime = Util.getMillis();
@@ -177,7 +177,7 @@ index 6bf691fcc6486bde73bae30eff09142802c29eda..59c4d3753c7084e92402608b7fb3c4ad
private EntitySelector() {}
// Paper start - Affects Spawning API
diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
index 52982c1e6a4da36392569c791853279f5f9ac31a..9817bc392146b93707291fe69eaab20a8a43235c 100644
index 52982c1e6a4da36392569c791853279f5f9ac31a..b3d4c61b1769b6fcc98b7af854f774d24bf39d98 100644
--- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
+++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java
@@ -64,6 +64,10 @@ public class TargetingConditions {
@@ -185,7 +185,7 @@ index 52982c1e6a4da36392569c791853279f5f9ac31a..9817bc392146b93707291fe69eaab20a
} else if (this.selector != null && !this.selector.test(target, world)) {
return false;
+ // Purpur start
+ } else if (!targetEntity.level().purpurConfig.idleTimeoutTargetPlayer && targetEntity instanceof net.minecraft.server.level.ServerPlayer player && player.isAfk()) {
+ } else if (!world.purpurConfig.idleTimeoutTargetPlayer && target instanceof net.minecraft.server.level.ServerPlayer player && player.isAfk()) {
+ return false;
+ // Purpur end
} else {
@@ -265,10 +265,10 @@ index e4b41edc7c08c00f4411812a20944507a5b674c7..dc698d64ff3b5ab3b65b91159ce26d7c
// Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index db93b3aa3883707c0e16745a9afee532fed9379f..490793e1344a6ca475e2d9ada406fa96522c92d1 100644
index a83117ed0a0c98d7ae18e925338b58930946c96a..a6728ce7ac27512676cfa06fdfbfb8652f8ff6a5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -176,8 +176,18 @@ public class PurpurConfig {
@@ -177,8 +177,18 @@ public class PurpurConfig {
}
public static String cannotRideMob = "<red>You cannot mount that mob";

View File

@@ -18,10 +18,10 @@ index dc9e3f798bc8a9a6968a588a09122a08dc9b9774..99b1c6f239a85eb82019a1bae9e91391
public SystemReport fillSystemReport(SystemReport details) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 490793e1344a6ca475e2d9ada406fa96522c92d1..cea00dc7478ef73984747992b2a8efc28677e2cb 100644
index a6728ce7ac27512676cfa06fdfbfb8652f8ff6a5..df2be3351bcaaf1ffb73261da6c840314f5c11a1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -190,6 +190,11 @@ public class PurpurConfig {
@@ -191,6 +191,11 @@ public class PurpurConfig {
afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix)));
}

View File

@@ -40,10 +40,10 @@ index b9aee2a00b35e8f53240d5854ba05785e9688b22..febd5dc39cbe96054d21d13b14947bdf
// Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index cea00dc7478ef73984747992b2a8efc28677e2cb..b4d43c293084b808d167dd02f2d6cf865ac17983 100644
index df2be3351bcaaf1ffb73261da6c840314f5c11a1..a6c90de7726a264ca44c3e795e9b6a4e1c313bc3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -195,6 +195,11 @@ public class PurpurConfig {
@@ -196,6 +196,11 @@ public class PurpurConfig {
serverModName = getString("settings.server-mod-name", serverModName);
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] PlayerSetSpawnerTypeWithEggEvent
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..9eebe70e8ce80620b68635c9048e8e5c1083e27e 100644
index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..d0efef43b71298491b2e03b9ce5505729c3c4afc 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -404,6 +404,16 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -18,7 +18,7 @@ index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..9eebe70e8ce80620b68635c9048e8e5c
+ }
+
+ public static EntityType<?> getFromKey(ResourceLocation location) {
+ return BuiltInRegistries.ENTITY_TYPE.get(location);
+ return BuiltInRegistries.ENTITY_TYPE.getValue(location);
+ }
+ // Purpur end
+

View File

@@ -56,10 +56,10 @@ index b6dd6bde947ac7502f25d3160399596130e8064f..7d276c191b391bca24948ddb36b8b7d0
if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected
this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index b4d43c293084b808d167dd02f2d6cf865ac17983..6bbd0021032d1979fc0133f6f859dddcf22c5708 100644
index a6c90de7726a264ca44c3e795e9b6a4e1c313bc3..3b4a8c9d5a60de94ad79a781414de8de44973e6f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -200,6 +200,11 @@ public class PurpurConfig {
@@ -201,6 +201,11 @@ public class PurpurConfig {
laggingThreshold = getDouble("settings.lagging-threshold", laggingThreshold);
}

View File

@@ -100,7 +100,7 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..80ee7a6f010cc838625674007a3ea908
int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..65c41d9c757819f3da4c0549f4e5fe002992b4d4 100644
index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..9d6a90b11ef09900de9405cd3233e1ee5dd6e31e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -109,6 +109,38 @@ public class PurpurWorldConfig {
@@ -134,7 +134,7 @@ index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..65c41d9c757819f3da4c0549f4e5fe00
+ "minecraft:diamond_pickaxe",
+ "minecraft:netherite_pickaxe"
+ )).forEach(key -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
+ if (item != Items.AIR) silkTouchTools.add(item);
+ });
+ }

View File

@@ -53,10 +53,10 @@ index 51ae8eddadc87b143b93521a3cef374f1e3a24dc..a7b45602d9d86aec235eef06d252fb62
if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDebugging()) {
new Exception().printStackTrace();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 6bbd0021032d1979fc0133f6f859dddcf22c5708..87821e766afe8fa18f9f61a877669068a5f8220a 100644
index 3b4a8c9d5a60de94ad79a781414de8de44973e6f..1103935e49081c560b024b87f872e9b8c788bad2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -239,4 +239,15 @@ public class PurpurConfig {
@@ -240,4 +240,15 @@ public class PurpurConfig {
org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Giants AI settings
diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java
index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c129288a1026c 100644
index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..642342592788226999efcb453542f55af71cf193 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Giant.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java
@@ -30,8 +30,23 @@ public class Giant extends Monster {
@@ -39,7 +39,7 @@ index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c1292
}
+ @Override
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @javax.annotation.Nullable net.minecraft.world.entity.SpawnGroupData entityData) {
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, @org.jetbrains.annotations.Nullable net.minecraft.world.entity.SpawnGroupData entityData) {
+ net.minecraft.world.entity.SpawnGroupData groupData = super.finalizeSpawn(world, difficulty, spawnReason, entityData);
+ if (groupData == null) {
+ populateDefaultEquipmentSlots(this.random, difficulty);
@@ -71,7 +71,7 @@ index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c1292
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index cdef3af8a48d640a8180b5a5658b0ef46087095f..22248cd0752812739df8e7ab911ef04b3d2ed458 100644
index d23aba01ce2b109fd011130e2847107b26266b7f..0fe6b4e57a57388df51893f22c8e8cb1be633623 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -622,6 +622,10 @@ public class PurpurWorldConfig {

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] Charged creeper naturally spawn
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index d985f86d320770e73be32740f8f2e874ab08666f..44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d 100644
index 3ea4763a34447761e73d8643dce8c386fa7501c3..e95afb70fa13f7f2617cbd42b7f5d17b9bc1ec4f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -257,6 +257,14 @@ public class Creeper extends Monster {
this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creeperScale);
}
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) {
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) {
+ double chance = world.getLevel().purpurConfig.creeperChargedChance;
+ if (chance > 0D && random.nextDouble() <= chance) {
+ setPowered(true);
@@ -24,7 +24,7 @@ index d985f86d320770e73be32740f8f2e874ab08666f..44a3fbaedd0fdb480cde4e2f8a910696
protected SoundEvent getHurtSound(DamageSource source) {
return SoundEvents.CREEPER_HURT;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 3b6089eaf8a9af932c7bcc9a37fc7c077eb79870..6722c1bd54c28844c853d477180692a85732e631 100644
index 80eb2df74d226f7419354e73b6350f5444c8ae0b..d56ac793066bca186614e93204bf41fa6aa15719 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -395,6 +395,7 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Tulips change fox type
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297de46fe96e 100644
index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..355965d88d5ef008111cc72f39e4f8d35741fdfd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -384,6 +384,11 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -34,17 +34,17 @@ index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297d
+ // Purpur start
+ @Override
+ public net.minecraft.world.InteractionResult mobInteract(Player player, InteractionHand hand) {
+ public net.minecraft.world.InteractionResult mobInteract(Player player, net.minecraft.world.InteractionHand hand) {
+ if (level().purpurConfig.foxTypeChangesWithTulips) {
+ ItemStack itemstack = player.getItemInHand(hand);
+ if (getVariant() == Type.RED && itemstack.getItem() == Items.WHITE_TULIP) {
+ setVariant(Type.SNOW);
+ if (getVariant() == Variant.RED && itemstack.getItem() == Items.WHITE_TULIP) {
+ setVariant(Variant.SNOW);
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
+ return net.minecraft.world.InteractionResult.SUCCESS;
+ } else if (getVariant() == Type.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) {
+ setVariant(Type.RED);
+ } else if (getVariant() == Variant.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) {
+ setVariant(Variant.RED);
+ if (!player.getAbilities().instabuild) {
+ itemstack.shrink(1);
+ }
@@ -59,7 +59,7 @@ index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297d
// Paper start - Cancellable death event
protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 141c96566773d4cce0423e186d346043c8f65fad..d6e3ab58756bd8e0c3d2a7aa651a22545db6749e 100644
index ec1b35ed76b365c76366e147c2d8b68690c1c5ff..78316af29f238ec61c73e0a82b677ae91feaa623 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -573,6 +573,7 @@ public class PurpurWorldConfig {

View File

@@ -59,7 +59,7 @@ index f2e205b05213f137ce84b9c5185118f437eec6ff..511d0559743655ed7b43a948fccc2621
this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index d6e3ab58756bd8e0c3d2a7aa651a22545db6749e..fe9b0ff2a73dc0f49b46738f07a7c58b622399d6 100644
index 78316af29f238ec61c73e0a82b677ae91feaa623..ab11497337ff25ddd6c87dd7a842adea039aa75e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1060,6 +1060,8 @@ public class PurpurWorldConfig {
@@ -76,7 +76,7 @@ index d6e3ab58756bd8e0c3d2a7aa651a22545db6749e..fe9b0ff2a73dc0f49b46738f07a7c58b
polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth);
polarBearScale = Mth.clamp(getDouble("mobs.polar_bear.attributes.scale", polarBearScale), 0.0625D, 16.0D);
+ polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString));
+ if (item != Items.AIR) polarBearBreedableItem = item;
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 01ee2cecacd9309d2eb5dd47b76b825db8d52d80..809ab6aaf50e573099dfb4ef839e3c2825cb7793 100644
index 90434afec7a896473624901c6b00bf7c81572930..3fe570317c0790b48db42f40e55f9cdb131fcc48 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -343,6 +343,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -16,7 +16,7 @@ index 01ee2cecacd9309d2eb5dd47b76b825db8d52d80..809ab6aaf50e573099dfb4ef839e3c28
public boolean noPhysics;
private boolean wasOnFire;
public final RandomSource random;
@@ -5157,7 +5158,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -5143,7 +5144,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
}
public float maxUpStep() {
@@ -38,7 +38,7 @@ index 70b8023c3badc745f342d5b0ab54699e3923826a..edb0cd90e28016c44b0aaf5c9ed5d7bd
if (!this.canTick) {
if (this.noTickPoseDirty) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 6d3b41da6210699869839826e037a038a637c4c3..e5c4ca83392f398e24be193a0ed77daa85db9913 100644
index 924a7269883e57f4ae4fc97b6f2ba24a922515c0..e3eb27c4be24ed01b3d86be7b8160f47893ca44c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -91,6 +91,11 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c73fd14b9 100644
index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44718478fa 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -74,7 +74,7 @@ public class Cow extends Animal {
@@ -58,14 +58,14 @@ index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c
+ }
+ return InteractionResult.CONSUME; // require 5 mushrooms to transform (prevents mushroom duping)
+ }
+ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level());
+ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level(), EntitySpawnReason.CONVERSION);
+ if (mooshroom == null) {
+ return InteractionResult.PASS;
+ }
+ if (stack.getItem() == net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem()) {
+ mooshroom.setVariant(MushroomCow.MushroomType.BROWN);
+ mooshroom.setVariant(MushroomCow.Variant.BROWN);
+ } else {
+ mooshroom.setVariant(MushroomCow.MushroomType.RED);
+ mooshroom.setVariant(MushroomCow.Variant.RED);
+ }
+ mooshroom.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
+ mooshroom.setHealth(this.getHealth());
@@ -96,7 +96,7 @@ index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 7da688e575a1c4ca35c0d23401bf52f3bbbed6ae..4d85d928c05d488b5fc6efa96e65a5e31455d261 100644
index 026593b70b3311c8427d8157225dbc0988b82d4c..15e730fd73a9ceb25a4635a59c0b7b35c99a2da7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -390,6 +390,7 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 00a768a9bef0f60ee43e6e1becc6ba9424ba6dda..badcca42c771bf39b128c2e123be3c0aeb6b8e76 100644
index f0a2c618fb2040282406af90ff0d2ac5a63b0c35..9b7cbd9ece37d7a5f5532861c1b226ca75eb2345 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1435,6 +1435,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -150,7 +150,7 @@ index 99fd67a78539133adf78d65e2c520ff3dd260301..6b987ee220d94b482d2aeb4ff6bf2718
protected final String descriptionId;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c5b3a04d81834d6bdf7c4acd06ce4929d7a25769..2591b4f0d0e4e4d9e77efb821c9ae775182713b6 100644
index b70a0bdb06a0fa930b525cac44b5bd62e318367b..a97dadd4c0b04833282f9fc484ef760da712974d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -96,6 +96,68 @@ public class PurpurWorldConfig {
@@ -208,7 +208,7 @@ index c5b3a04d81834d6bdf7c4acd06ce4929d7a25769..2591b4f0d0e4e4d9e77efb821c9ae775
+ ConfigurationSection section = getConfigurationSection("gameplay-mechanics.minecart.controllable.block-speed");
+ if (section != null) {
+ for (String key : section.getKeys(false)) {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key));
+ if (block != Blocks.AIR) {
+ minecartControllableBlockSpeeds.put(block, section.getDouble(key, minecartControllableBaseSpeed));
+ }

View File

@@ -20,10 +20,10 @@ index a0bcb0fccadbf946e4c4bc0bbb8a1460532c636b..fd37f9256c1b2d396e855e1167a1f2ca
this.waitUntilNextTick();
this.finishMeasuringTaskExecutionTime();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 87821e766afe8fa18f9f61a877669068a5f8220a..ed49a5131ca86b60a4d7f5c8ee61a7868dddc179 100644
index 1103935e49081c560b024b87f872e9b8c788bad2..c8e7e6333d20ca976ed74d839ccfaebdc02e5167 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -250,4 +250,9 @@ public class PurpurConfig {
@@ -251,4 +251,9 @@ public class PurpurConfig {
loggerSuppressUnrecognizedRecipeErrors = getBoolean("settings.logger.suppress-unrecognized-recipe-errors", loggerSuppressUnrecognizedRecipeErrors);
loggerSuppressSetBlockFarChunk = getBoolean("settings.logger.suppress-setblock-in-far-chunk-errors", loggerSuppressSetBlockFarChunk);
}

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Add enderman and creeper griefing controls
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d..397509198ab1e7ee275d86fac57ba52445276284 100644
index e95afb70fa13f7f2617cbd42b7f5d17b9bc1ec4f..54225cfd13e7b62e80f24b4885c720d6e6ce8700 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -362,7 +362,7 @@ public class Creeper extends Monster {
@@ -13,12 +13,12 @@ index 44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d..397509198ab1e7ee275d86fac57ba524
// CraftBukkit end
this.dead = true;
- worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this)
+ worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), this.level().getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) && level().purpurConfig.creeperAllowGriefing ? Level.ExplosionInteraction.MOB : Level.ExplosionInteraction.NONE); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) // Purpur
+ worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), worldserver.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) && level().purpurConfig.creeperAllowGriefing ? Level.ExplosionInteraction.MOB : Level.ExplosionInteraction.NONE); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) // Purpur
this.spawnLingeringCloud();
this.triggerOnDeathMobEffects(worldserver, Entity.RemovalReason.KILLED);
this.discard(EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 5caee77e2516afa4edc463e5a8a6b6e610cc04c5..437368100f6205b4c42234713044be47fda7082d 100644
index 4265dc40f7337e565d236eb3c04847a87494fc86..a356e7ac34aca1d14cb922565206304d14e90c8b 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -514,6 +514,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -38,7 +38,7 @@ index 5caee77e2516afa4edc463e5a8a6b6e610cc04c5..437368100f6205b4c42234713044be47
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 68e417cbe0c633528b1a064d64a061c0576ef3f8..e9e999d06fec2918fc2ee0fed05f8fb88b9675c1 100644
index 79e0d1b547668c006ff4d23722be99f69b4636fe..492c2a897368cc1477bc5b8fc776e5a6272e8a90 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -485,6 +485,7 @@ public class PurpurWorldConfig {

View File

@@ -18,7 +18,7 @@ index 5bbc7ceaafc163f12344e5d5d355ad2ff30ddca2..af54b621f04de40b1539494f30bb95f0
public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer<Packet<?>> consumer, Set<ServerPlayerConnection> trackedPlayers) {
this.trackedPlayers = trackedPlayers;
diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..9e69c225a331bfce3455fc0c013a19e3c607e0c4 100644
index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..89d89a1b07231f3f009a8fa66374af3fcc3e2549 100644
--- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
+++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java
@@ -64,6 +64,12 @@ public class ItemEntity extends Entity implements TraceableEntity {
@@ -42,9 +42,9 @@ index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..9e69c225a331bfce3455fc0c013a19e3
+ // Purpur start
+ if (
+ (immuneToCactus && source.is(net.minecraft.world.damagesource.DamageTypes.CACTUS)) ||
+ (immuneToFire && (source.is(DamageTypeTags.IS_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.ON_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.IN_FIRE))) ||
+ (immuneToFire && (source.is(net.minecraft.tags.DamageTypeTags.IS_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.ON_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.IN_FIRE))) ||
+ (immuneToLightning && source.is(net.minecraft.world.damagesource.DamageTypes.LIGHTNING_BOLT)) ||
+ (immuneToExplosion && source.is(DamageTypeTags.IS_EXPLOSION))
+ (immuneToExplosion && source.is(net.minecraft.tags.DamageTypeTags.IS_EXPLOSION))
+ ) {
+ return false;
+ } else if (this.isInvulnerableToBase(source)) {
@@ -117,7 +117,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..01e4395f1669d21c30465aa1366bd2f1
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc53e295cb 100644
index 95a7e0870e45004523278ae78c25b9db80882630..2a566e9eec02cf19d409dadff3ffaabc7715e05a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -118,6 +118,49 @@ public class PurpurWorldConfig {
@@ -135,7 +135,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc
+ BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToCactus.add(item));
+ return;
+ }
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
+ if (item != Items.AIR) itemImmuneToCactus.add(item);
+ });
+ itemImmuneToExplosion.clear();
@@ -144,7 +144,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc
+ BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToExplosion.add(item));
+ return;
+ }
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
+ if (item != Items.AIR) itemImmuneToExplosion.add(item);
+ });
+ itemImmuneToFire.clear();
@@ -153,7 +153,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc
+ BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToFire.add(item));
+ return;
+ }
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
+ if (item != Items.AIR) itemImmuneToFire.add(item);
+ });
+ itemImmuneToLightning.clear();
@@ -162,7 +162,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc
+ BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToLightning.add(item));
+ return;
+ }
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
+ if (item != Items.AIR) itemImmuneToLightning.add(item);
+ });
+ }

View File

@@ -17,10 +17,10 @@ index b7783480cc6a51a1f18789b7f3fc35faf5573f8d..abf33de1c20b031a684daedbc880a6f4
if (environment.includeIntegrated) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index ed49a5131ca86b60a4d7f5c8ee61a7868dddc179..d0873724bf081e577fd42455f427a765e1db0f59 100644
index c8e7e6333d20ca976ed74d839ccfaebdc02e5167..0cad1ea803e4882601fcd05cfa575d03ffd77b04 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -181,6 +181,7 @@ public class PurpurConfig {
@@ -182,6 +182,7 @@ public class PurpurConfig {
public static boolean afkBroadcastUseDisplayName = false;
public static String afkTabListPrefix = "[AFK] ";
public static String afkTabListSuffix = "";
@@ -28,7 +28,7 @@ index ed49a5131ca86b60a4d7f5c8ee61a7868dddc179..d0873724bf081e577fd42455f427a765
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway);
@@ -188,6 +189,7 @@ public class PurpurConfig {
@@ -189,6 +190,7 @@ public class PurpurConfig {
afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName);
afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix)));
afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix)));

View File

@@ -17,10 +17,10 @@ index abf33de1c20b031a684daedbc880a6f4eff869f4..a52d20dcc9b3dfaecc3325bce3140dbd
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index d0873724bf081e577fd42455f427a765e1db0f59..e65552be2b8348e2751ea088809c090f6b029e43 100644
index 0cad1ea803e4882601fcd05cfa575d03ffd77b04..438a60ae155f05c667ae887a2ae44b05df7977e2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -181,6 +181,7 @@ public class PurpurConfig {
@@ -182,6 +182,7 @@ public class PurpurConfig {
public static boolean afkBroadcastUseDisplayName = false;
public static String afkTabListPrefix = "[AFK] ";
public static String afkTabListSuffix = "";
@@ -28,7 +28,7 @@ index d0873724bf081e577fd42455f427a765e1db0f59..e65552be2b8348e2751ea088809c090f
public static String pingCommandOutput = "<green>%s's ping is %sms";
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
@@ -189,6 +190,7 @@ public class PurpurConfig {
@@ -190,6 +191,7 @@ public class PurpurConfig {
afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName);
afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix)));
afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix)));

View File

@@ -17,10 +17,10 @@ index a52d20dcc9b3dfaecc3325bce3140dbd7bee8c4c..24c2568db30f970aed1a4897cfbc7d07
org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index e65552be2b8348e2751ea088809c090f6b029e43..a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc 100644
index 438a60ae155f05c667ae887a2ae44b05df7977e2..6228d23bd84e59a9e1f01414cc9f00c33cc64cd0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -181,6 +181,7 @@ public class PurpurConfig {
@@ -182,6 +182,7 @@ public class PurpurConfig {
public static boolean afkBroadcastUseDisplayName = false;
public static String afkTabListPrefix = "[AFK] ";
public static String afkTabListSuffix = "";
@@ -28,7 +28,7 @@ index e65552be2b8348e2751ea088809c090f6b029e43..a3a699881e6b96d0fb507ef69e4dbc18
public static String demoCommandOutput = "<green>%s has been shown the demo screen";
public static String pingCommandOutput = "<green>%s's ping is %sms";
private static void messages() {
@@ -190,6 +191,7 @@ public class PurpurConfig {
@@ -191,6 +192,7 @@ public class PurpurConfig {
afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName);
afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix)));
afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix)));

View File

@@ -72,7 +72,7 @@ index 7cb3d69a69e0e3ef4b7f9f9c8b1eb67edb5d116d..4c9709e680b585316978b6a410600a8a
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e7318411d749bbb 100644
index e44d6d02ceaf1f133705efcd58b94e36014389ec..bd1c23d849269df504c94da9d0ca0a6846b22c41 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -89,15 +89,15 @@ index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e731841
}
+
+ @Override
+ protected void dropFromLootTable(DamageSource damageSource, boolean causedByPlayer) {
+ protected void dropFromLootTable(ServerLevel world, DamageSource damageSource, boolean causedByPlayer) {
+ boolean dropped = false;
+ if (lastHurtByPlayer == null && damageSource.getEntity() instanceof net.minecraft.world.entity.boss.enderdragon.EndCrystal) {
+ if (random.nextInt(5) < 1) {
+ dropped = spawnAtLocation(new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.PHANTOM_MEMBRANE)) != null;
+ dropped = spawnAtLocation(world, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.PHANTOM_MEMBRANE)) != null;
+ }
+ }
+ if (!dropped) {
+ super.dropFromLootTable(damageSource, causedByPlayer);
+ super.dropFromLootTable(world, damageSource, causedByPlayer);
+ }
+ }
+
@@ -256,7 +256,7 @@ index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e731841
private float speed = 0.1F;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 6c5729b86a0540aa1ced33640170b4145efa08ba..65c8b2e76677b92fee94e1149a9ce3803b3f1737 100644
index 247f476b060221daaec64b975ebce74b458c5ec2..cfdb01c51909ac44a952fcd720af4b88157835b8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1148,6 +1148,9 @@ public class PurpurWorldConfig {

View File

@@ -68,10 +68,10 @@ index a94762e65853ccad38cf90b0049ca256106c0c9f..38633e168a9b36e37feea00964d53e65
} else {
world.setBlockAndUpdate(pos, IceBlock.meltsInto());
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc..580eb4f8cc88cda9df78868b373ba22eb319f75f 100644
index 6228d23bd84e59a9e1f01414cc9f00c33cc64cd0..9f98b87ccc60db9a531180de1ed649de118db56f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -246,6 +246,11 @@ public class PurpurConfig {
@@ -247,6 +247,11 @@ public class PurpurConfig {
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index badcca42c771bf39b128c2e123be3c0aeb6b8e76..5f86f0b46e91ac41820931a9d64a7240d3ddd8d4 100644
index 9b7cbd9ece37d7a5f5532861c1b226ca75eb2345..76a4ccf07791a16abdc4396e8a91a93957e0b293 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -3392,4 +3392,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -3406,4 +3406,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
return (CraftPlayer) super.getBukkitEntity();
}
// CraftBukkit end
@@ -28,7 +28,7 @@ index badcca42c771bf39b128c2e123be3c0aeb6b8e76..5f86f0b46e91ac41820931a9d64a7240
+
+ ServerLevel toLevel = ((CraftWorld) to.getWorld()).getHandle();
+ if (this.level() == toLevel) {
+ this.connection.internalTeleport(to.getX(), to.getY(), to.getZ(), to.getYaw(), to.getPitch(), java.util.EnumSet.noneOf(net.minecraft.world.entity.RelativeMovement.class));
+ this.connection.teleport(to);
+ } else {
+ this.server.getPlayerList().respawn(this, true, RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH, to);
+ }
@@ -48,7 +48,7 @@ index a58c8ed64eab56c4a4a0688e0731a232fb5f7269..c0ac2801321ca1813804214cc0ceecc1
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 8832a5491303d4189155ec56f81e37f99efaa28e..20242b58cc3af8d58c51919d637ec258df308a60 100644
index 1bf4fa7b9652347a48010a0713190aec9a5fc166..0111b9e3484df5958ed5dee55a9b510ef4a1f35e 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -235,6 +235,7 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height
diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java
index 9eebe70e8ce80620b68635c9048e8e5c1083e27e..663dde75a9fc4fd7323ae9abe73cdb83aa74f2b3 100644
index d0efef43b71298491b2e03b9ce5505729c3c4afc..5752388a5013a3054c3f453db844a6b4ca285bda 100644
--- a/src/main/java/net/minecraft/world/entity/EntityType.java
+++ b/src/main/java/net/minecraft/world/entity/EntityType.java
@@ -388,7 +388,8 @@ public class EntityType<T extends Entity> implements FeatureElement, EntityTypeT
@@ -19,22 +19,22 @@ index 9eebe70e8ce80620b68635c9048e8e5c1083e27e..663dde75a9fc4fd7323ae9abe73cdb83
private final FeatureFlagSet requiredFeatures;
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 437368100f6205b4c42234713044be47fda7082d..1a33a41f79f9d661cb958a6ecee2ab7e8a819877 100644
index a356e7ac34aca1d14cb922565206304d14e90c8b..8933b1f16617f0373cc99f93254533cc7d1e923f 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -409,6 +409,7 @@ public class EnderMan extends Monster implements NeutralMob {
if (this.isInvulnerableTo(world, source)) {
return false;
} else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage
} else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage
+ } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height
} else {
boolean flag = source.getDirectEntity() instanceof ThrownPotion;
boolean flag1;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 580eb4f8cc88cda9df78868b373ba22eb319f75f..230606116a3f5a00cf0fa0b075c65aac7806c647 100644
index 9f98b87ccc60db9a531180de1ed649de118db56f..0cafa4bbc530a80277cbf323f8d62dee9b08a426 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -246,6 +246,12 @@ public class PurpurConfig {
@@ -247,6 +247,12 @@ public class PurpurConfig {
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
}

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index b9b058c29ba53c780d578a434f2b5002030f391d..e4ce84d4374e27afc79591d4ee2e7a696e0b64cf 100644
index a52ea836951da04b8ff15581c7e9323cfed53a92..99ea97ba45c488e49c51b18ffe5022437c24134b 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -4763,6 +4763,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -4749,6 +4749,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return Mth.lerp(delta, this.yRotO, this.yRot);
}
@@ -22,7 +22,7 @@ index b9b058c29ba53c780d578a434f2b5002030f391d..e4ce84d4374e27afc79591d4ee2e7a69
public boolean updateFluidHeightAndDoFluidPushing(final TagKey<Fluid> fluid, final double flowScale) {
if (this.touchingUnloadedChunk()) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index db0d03fe2d2891efb3284d5c597d7c8279f2db94..a0aa4ac61de870a374152018ebdeab47dc5b5a85 100644
index 6275cb4ca2b06d8b1b3d53a2b79115bd36da4129..7891d015d2f8dadcff8f457145574ea8ba48fe8d 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -78,6 +78,12 @@ public class Squid extends AgeableWaterCreature {
@@ -54,7 +54,7 @@ index 6cf6d4ec7b9e43c7b2b4c0e2fb080964ff588130..e74866e5195a5eeae7666ad7be750eda
+ // Purpur
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c1302e6cd7db386c94d95e03b901c65b3aca1887..918923d1d95b68a99b52750974647df03070f910 100644
index 9bf9fe0fa23f24e097e21584da8526dd10993bb6..9f2192a5a22827a6d453fc326fffe161ff42aac1 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1596,6 +1596,7 @@ public class PurpurWorldConfig {

View File

@@ -18,10 +18,10 @@ index 90056822cd17f3d33d14b3f94b34750ee522a0a9..acdff7b4a00d563739fd301c3633a266
private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F;
private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0D;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 230606116a3f5a00cf0fa0b075c65aac7806c647..d4371bebdcb3b55c412334491959835e2d52220f 100644
index 0cafa4bbc530a80277cbf323f8d62dee9b08a426..80335c5915da347cc779dfd2c44d87e8329ad336 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -214,6 +214,7 @@ public class PurpurConfig {
@@ -215,6 +215,7 @@ public class PurpurConfig {
public static int barrelRows = 3;
public static boolean enderChestSixRows = false;
public static boolean enderChestPermissionRows = false;
@@ -29,7 +29,7 @@ index 230606116a3f5a00cf0fa0b075c65aac7806c647..d4371bebdcb3b55c412334491959835e
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -244,6 +245,7 @@ public class PurpurConfig {
@@ -245,6 +246,7 @@ public class PurpurConfig {
enderChestSixRows = getBoolean("settings.blocks.ender_chest.six-rows", enderChestSixRows);
org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);

View File

@@ -95,7 +95,7 @@ index 798a59046c3ac9a3838f7bcaf7bb21e738b76e44..16cc3fdf412bfb46e766b56d25a92bdf
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 7f7d68d09b070c24ba1567967c5d228c73fd14b9..f14707692217a753db3062a3bda7c08b71eb95e9 100644
index e6fa66a8c88d4f20a7383e8fd5b3df44718478fa..826927ec3d3ace50fb353333a666e35502a96171 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -67,6 +67,11 @@ public class Cow extends Animal {
@@ -111,7 +111,7 @@ index 7f7d68d09b070c24ba1567967c5d228c73fd14b9..f14707692217a753db3062a3bda7c08b
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index 7fe665d9c623fd98a1fd4259a759297de46fe96e..56b2e83285f02581d03746246f370f18fc0f3c3f 100644
index 355965d88d5ef008111cc72f39e4f8d35741fdfd..0024345d1906e6fb6bbdb189f6d4dbc631b90f9f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -410,7 +410,7 @@ index b0392780b35866bf1903f49cb16c4ab79335882d..b9a406cd4e317c663a12d897b8cf1f4f
protected void randomizeAttributes(RandomSource random) {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt));
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 7ff446ea2163d3b3b9f7fd826939dda21e07c99f..1a992d4c867ebe65b56be724fb54b9bc389cd8ec 100644
index 4a412a8a582e092a920029791a48c085527cbbd0..7ad4285f820360cf5ccff1ea564afac81eb24e35 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -139,6 +139,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder<Llama.V
@@ -538,7 +538,7 @@ index 08c4a32b1195820eb574cdf4a499107565a551d6..0220fb517d99e8c9629d191eb554799a
public boolean canBeLeashed() {
return true;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c02b8212cb56912e0eb244f47aa094c7879be89b..c78b2c5098dc67a3aadf9f6d4ea5289b7d5124ea 100644
index 2640c1f0079f7f340e57d8f9e75f04185da064e7..638a93788422a2deb277e9d2aedfa8f50df33bce 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -461,23 +461,27 @@ public class PurpurWorldConfig {
@@ -847,7 +847,7 @@ index c02b8212cb56912e0eb244f47aa094c7879be89b..c78b2c5098dc67a3aadf9f6d4ea5289b
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
@@ -1416,6 +1455,7 @@ public class PurpurWorldConfig {
polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString);
Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString));
Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString));
if (item != Items.AIR) polarBearBreedableItem = item;
+ polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks);
}

View File

@@ -20,10 +20,10 @@ index 0d9de4c61c7b26a6ff37c12fde629161fd0c3d5a..2f7897744f4aea718170698881773e90
entityitem = entityplayer.drop(itemstack, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event
if (entityitem != null) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index d4371bebdcb3b55c412334491959835e2d52220f..e86e3ceb8c93b89a37aeb3829fea65430b387941 100644
index 80335c5915da347cc779dfd2c44d87e8329ad336..b1be848bbc617968fbf1d1babbbf1a6e2bee6ec4 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -211,6 +211,11 @@ public class PurpurConfig {
@@ -212,6 +212,11 @@ public class PurpurConfig {
useAlternateKeepAlive = getBoolean("settings.use-alternate-keepalive", useAlternateKeepAlive);
}

View File

@@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid.
Rabid wolves attack all players, mobs, and animals.
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index bbdc5eb28c2be570866070d2d055a97721f46d94..54effd4230d1b231ef94a3e3948a535e6ba15537 100644
index bbdc5eb28c2be570866070d2d055a97721f46d94..37687335041ae47725c6931e2c7d54c192e2de36 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -103,6 +103,37 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
@@ -16,7 +16,7 @@ index bbdc5eb28c2be570866070d2d055a97721f46d94..54effd4230d1b231ef94a3e3948a535e
};
+ // Purpur start - rabid wolf spawn chance
+ private boolean isRabid = false;
+ private static final Predicate<LivingEntity> RABID_PREDICATE = entity -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof Mob;
+ private static final TargetingConditions.Selector RABID_PREDICATE = (entity, ignored) -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof net.minecraft.world.entity.Mob;
+ private final net.minecraft.world.entity.ai.goal.Goal PATHFINDER_VANILLA = new NonTameRandomTargetGoal<>(this, Animal.class, false, PREY_SELECTOR);
+ private final net.minecraft.world.entity.ai.goal.Goal PATHFINDER_RABID = new NonTameRandomTargetGoal<>(this, LivingEntity.class, false, RABID_PREDICATE);
+ private static final class AvoidRabidWolfGoal extends AvoidEntityGoal<Wolf> {
@@ -182,7 +182,7 @@ index ecd33b4add46acbe4e4f8879c0601220423d66ca..1506a8c0fa490726eb4a4ae14f3aa194
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 71b5f351c539584ccb1d215b7d4dce3e4541ac41..bb30d75feae68fdf2714fe51c8ddc8ef71fc647c 100644
index 14fe426bac1cc6711b264a03e472f3b48b8f9b07..8f2f978dbd10b742c6bfad36fb0e0aaf37e4deeb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2045,6 +2045,8 @@ public class PurpurWorldConfig {

View File

@@ -41,7 +41,7 @@ index c8a575b1823c53d6caf121b77607c703a061834d..de85340fe0a0e057c527cc1fa91ae6be
}
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 14640ed95dbbf99150ef1f41ff1046c2c034e552..d1a4eca112ad8698aa9025cec1b38bca01805e3f 100644
index 60641d8810514aca09b2854e9254b18c07df9ce6..f375f32a323d6f4a540da566fe25b47cc6658791 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -324,6 +324,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -68,7 +68,7 @@ index 14640ed95dbbf99150ef1f41ff1046c2c034e552..d1a4eca112ad8698aa9025cec1b38bca
}
private void saveParentVehicle(CompoundTag nbt) {
@@ -3422,5 +3425,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -3436,5 +3439,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
this.server.getPlayerList().respawn(this, true, RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH, to);
}
}
@@ -103,10 +103,10 @@ index ca11a05c0ba7f963c7d848a11557fd81baf6b34f..78a061dc5d7141ce4e4efca5a478e559
entityplayer.awardStat(Stats.LEAVE_GAME);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8982362fd 100644
index b1be848bbc617968fbf1d1babbbf1a6e2bee6ec4..64c84cb6cc647ca37a0664b83eb24e7202aeb1e2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -184,6 +184,7 @@ public class PurpurConfig {
@@ -185,6 +185,7 @@ public class PurpurConfig {
public static String creditsCommandOutput = "<green>%s has been shown the end credits";
public static String demoCommandOutput = "<green>%s has been shown the demo screen";
public static String pingCommandOutput = "<green>%s's ping is %sms";
@@ -114,7 +114,7 @@ index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway);
@@ -194,6 +195,7 @@ public class PurpurConfig {
@@ -195,6 +196,7 @@ public class PurpurConfig {
creditsCommandOutput = getString("settings.messages.credits-command-output", creditsCommandOutput);
demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput);
pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput);
@@ -122,7 +122,7 @@ index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8
}
public static String serverModName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName();
@@ -216,6 +218,29 @@ public class PurpurConfig {
@@ -217,6 +219,29 @@ public class PurpurConfig {
disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops);
}

View File

@@ -5,28 +5,29 @@ Subject: [PATCH] Full netherite armor grants fire resistance
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 773be9c116a664e4d0349c58c00df34f203f8ebf..00b3e300c0d43f7791c9d5f83a7901304f6464f5 100644
index 773be9c116a664e4d0349c58c00df34f203f8ebf..ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -397,6 +397,16 @@ public abstract class Player extends LivingEntity {
super.onInsideBubbleColumn(drag);
@@ -353,6 +353,17 @@ public abstract class Player extends LivingEntity {
this.turtleHelmetTick();
}
+ // Purpur start
+ if (this.level().purpurConfig.playerNetheriteFireResistanceDuration > 0 && this.level().getGameTime() % 20 == 0) {
+ if (itemstack.is(Items.NETHERITE_HELMET)
+ && this.getItemBySlot(EquipmentSlot.CHEST).is(Items.NETHERITE_CHESTPLATE)
+ && this.getItemBySlot(EquipmentSlot.LEGS).is(Items.NETHERITE_LEGGINGS)
+ && this.getItemBySlot(EquipmentSlot.FEET).is(Items.NETHERITE_BOOTS)) {
+ if (this.getItemBySlot(EquipmentSlot.HEAD).is(Items.NETHERITE_HELMET)
+ && this.getItemBySlot(EquipmentSlot.CHEST).is(Items.NETHERITE_CHESTPLATE)
+ && this.getItemBySlot(EquipmentSlot.LEGS).is(Items.NETHERITE_LEGGINGS)
+ && this.getItemBySlot(EquipmentSlot.FEET).is(Items.NETHERITE_BOOTS)) {
+ this.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, this.level().purpurConfig.playerNetheriteFireResistanceDuration, this.level().purpurConfig.playerNetheriteFireResistanceAmplifier, this.level().purpurConfig.playerNetheriteFireResistanceAmbient, this.level().purpurConfig.playerNetheriteFireResistanceShowParticles, this.level().purpurConfig.playerNetheriteFireResistanceShowIcon), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.NETHERITE_ARMOR);
+ }
+ }
+ // Purpur end
}
private void turtleHelmetTick() {
+
this.cooldowns.tick();
this.updatePlayerPose();
if (this.currentImpulseContextResetGraceTime > 0) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b02c2aa15bbfd3b917476f0fd296612d548d450f..b236fdc1f7cfcf9be6ab2486e53025123b950106 100644
index 9775eda4e445a29852cbf12db43282cf8ac9a118..f218c12634f40a171a5022cb3d2956236d9a4d20 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -283,6 +283,19 @@ public class PurpurWorldConfig {

View File

@@ -18,7 +18,7 @@ index 06ccf6daaf5e7affe505c75cdbf85c1c29c3ebf9..7c60a938850e5db62022217168a075e2
BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState();
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index 7b0cb3f4d8d810b32cda964c20437fea5ea00e24..bc2beee267f535e23bd804d415019bab5ee2fd88 100644
index 43a37611c046c70833349c2ff5313f312bebf25b..2ececba4f225589c5a38eaa24daf2481ad44a648 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab
@@ -92,7 +92,7 @@ index 9d245d08be61d7edee9138196ae3bf52023e3993..d002acdac893e2744cde5f1145d29ac2
} else if (this.nextStartTick > 0) {
--this.nextStartTick;
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index 56b2e83285f02581d03746246f370f18fc0f3c3f..dfff1b51544476dffccfd6bfa016cf57b9c1c081 100644
index 0024345d1906e6fb6bbdb189f6d4dbc631b90f9f..f78d3ef0913f90fb275a8067c4b0b8523a0eb964 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -1370,7 +1370,7 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -157,7 +157,7 @@ index 2ec12ec298446b556132785d4d376130594a7cb6..6b499d59ab27869a74ee1e3b3f777cbd
j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F);
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 3a37ff8bd8ca792393fa10fed4d38eb72559d4db..262350aaed5070a9353ba15726bba197df3b9de0 100644
index 02336ee7a002a620cd76570c84d1d53194a23668..fb55f4c2523fb1573b6dcb7dc6c8f769b7e770a2 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -516,7 +516,15 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -350,7 +350,7 @@ index e744a117d2f25ad24c87263ba2ab7f760b6e594d..e1abec46177887a92726de80f66226fe
org.bukkit.event.Cancellable cancellable;
if (entity instanceof Player) {
diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..19a403ac19695ed6984c42f83c4698ffcc6ac2b7 100644
index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..3e1dddab0500bb805e5accd0ece69c450bad478f 100644
--- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java
@@ -76,7 +76,7 @@ public class PowderSnowBlock extends Block implements BucketPickup {
@@ -358,7 +358,7 @@ index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..19a403ac19695ed6984c42f83c4698ff
// CraftBukkit start
if (entity.isOnFire() && entity.mayInteract(worldserver, pos)) {
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) {
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !((worldserver.purpurConfig.powderSnowBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || entity instanceof Player))) { // Purpur
+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !((worldserver.purpurConfig.powderSnowBypassMobGriefing || worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || entity instanceof Player))) { // Purpur
return;
}
// CraftBukkit end
@@ -376,7 +376,7 @@ index bae4931fff0db56aa125248e17b29f7c2557221f..4eb0f7a9cf6b12c02d0bd42980ae302d
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b236fdc1f7cfcf9be6ab2486e53025123b950106..b1d63425dc952c0ee0b3bd371a0910787ce628b7 100644
index f218c12634f40a171a5022cb3d2956236d9a4d20..f0d8e44aee5cd3b0e4012e41e622d89a8c2f8034 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -120,6 +120,9 @@ public class PurpurWorldConfig {

View File

@@ -110,7 +110,7 @@ index 3d61c2d5da103de68242c16d85c703813979d179..2343325fa9a771de7b9445cda24a2bcd
public ItemStack getBucketItemStack() {
return new ItemStack(Items.COD_BUCKET);
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index f14707692217a753db3062a3bda7c08b71eb95e9..9c3bdf70c70328df4bfc13cb09aeef4b190cd77e 100644
index 826927ec3d3ace50fb353333a666e35502a96171..4ad3571403ee8044d17f53987bd47b6c43d42f0e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -72,6 +72,11 @@ public class Cow extends Animal {
@@ -142,7 +142,7 @@ index be74a5732bc24eb3c909d28b4ef46d5175d999d2..bcc6435c177189aa59a3fbe67795ae50
@Override
public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData entityData) {
diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java
index dfff1b51544476dffccfd6bfa016cf57b9c1c081..cd100063ae1cb62a1bc59bfa07042a7591173a7b 100644
index f78d3ef0913f90fb275a8067c4b0b8523a0eb964..c442b119f699449bdac73cb1b4c139f093ec2a96 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Fox.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java
@@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder<Fox.Variant> {
@@ -347,7 +347,7 @@ index 59fe12a265523f3f1e3568216b703abcff27f4cc..0d6eca127532cf0bc2a4495df1fcd50e
@Override
diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java
index 548f140c56277d46a3381b48d6f0b660c6e8feeb..87ed43001ca86336ad23ffcf8c0c5b1b6036e50a 100644
index 4d2992a16865fa60dd38d0ff6dc341f9c5f6bd00..3cf9a511ae819ec92aac402c01c37c9015939d19 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Squid.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java
@@ -93,6 +93,11 @@ public class Squid extends AgeableWaterCreature {
@@ -395,7 +395,7 @@ index 6b2e27e2f8aeccfc4d84c73be0fa5a04f5a962e2..96a6f13fe6ea02412974fd4c8cf01546
this.entityData.set(Turtle.HOME_POS, pos);
}
diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
index e8f825288aaa6f513f1ac25689a9669e3cfc015f..ec8dc3d02920580103e534f3102063c80bfab5f0 100644
index 7343c5a81ddf7db1e9e434796489fd8a98b9a70c..91474a8a795a278493c07002bd99ec75effa659c 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java
@@ -218,6 +218,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder<Hol
@@ -475,7 +475,7 @@ index b9a406cd4e317c663a12d897b8cf1f4f6eeca662..46d29c15941b542c2f8da20642f2fcbd
protected void randomizeAttributes(RandomSource random) {
this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt));
diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
index 1a992d4c867ebe65b56be724fb54b9bc389cd8ec..1c23531fed535e61afe47bfb66fc4e5ffb1d2dc5 100644
index 7ad4285f820360cf5ccff1ea564afac81eb24e35..0b81415233df20fe7143c87ee964a6a1f490476f 100644
--- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
+++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java
@@ -144,6 +144,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder<Llama.V
@@ -625,7 +625,7 @@ index c1d1a589a6f83e524cc799187d557b504586c24f..8eafedc70e54dfb125b72f1099d7e091
public boolean doHurtTarget(ServerLevel world, Entity target) {
if (super.doHurtTarget(world, target)) {
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index 397509198ab1e7ee275d86fac57ba52445276284..aed8273dd74930914a495d6963e55308d935008c 100644
index 54225cfd13e7b62e80f24b4885c720d6e6ce8700..78da4454fb6eccb1d17d1f0cb19013883437a23e 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -265,6 +265,11 @@ public class Creeper extends Monster {
@@ -673,7 +673,7 @@ index 1cfb85a72e270a953c13102490dc38f3dbfb76d1..a0c76ffa16edffdfa75fd539e58282d3
return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 262350aaed5070a9353ba15726bba197df3b9de0..d48be9b5ac329bddd1eb3c26d35421b32d87f547 100644
index fb55f4c2523fb1573b6dcb7dc6c8f769b7e770a2..491d63bd648c0f0a82c2e9f8a899b352b553a697 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -92,7 +92,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -743,7 +743,7 @@ index 1dfc164c129c1b10bdcbcf0fc140b7c5d76da0a6..29fdd9ca2ea4e6c2a0b51e9803f94b4a
protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder);
diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java
index 39367523621c330eda59905d1f2c129288a1026c..f2e838def533b524e0fc7c20095e4bb1bfd35f07 100644
index 642342592788226999efcb453542f55af71cf193..d9055d95803667c6008607aa4d434d24ec979d6c 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Giant.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java
@@ -49,6 +49,11 @@ public class Giant extends Monster {
@@ -823,7 +823,7 @@ index 3656c83ed02392f4121dab69ea7e0e5a64a984b0..0dde6fb0fbf85d1b5afe0fe25941c0c0
return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, 0.2F);
}
diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
index 32ac2ec33daacf038d2c10b748e89a7725d36a79..2dc44d3b2609fef26925f2a4a21e0a8bdd14d24a 100644
index 39ae23d4942178ce95d4c06e676545aa9a1e8756..6e665d75f2c3a6cec6307a2befb07e73e48da5eb 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java
@@ -137,6 +137,11 @@ public class Phantom extends FlyingMob implements Enemy {
@@ -991,7 +991,7 @@ index bb2283fa9a21d7fc609f0a914cdb8b1370d90235..6c7b3b306b69c5b0526e48e4e636ed24
@Override
diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java
index 4306deb77e4bea5e8e8d39cc4d094ecafab12af2..8e99397f182ccd4e23697121eba23ee69e6e710d 100644
index d889c245c495e9f3e128aec1d3c2094dfc3ec507..010e915b6328754fe7dd159517c1ae166318e4b1 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Vex.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java
@@ -107,6 +107,11 @@ public class Vex extends Monster implements TraceableEntity {
@@ -1199,7 +1199,7 @@ index 7b8b5a7b1fea50c7b238afc4b3d79746da08b641..5eac0ba67b3ab258dd594ad1e1aaa7a2
protected void registerGoals() {
this.goalSelector.addGoal(0, new FloatGoal(this));
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b700c52f74cbae8f99bc721b9b594845a1c1ee6d..d3e196a29e10a21436c4e8049790d87cae2037be 100644
index f9fde0c0cdc14cf5427df3c8ecfa8d407233cdc3..6ab44612b686907e48e05dd41c96d2ad20747fbc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -547,12 +547,14 @@ public class PurpurWorldConfig {
@@ -1862,7 +1862,7 @@ index b700c52f74cbae8f99bc721b9b594845a1c1ee6d..d3e196a29e10a21436c4e8049790d87c
polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable);
polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater);
@@ -1551,12 +1634,14 @@ public class PurpurWorldConfig {
Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString));
Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString));
if (item != Items.AIR) polarBearBreedableItem = item;
polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks);
+ polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater);

View File

@@ -124,10 +124,10 @@ index be87cb3cfa15a7d889118cdc4b87232e30749023..61e906fb47b242e86789dca1a210473c
return this.inFire;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 2685a3e5e4d0a1559f2d28152bab73b8982362fd..6fcb2db92a38e862da288518ce34d16aa4b856e0 100644
index 64c84cb6cc647ca37a0664b83eb24e7202aeb1e2..28800c519ab8a6648d632a577ffbecae175f3844 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -185,6 +185,7 @@ public class PurpurConfig {
@@ -186,6 +186,7 @@ public class PurpurConfig {
public static String demoCommandOutput = "<green>%s has been shown the demo screen";
public static String pingCommandOutput = "<green>%s's ping is %sms";
public static String tpsbarCommandOutput = "<green>Tpsbar toggled <onoff> for <target>";
@@ -135,7 +135,7 @@ index 2685a3e5e4d0a1559f2d28152bab73b8982362fd..6fcb2db92a38e862da288518ce34d16a
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway);
@@ -196,6 +197,12 @@ public class PurpurConfig {
@@ -197,6 +198,12 @@ public class PurpurConfig {
demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput);
pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput);
tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput);
@@ -149,7 +149,7 @@ index 2685a3e5e4d0a1559f2d28152bab73b8982362fd..6fcb2db92a38e862da288518ce34d16a
public static String serverModName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 49edc77bdfe789408e553b9e08aa09ee23806aa1..77e6729051509bdf6d226206578a813b3e80cedc 100644
index 7ba94e40a7ca1b6e81b1404736ee2ec6dc10dca9..dfea07d861779bc6f8c6041ac57bde1596a65e92 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -189,6 +189,10 @@ public class PurpurWorldConfig {
@@ -164,7 +164,7 @@ index 49edc77bdfe789408e553b9e08aa09ee23806aa1..77e6729051509bdf6d226206578a813b
itemImmuneToCactus.clear();
getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> {
@@ -226,6 +230,10 @@ public class PurpurWorldConfig {
Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString()));
Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString()));
if (item != Items.AIR) itemImmuneToLightning.add(item);
});
+ dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index d48be9b5ac329bddd1eb3c26d35421b32d87f547..4a223113757320610eddd89d5404dd54e38fc87d 100644
index 491d63bd648c0f0a82c2e9f8a899b352b553a697..a3cf68f3a43fb525112eaa669f2766b562bda535 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -132,7 +132,7 @@ public class EnderMan extends Monster implements NeutralMob {
@@ -13,12 +13,12 @@ index d48be9b5ac329bddd1eb3c26d35421b32d87f547..4a223113757320610eddd89d5404dd54
this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt));
this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0]));
- this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false));
+ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur
+ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving, ignored) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur
this.targetSelector.addGoal(4, new ResetUniversalAngerTargetGoal<>(this, false));
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index f032d27542b26797126a9b060fa52237349dbca5..2b0984f7a2dd0d2f42f59b85a5b6e8d7b09319c2 100644
index c3343c0ffcee58b8dffeef4f6ff14be2701df443..e05b261fb0b81469ba707ad200f57d01cf29671f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1015,6 +1015,8 @@ public class PurpurWorldConfig {

View File

@@ -31,7 +31,7 @@ index d1efd728f0660b77361fa4f9c2bf5f2e654be0d2..ab58c4dbe9deb8807478a8e66e01f81a
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b1ce0257e3cad9d37f6ab998a7ff6e41060fc3ed..f99d1df0358804862f2d98cd39d1aaf1369081c5 100644
index 5ebf1265a7815e2c774e2b60cd36e075a5bb5427..1986e7a98fdfda443fa7b375786c836bc0f09fbf 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1766,6 +1766,7 @@ public class PurpurWorldConfig {
@@ -58,7 +58,7 @@ index b1ce0257e3cad9d37f6ab998a7ff6e41060fc3ed..f99d1df0358804862f2d98cd39d1aaf1
+ add("minecraft:potatoes");
+ add("minecraft:wheat");
+ }}).forEach(key -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString()));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
+ if (!block.defaultBlockState().isAir()) {
+ ravagerGriefableBlocks.add(block);
+ }

View File

@@ -82,7 +82,7 @@ index 077b99caf0ec0ee098786d23194d88e1dc4481ce..daf865c20cc193a12db0d98e3c0472ee
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 4c751f6b66536ad976c9b8fc936bda38ea12f6e5..c11e68ba894df3e21d499920585df8128bf7429f 100644
index e3381a8ae94168a14f0da7daa896817f8fc1cc7d..eed57224720e26e588a6604f8d96a3d1090b2a0c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -462,6 +462,16 @@ public class PurpurWorldConfig {
@@ -92,7 +92,7 @@ index 4c751f6b66536ad976c9b8fc936bda38ea12f6e5..c11e68ba894df3e21d499920585df812
+ public List<Block> doorRequiresRedstone = new ArrayList<>();
+ private void doorSettings() {
+ getList("blocks.door.requires-redstone", new ArrayList<String>()).forEach(key -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString()));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
+ if (!block.defaultBlockState().isAir()) {
+ doorRequiresRedstone.add(block);
+ }

View File

@@ -95,10 +95,10 @@ index dcb656be3d37f29bdbe7d25ace05c6dd1889e252..d644d02b039ca918391a32a04549f7a3
return (ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 6fcb2db92a38e862da288518ce34d16aa4b856e0..b37daca2ca99d79210ec5e8e9d589e27702a57e5 100644
index 28800c519ab8a6648d632a577ffbecae175f3844..ebeb7e756f8d8b499f0ad1a0948264cfe376a69a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -285,6 +285,36 @@ public class PurpurConfig {
@@ -286,6 +286,36 @@ public class PurpurConfig {
cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame);
}

View File

@@ -18,10 +18,10 @@ index 83ad45aed0894e90825d22e078632352c3a06816..b7ad467d7d7f50bcb90e50f00f905873
public BeehiveBlockEntity(BlockPos pos, BlockState state) {
super(BlockEntityType.BEEHIVE, pos, state);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index b37daca2ca99d79210ec5e8e9d589e27702a57e5..24e3148c51c3d558a3945827842c414d9cdc2e40 100644
index ebeb7e756f8d8b499f0ad1a0948264cfe376a69a..13dd4689491ca760be7451e5d4e721a240094664 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -252,6 +252,7 @@ public class PurpurConfig {
@@ -253,6 +253,7 @@ public class PurpurConfig {
public static boolean enderChestSixRows = false;
public static boolean enderChestPermissionRows = false;
public static boolean cryingObsidianValidForPortalFrame = false;
@@ -29,7 +29,7 @@ index b37daca2ca99d79210ec5e8e9d589e27702a57e5..24e3148c51c3d558a3945827842c414d
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -283,6 +284,7 @@ public class PurpurConfig {
@@ -284,6 +285,7 @@ public class PurpurConfig {
org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27);
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame);

View File

@@ -73,10 +73,10 @@ index 52649f82351ab4f675c3cc3cd6640956b0f76b91..eb51c88c7a0658190d3a8bfd5d18dca7
DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands);
DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 24e3148c51c3d558a3945827842c414d9cdc2e40..6f06956825003ff55604c2e4aea66099ece2470c 100644
index 13dd4689491ca760be7451e5d4e721a240094664..8f242ff15731e0bb0c9d95a6b52a39b6141b0fb9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -235,6 +235,7 @@ public class PurpurConfig {
@@ -236,6 +236,7 @@ public class PurpurConfig {
public static String commandTPSBarTextColorMedium = "<gradient:#ffff55:#ffaa00><text></gradient>";
public static String commandTPSBarTextColorLow = "<gradient:#ff5555:#aa0000><text></gradient>";
public static int commandTPSBarTickInterval = 20;
@@ -84,7 +84,7 @@ index 24e3148c51c3d558a3945827842c414d9cdc2e40..6f06956825003ff55604c2e4aea66099
private static void commandSettings() {
commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle);
commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name()));
@@ -246,6 +247,7 @@ public class PurpurConfig {
@@ -247,6 +248,7 @@ public class PurpurConfig {
commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium);
commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow);
commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval);

View File

@@ -17,7 +17,7 @@ index 0a16aa193ef24aa8f1716f9e089b8027fa3c0a3c..1e85c9318ede93b8e9fe548a8945324b
// Paper end
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 8d4e50aade704403cd713506268a1711080f72a3..5d611f5d8ccd635b376bded93bd0278323a585ba 100644
index a706fd393962973af8f0a88edd98deea235b8404..a3074c439b3255d2cfc174dbc7c5b01ef418a602 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1335,6 +1335,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -29,10 +29,10 @@ index 8d4e50aade704403cd713506268a1711080f72a3..5d611f5d8ccd635b376bded93bd02783
if (scoreboardteam.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) {
this.server.getPlayerList().broadcastSystemToTeam(this, ichatbasecomponent);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 6f06956825003ff55604c2e4aea66099ece2470c..feeaae5b0a8881ce5faf46940ad22b299a33d5eb 100644
index 8f242ff15731e0bb0c9d95a6b52a39b6141b0fb9..66fba2c7e3b0b75d5d6c1aebc031f77010cb73d9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -205,6 +205,18 @@ public class PurpurConfig {
@@ -206,6 +206,18 @@ public class PurpurConfig {
deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors);
}

View File

@@ -59,10 +59,10 @@ index c8d39e6e1c570c9219f6066da273dc0130920519..b455c7e9d18bac3654daa8510f85cc21
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index feeaae5b0a8881ce5faf46940ad22b299a33d5eb..881f3621233834aca8c8d5381e41d2a3fc9237da 100644
index 66fba2c7e3b0b75d5d6c1aebc031f77010cb73d9..9654f422b3e23d10151eb447b990ba5d4cf70671 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -248,6 +248,7 @@ public class PurpurConfig {
@@ -249,6 +249,7 @@ public class PurpurConfig {
public static String commandTPSBarTextColorLow = "<gradient:#ff5555:#aa0000><text></gradient>";
public static int commandTPSBarTickInterval = 20;
public static boolean commandGamemodeRequiresPermission = false;
@@ -70,7 +70,7 @@ index feeaae5b0a8881ce5faf46940ad22b299a33d5eb..881f3621233834aca8c8d5381e41d2a3
private static void commandSettings() {
commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle);
commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name()));
@@ -260,6 +261,7 @@ public class PurpurConfig {
@@ -261,6 +262,7 @@ public class PurpurConfig {
commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow);
commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval);
commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission);

View File

@@ -5,14 +5,14 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius
diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
index ad3a3d8e7ab660be5afb8e00948b87387196ebb7..941eb2b4264f620500347b012c0d9f448133ed78 100644
index 0bce10c1cbf9f1788817a2834ec0efa04dd17752..d2de324f024d0a83790e2b86dc765b0115081461 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java
@@ -373,9 +373,10 @@ public class Creeper extends Monster {
if (world instanceof ServerLevel worldserver) {
float f = this.isPowered() ? 2.0F : 1.0F;
+ float multiplier = this.level().purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur
+ float multiplier = worldserver.purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur
// CraftBukkit start
- ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, this.explosionRadius * f, false);
@@ -21,7 +21,7 @@ index ad3a3d8e7ab660be5afb8e00948b87387196ebb7..941eb2b4264f620500347b012c0d9f44
// CraftBukkit end
this.dead = true;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 9ba71358ef10fcaf5339b7341483b037537a0f01..9ab90bac6c13a063fa851be0e55a81fed8b71492 100644
index 8be5ff1862e6681161d865a54addb1bdd9bd0425..3e8a41cc671491d2b3fed6919e280720160d61eb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -937,6 +937,7 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Breedable parrots
diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
index 9c7e29307b811d859a0d743b232463e18391b5f0..0afa483c6436c4f51955b04a4fe6920a27092284 100644
index 9c7e29307b811d859a0d743b232463e18391b5f0..00759f484cab0d7c8d4e8914dd9f27061c8b7d45 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java
@@ -224,6 +224,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder<Parrot
@@ -45,12 +45,12 @@ index 9c7e29307b811d859a0d743b232463e18391b5f0..0afa483c6436c4f51955b04a4fe6920a
@Override
public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) {
- return null;
+ return world.purpurConfig.parrotBreedable ? EntityType.PARROT.create(world) : null; // Purpur
+ return world.purpurConfig.parrotBreedable ? EntityType.PARROT.create(world, EntitySpawnReason.BREEDING) : null; // Purpur
}
@Nullable
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b5f3137c6b96e0043e5249144dd5a2784c5c1d5a..6994e136f188ae11a77a691d05dc7355906544e5 100644
index 3cd5f5c88aa4d1a3d3423d859a0f4f0e14ee8af6..012696e66a8fb6c1815cbd47f33278c84902102a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1603,6 +1603,7 @@ public class PurpurWorldConfig {

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add config change multiplier critical damage value
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 00b3e300c0d43f7791c9d5f83a7901304f6464f5..e755a472385fcc699ae8fa1e56370c4176152ff6 100644
index ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c..4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -1305,7 +1305,7 @@ public abstract class Player extends LivingEntity {
@@ -1306,7 +1306,7 @@ public abstract class Player extends LivingEntity {
flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits
if (flag2) {
damagesource = damagesource.critical(true); // Paper start - critical damage API
@@ -18,7 +18,7 @@ index 00b3e300c0d43f7791c9d5f83a7901304f6464f5..e755a472385fcc699ae8fa1e56370c41
float f3 = f + f1;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 0c52f8486f59eaca46309b31ac877f609e68b521..920964b0f6c91c9d49ea3c73351c1d5a0e3e2acd 100644
index 6912a7bb0f849c0d283b36f71bb5fa8508b5d25d..0d618c7af0d53ba3bdad85799e7e7cffcdcda125 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -363,6 +363,7 @@ public class PurpurWorldConfig {

View File

@@ -18,10 +18,10 @@ index 033755682c61c889723c3669b5cff4de147f637e..16069b9cbf6c7679c28a2e9a54e77d23
}
} catch (AuthenticationUnavailableException authenticationunavailableexception) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 881f3621233834aca8c8d5381e41d2a3fc9237da..a106b462b3739ecb19db991faffc348f60ff03df 100644
index 9654f422b3e23d10151eb447b990ba5d4cf70671..4c973a362196e4dc5f1a5f0fffeb7967afcde86a 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -186,6 +186,7 @@ public class PurpurConfig {
@@ -187,6 +187,7 @@ public class PurpurConfig {
public static String pingCommandOutput = "<green>%s's ping is %sms";
public static String tpsbarCommandOutput = "<green>Tpsbar toggled <onoff> for <target>";
public static String dontRunWithScissors = "<red><italic>Don't run with scissors!";
@@ -29,7 +29,7 @@ index 881f3621233834aca8c8d5381e41d2a3fc9237da..a106b462b3739ecb19db991faffc348f
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway);
@@ -198,6 +199,7 @@ public class PurpurConfig {
@@ -199,6 +200,7 @@ public class PurpurConfig {
pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput);
tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput);
dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors);

View File

@@ -18,10 +18,10 @@ index e9c17953a3767e03e528ed93b10fb42626fff118..f8476a8fb38897af0dd63bfb20276ac1
public boolean setItemName(String newItemName) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index a106b462b3739ecb19db991faffc348f60ff03df..ebbaa21dbaff140818fad10accd05721451b37cb 100644
index 4c973a362196e4dc5f1a5f0fffeb7967afcde86a..711e63f2101e5a52ca3a3963fa9b0a976b4946a7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -271,6 +271,7 @@ public class PurpurConfig {
@@ -272,6 +272,7 @@ public class PurpurConfig {
public static boolean enderChestPermissionRows = false;
public static boolean cryingObsidianValidForPortalFrame = false;
public static int beeInsideBeeHive = 3;
@@ -29,7 +29,7 @@ index a106b462b3739ecb19db991faffc348f60ff03df..ebbaa21dbaff140818fad10accd05721
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -303,6 +304,7 @@ public class PurpurConfig {
@@ -304,6 +305,7 @@ public class PurpurConfig {
enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows);
cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame);
beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive);

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Make lightning rod range configurable
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 29b8a57477032c85bc498e90af4bfb739926d03c..8680572c838dbad0ea13afe041e43f58b2deebc2 100644
index 51494dc0cca0819ee8df61144e70450facbba727..8d6a3309b6d20e51b056fbf030f27aa4f92640d7 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1069,7 +1069,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -18,10 +18,10 @@ index 29b8a57477032c85bc498e90af4bfb739926d03c..8680572c838dbad0ea13afe041e43f58
return optional.map((blockposition1) -> {
return blockposition1.above(1);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index ebbaa21dbaff140818fad10accd05721451b37cb..e654169f6a290aa52a4e0f647dc7ec6698489729 100644
index 711e63f2101e5a52ca3a3963fa9b0a976b4946a7..fe548c474113d6fa5b605557026e86a542bb03c9 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -272,6 +272,7 @@ public class PurpurConfig {
@@ -273,6 +273,7 @@ public class PurpurConfig {
public static boolean cryingObsidianValidForPortalFrame = false;
public static int beeInsideBeeHive = 3;
public static boolean anvilCumulativeCost = true;
@@ -29,7 +29,7 @@ index ebbaa21dbaff140818fad10accd05721451b37cb..e654169f6a290aa52a4e0f647dc7ec66
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -305,6 +306,7 @@ public class PurpurConfig {
@@ -306,6 +307,7 @@ public class PurpurConfig {
cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame);
beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive);
anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost);

View File

@@ -5,8 +5,20 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar
completely
diff --git a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java
index 837bdc7d6bd4e05b0deded829c678c86ae3d79d5..0c7c0524e487ff32e16dd9939d92bc6441602747 100644
--- a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java
+++ b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java
@@ -21,6 +21,7 @@ class SaturationMobEffect extends InstantenousMobEffect {
int oldFoodLevel = entityhuman.getFoodData().foodLevel;
org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel);
if (!event.isCancelled()) {
+ if (entityhuman.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) entityhuman.burpDelay = entityhuman.level().purpurConfig.playerBurpDelay; // Purpur
entityhuman.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, entity.level().purpurConfig.humanSaturationRegenAmount); // Purpur
}
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index e755a472385fcc699ae8fa1e56370c4176152ff6..8852740d584ad4bafe14787572c2e238ddf2f584 100644
index 4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108..c7393d9c8cb2bc4583cd3715a154f9411cc223e1 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -198,6 +198,7 @@ public abstract class Player extends LivingEntity {
@@ -31,20 +43,17 @@ index e755a472385fcc699ae8fa1e56370c4176152ff6..8852740d584ad4bafe14787572c2e238
if (this.isSpectator()) {
this.setOnGround(false);
diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java
index 6a686be6a69ae890d519a54ca099d4ba14e5b9e1..a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea 100644
index 6a686be6a69ae890d519a54ca099d4ba14e5b9e1..4f8ee2e5db3352306f3c035052866d95630f4aaf 100644
--- a/src/main/java/net/minecraft/world/food/FoodData.java
+++ b/src/main/java/net/minecraft/world/food/FoodData.java
@@ -25,8 +25,10 @@ public class FoodData {
public FoodData() {}
@@ -44,6 +44,7 @@ public class FoodData {
org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(entityplayer, foodinfo.nutrition() + oldFoodLevel, itemstack);
private void add(int nutrition, float saturation) {
+ int oldValue = this.foodLevel; // Purpur
this.foodLevel = Mth.clamp(nutrition + this.foodLevel, 0, 20);
this.saturationLevel = Mth.clamp(saturation + this.saturationLevel, 0.0F, (float) this.foodLevel);
+ if (this.entityhuman.level().purpurConfig.playerBurpWhenFull && this.foodLevel == 20 && oldValue < 20) this.entityhuman.burpDelay = this.entityhuman.level().purpurConfig.playerBurpDelay; // Purpur
}
if (!event.isCancelled()) {
+ if (entityplayer.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) entityplayer.burpDelay = entityplayer.level().purpurConfig.playerBurpDelay; // Purpur
this.add(event.getFoodLevel() - oldFoodLevel, foodinfo.saturation());
}
public void eat(int food, float saturationModifier) {
diff --git a/src/main/java/net/minecraft/world/food/FoodProperties.java b/src/main/java/net/minecraft/world/food/FoodProperties.java
index 882b72799ae532f4e181214d5756ec024af223e2..9a3f2a95debcf8b94f7deb375922ea09b30aabab 100644
--- a/src/main/java/net/minecraft/world/food/FoodProperties.java
@@ -58,8 +67,20 @@ index 882b72799ae532f4e181214d5756ec024af223e2..9a3f2a95debcf8b94f7deb375922ea09
}
}
diff --git a/src/main/java/net/minecraft/world/level/block/CakeBlock.java b/src/main/java/net/minecraft/world/level/block/CakeBlock.java
index 648c2510beb162e73aed236a3169d0bbb8fc5050..3563a241c0b697dc0167cf7b1aa73fef7d1e7934 100644
--- a/src/main/java/net/minecraft/world/level/block/CakeBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/CakeBlock.java
@@ -119,6 +119,7 @@ public class CakeBlock extends Block {
org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(player, 2 + oldFoodLevel);
if (!event.isCancelled()) {
+ if (player.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) player.burpDelay = player.level().purpurConfig.playerBurpDelay; // Purpur
player.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, 0.1F);
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 0adfc605365b5671dadebdd7143ba92417e5bb22..b94017de09e67afbf5778867025d57e2cdf8efb8 100644
index 5f6ae1b46df321ac1ec73007091dec4260732552..faf54de4d563d1cc7d8d5b5b6090ade2801c390b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -379,6 +379,8 @@ public class PurpurWorldConfig {

View File

@@ -18,7 +18,7 @@ index bf7d12594375d5b252db540a6d669a6e6aca7de8..580bd63fdbf9555f867362d3c1f39f41
public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY));
public static final Item SOUL_CAMPFIRE = registerBlock(
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 798160f40deb31511d7d120e66a3464c68203ff3..f9df0bc403a19f4ddedf95907928d9f3003804ab 100644
index 4d37fdd48a36e2608e192ca115f3a15c7fc9064b..b43e6fe2556595ab05e69c17eae3cca628462ed8 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -211,6 +211,7 @@ public class PurpurWorldConfig {
@@ -39,7 +39,7 @@ index 798160f40deb31511d7d120e66a3464c68203ff3..f9df0bc403a19f4ddedf95907928d9f3
public double minecartMaxSpeed = 0.4D;
diff --git a/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java b/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java
new file mode 100644
index 0000000000000000000000000000000000000000..7f526883495b3222746de3d0442e9e4fb5107036
index 0000000000000000000000000000000000000000..b257f35caa13b660854cf17f41fd8fba1d56c458
--- /dev/null
+++ b/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java
@@ -0,0 +1,26 @@
@@ -49,13 +49,13 @@ index 0000000000000000000000000000000000000000..7f526883495b3222746de3d0442e9e4f
+import net.minecraft.world.effect.MobEffectInstance;
+import net.minecraft.world.effect.MobEffects;
+import net.minecraft.world.entity.LivingEntity;
+import net.minecraft.world.item.ItemNameBlockItem;
+import net.minecraft.world.item.BlockItem;
+import net.minecraft.world.item.ItemStack;
+import net.minecraft.world.level.Level;
+import net.minecraft.world.level.block.Block;
+import org.bukkit.event.entity.EntityPotionEffectEvent;
+
+public class GlowBerryItem extends ItemNameBlockItem {
+public class GlowBerryItem extends BlockItem {
+ public GlowBerryItem(Block block, Properties settings) {
+ super(block, settings);
+ }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Configurable hunger starvation damage
diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java
index a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea..8a43bb4d73ac3c6df892c977cecb2c10a82ef8cd 100644
index 4f8ee2e5db3352306f3c035052866d95630f4aaf..b8b0b89b7f0a21ecff4ab6286f8a114e2d6b6b39 100644
--- a/src/main/java/net/minecraft/world/food/FoodData.java
+++ b/src/main/java/net/minecraft/world/food/FoodData.java
@@ -98,7 +98,7 @@ public class FoodData {
@@ -97,7 +97,7 @@ public class FoodData {
++this.tickTimer;
if (this.tickTimer >= this.starvationRate) { // CraftBukkit - add regen rate manipulation
if (player.getHealth() > 10.0F || enumdifficulty == Difficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == Difficulty.NORMAL) {
@@ -18,7 +18,7 @@ index a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea..8a43bb4d73ac3c6df892c977cecb2c10
this.tickTimer = 0;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c5bcf86c2fcbcb5048ee73f9aba848867eb3c3c1..93e9cbefce01fc905fad95947673bca2cf8d29f2 100644
index dceae3b39f761a6e34dbcfb316cfa1704ada7729..a67cc3a25596e01e12b83ee6269f00a5e2e33324 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2684,4 +2684,9 @@ public class PurpurWorldConfig {

View File

@@ -17,7 +17,7 @@ index 5d94b71bd54f99040b76cca74964a32d55339767..0090243f7e1a966534e489cebb88d71d
}
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 6bc6d24022c4f5ea3b7da7074725737fae341fcf..76f31bf31f77c8347b9436779c3701f8a87045e6 100644
index 874535bf55b76ca2df482a191d66924f8f228c97..e1cabc6af43e4342e8215a774483d5cd0db0aba8 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -315,6 +315,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
@@ -29,10 +29,10 @@ index 6bc6d24022c4f5ea3b7da7074725737fae341fcf..76f31bf31f77c8347b9436779c3701f8
public int autosavePeriod;
// Paper - don't store the vanilla dispatcher
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index e654169f6a290aa52a4e0f647dc7ec6698489729..a605b6221f3331093b8eb133e9cb4ac5cd54aaae 100644
index fe548c474113d6fa5b605557026e86a542bb03c9..862e8fbe3d115799874d2eb6475d97d5fa0db0df 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -186,6 +186,7 @@ public class PurpurConfig {
@@ -187,6 +187,7 @@ public class PurpurConfig {
public static String pingCommandOutput = "<green>%s's ping is %sms";
public static String tpsbarCommandOutput = "<green>Tpsbar toggled <onoff> for <target>";
public static String dontRunWithScissors = "<red><italic>Don't run with scissors!";
@@ -40,7 +40,7 @@ index e654169f6a290aa52a4e0f647dc7ec6698489729..a605b6221f3331093b8eb133e9cb4ac5
public static String unverifiedUsername = "default";
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
@@ -199,6 +200,7 @@ public class PurpurConfig {
@@ -200,6 +201,7 @@ public class PurpurConfig {
pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput);
tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput);
dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors);
@@ -48,7 +48,7 @@ index e654169f6a290aa52a4e0f647dc7ec6698489729..a605b6221f3331093b8eb133e9cb4ac5
unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername);
}
@@ -251,6 +253,15 @@ public class PurpurConfig {
@@ -252,6 +254,15 @@ public class PurpurConfig {
public static int commandTPSBarTickInterval = 20;
public static boolean commandGamemodeRequiresPermission = false;
public static boolean hideHiddenPlayersFromEntitySelector = false;
@@ -64,7 +64,7 @@ index e654169f6a290aa52a4e0f647dc7ec6698489729..a605b6221f3331093b8eb133e9cb4ac5
private static void commandSettings() {
commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle);
commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name()));
@@ -264,6 +275,15 @@ public class PurpurConfig {
@@ -265,6 +276,15 @@ public class PurpurConfig {
commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval);
commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission);
hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector);

View File

@@ -133,7 +133,7 @@ index 55c18f182166f4905d623d6f5e909eefd5ed2483..d10c4705cc9e7faabd4a5619e1da1072
afterAction = () -> { // Paper
if (!level.isClientSide()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c329f507e6 100644
index a67cc3a25596e01e12b83ee6269f00a5e2e33324..94ef6f963ecd749b3b69e74559edc0c9cd0e1e45 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -461,6 +461,280 @@ public class PurpurWorldConfig {
@@ -247,17 +247,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3
+ Map.entry("minecraft:crimson_stem", Map.of("into", "minecraft:stripped_crimson_stem", "drops", new HashMap<String, Double>())),
+ Map.entry("minecraft:crimson_hyphae", Map.of("into", "minecraft:stripped_crimson_hyphae", "drops", new HashMap<String, Double>())))
+ ).forEach((blockId, obj) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.strippables`: " + blockId); return; }
+ if (!(obj instanceof Map<?, ?> map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.strippables." + blockId + "`"); return; }
+ String intoId = (String) map.get("into");
+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId));
+ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId));
+ if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.strippables." + blockId + ".into`: " + intoId); return; }
+ Object dropsObj = map.get("drops");
+ if (!(dropsObj instanceof Map<?, ?> dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.strippables." + blockId + ".drops`"); return; }
+ Map<Item, Double> drops = new HashMap<>();
+ dropsMap.forEach((itemId, chance) -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString()));
+ if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.strippables." + blockId + ".drops`: " + itemId); return; }
+ drops.put(item, (double) chance);
+ });
@@ -301,17 +301,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3
+ Map.entry("minecraft:waxed_weathered_copper_bulb", Map.of("into", "minecraft:weathered_copper_bulb", "drops", new HashMap<String, Double>())),
+ Map.entry("minecraft:waxed_oxidized_copper_bulb", Map.of("into", "minecraft:oxidized_copper_bulb", "drops", new HashMap<String, Double>())))
+ ).forEach((blockId, obj) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.waxables`: " + blockId); return; }
+ if (!(obj instanceof Map<?, ?> map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.waxables." + blockId + "`"); return; }
+ String intoId = (String) map.get("into");
+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId));
+ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId));
+ if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.waxables." + blockId + ".into`: " + intoId); return; }
+ Object dropsObj = map.get("drops");
+ if (!(dropsObj instanceof Map<?, ?> dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.waxables." + blockId + ".drops`"); return; }
+ Map<Item, Double> drops = new HashMap<>();
+ dropsMap.forEach((itemId, chance) -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString()));
+ if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.waxables." + blockId + ".drops`: " + itemId); return; }
+ drops.put(item, (double) chance);
+ });
@@ -346,17 +346,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3
+ Map.entry("minecraft:weathered_copper_bulb", Map.of("into", "minecraft:exposed_copper_bulb", "drops", new HashMap<String, Double>())),
+ Map.entry("minecraft:oxidized_copper_bulb", Map.of("into", "minecraft:weathered_copper_bulb", "drops", new HashMap<String, Double>())))
+ ).forEach((blockId, obj) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.weatherables`: " + blockId); return; }
+ if (!(obj instanceof Map<?, ?> map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.weatherables." + blockId + "`"); return; }
+ String intoId = (String) map.get("into");
+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId));
+ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId));
+ if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.weatherables." + blockId + ".into`: " + intoId); return; }
+ Object dropsObj = map.get("drops");
+ if (!(dropsObj instanceof Map<?, ?> dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.weatherables." + blockId + ".drops`"); return; }
+ Map<Item, Double> drops = new HashMap<>();
+ dropsMap.forEach((itemId, chance) -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString()));
+ if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.weatherables." + blockId + ".drops`: " + itemId); return; }
+ drops.put(item, (double) chance);
+ });
@@ -369,20 +369,20 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3
+ Map.entry("minecraft:coarse_dirt", Map.of("condition", "air_above", "into", "minecraft:dirt", "drops", new HashMap<String, Double>())),
+ Map.entry("minecraft:rooted_dirt", Map.of("condition", "always", "into", "minecraft:dirt", "drops", Map.of("minecraft:hanging_roots", 1.0D))))
+ ).forEach((blockId, obj) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.hoe.tillables`: " + blockId); return; }
+ if (!(obj instanceof Map<?, ?> map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.hoe.tillables." + blockId + "`"); return; }
+ String conditionId = (String) map.get("condition");
+ Tillable.Condition condition = Tillable.Condition.get(conditionId);
+ if (condition == null) { PurpurConfig.log(Level.SEVERE, "Invalid condition for `tools.hoe.tillables." + blockId + ".condition`: " + conditionId); return; }
+ String intoId = (String) map.get("into");
+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId));
+ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId));
+ if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.hoe.tillables." + blockId + ".into`: " + intoId); return; }
+ Object dropsObj = map.get("drops");
+ if (!(dropsObj instanceof Map<?, ?> dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.hoe.tillables." + blockId + ".drops`"); return; }
+ Map<Item, Double> drops = new HashMap<>();
+ dropsMap.forEach((itemId, chance) -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString()));
+ if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.hoe.tillables." + blockId + ".drops`: " + itemId); return; }
+ drops.put(item, (double) chance);
+ });
@@ -396,17 +396,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3
+ Map.entry("minecraft:mycelium", Map.of("into", "minecraft:dirt_path", "drops", new HashMap<String, Double>())),
+ Map.entry("minecraft:rooted_dirt", Map.of("into", "minecraft:dirt_path", "drops", new HashMap<String, Double>())))
+ ).forEach((blockId, obj) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.shovel.flattenables`: " + blockId); return; }
+ if (!(obj instanceof Map<?, ?> map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.shovel.flattenables." + blockId + "`"); return; }
+ String intoId = (String) map.get("into");
+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId));
+ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId));
+ if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.shovel.flattenables." + blockId + ".into`: " + intoId); return; }
+ Object dropsObj = map.get("drops");
+ if (!(dropsObj instanceof Map<?, ?> dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.shovel.flattenables." + blockId + ".drops`"); return; }
+ Map<Item, Double> drops = new HashMap<>();
+ dropsMap.forEach((itemId, chance) -> {
+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString()));
+ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString()));
+ if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.shovel.flattenables." + blockId + ".drops`: " + itemId); return; }
+ drops.put(item, (double) chance);
+ });

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Customizable sleeping actionbar messages
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 8680572c838dbad0ea13afe041e43f58b2deebc2..c70a1ca4ed978df1b54363e966a8344a2fe6f277 100644
index 8d6a3309b6d20e51b056fbf030f27aa4f92640d7..be11f61e35bccd87ce627c16a520ef8986fdb28e 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -1118,11 +1118,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -38,7 +38,7 @@ index 8680572c838dbad0ea13afe041e43f58b2deebc2..c70a1ca4ed978df1b54363e966a8344a
}
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 5d611f5d8ccd635b376bded93bd0278323a585ba..cf922e34824be0d5de3e15c969b7c32f1ed8264a 100644
index a3074c439b3255d2cfc174dbc7c5b01ef418a602..77f81e323c6aa805ed30ef171d20f05d0597b3d5 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1832,7 +1832,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -63,10 +63,10 @@ index 5d611f5d8ccd635b376bded93bd0278323a585ba..cf922e34824be0d5de3e15c969b7c32f
((ServerLevel) this.level()).updateSleepingPlayerList();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index a605b6221f3331093b8eb133e9cb4ac5cd54aaae..0051145e950544ad9bb5aceb2043e98060aa11f2 100644
index 862e8fbe3d115799874d2eb6475d97d5fa0db0df..8d41d9a8a2b5b7946c13b8c3ce961fea1a2bc728 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -188,6 +188,9 @@ public class PurpurConfig {
@@ -189,6 +189,9 @@ public class PurpurConfig {
public static String dontRunWithScissors = "<red><italic>Don't run with scissors!";
public static String uptimeCommandOutput = "<green>Server uptime is <uptime>";
public static String unverifiedUsername = "default";
@@ -76,7 +76,7 @@ index a605b6221f3331093b8eb133e9cb4ac5cd54aaae..0051145e950544ad9bb5aceb2043e980
private static void messages() {
cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob);
afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway);
@@ -202,6 +205,9 @@ public class PurpurConfig {
@@ -203,6 +206,9 @@ public class PurpurConfig {
dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors);
uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput);
unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 098256932c2e637726e77bbfcd329f1a329c9969..90998ee1671dc115428102e67a3b07c377133e6e 100644
index 81f88c838f35860fdb7d7f62ed1b98f5734c766e..d7d5ce7ea223248ebda0a3e4b104baed47378ce1 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -2033,6 +2033,13 @@ public abstract class Player extends LivingEntity {
@@ -2034,6 +2034,13 @@ public abstract class Player extends LivingEntity {
return slot != EquipmentSlot.BODY;
}
@@ -23,7 +23,7 @@ index 098256932c2e637726e77bbfcd329f1a329c9969..90998ee1671dc115428102e67a3b07c3
if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) {
if (this.getShoulderEntityLeft().isEmpty()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c2ba7e7e6d927635979531f6ef08643bcbac5bc0..ccc692652bc26a696abd5debfa825ed9759691a7 100644
index 6bb5b805a3f35a07607b6766e3ca4a1abe9c3f06..07688502620716592971226105149f55a7489758 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -385,6 +385,7 @@ public class PurpurWorldConfig {

View File

@@ -5,19 +5,19 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit
diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
index 27a4b47ad46700b595dd829e6aab558d170c0a8f..1ef3a5c4a99213a87021232d4bc3f8cb3dd101bb 100644
index 737c3367faee2286984c8e7d161b128d7b6632a5..b8fe9665bed428e8e97d1b8a6527cbefc9b9fbcb 100644
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
@@ -424,6 +424,7 @@ public class EnderMan extends Monster implements NeutralMob {
} else {
flag1 = flag && this.hurtWithCleanWater(world, source, (ThrownPotion) source.getDirectEntity(), amount);
+ if (!flag1 && this.level().purpurConfig.endermanIgnoreProjectiles) return super.hurt(source, amount); // Purpur
+ if (!flag1 && world.purpurConfig.endermanIgnoreProjectiles) return super.hurtServer(world, source, amount); // Purpur
if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent
for (int i = 0; i < 64; ++i) {
if (this.teleport()) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index ccc692652bc26a696abd5debfa825ed9759691a7..e2152fa2977d1761a399fd3b2d1362b2a805b962 100644
index 07688502620716592971226105149f55a7489758..12da1422d9a5fe4a742856d2cac8e77aa3a59818 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1440,6 +1440,7 @@ public class PurpurWorldConfig {

View File

@@ -17,7 +17,7 @@ index 0090243f7e1a966534e489cebb88d71d9cbab7bb..d8ee4422a13c7f09b84e9bbe8b57f0c1
if (environment.includeIntegrated) {
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6c3bba7e7 100644
index 77f81e323c6aa805ed30ef171d20f05d0597b3d5..9a84a81891dc48fa7c005c13cab0eb6effaa624e 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -325,6 +325,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -44,7 +44,7 @@ index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6
}
private void saveParentVehicle(CompoundTag nbt) {
@@ -3447,5 +3450,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -3461,5 +3464,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void tpsBar(boolean tpsBar) {
this.tpsBar = tpsBar;
}
@@ -59,10 +59,10 @@ index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6
// Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135d37b51f3 100644
index 8d41d9a8a2b5b7946c13b8c3ce961fea1a2bc728..e8dc97694f59cfce67e2fe061868a9f080ef3004 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -257,6 +257,11 @@ public class PurpurConfig {
@@ -258,6 +258,11 @@ public class PurpurConfig {
public static String commandTPSBarTextColorMedium = "<gradient:#ffff55:#ffaa00><text></gradient>";
public static String commandTPSBarTextColorLow = "<gradient:#ff5555:#aa0000><text></gradient>";
public static int commandTPSBarTickInterval = 20;
@@ -74,7 +74,7 @@ index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135
public static boolean commandGamemodeRequiresPermission = false;
public static boolean hideHiddenPlayersFromEntitySelector = false;
public static String uptimeFormat = "<days><hours><minutes><seconds>";
@@ -279,6 +284,13 @@ public class PurpurConfig {
@@ -280,6 +285,13 @@ public class PurpurConfig {
commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium);
commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow);
commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval);
@@ -89,7 +89,7 @@ index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135
hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector);
uptimeFormat = getString("settings.command.uptime.format", uptimeFormat);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index e2152fa2977d1761a399fd3b2d1362b2a805b962..75d5e129e9fb74181aed9d5bd57f19aea67dcfd2 100644
index 12da1422d9a5fe4a742856d2cac8e77aa3a59818..a563b33677d3067030d733aa5d66fc3f39eab782 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -213,6 +213,7 @@ public class PurpurWorldConfig {

View File

@@ -97,7 +97,7 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index c85acd8ceaa2b36a7fcf298076016c682c987871..fc6ebb8ee607b8d54d5b66c119161e59c11b9ea8 100644
index 0d86c8a35219291c20ad8128a3e9316a4d8ca772..1df14efb834bb2f434e16549c43b48eb2a195b22 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3011,4 +3011,27 @@ public class PurpurWorldConfig {
@@ -120,7 +120,7 @@ index c85acd8ceaa2b36a7fcf298076016c682c987871..fc6ebb8ee607b8d54d5b66c119161e59
+ add("minecraft:sea_lantern");
+ add("minecraft:dark_prismarine");
+ }}).forEach(key -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString()));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString()));
+ if (!block.defaultBlockState().isAir()) {
+ conduitBlockList.add(block);
+ }

View File

@@ -23,38 +23,24 @@ index 1240df9368855f836412b06cf564926a18bfe90d..e559eabed82d2f402908e5b80d150507
}
} else if (this.isFuel(itemstack1)) {
if (!this.moveItemStackTo(itemstack1, 1, 2, false)) {
diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
index 91a158ed90b7ce3eac7277fd962682a0226c08ed..658893b06a994c7b927ae40db2c1284d606c35c2 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
@@ -131,6 +131,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
this.recipeType = recipeType; // Paper - cook speed multiplier API
}
diff --git a/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java b/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java
index 61ef08ac941b1e8988d001241780d3a1582f7a2d..2eab5b43ab654966d26424597c1f3baa919e8434 100644
--- a/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java
+++ b/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java
@@ -17,7 +17,7 @@ import net.minecraft.world.level.ItemLike;
import net.minecraft.world.level.block.Blocks;
+ // Purpur start
+ public static void addFuel(ItemStack itemStack, Integer burnTime) {
+ Map<Item, Integer> map = Maps.newLinkedHashMap();
+ map.putAll(getFuel());
+ map.put(itemStack.getItem(), burnTime);
+ AbstractFurnaceBlockEntity.fuelCache = com.google.common.collect.ImmutableMap.copyOf(map);
+ }
+
+ public static void removeFuel(ItemStack itemStack) {
+ Map<Item, Integer> map = Maps.newLinkedHashMap();
+ map.putAll(getFuel());
+ map.remove(itemStack.getItem());
+ AbstractFurnaceBlockEntity.fuelCache = com.google.common.collect.ImmutableMap.copyOf(map);
+ }
+ // Purpur End
+
// CraftBukkit start - add fields and methods
private int maxStack = MAX_STACK;
public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
public class FuelValues {
- private final Object2IntSortedMap<Item> values;
+ public final Object2IntSortedMap<Item> values; // Purpur - private -> public
FuelValues(Object2IntSortedMap<Item> fuelValues) {
this.values = fuelValues;
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..4eb332ed95fd0ca196f3712037deb7637bfa4d8b 100644
index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..6bb44716544e0c3dd3fce8d20e351cb5d4010e4c 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1590,6 +1590,19 @@ public final class CraftServer implements Server {
@@ -1590,6 +1590,22 @@ public final class CraftServer implements Server {
return true;
}
@@ -62,12 +48,15 @@ index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..4eb332ed95fd0ca196f3712037deb763
+ @Override
+ public void addFuel(org.bukkit.Material material, int burnTime) {
+ Preconditions.checkArgument(burnTime > 0, "BurnTime must be greater than 0");
+ net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.addFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)), burnTime);
+
+ net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material));
+ MinecraftServer.getServer().fuelValues().values.put(itemStack.getItem(), burnTime);
+ }
+
+ @Override
+ public void removeFuel(org.bukkit.Material material) {
+ net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)));
+ net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material));
+ MinecraftServer.getServer().fuelValues().values.keySet().removeIf(itemStack::is);
+ }
+ // Purpur End
+

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance
diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
index bcc6435c177189aa59a3fbe67795ae5092685133..515fa6120554d9b2aad32257c48577e6458cd2ff 100644
index bcc6435c177189aa59a3fbe67795ae5092685133..fad0b8157a9c30a0e9b35fe32b6a9f2e8a6dd43e 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java
@@ -85,6 +85,7 @@ public class Dolphin extends AgeableWaterCreature {
@@ -43,12 +43,12 @@ index bcc6435c177189aa59a3fbe67795ae5092685133..515fa6120554d9b2aad32257c48577e6
this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0D, 1.0D));
this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur
this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers());
+ this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur
+ this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur
}
public static AttributeSupplier.Builder createAttributes() {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 025982aac35116320ff41203645e606504640940..3f10fe595960a69ed372f80c1b28acd9e956516b 100644
index 7f9b948191a2160b8e1b11ff04468f47bf1a498e..93be2146696ec724cca8017708265953ee4f25b3 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1343,6 +1343,7 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Cows naturally aggressive to players chance
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java
index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140b3490072 100644
index 4ad3571403ee8044d17f53987bd47b6c43d42f0e..380bd41336d8d24bffd4e10885e46c95e5bb71fd 100644
--- a/src/main/java/net/minecraft/world/entity/animal/Cow.java
+++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java
@@ -37,6 +37,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent;
@@ -29,7 +29,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140
}
+ @Override
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData entityData) {
+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, net.minecraft.world.entity.SpawnGroupData entityData) {
+ this.isNaturallyAggressiveToPlayers = world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance;
+ return super.finalizeSpawn(world, difficulty, spawnReason, entityData);
+ }
@@ -47,7 +47,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140
this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D));
this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F));
this.goalSelector.addGoal(7, new RandomLookAroundGoal(this));
+ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur
+ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur
}
@Override
@@ -61,7 +61,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140
@Override
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 3f10fe595960a69ed372f80c1b28acd9e956516b..09465c479f1074d76be88713f727c648be61bf06 100644
index 93be2146696ec724cca8017708265953ee4f25b3..bbb0cfa4bbb36c6833785633ee6e616d6355894c 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1288,7 +1288,14 @@ public class PurpurWorldConfig {

View File

@@ -123,10 +123,10 @@ index 5687f492fc76f699e2a388790ca5380d9b8c8d0a..cc229f3e1e9527cbedf929e326731943
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d9c31d7ea 100644
index e8dc97694f59cfce67e2fe061868a9f080ef3004..a1e1aad7a1b845e2efd381da0221559443808cf7 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -311,6 +311,9 @@ public class PurpurConfig {
@@ -312,6 +312,9 @@ public class PurpurConfig {
public static int beeInsideBeeHive = 3;
public static boolean anvilCumulativeCost = true;
public static int lightningRodRange = 128;
@@ -136,7 +136,7 @@ index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -345,6 +348,21 @@ public class PurpurConfig {
@@ -346,6 +349,21 @@ public class PurpurConfig {
beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive);
anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost);
lightningRodRange = getInt("settings.blocks.lightning_rod.range", lightningRodRange);
@@ -148,8 +148,8 @@ index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d
+ defaultCurses.clear();
+ }
+ getList("settings.blocks.grindstone.ignored-enchants", defaultCurses).forEach(key -> {
+ Registry<Enchantment> registry = MinecraftServer.getServer().registryAccess().registryOrThrow(Registries.ENCHANTMENT);
+ Enchantment enchantment = registry.get(ResourceLocation.parse(key.toString()));
+ Registry<Enchantment> registry = MinecraftServer.getServer().registryAccess().lookupOrThrow(Registries.ENCHANTMENT);
+ Enchantment enchantment = registry.getValue(ResourceLocation.parse(key.toString()));
+ if (enchantment == null) return;
+ grindstoneIgnoredEnchants.add(enchantment);
+ });

View File

@@ -68,10 +68,10 @@ index de85340fe0a0e057c527cc1fa91ae6bec558228a..e73c07257395198e123019811b20fec6
// CraftBukkit start
// this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 9c5348fd18c2943ce39346dd19fa194d9c31d7ea..ce8181b0527406a54569779d453b227f6b693f0d 100644
index a1e1aad7a1b845e2efd381da0221559443808cf7..d8930c57a867a63a4a8149136eb8a7a9ab96e11b 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -421,4 +421,9 @@ public class PurpurConfig {
@@ -422,4 +422,9 @@ public class PurpurConfig {
private static void tpsCatchup() {
tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup);
}

View File

@@ -135,10 +135,10 @@ index 3dec5a082606ee35a8c8d7f746480262d6a189c5..b2f6ccae9576c176263e51a232e17a08
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index ce8181b0527406a54569779d453b227f6b693f0d..0d899125bd89b23d6b5f1fa6bdb25d3b76a62783 100644
index d8930c57a867a63a4a8149136eb8a7a9ab96e11b..4aac9004892030772eb4791209d3de71e9e480cc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -314,6 +314,10 @@ public class PurpurConfig {
@@ -315,6 +315,10 @@ public class PurpurConfig {
public static Set<Enchantment> grindstoneIgnoredEnchants = new HashSet<>();
public static boolean grindstoneRemoveAttributes = false;
public static boolean grindstoneRemoveDisplay = false;
@@ -149,7 +149,7 @@ index ce8181b0527406a54569779d453b227f6b693f0d..0d899125bd89b23d6b5f1fa6bdb25d3b
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -363,6 +367,30 @@ public class PurpurConfig {
@@ -364,6 +368,30 @@ public class PurpurConfig {
});
grindstoneRemoveAttributes = getBoolean("settings.blocks.grindstone.remove-attributes", grindstoneRemoveAttributes);
grindstoneRemoveDisplay = getBoolean("settings.blocks.grindstone.remove-name-and-lore", grindstoneRemoveDisplay);

View File

@@ -17,10 +17,10 @@ index 6c33002dc8bbb3759c3156302ab7d1f26ce5e8ee..c89fc375aff548a2b03eaf4da3b6a075
return false;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 0d899125bd89b23d6b5f1fa6bdb25d3b76a62783..7ad309e81ec61a6f2553e9ffeb9a986f4d569b37 100644
index 4aac9004892030772eb4791209d3de71e9e480cc..b3eba9f3d15ff94dd9044e135f5b304916e17c72 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -454,4 +454,11 @@ public class PurpurConfig {
@@ -455,4 +455,11 @@ public class PurpurConfig {
private static void networkSettings() {
useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP);
}

View File

@@ -29,10 +29,10 @@ index e73c07257395198e123019811b20fec6adf8f0ef..b18ed9645dfda3a7a12500533394fcd1
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 7ad309e81ec61a6f2553e9ffeb9a986f4d569b37..357b5080b6d3651c8f913081de283576a0a17cec 100644
index b3eba9f3d15ff94dd9044e135f5b304916e17c72..c677345c6d632aa92c3b6c395d3b5db11f933d8f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -434,6 +434,11 @@ public class PurpurConfig {
@@ -435,6 +435,11 @@ public class PurpurConfig {
allowWaterPlacementInTheEnd = getBoolean("settings.allow-water-placement-in-the-end", allowWaterPlacementInTheEnd);
}

View File

@@ -22,10 +22,10 @@ index 6db9a3ea4c0dc1f0629bc8bf6466aeab00c498f6..32a0db7e8f974712bd8a05f16f3bd48a
int i = this.repairPlayerItems(entityplayer, this.value);
diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java
index 90998ee1671dc115428102e67a3b07c377133e6e..05d30d2ba3ea7daebe40ddfaa9ce38d99f943038 100644
index d7d5ce7ea223248ebda0a3e4b104baed47378ce1..c1d068fa99ec0fd5685bbb627a775e4d1587feab 100644
--- a/src/main/java/net/minecraft/world/entity/player/Player.java
+++ b/src/main/java/net/minecraft/world/entity/player/Player.java
@@ -661,7 +661,7 @@ public abstract class Player extends LivingEntity {
@@ -662,7 +662,7 @@ public abstract class Player extends LivingEntity {
while (iterator.hasNext()) {
Entity entity = (Entity) iterator.next();
@@ -35,7 +35,7 @@ index 90998ee1671dc115428102e67a3b07c377133e6e..05d30d2ba3ea7daebe40ddfaa9ce38d9
} else if (!entity.isRemoved()) {
this.touch(entity);
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index b3382f2383f546ef53b4dd4c2187f39d8f027c01..74b5d04cf6880f30f8f36ea0414e0ae5542c34b7 100644
index 4c54ef064e3284830a14a8ff56be56e2170b7b3d..d7f8bf20eba76b8eea60e6483308e8b76430dd56 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -419,6 +419,7 @@ public class PurpurWorldConfig {

View File

@@ -6,7 +6,7 @@ Subject: [PATCH] Max joins per second
When this option is set to true the `max-joins-per-tick` setting in paper.yml will be used per second instead of per tick
diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java
index fff8d15d44613a075b9793c2a41520212166eb3b..4b0e41b5e26ecf632dff512aac6660fff5264072 100644
index 4a8356a714ed50d4a32bcf046a2e16491bef014b..56e47c5709c765943407d2065b25bd512d1f9388 100644
--- a/src/main/java/net/minecraft/network/Connection.java
+++ b/src/main/java/net/minecraft/network/Connection.java
@@ -617,11 +617,20 @@ public class Connection extends SimpleChannelInboundHandler<Packet<?>> {
@@ -31,10 +31,10 @@ index fff8d15d44613a075b9793c2a41520212166eb3b..4b0e41b5e26ecf632dff512aac6660ff
}
// Paper end - Buffer joins to world
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 357b5080b6d3651c8f913081de283576a0a17cec..f8179f8b7a57a66705d51f30ab528307e3a84b32 100644
index c677345c6d632aa92c3b6c395d3b5db11f933d8f..1763db5af790f590e047ddccd8ecc3220fb361ed 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -456,8 +456,10 @@ public class PurpurConfig {
@@ -457,8 +457,10 @@ public class PurpurConfig {
}
public static boolean useUPnP = false;

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly
diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
index 8c4532a250f8679d729a35c17e9b5bd339264450..16518ade3b0c355e6002801d88eb92cc82dc7b56 100644
index 8c4532a250f8679d729a35c17e9b5bd339264450..2b8336bd88641cfb29e94c8f01abfbdb39938bf3 100644
--- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
+++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java
@@ -74,6 +74,6 @@ public abstract class WaterAnimal extends PathfinderMob {
@@ -13,11 +13,11 @@ index 8c4532a250f8679d729a35c17e9b5bd339264450..16518ade3b0c355e6002801d88eb92cc
j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j);
// Paper end - Make water animal spawn height configurable
- return pos.getY() >= j && pos.getY() <= i && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER);
+ return ((reason == MobSpawnType.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur
+ return ((reason == EntitySpawnReason.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index ac3042705a8ef4154b6feac9115bac19f7fdead3..1426f0f6246c4e57a66e25365609c36991a72059 100644
index a2c202fdc7cc0352e940d08751e958c7516bff75..1a4a756943a1ba888b85b8896db0942dce19ab8d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1019,8 +1019,10 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Anvil repair/damage options
diff --git a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c12cb41a1f 100644
index 50c907c962f936d2035bb7550750cdbd220b29c2..f9a2d2d4f798efa0d691996ec5ff7fe00260b36c 100644
--- a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
+++ b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java
@@ -59,6 +59,53 @@ public class AnvilBlock extends FallingBlock {
@@ -14,12 +14,12 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1
+ // Purpur start - repairable/damageable anvils
+ @Override
+ protected net.minecraft.world.ItemInteractionResult useItemOn(final net.minecraft.world.item.ItemStack stack, final BlockState state, final Level world, final BlockPos pos, final Player player, final net.minecraft.world.InteractionHand hand, final BlockHitResult hit) {
+ protected net.minecraft.world.InteractionResult useItemOn(final net.minecraft.world.item.ItemStack stack, final BlockState state, final Level world, final BlockPos pos, final Player player, final net.minecraft.world.InteractionHand hand, final BlockHitResult hit) {
+ if (world.purpurConfig.anvilRepairIngotsAmount > 0 && stack.is(net.minecraft.world.item.Items.IRON_INGOT)) {
+ if (stack.getCount() < world.purpurConfig.anvilRepairIngotsAmount) {
+ // not enough iron ingots, play "error" sound and consume
+ world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F);
+ return net.minecraft.world.ItemInteractionResult.CONSUME;
+ return net.minecraft.world.InteractionResult.CONSUME;
+ }
+ if (state.is(Blocks.DAMAGED_ANVIL)) {
+ world.setBlock(pos, Blocks.CHIPPED_ANVIL.defaultBlockState().setValue(FACING, state.getValue(FACING)), 3);
@@ -28,19 +28,19 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1
+ } else if (state.is(Blocks.ANVIL)) {
+ // anvil is already fully repaired, play "error" sound and consume
+ world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F);
+ return net.minecraft.world.ItemInteractionResult.CONSUME;
+ return net.minecraft.world.InteractionResult.CONSUME;
+ }
+ if (!player.getAbilities().instabuild) {
+ stack.shrink(world.purpurConfig.anvilRepairIngotsAmount);
+ }
+ world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_PLACE, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F);
+ return net.minecraft.world.ItemInteractionResult.CONSUME;
+ return net.minecraft.world.InteractionResult.CONSUME;
+ }
+ if (world.purpurConfig.anvilDamageObsidianAmount > 0 && stack.is(net.minecraft.world.item.Items.OBSIDIAN)) {
+ if (stack.getCount() < world.purpurConfig.anvilDamageObsidianAmount) {
+ // not enough obsidian, play "error" sound and consume
+ world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F);
+ return net.minecraft.world.ItemInteractionResult.CONSUME;
+ return net.minecraft.world.InteractionResult.CONSUME;
+ }
+ if (state.is(Blocks.DAMAGED_ANVIL)) {
+ world.destroyBlock(pos, false);
@@ -53,9 +53,9 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1
+ stack.shrink(world.purpurConfig.anvilDamageObsidianAmount);
+ }
+ world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_LAND, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F);
+ return net.minecraft.world.ItemInteractionResult.CONSUME;
+ return net.minecraft.world.InteractionResult.CONSUME;
+ }
+ return net.minecraft.world.ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
+ return net.minecraft.world.InteractionResult.TRY_WITH_EMPTY_HAND;
+ }
+ // Purpur end
+
@@ -63,7 +63,7 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1
protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) {
if (!world.isClientSide) {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index bd48ba4acf41ec77f542ca7e8dfe6280bb2fbed1..9f4f3d94e6790b29cfda030780d95caf48eee0e5 100644
index 9fd228060bd31deee69c0b76aba11883140a7d0b..71d8d33d31584aa9bb0d3b0c868d1b2028ba1e18 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -786,9 +786,13 @@ public class PurpurWorldConfig {

View File

@@ -59,10 +59,10 @@ index cfc6a657cae92c68868a76c1b7b1febe2a16e9f4..a12c08da793139e39dc11c213c94796b
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index f8179f8b7a57a66705d51f30ab528307e3a84b32..5b509058cda0e0b5f923f669b5dd3d9e67e3e148 100644
index 1763db5af790f590e047ddccd8ecc3220fb361ed..2090ecfebe8bc164239d198c1c50b134c7bc60c5 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -398,6 +398,7 @@ public class PurpurConfig {
@@ -399,6 +399,7 @@ public class PurpurConfig {
public static boolean allowHigherEnchantsLevels = false;
public static boolean allowUnsafeEnchantCommand = false;
public static boolean replaceIncompatibleEnchants = false;
@@ -70,7 +70,7 @@ index f8179f8b7a57a66705d51f30ab528307e3a84b32..5b509058cda0e0b5f923f669b5dd3d9e
private static void enchantmentSettings() {
if (version < 30) {
boolean oldValue = getBoolean("settings.enchantment.allow-unsafe-enchants", false);
@@ -421,6 +422,7 @@ public class PurpurConfig {
@@ -422,6 +423,7 @@ public class PurpurConfig {
allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels);
allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchantCommand);
replaceIncompatibleEnchants = getBoolean("settings.enchantment.anvil.replace-incompatible-enchants", replaceIncompatibleEnchants);

View File

@@ -128,10 +128,10 @@ index c9f5047bfa48c12a9090cb8da4bb9045e38e8f89..483b2fa71df29e064e35694a6017286b
} else if (source.is(DamageTypes.HOT_FLOOR)) {
cause = DamageCause.HOT_FLOOR;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 5b509058cda0e0b5f923f669b5dd3d9e67e3e148..5475a8c622c4090e994f87f6a28febdccecbf973 100644
index 2090ecfebe8bc164239d198c1c50b134c7bc60c5..dba6a69891f50ba057187a8138ff227ad7501eaa 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -211,8 +211,10 @@ public class PurpurConfig {
@@ -212,8 +212,10 @@ public class PurpurConfig {
}
public static String deathMsgRunWithScissors = "<player> slipped and fell on their shears";
@@ -143,7 +143,7 @@ index 5b509058cda0e0b5f923f669b5dd3d9e67e3e148..5475a8c622c4090e994f87f6a28febdc
public static boolean advancementOnlyBroadcastToAffectedPlayer = false;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index cc6b3d249cd63a4cf9f1888f21f251199cdccde4..c1b269ebd90be16888f7fcace9efc0e0c08a4448 100644
index 369e63acfae5cc5fe1981b4750c4272ccec8f595..7218fa676a3f15b04282ad85098d4131c8464b78 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -1042,6 +1042,11 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] Skeletons eat wither roses
diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c70e03658 100644
index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fbb58032bb 100644
--- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
+++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java
@@ -17,6 +17,16 @@ import net.minecraft.world.item.Items;
@@ -52,7 +52,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c
+ return InteractionResult.CONSUME;
+ }
+
+ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level());
+ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level(), net.minecraft.world.entity.EntitySpawnReason.CONVERSION);
+ if (skeleton == null) {
+ return InteractionResult.PASS;
+ }
@@ -90,7 +90,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c
+ // Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index ac183cb85490adc2312f5ec674a515826e540ae4..a7f750506e03cae0e965dfd874e92d3157576fb0 100644
index 823be371f4678bfe324db1a261c27361f22a7108..4dd70114e6d1b17cfddbeedf5f16751bfc36c8ef 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2565,6 +2565,7 @@ public class PurpurWorldConfig {

View File

@@ -18,10 +18,10 @@ index 300929a406905f5ff1ede664d5b99fb0938d4d2e..a4e9ac0e07f08e0b6aa682e8c1587d9c
throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.OUT_OF_ORDER_CHAT, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes
} else {
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 5475a8c622c4090e994f87f6a28febdccecbf973..afb165af34f365210fdfa6542cf7a81435096738 100644
index dba6a69891f50ba057187a8138ff227ad7501eaa..32e44e47cc6b5e6ed6e13f41dd8b4ba29459d7f0 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -461,9 +461,11 @@ public class PurpurConfig {
@@ -462,9 +462,11 @@ public class PurpurConfig {
public static boolean useUPnP = false;
public static boolean maxJoinsPerSecond = false;

View File

@@ -660,10 +660,10 @@ index 96f9d18eb22380cccd35b486713583d6dfa46646..1961b18a2b5e5985181f0ca930ab14ba
}
diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java
index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8df2b5ee36 100644
index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..3083f3e0a17efc3a1dc7f50493ec646d9884cbd8 100644
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
@@ -714,16 +714,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -714,18 +714,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
}
public void tick(BooleanSupplier shouldKeepTicking) {
@@ -681,8 +681,11 @@ index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8d
- gameprofilerfiller.popPush("weather");
+ //gameprofilerfiller.popPush("weather"); // Purpur
this.advanceWeatherCycle();
gameprofilerfiller.pop();
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
}
int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE);
@@ -756,30 +756,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
this.tickTime();
}
@@ -875,7 +878,7 @@ index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8d
while (iterator.hasNext()) {
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 3f804ddb25aa03bdd964d390a1a1aab4d09abfde..5b4edb2386bb624d3633385106472070868acccc 100644
index ce8b5dd01359344300d1a1a06e8207a768a846ce..2518ad5af51b944393e53508010a18df111c5c83 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -1663,15 +1663,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -1180,7 +1183,7 @@ index bc5c8879befe849ce81becf5e3fba6757b01cb70..ce81d6bd87f688a24003f2fbf6d5010a
}
}
diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java
index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22c332b381 100644
index cb123001b08c0772bacce87d022d236bc7eaa1d1..6474b375c05eebc1fa3468f2963770dfff8dec5c 100644
--- a/src/main/java/net/minecraft/world/entity/Entity.java
+++ b/src/main/java/net/minecraft/world/entity/Entity.java
@@ -946,9 +946,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
@@ -1245,6 +1248,15 @@ index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22
} else {
if (this.horizontalCollision) {
Vec3 vec3d2 = this.getDeltaMovement();
@@ -1347,7 +1347,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
float f = this.getBlockSpeedFactor();
this.setDeltaMovement(this.getDeltaMovement().multiply((double) f, 1.0D, (double) f));
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
}
}
// Paper start - detailed watchdog information
@@ -3512,9 +3512,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.processPortalCooldown();
if (this.portalProcess != null) {
@@ -1282,6 +1294,15 @@ index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22
return null;
} else {
// Paper start - Fix item duplication and teleport issues
@@ -4108,7 +4108,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
world.resetEmptyTime();
teleportTarget.postTeleportTransition().onTransition(entity);
- gameprofilerfiller.pop();
+ //gameprofilerfiller.pop(); // Purpur
return entity;
}
}
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
index 60b0cf7cd5e4bcbe882590b79a70dafb23e6772f..38a7bde1bc2836352a62dfe1dd3b9a60877c20e2 100644
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
@@ -1403,7 +1424,7 @@ index 60b0cf7cd5e4bcbe882590b79a70dafb23e6772f..38a7bde1bc2836352a62dfe1dd3b9a60
// Purpur start
if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) {
diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java
index da1aefc4cdf2bca8e91c6c7833c24f3f0923f552..1fd6990fdf16283aab956c36daaafeb64aa5358b 100644
index 7978e307e7bb7f80993c49dcc5ada319a907c648..ff9d23aef4658922692b43a859bd83632fe23612 100644
--- a/src/main/java/net/minecraft/world/entity/Mob.java
+++ b/src/main/java/net/minecraft/world/entity/Mob.java
@@ -371,15 +371,15 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab

View File

@@ -5,12 +5,12 @@ Subject: [PATCH] Debug Marker API
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
index 4eb332ed95fd0ca196f3712037deb7637bfa4d8b..da3c89bc037c42268987c5923ca58c93adace80d 100644
index 6bb44716544e0c3dd3fce8d20e351cb5d4010e4c..8e1bf5e86ee517408b1fad6a23f666d897de77ee 100644
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
@@ -1601,6 +1601,42 @@ public final class CraftServer implements Server {
public void removeFuel(org.bukkit.Material material) {
net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)));
@@ -1604,6 +1604,42 @@ public final class CraftServer implements Server {
net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material));
MinecraftServer.getServer().fuelValues().values.keySet().removeIf(itemStack::is);
}
+
+ @Override

View File

@@ -18,7 +18,7 @@ index 0ba926b6ff0bd54159765cc7f37d1753ded89dee..cbbddb924f46203bd600b838fc22902c
if (environment.includeIntegrated) {
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbeadbdf24a2f 100644
index 2518ad5af51b944393e53508010a18df111c5c83..f0414dd16a97461f65c2965c035da811a0d65c01 100644
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
@@ -326,6 +326,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -45,7 +45,7 @@ index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbead
nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur
nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur
}
@@ -3459,5 +3462,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
@@ -3473,5 +3476,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple
public void compassBar(boolean compassBar) {
this.compassBar = compassBar;
}
@@ -60,10 +60,10 @@ index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbead
// Purpur end
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f2be3a07c 100644
index 32e44e47cc6b5e6ed6e13f41dd8b4ba29459d7f0..7164788c20483a78a92ccdcf480bd95651d84825 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -184,6 +184,8 @@ public class PurpurConfig {
@@ -185,6 +185,8 @@ public class PurpurConfig {
public static String creditsCommandOutput = "<green>%s has been shown the end credits";
public static String demoCommandOutput = "<green>%s has been shown the demo screen";
public static String pingCommandOutput = "<green>%s's ping is %sms";
@@ -72,7 +72,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f
public static String tpsbarCommandOutput = "<green>Tpsbar toggled <onoff> for <target>";
public static String dontRunWithScissors = "<red><italic>Don't run with scissors!";
public static String uptimeCommandOutput = "<green>Server uptime is <uptime>";
@@ -201,6 +203,8 @@ public class PurpurConfig {
@@ -202,6 +204,8 @@ public class PurpurConfig {
creditsCommandOutput = getString("settings.messages.credits-command-output", creditsCommandOutput);
demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput);
pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput);
@@ -81,7 +81,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f
tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput);
dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors);
uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput);
@@ -249,6 +253,15 @@ public class PurpurConfig {
@@ -250,6 +254,15 @@ public class PurpurConfig {
disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops);
}
@@ -97,7 +97,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f
public static String commandTPSBarTitle = "<gray>TPS<yellow>:</yellow> <tps> MSPT<yellow>:</yellow> <mspt> Ping<yellow>:</yellow> <ping>ms";
public static BossBar.Overlay commandTPSBarProgressOverlay = BossBar.Overlay.NOTCHED_20;
public static TPSBarTask.FillMode commandTPSBarProgressFillMode = TPSBarTask.FillMode.MSPT;
@@ -276,6 +289,16 @@ public class PurpurConfig {
@@ -277,6 +290,16 @@ public class PurpurConfig {
public static String uptimeSecond = "%02d second";
public static String uptimeSeconds = "%02d seconds";
private static void commandSettings() {

View File

@@ -18,17 +18,17 @@ index 6b987ee220d94b482d2aeb4ff6bf271853605dc1..852bfe68ab722a5cbdd90dbd70501b75
protected final SoundType soundType;
protected final float friction;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 7ce9115c4a90e22befdd6b82c2e6588f2be3a07c..60f522926b5c8dada7720142573d03af34e5a330 100644
index 7164788c20483a78a92ccdcf480bd95651d84825..a282e1a0c832174a70c7b317f547c5d250fe37ad 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -497,4 +497,19 @@ public class PurpurConfig {
@@ -498,4 +498,19 @@ public class PurpurConfig {
String setPattern = getString("settings.username-valid-characters", defaultPattern);
usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern);
}
+
+ private static void blastResistanceSettings() {
+ getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) {
+ log(Level.SEVERE, "Invalid block for `settings.blast-resistance-overrides`: " + blockId);
+ return;

View File

@@ -54,10 +54,10 @@ index ef364aa171a48482a45bc18cfe730ec20c3f7be6..74971d90506aa253d5ee821b5390fb25
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 60f522926b5c8dada7720142573d03af34e5a330..0304e57559d6791cf4ddbec1a8dd2c2b6caa2d8e 100644
index a282e1a0c832174a70c7b317f547c5d250fe37ad..1d4fb426bfba5f572785c5a904d01be8edf23f24 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -512,4 +512,50 @@ public class PurpurConfig {
@@ -513,4 +513,50 @@ public class PurpurConfig {
block.explosionResistance = blastResistance.floatValue();
});
}
@@ -81,7 +81,7 @@ index 60f522926b5c8dada7720142573d03af34e5a330..0304e57559d6791cf4ddbec1a8dd2c2b
+ Map.entry("minecraft:purple_bed", Map.of("distance", 0.5F)),
+ Map.entry("minecraft:magenta_bed", Map.of("distance", 0.5F))
+ )).forEach((blockId, value) -> {
+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
+ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));
+ if (block == Blocks.AIR) {
+ log(Level.SEVERE, "Invalid block for `settings.block-fall-multipliers`: " + blockId);
+ return;

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add log suppression for LibraryLoader
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 0304e57559d6791cf4ddbec1a8dd2c2b6caa2d8e..e13ec4125047db4edc9dc5de3a2adcdde51bce12 100644
index 1d4fb426bfba5f572785c5a904d01be8edf23f24..4e47c24adb808feee415ee3e1c159955a7be5c71 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -470,11 +470,14 @@ public class PurpurConfig {
@@ -471,11 +471,14 @@ public class PurpurConfig {
public static boolean loggerSuppressIgnoredAdvancementWarnings = false;
public static boolean loggerSuppressUnrecognizedRecipeErrors = false;
public static boolean loggerSuppressSetBlockFarChunk = false;

View File

@@ -57,7 +57,7 @@ index 4e863ae1f94291b391a142e04e0c41e83417ab70..d7eb680b977656556a618431b1511c10
entitythrowntrident.pickupItemStack = stack.copy(); // SPIGOT-4511 update since damage call moved
// CraftBukkit end
diff --git a/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java b/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java
index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e6081f01b 100644
index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..d8cf49cbd82ed12d23fa10a81a88cc4bcf1c0f10 100644
--- a/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java
+++ b/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java
@@ -66,6 +66,11 @@ public class EnchantedCountIncreaseFunction extends LootItemConditionalFunction
@@ -65,7 +65,7 @@ index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e
if (entity instanceof LivingEntity livingEntity) {
int i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingEntity);
+ // Purpur start - Add an option to fix MC-3304 projectile looting
+ if (org.purpurmc.purpur.PurpurConfig.fixProjectileLootingTransfer && context.getParamOrNull(LootContextParams.DIRECT_ATTACKING_ENTITY) instanceof net.minecraft.world.entity.projectile.AbstractArrow arrow) {
+ if (org.purpurmc.purpur.PurpurConfig.fixProjectileLootingTransfer && context.getOptionalParameter(LootContextParams.DIRECT_ATTACKING_ENTITY) instanceof net.minecraft.world.entity.projectile.AbstractArrow arrow) {
+ i = arrow.actualEnchantments.getLevel(this.enchantment);
+ }
+ // Purpur end - Add an option to fix MC-3304 projectile looting
@@ -73,10 +73,10 @@ index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e
return stack;
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index e13ec4125047db4edc9dc5de3a2adcdde51bce12..b881bfac6c8204bfe7ccd38583daf48013c5f639 100644
index 4e47c24adb808feee415ee3e1c159955a7be5c71..b5724a0646f2194591d0c8539b87a850ad1bb5db 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -501,6 +501,11 @@ public class PurpurConfig {
@@ -502,6 +502,11 @@ public class PurpurConfig {
usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern);
}
@@ -87,4 +87,4 @@ index e13ec4125047db4edc9dc5de3a2adcdde51bce12..b881bfac6c8204bfe7ccd38583daf480
+
private static void blastResistanceSettings() {
getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> {
Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));

View File

@@ -39,10 +39,10 @@ index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index b881bfac6c8204bfe7ccd38583daf48013c5f639..569d178584ddafd38c476e56ed1809da0ddc3b1f 100644
index b5724a0646f2194591d0c8539b87a850ad1bb5db..334bcf9f24c6b658664424fd960dad6fb9e28c7d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -506,6 +506,16 @@ public class PurpurConfig {
@@ -507,6 +507,16 @@ public class PurpurConfig {
fixProjectileLootingTransfer = getBoolean("settings.fix-projectile-looting-transfer", fixProjectileLootingTransfer);
}
@@ -58,4 +58,4 @@ index b881bfac6c8204bfe7ccd38583daf48013c5f639..569d178584ddafd38c476e56ed1809da
+
private static void blastResistanceSettings() {
getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> {
Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId));
Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId));

View File

@@ -8,32 +8,34 @@ Shears can now defuse TNT. Each world can have a configured chance for the TNT t
By default the option is disabled to avoid breaking any possible vanilla mechanics.
diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
index de87483600e55d88176fe25db621bbd3e464729f..5d3002ae9f8e73851c65c2131343b2762dc9eae8 100644
index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59f41ac455 100644
--- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
+++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java
@@ -249,4 +249,29 @@ public class PrimedTnt extends Entity implements TraceableEntity {
@@ -249,4 +249,31 @@ public class PrimedTnt extends Entity implements TraceableEntity {
return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid();
}
// Paper end - Option to prevent TNT from moving in water
+ // Purpur start - Shears can defuse TNT
+ @Override
+ public net.minecraft.world.InteractionResult interact(net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand) {
+ if (!level().isClientSide && level().purpurConfig.shearsCanDefuseTnt) {
+ Level world = this.level();
+
+ if (world instanceof ServerLevel serverWorld && level().purpurConfig.shearsCanDefuseTnt) {
+ final net.minecraft.world.item.ItemStack inHand = player.getItemInHand(hand);
+
+ if (!inHand.is(net.minecraft.world.item.Items.SHEARS) || !player.getBukkitEntity().hasPermission("purpur.tnt.defuse") ||
+ level().random.nextFloat() > level().purpurConfig.shearsCanDefuseTntChance) return net.minecraft.world.InteractionResult.PASS;
+ serverWorld.random.nextFloat() > serverWorld.purpurConfig.shearsCanDefuseTntChance) return net.minecraft.world.InteractionResult.PASS;
+
+ net.minecraft.world.entity.item.ItemEntity tntItem = new net.minecraft.world.entity.item.ItemEntity(level(), getX(), getY(), getZ(),
+ net.minecraft.world.entity.item.ItemEntity tntItem = new net.minecraft.world.entity.item.ItemEntity(serverWorld, getX(), getY(), getZ(),
+ new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.TNT));
+ tntItem.setPickUpDelay(10);
+
+ inHand.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand));
+ level().addFreshEntity(tntItem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CUSTOM);
+ serverWorld.addFreshEntity(tntItem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CUSTOM);
+
+ this.playSound(net.minecraft.sounds.SoundEvents.SHEEP_SHEAR);
+
+ this.kill();
+ this.kill(serverWorld);
+ return net.minecraft.world.InteractionResult.SUCCESS;
+ }
+
@@ -42,7 +44,7 @@ index de87483600e55d88176fe25db621bbd3e464729f..5d3002ae9f8e73851c65c2131343b276
+ // Purpur end - Shears can defuse TNT
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index 44f6d8b1b4653bf4398f914045deadb9c34a3d35..1e561d12f4b04a536cc891e6a6d123c90e77266c 100644
index 777139fb7098a9df8877cfe2e74329685a6389e0..463c8873ba1fcc8f081a1909c1fc8967589f4d4f 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -3395,4 +3395,11 @@ public class PurpurWorldConfig {

View File

@@ -5,7 +5,7 @@ Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor
diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b04e3b4861 100644
index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..27a6de70530c2a1cbe2f77a7fb493038121710ea 100644
--- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
+++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java
@@ -605,11 +605,18 @@ public class PiglinAi {
@@ -13,15 +13,15 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b0
itemstack = (ItemStack) iterator.next();
- } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR));
+ } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR) && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(item))); // Purpur
+ } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR) && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(itemstack.getItem()))); // Purpur
return true;
}
+ // Purpur start
+ private static boolean isWearingGoldTrim(Item itemstack) {
+ net.minecraft.world.item.armortrim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM);
+ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.armortrim.TrimMaterials.GOLD);
+ net.minecraft.world.item.equipment.trim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM);
+ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.equipment.trim.TrimMaterials.GOLD);
+ }
+ // Purpur end
+
@@ -29,7 +29,7 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b0
piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET);
piglin.getNavigation().stop();
diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
index a433ca73bdc61aed436743daadaa58e818d54f50..10b7fabd0c04a62b328dfd8cf0ad6797e3d5e4ee 100644
index 2f9a512a8e4162385ca1b28c91e805112c11949b..341397cdf45be30cffbc65453dc643868ce51bcc 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java
@@ -2312,6 +2312,7 @@ public class PurpurWorldConfig {

View File

@@ -31,10 +31,10 @@ index d95d122601dd47a27e8d82a13b071919c360fe68..4a96d914f8aa6f0c5f13fc85369a311f
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 569d178584ddafd38c476e56ed1809da0ddc3b1f..6d7b5a84ac541c92747d4154298c5e62c9987199 100644
index 334bcf9f24c6b658664424fd960dad6fb9e28c7d..e2b2eb66907f3a35792a59d68509abda1dd34ccb 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -576,4 +576,9 @@ public class PurpurConfig {
@@ -577,4 +577,9 @@ public class PurpurConfig {
block.fallDistanceMultiplier = fallDistanceMultiplier.floatValue();
});
}

View File

@@ -32,10 +32,10 @@ index 5e9a2838335179566bdcd79bca0cb849c725b73b..f0d762bd140fad27ae73bcf3e61b640b
io.papermc.paper.plugin.PluginInitializerManager.load(optionset); // Paper
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 6d7b5a84ac541c92747d4154298c5e62c9987199..c1f14b11dbd472bc84993156d41a777167ec9ad7 100644
index e2b2eb66907f3a35792a59d68509abda1dd34ccb..8ceec24eeb4b441bcc37e75d4b6a778cc6184f31 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -581,4 +581,9 @@ public class PurpurConfig {
@@ -582,4 +582,9 @@ public class PurpurConfig {
private static void playerDeathsAlwaysShowItem() {
playerDeathsAlwaysShowItem = getBoolean("settings.player-deaths-always-show-item", playerDeathsAlwaysShowItem);
}

View File

@@ -27,10 +27,10 @@ index 13f29051f55b5628d91b4dca06051e41097badcd..f6b6231c32afb4e1838deec5b2f86130
long i;
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index c1f14b11dbd472bc84993156d41a777167ec9ad7..86e3983ff899bebbdc14493ac6b37b2371134e13 100644
index 8ceec24eeb4b441bcc37e75d4b6a778cc6184f31..ed54fc4104ac5e38490bc5390f8351eb5a9c039d 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -586,4 +586,16 @@ public class PurpurConfig {
@@ -587,4 +587,16 @@ public class PurpurConfig {
private static void registerMinecraftDebugCommands() {
registerMinecraftDebugCommands = getBoolean("settings.register-minecraft-debug-commands", registerMinecraftDebugCommands);
}

View File

@@ -22,10 +22,10 @@ index 385da0585f409ee453f10d45f5837cdc09adc21b..c65016cba376a41c267fb4b6499ec0a2
}
}
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
index 86e3983ff899bebbdc14493ac6b37b2371134e13..aa23302af702f422b8686c5dbdb29cba5e44e3d5 100644
index ed54fc4104ac5e38490bc5390f8351eb5a9c039d..95cd1156766895546ef5574b33a60806bff08fa2 100644
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
@@ -343,6 +343,8 @@ public class PurpurConfig {
@@ -344,6 +344,8 @@ public class PurpurConfig {
public static int kelpMaxGrowthAge = 25;
public static int twistingVinesMaxGrowthAge = 25;
public static int weepingVinesMaxGrowthAge = 25;
@@ -34,7 +34,7 @@ index 86e3983ff899bebbdc14493ac6b37b2371134e13..aa23302af702f422b8686c5dbdb29cba
private static void blockSettings() {
if (version < 3) {
boolean oldValue = getBoolean("settings.barrel.packed-barrels", true);
@@ -416,6 +418,8 @@ public class PurpurConfig {
@@ -417,6 +419,8 @@ public class PurpurConfig {
log(Level.WARNING, "blocks.weeping_vines.max-growth-age is set to above maximum allowed value of 25");
log(Level.WARNING, "Using value of 25 to prevent issues");
}