mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-01 00:10:32 +01:00
89d51d5f29
Because this exploit has been widely known for years and has not been fixed by Mojang, we decided that it was worth allowing people to toggle it on/off due to how easy it is to make it configurable. It should be noted that this decision does not promise all future exploits will be configurable.
50 lines
3.2 KiB
Diff
50 lines
3.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sat, 21 Aug 2021 21:54:16 -0700
|
|
Subject: [PATCH] Fix bees aging inside hives
|
|
|
|
Fixes bees incorrectly being aged up due to upstream's
|
|
resetting the ticks inside hive on a failed release
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
|
|
index a69a81ba6a2b65978b5cf00810ed12156a5f89e6..55b0e2bf98a285cdcd30e40d94192b7a1802efd8 100644
|
|
--- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
|
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java
|
|
@@ -332,7 +332,7 @@ public class BeehiveBlockEntity extends BlockEntity {
|
|
|
|
for (Iterator iterator = bees.iterator(); iterator.hasNext(); ++tileentitybeehive_hivebee.ticksInHive) {
|
|
tileentitybeehive_hivebee = (BeehiveBlockEntity.BeeData) iterator.next();
|
|
- if (tileentitybeehive_hivebee.ticksInHive > tileentitybeehive_hivebee.minOccupationTicks) {
|
|
+ if (tileentitybeehive_hivebee.exitTickCounter > tileentitybeehive_hivebee.minOccupationTicks) { // Paper - Fix bees aging inside hives; use exitTickCounter
|
|
BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus = tileentitybeehive_hivebee.entityData.getBoolean("HasNectar") ? BeehiveBlockEntity.BeeReleaseStatus.HONEY_DELIVERED : BeehiveBlockEntity.BeeReleaseStatus.BEE_RELEASED;
|
|
|
|
if (BeehiveBlockEntity.releaseOccupant(world, pos, state, tileentitybeehive_hivebee, (List) null, tileentitybeehive_releasestatus, flowerPos)) {
|
|
@@ -340,10 +340,11 @@ public class BeehiveBlockEntity extends BlockEntity {
|
|
iterator.remove();
|
|
// CraftBukkit start
|
|
} else {
|
|
- tileentitybeehive_hivebee.ticksInHive = tileentitybeehive_hivebee.minOccupationTicks / 2; // Not strictly Vanilla behaviour in cases where bees cannot spawn but still reasonable
|
|
+ tileentitybeehive_hivebee.exitTickCounter = tileentitybeehive_hivebee.minOccupationTicks / 2; // Not strictly Vanilla behaviour in cases where bees cannot spawn but still reasonable // Paper - Fix bees aging inside hives; use exitTickCounter to keep actual bee life
|
|
// CraftBukkit end
|
|
}
|
|
}
|
|
+ tileentitybeehive_hivebee.exitTickCounter++; // Paper - Fix bees aging inside hives
|
|
}
|
|
|
|
if (flag) {
|
|
@@ -432,12 +433,14 @@ public class BeehiveBlockEntity extends BlockEntity {
|
|
|
|
final CompoundTag entityData;
|
|
int ticksInHive;
|
|
+ int exitTickCounter; // Paper - Fix bees aging inside hives; separate counter for checking if bee should exit to reduce exit attempts
|
|
final int minOccupationTicks;
|
|
|
|
BeeData(CompoundTag entityData, int ticksInHive, int minOccupationTicks) {
|
|
BeehiveBlockEntity.removeIgnoredBeeTags(entityData);
|
|
this.entityData = entityData;
|
|
this.ticksInHive = ticksInHive;
|
|
+ this.exitTickCounter = ticksInHive; // Paper - Fix bees aging inside hives
|
|
this.minOccupationTicks = minOccupationTicks;
|
|
}
|
|
}
|