mirror of
https://github.com/PaperMC/Paper.git
synced 2025-08-06 15:12:13 -07:00
MOOOOOOOOOOOOOORE
This commit is contained in:
@@ -22,9 +22,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
@@ -0,0 +0,0 @@ public class Turtle extends Animal {
|
@@ -0,0 +0,0 @@ public class Turtle extends Animal {
|
||||||
RandomSource randomsource = this.animal.getRandom();
|
RandomSource randomsource = this.animal.getRandom();
|
||||||
|
|
||||||
if (this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
|
if (getServerLevel((Level) this.level).getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
|
||||||
- this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), randomsource.nextInt(7) + 1, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper;
|
- this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), randomsource.nextInt(7) + 1, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper;
|
||||||
+ if (event.getExperience() > 0) this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), event.getExperience(), org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper - Add EntityFertilizeEggEvent event
|
+ if (event.getExperience() > 0) this.level.addFreshEntity(new ExperienceOrb(this.level, this.animal.getX(), this.animal.getY(), this.animal.getZ(), randomsource.nextInt(7) + 1, org.bukkit.entity.ExperienceOrb.SpawnReason.BREED, entityplayer)); // Paper - Add EntityFertilizeEggEvent event
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
@@ -0,0 +0,0 @@ public class CraftEventFactory {
|
@@ -0,0 +0,0 @@ populateFields(victim, event); // Paper - make cancellable
|
||||||
return event.callEvent();
|
return event.callEvent();
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end
|
@@ -8,14 +8,6 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/mai
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
||||||
@@ -0,0 +0,0 @@
|
|
||||||
package org.bukkit.craftbukkit.entity;
|
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
|
||||||
+import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.sounds.SoundEvent;
|
|
||||||
import org.bukkit.Sound;
|
|
||||||
import org.bukkit.craftbukkit.CraftLootTable;
|
|
||||||
@@ -0,0 +0,0 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
|
@@ -0,0 +0,0 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob {
|
||||||
this.getHandle().setAggressive(aggressive);
|
this.getHandle().setAggressive(aggressive);
|
||||||
}
|
}
|
||||||
@@ -24,7 +16,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public int getPossibleExperienceReward() {
|
+ public int getPossibleExperienceReward() {
|
||||||
+ return getHandle().getExperienceReward((ServerLevel) this.getHandle().level(), null);
|
+ return getHandle().getExperienceReward((net.minecraft.server.level.ServerLevel) this.getHandle().level(), null);
|
||||||
+ }
|
+ }
|
||||||
+ // Paper end
|
+ // Paper end
|
||||||
}
|
}
|
@@ -52,7 +52,7 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||||
@@ -0,0 +0,0 @@ public class CraftEventFactory {
|
@@ -0,0 +0,0 @@ populateFields(victim, event); // Paper - make cancellable
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
@@ -15,7 +15,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
|
+++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java
|
||||||
@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
@@ -0,0 +0,0 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock
|
||||||
world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK);
|
||||||
return InteractionResult.SUCCESS;
|
return InteractionResult.SUCCESS_SERVER;
|
||||||
} else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
|
} else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) {
|
||||||
+ if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
|
+ if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first
|
||||||
if (!this.kickVillagerOutOfBed(world, pos)) {
|
if (!this.kickVillagerOutOfBed(world, pos)) {
|
@@ -10,10 +10,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
--- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
||||||
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java
|
||||||
@@ -0,0 +0,0 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
@@ -0,0 +0,0 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit
|
||||||
Entry<ResourceLocation> entry = (Entry) objectiterator.next();
|
Entry<ResourceKey<Recipe<?>>> entry = (Entry) objectiterator.next();
|
||||||
|
|
||||||
worldserver.getRecipeManager().byKey((ResourceLocation) entry.getKey()).ifPresent((recipeholder) -> {
|
worldserver.recipeAccess().byKey(entry.getKey()).ifPresent((recipeholder) -> { // CraftBukkit - decompile error
|
||||||
+ if (!(recipeholder.value() instanceof AbstractCookingRecipe)) return; // Paper - don't process non-cooking recipes
|
+ if (!(recipeholder.value() instanceof AbstractCookingRecipe)) return; // Paper - don't process non-cooking recipes
|
||||||
list.add(recipeholder);
|
list.add(recipeholder);
|
||||||
AbstractFurnaceBlockEntity.createExperience(worldserver, vec3d, entry.getIntValue(), ((AbstractCookingRecipe) recipeholder.value()).getExperience(), blockposition, entityplayer, itemstack, amount); // CraftBukkit
|
AbstractFurnaceBlockEntity.createExperience(worldserver, vec3d, entry.getIntValue(), ((AbstractCookingRecipe) recipeholder.value()).experience(), blockposition, entityplayer, itemstack, amount); // CraftBukkit
|
||||||
});
|
});
|
@@ -8,7 +8,7 @@ diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/mai
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
--- a/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements WorldGenLevel {
|
@@ -0,0 +0,0 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void gameEvent(Holder<GameEvent> event, Vec3 emitterPos, GameEvent.Context emitter) {
|
public void gameEvent(Holder<GameEvent> event, Vec3 emitterPos, GameEvent.Context emitter) {
|
@@ -30,7 +30,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
@@ -0,0 +0,0 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl
|
||||||
private int knownMovePacketCount;
|
private boolean receivedMovementThisTick;
|
||||||
@Nullable
|
@Nullable
|
||||||
private RemoteChatSession chatSession;
|
private RemoteChatSession chatSession;
|
||||||
+ private boolean hasLoggedExpiry = false; // Paper - Prevent causing expired keys from impacting new joins
|
+ private boolean hasLoggedExpiry = false; // Paper - Prevent causing expired keys from impacting new joins
|
@@ -9,31 +9,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/world/level/GameRules.java
|
--- a/src/main/java/net/minecraft/world/level/GameRules.java
|
||||||
+++ b/src/main/java/net/minecraft/world/level/GameRules.java
|
+++ b/src/main/java/net/minecraft/world/level/GameRules.java
|
||||||
@@ -0,0 +0,0 @@ public class GameRules {
|
@@ -0,0 +0,0 @@ public class GameRules {
|
||||||
worldserver.setDefaultSpawnPos(worldserver.getSharedSpawnPos(), worldserver.getSharedSpawnAngle());
|
|
||||||
}));
|
}));
|
||||||
private final Map<GameRules.Key<?>, GameRules.Value<?>> rules;
|
private final Map<GameRules.Key<?>, GameRules.Value<?>> rules;
|
||||||
|
private final FeatureFlagSet enabledFeatures;
|
||||||
+ private final GameRules.Value<?>[] gameruleArray; // Paper - Perf: Use array for gamerule storage
|
+ private final GameRules.Value<?>[] gameruleArray; // Paper - Perf: Use array for gamerule storage
|
||||||
|
|
||||||
private static <T extends GameRules.Value<T>> GameRules.Key<T> register(String name, GameRules.Category category, GameRules.Type<T> type) {
|
private static <T extends GameRules.Value<T>> GameRules.Key<T> register(String name, GameRules.Category category, GameRules.Type<T> type) {
|
||||||
GameRules.Key<T> gamerules_gamerulekey = new GameRules.Key<>(name, category);
|
GameRules.Key<T> gamerules_gamerulekey = new GameRules.Key<>(name, category);
|
||||||
@@ -0,0 +0,0 @@ public class GameRules {
|
@@ -0,0 +0,0 @@ public class GameRules {
|
||||||
}
|
private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules, FeatureFlagSet enabledFeatures) {
|
||||||
|
|
||||||
public GameRules() {
|
|
||||||
- this.rules = (Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
|
|
||||||
+ // Paper start - Perf: Use array for gamerule storage
|
|
||||||
+ this((Map) GameRules.GAME_RULE_TYPES.entrySet().stream().collect(ImmutableMap.toImmutableMap(Entry::getKey, (entry) -> {
|
|
||||||
return ((GameRules.Type) entry.getValue()).createRule();
|
|
||||||
- }));
|
|
||||||
+ })));
|
|
||||||
+ // Paper end - Perf: Use array for gamerule storage
|
|
||||||
}
|
|
||||||
|
|
||||||
private GameRules(Map<GameRules.Key<?>, GameRules.Value<?>> rules) {
|
|
||||||
this.rules = rules;
|
this.rules = rules;
|
||||||
|
this.enabledFeatures = enabledFeatures;
|
||||||
+
|
+
|
||||||
+ // Paper start - Perf: Use array for gamerule storage
|
+ // Paper start - Perf: Use array for gamerule storage
|
||||||
+ int arraySize = rules.keySet().stream().mapToInt(key -> key.gameRuleIndex).max().orElse(-1) + 1;
|
+ int arraySize = GameRules.Key.lastGameRuleIndex + 1;
|
||||||
+ GameRules.Value<?>[] values = new GameRules.Value[arraySize];
|
+ GameRules.Value<?>[] values = new GameRules.Value[arraySize];
|
||||||
+
|
+
|
||||||
+ for (Entry<GameRules.Key<?>, GameRules.Value<?>> entry : rules.entrySet()) {
|
+ for (Entry<GameRules.Key<?>, GameRules.Value<?>> entry : rules.entrySet()) {
|
||||||
@@ -45,17 +34,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
public <T extends GameRules.Value<T>> T getRule(GameRules.Key<T> key) {
|
public <T extends GameRules.Value<T>> T getRule(GameRules.Key<T> key) {
|
||||||
- return (T) this.rules.get(key); // CraftBukkit - decompile error
|
- T t0 = (T) this.rules.get(key); // CraftBukkit - decompile error
|
||||||
+ return key == null ? null : (T) this.gameruleArray[key.gameRuleIndex]; // Paper - Perf: Use array for gamerule storage
|
+ T t0 = key == null ? null : (T) this.gameruleArray[key.gameRuleIndex]; // Paper - Perf: Use array for gamerule storage
|
||||||
}
|
|
||||||
|
|
||||||
public CompoundTag createTag() {
|
if (t0 == null) {
|
||||||
|
throw new IllegalArgumentException("Tried to access invalid game rule");
|
||||||
@@ -0,0 +0,0 @@ public class GameRules {
|
@@ -0,0 +0,0 @@ public class GameRules {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Key<T extends GameRules.Value<T>> {
|
public static final class Key<T extends GameRules.Value<T>> {
|
||||||
+ // Paper start - Perf: Use array for gamerule storage
|
+ // Paper start - Perf: Use array for gamerule storage
|
||||||
+ private static int lastGameRuleIndex = 0;
|
+ public static int lastGameRuleIndex = 0;
|
||||||
+ public final int gameRuleIndex = lastGameRuleIndex++;
|
+ public final int gameRuleIndex = lastGameRuleIndex++;
|
||||||
+ // Paper end - Perf: Use array for gamerule storage
|
+ // Paper end - Perf: Use array for gamerule storage
|
||||||
|
|
Reference in New Issue
Block a user