geforkt von Mirrors/Paper
[ci skip] Minor cleanup and patch merges
Dieser Commit ist enthalten in:
Ursprung
22185798a5
Commit
3a0aff9ba9
@ -1,49 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: SoSeDiK <mrsosedik@gmail.com>
|
|
||||||
Date: Tue, 11 Oct 2022 23:30:32 +0300
|
|
||||||
Subject: [PATCH] Expose pre-collision moving velocity to
|
|
||||||
VehicleBlockCollisionEvent
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java b/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
|
|
||||||
+++ b/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
|
|
||||||
@@ -0,0 +0,0 @@ import org.jetbrains.annotations.NotNull;
|
|
||||||
public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
|
||||||
// private static final HandlerList handlers = new HandlerList(); // Paper - move HandlerList to VehicleCollisionEvent
|
|
||||||
private final Block block;
|
|
||||||
+ private final org.bukkit.util.Vector velocity; // Paper
|
|
||||||
|
|
||||||
+ // Paper start - Add pre-collision velocity
|
|
||||||
+ @Deprecated
|
|
||||||
public VehicleBlockCollisionEvent(@NotNull final Vehicle vehicle, @NotNull final Block block) {
|
|
||||||
+ this(vehicle, block, vehicle.getVelocity());
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ public VehicleBlockCollisionEvent(@NotNull final Vehicle vehicle, @NotNull final Block block, @NotNull final org.bukkit.util.Vector velocity) { // Paper - Added velocity
|
|
||||||
super(vehicle);
|
|
||||||
this.block = block;
|
|
||||||
+ this.velocity = velocity;
|
|
||||||
}
|
|
||||||
+ // Paper end
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the block the vehicle collided with
|
|
||||||
@@ -0,0 +0,0 @@ public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
|
||||||
public Block getBlock() {
|
|
||||||
return block;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ // Paper start
|
|
||||||
+ /**
|
|
||||||
+ * Gets velocity at which the vehicle collided with the block
|
|
||||||
+ *
|
|
||||||
+ * @return pre-collision moving velocity
|
|
||||||
+ */
|
|
||||||
+ @NotNull
|
|
||||||
+ public org.bukkit.util.Vector getVelocity() {
|
|
||||||
+ return velocity;
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
}
|
|
@ -1,8 +1,9 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
||||||
Date: Mon, 13 Dec 2021 14:35:27 -0800
|
Date: Mon, 13 Dec 2021 14:35:27 -0800
|
||||||
Subject: [PATCH] Move VehicleCollisionEvent HandlerList up
|
Subject: [PATCH] Extend VehicleCollisionEvent, move HandlerList up
|
||||||
|
|
||||||
|
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java b/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
|
diff --git a/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java b/src/main/java/org/bukkit/event/vehicle/VehicleBlockCollisionEvent.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
@ -13,10 +14,34 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
*/
|
*/
|
||||||
public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
||||||
- private static final HandlerList handlers = new HandlerList();
|
- private static final HandlerList handlers = new HandlerList();
|
||||||
+ // private static final HandlerList handlers = new HandlerList(); // Paper - move HandlerList to VehicleCollisionEvent
|
|
||||||
private final Block block;
|
private final Block block;
|
||||||
|
+ private final org.bukkit.util.Vector velocity; // Paper
|
||||||
|
|
||||||
|
+ // Paper start - Add pre-collision velocity
|
||||||
|
+ @Deprecated
|
||||||
public VehicleBlockCollisionEvent(@NotNull final Vehicle vehicle, @NotNull final Block block) {
|
public VehicleBlockCollisionEvent(@NotNull final Vehicle vehicle, @NotNull final Block block) {
|
||||||
|
+ this(vehicle, block, vehicle.getVelocity());
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ public VehicleBlockCollisionEvent(@NotNull final Vehicle vehicle, @NotNull final Block block, @NotNull final org.bukkit.util.Vector velocity) { // Paper - Added velocity
|
||||||
|
super(vehicle);
|
||||||
|
this.block = block;
|
||||||
|
+ this.velocity = velocity;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /**
|
||||||
|
+ * Gets velocity at which the vehicle collided with the block
|
||||||
|
+ *
|
||||||
|
+ * @return pre-collision moving velocity
|
||||||
|
+ */
|
||||||
|
+ @NotNull
|
||||||
|
+ public org.bukkit.util.Vector getVelocity() {
|
||||||
|
+ return velocity;
|
||||||
|
}
|
||||||
|
+ // Paper end
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the block the vehicle collided with
|
||||||
@@ -0,0 +0,0 @@ public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
@@ -0,0 +0,0 @@ public class VehicleBlockCollisionEvent extends VehicleCollisionEvent {
|
||||||
public Block getBlock() {
|
public Block getBlock() {
|
||||||
return block;
|
return block;
|
||||||
@ -65,7 +90,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
*/
|
*/
|
||||||
public class VehicleEntityCollisionEvent extends VehicleCollisionEvent implements Cancellable {
|
public class VehicleEntityCollisionEvent extends VehicleCollisionEvent implements Cancellable {
|
||||||
- private static final HandlerList handlers = new HandlerList();
|
- private static final HandlerList handlers = new HandlerList();
|
||||||
+ // private static final HandlerList handlers = new HandlerList(); // Paper - move HandlerList to VehicleCollisionEvent
|
|
||||||
private final Entity entity;
|
private final Entity entity;
|
||||||
private boolean cancelled = false;
|
private boolean cancelled = false;
|
||||||
private boolean cancelledPickup = false;
|
private boolean cancelledPickup = false;
|
@ -2124,7 +2124,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
- PluginClassLoader(@NotNull final JavaPluginLoader loader, @Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader) throws IOException, InvalidPluginException, MalformedURLException {
|
- PluginClassLoader(@NotNull final JavaPluginLoader loader, @Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader) throws IOException, InvalidPluginException, MalformedURLException {
|
||||||
+ @org.jetbrains.annotations.ApiStatus.Internal // Paper
|
+ @org.jetbrains.annotations.ApiStatus.Internal // Paper
|
||||||
+ public PluginClassLoader(@Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader, JarFile jarFile, io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext) throws IOException, InvalidPluginException, MalformedURLException { // Paper // Paper - use JarFile provided by SpigotPluginProvider
|
+ public PluginClassLoader(@Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader, JarFile jarFile, io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext) throws IOException, InvalidPluginException, MalformedURLException { // Paper - use JarFile provided by SpigotPluginProvider
|
||||||
super(new URL[] {file.toURI().toURL()}, parent);
|
super(new URL[] {file.toURI().toURL()}, parent);
|
||||||
- Preconditions.checkArgument(loader != null, "Loader cannot be null");
|
- Preconditions.checkArgument(loader != null, "Loader cannot be null");
|
||||||
+ this.loader = null; // Paper - pass null into loader field
|
+ this.loader = null; // Paper - pass null into loader field
|
||||||
|
@ -11,7 +11,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
@@ -0,0 +0,0 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
|
@@ -0,0 +0,0 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm
|
||||||
|
|
||||||
@org.jetbrains.annotations.ApiStatus.Internal // Paper
|
@org.jetbrains.annotations.ApiStatus.Internal // Paper
|
||||||
public PluginClassLoader(@Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader, JarFile jarFile, io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext) throws IOException, InvalidPluginException, MalformedURLException { // Paper // Paper - use JarFile provided by SpigotPluginProvider
|
public PluginClassLoader(@Nullable final ClassLoader parent, @NotNull final PluginDescriptionFile description, @NotNull final File dataFolder, @NotNull final File file, @Nullable ClassLoader libraryLoader, JarFile jarFile, io.papermc.paper.plugin.provider.entrypoint.DependencyContext dependencyContext) throws IOException, InvalidPluginException, MalformedURLException { // Paper - use JarFile provided by SpigotPluginProvider
|
||||||
- super(new URL[] {file.toURI().toURL()}, parent);
|
- super(new URL[] {file.toURI().toURL()}, parent);
|
||||||
+ super(file.getName(), new URL[] {file.toURI().toURL()}, parent);
|
+ super(file.getName(), new URL[] {file.toURI().toURL()}, parent);
|
||||||
this.loader = null; // Paper - pass null into loader field
|
this.loader = null; // Paper - pass null into loader field
|
||||||
|
@ -47,12 +47,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setSitting(boolean sitting) {
|
public void setSitting(boolean sitting) {
|
||||||
+ // Paper start
|
+ // Paper start - Add EntityToggleSitEvent
|
||||||
+ this.setSitting(sitting, true);
|
+ this.setSitting(sitting, true);
|
||||||
+ }
|
+ }
|
||||||
+ public void setSitting(boolean sitting, boolean fireEvent) {
|
+ public void setSitting(boolean sitting, boolean fireEvent) {
|
||||||
+ if (fireEvent && !new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), sitting).callEvent()) return;
|
+ if (fireEvent && !new io.papermc.paper.event.entity.EntityToggleSitEvent(this.getBukkitEntity(), sitting).callEvent()) return;
|
||||||
+ // Paper end - Add EntityToggleSitEvent
|
+ // Paper end - Add EntityToggleSitEvent
|
||||||
this.setFlag(1, sitting);
|
this.setFlag(1, sitting);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,10 +24,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||||
return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end - Prevent raytrace from loading chunks
|
||||||
- if (iblockdata.isAir()) return null; // Paper - optimise air cases
|
- if (iblockdata.isAir()) return null; // Paper - Perf: optimise air cases
|
||||||
+ if (iblockdata.isAir() || (canCollide != null && this instanceof LevelAccessor levelAccessor && !canCollide.test(org.bukkit.craftbukkit.block.CraftBlock.at(levelAccessor, blockposition)))) return null; // Paper - optimise air cases and check canCollide predicate
|
+ if (iblockdata.isAir() || (canCollide != null && this instanceof LevelAccessor levelAccessor && !canCollide.test(org.bukkit.craftbukkit.block.CraftBlock.at(levelAccessor, blockposition)))) return null; // Paper - Perf: optimise air cases &g check canCollide predicate
|
||||||
FluidState fluid = iblockdata.getFluidState(); // Paper - don't need to go to world state again
|
FluidState fluid = iblockdata.getFluidState(); // Paper - Perf: don't need to go to world state again
|
||||||
Vec3 vec3d = raytrace1.getFrom();
|
Vec3 vec3d = raytrace1.getFrom();
|
||||||
Vec3 vec3d1 = raytrace1.getTo();
|
Vec3 vec3d1 = raytrace1.getTo();
|
||||||
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
||||||
Date: Sun, 7 Mar 2021 13:15:04 -0800
|
|
||||||
Subject: [PATCH] Do not run raytrace logic for AIR
|
|
||||||
|
|
||||||
Saves approx. 5% for the raytrace call, as most (expensive)
|
|
||||||
raytracing tends to go through air and returning early is an
|
|
||||||
easy win. The remaining problems with this function
|
|
||||||
are mostly with the block getting itself.
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
|
||||||
return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
|
||||||
}
|
|
||||||
// Paper end
|
|
||||||
+ if (iblockdata.isAir()) return null; // Paper - optimise air cases
|
|
||||||
FluidState fluid = iblockdata.getFluidState(); // Paper - don't need to go to world state again
|
|
||||||
Vec3 vec3d = raytrace1.getFrom();
|
|
||||||
Vec3 vec3d1 = raytrace1.getTo();
|
|
@ -1,10 +1,15 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||||
Date: Fri, 28 Aug 2020 12:33:47 -0700
|
Date: Fri, 28 Aug 2020 12:33:47 -0700
|
||||||
Subject: [PATCH] Don't lookup fluid state when raytracing
|
Subject: [PATCH] Don't lookup fluid state when raytracing, skip air blocks
|
||||||
|
|
||||||
Just use the iblockdata already retrieved, removes a getType call.
|
Just use the iblockdata already retrieved, removes a getType call.
|
||||||
|
|
||||||
|
Also save approx. 5% for the raytrace call, as most (expensive)
|
||||||
|
raytracing tends to go through air and returning early is an
|
||||||
|
easy win. The remaining problems with this function
|
||||||
|
are mostly with the block getting itself.
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
|
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
|
||||||
@ -12,9 +17,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||||
return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
||||||
}
|
}
|
||||||
// Paper end
|
// Paper end - Prevent raytrace from loading chunks
|
||||||
- FluidState fluid = this.getFluidState(blockposition);
|
- FluidState fluid = this.getFluidState(blockposition);
|
||||||
+ FluidState fluid = iblockdata.getFluidState(); // Paper - don't need to go to world state again
|
+ if (iblockdata.isAir()) return null; // Paper - Perf: optimise air cases
|
||||||
|
+ FluidState fluid = iblockdata.getFluidState(); // Paper - Perf: don't need to go to world state again
|
||||||
Vec3 vec3d = raytrace1.getFrom();
|
Vec3 vec3d = raytrace1.getFrom();
|
||||||
Vec3 vec3d1 = raytrace1.getTo();
|
Vec3 vec3d1 = raytrace1.getTo();
|
||||||
VoxelShape voxelshape = raytrace1.getBlockShape(iblockdata, this, blockposition);
|
VoxelShape voxelshape = raytrace1.getBlockShape(iblockdata, this, blockposition);
|
@ -1,25 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
||||||
Date: Tue, 13 Aug 2019 06:35:17 -0700
|
|
||||||
Subject: [PATCH] Fix MC-158900
|
|
||||||
|
|
||||||
The problem was we were checking isExpired() on the entry, but if it
|
|
||||||
was expired at that point, then it would be null.
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
|
||||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
|
||||||
Player player = entity.getBukkitEntity();
|
|
||||||
PlayerLoginEvent event = new PlayerLoginEvent(player, loginlistener.connection.hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.channel.remoteAddress()).getAddress());
|
|
||||||
|
|
||||||
- if (this.getBans().isBanned(gameprofile) && !this.getBans().get(gameprofile).hasExpired()) {
|
|
||||||
- UserBanListEntry gameprofilebanentry = (UserBanListEntry) this.bans.get(gameprofile);
|
|
||||||
+ // Paper start - Fix MC-158900
|
|
||||||
+ UserBanListEntry gameprofilebanentry;
|
|
||||||
+ if (getBans().isBanned(gameprofile) && (gameprofilebanentry = getBans().get(gameprofile)) != null) {
|
|
||||||
+ // Paper end
|
|
||||||
|
|
||||||
ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned.reason", gameprofilebanentry.getReason());
|
|
||||||
if (gameprofilebanentry.getExpires() != null) {
|
|
@ -41,11 +41,9 @@ https://bugs.mojang.com/browse/MC-263999
|
|||||||
Fix mobs breaking doors not spawning block break particles
|
Fix mobs breaking doors not spawning block break particles
|
||||||
|
|
||||||
https://bugs.mojang.com/browse/MC-210802
|
https://bugs.mojang.com/browse/MC-210802
|
||||||
by: BillyGalbreath <Blake.Galbreath@Gmail.com>
|
|
||||||
Fixes sheep eating blocks outside of ticking range
|
Fixes sheep eating blocks outside of ticking range
|
||||||
|
|
||||||
https://bugs.mojang.com/browse/MC-123848
|
https://bugs.mojang.com/browse/MC-123848
|
||||||
by: BillyGalbreath <blake.galbreath@gmail.com>
|
|
||||||
Fixes item frames dropping items above when pointing down
|
Fixes item frames dropping items above when pointing down
|
||||||
|
|
||||||
https://bugs.mojang.com/browse/MC-84789
|
https://bugs.mojang.com/browse/MC-84789
|
||||||
@ -70,6 +68,7 @@ https://bugs.mojang.com/browse/MC-200092
|
|||||||
public net/minecraft/world/entity/Mob leashInfoTag
|
public net/minecraft/world/entity/Mob leashInfoTag
|
||||||
|
|
||||||
Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>
|
Co-authored-by: William Blake Galbreath <blake.galbreath@gmail.com>
|
||||||
|
Co-authored-by: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
@ -170,6 +169,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
this.player.onUpdateAbilities();
|
this.player.onUpdateAbilities();
|
||||||
this.player.server.getPlayerList().broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
|
this.player.server.getPlayerList().broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit
|
||||||
this.level.updateSleepingPlayerList();
|
this.level.updateSleepingPlayerList();
|
||||||
|
diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
|
+++ b/src/main/java/net/minecraft/server/players/PlayerList.java
|
||||||
|
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
||||||
|
Player player = entity.getBukkitEntity();
|
||||||
|
PlayerLoginEvent event = new PlayerLoginEvent(player, loginlistener.connection.hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.channel.remoteAddress()).getAddress());
|
||||||
|
|
||||||
|
- if (this.getBans().isBanned(gameprofile) && !this.getBans().get(gameprofile).hasExpired()) {
|
||||||
|
- UserBanListEntry gameprofilebanentry = (UserBanListEntry) this.bans.get(gameprofile);
|
||||||
|
+ // Paper start - Fix MC-158900
|
||||||
|
+ UserBanListEntry gameprofilebanentry;
|
||||||
|
+ if (getBans().isBanned(gameprofile) && (gameprofilebanentry = getBans().get(gameprofile)) != null) {
|
||||||
|
+ // Paper end - Fix MC-158900
|
||||||
|
|
||||||
|
ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned.reason", gameprofilebanentry.getReason());
|
||||||
|
if (gameprofilebanentry.getExpires() != null) {
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/Saddleable.java b/src/main/java/net/minecraft/world/entity/Saddleable.java
|
diff --git a/src/main/java/net/minecraft/world/entity/Saddleable.java b/src/main/java/net/minecraft/world/entity/Saddleable.java
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/Saddleable.java
|
--- a/src/main/java/net/minecraft/world/entity/Saddleable.java
|
||||||
|
@ -56,12 +56,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
--- a/src/main/java/net/minecraft/world/level/material/FluidState.java
|
--- a/src/main/java/net/minecraft/world/level/material/FluidState.java
|
||||||
+++ b/src/main/java/net/minecraft/world/level/material/FluidState.java
|
+++ b/src/main/java/net/minecraft/world/level/material/FluidState.java
|
||||||
@@ -0,0 +0,0 @@ public final class FluidState extends StateHolder<Fluid, FluidState> {
|
@@ -0,0 +0,0 @@ public final class FluidState extends StateHolder<Fluid, FluidState> {
|
||||||
|
public static final Codec<FluidState> CODEC = codec(BuiltInRegistries.FLUID.byNameCodec(), Fluid::defaultFluidState).stable();
|
||||||
public static final int AMOUNT_MAX = 9;
|
public static final int AMOUNT_MAX = 9;
|
||||||
public static final int AMOUNT_FULL = 8;
|
public static final int AMOUNT_FULL = 8;
|
||||||
|
+ protected final boolean isEmpty; // Paper - Perf: moved from isEmpty()
|
||||||
|
|
||||||
+ // Paper start - Perf: moved from isEmpty()
|
|
||||||
+ protected final boolean isEmpty;
|
|
||||||
+ // Paper end - Perf: moved from isEmpty()
|
|
||||||
public FluidState(Fluid fluid, ImmutableMap<Property<?>, Comparable<?>> propertiesMap, MapCodec<FluidState> codec) {
|
public FluidState(Fluid fluid, ImmutableMap<Property<?>, Comparable<?>> propertiesMap, MapCodec<FluidState> codec) {
|
||||||
super(fluid, propertiesMap, codec);
|
super(fluid, propertiesMap, codec);
|
||||||
+ this.isEmpty = fluid.isEmpty(); // Paper - Perf: moved from isEmpty()
|
+ this.isEmpty = fluid.isEmpty(); // Paper - Perf: moved from isEmpty()
|
||||||
|
@ -41,7 +41,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ // notify observers if the block state is the same and the Y level equals the original y level (for mega trees)
|
+ // notify observers if the block state is the same and the Y level equals the original y level (for mega trees)
|
||||||
+ // blocks at the same Y level with the same state can be assumed to be saplings which trigger observers regardless of if the
|
+ // blocks at the same Y level with the same state can be assumed to be saplings which trigger observers regardless of if the
|
||||||
+ // tree grew or not
|
+ // tree grew or not
|
||||||
+ if (craftBlockState.getPosition().getY() == pos.getY() && this.getBlockState(craftBlockState.getPosition()) == craftBlockState.getHandle()) { // Paper - Fix silent equipment change
|
+ if (craftBlockState.getPosition().getY() == pos.getY() && this.getBlockState(craftBlockState.getPosition()) == craftBlockState.getHandle()) {
|
||||||
+ this.notifyAndUpdatePhysics(craftBlockState.getPosition(), null, craftBlockState.getHandle(), craftBlockState.getHandle(), craftBlockState.getHandle(), craftBlockState.getFlag(), 512);
|
+ this.notifyAndUpdatePhysics(craftBlockState.getPosition(), null, craftBlockState.getHandle(), craftBlockState.getHandle(), craftBlockState.getHandle(), craftBlockState.getFlag(), 512);
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Shane Freeder <theboyetronic@gmail.com>
|
|
||||||
Date: Tue, 18 Dec 2018 02:15:08 +0000
|
|
||||||
Subject: [PATCH] Prevent Enderman from loading chunks
|
|
||||||
|
|
||||||
|
|
||||||
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
|
||||||
int j = Mth.floor(this.enderman.getY() + randomsource.nextDouble() * 2.0D);
|
|
||||||
int k = Mth.floor(this.enderman.getZ() - 1.0D + randomsource.nextDouble() * 2.0D);
|
|
||||||
BlockPos blockposition = new BlockPos(i, j, k);
|
|
||||||
- BlockState iblockdata = world.getBlockState(blockposition);
|
|
||||||
+ BlockState iblockdata = world.getBlockStateIfLoaded(blockposition); // Paper
|
|
||||||
+ if (iblockdata == null) return; // Paper
|
|
||||||
BlockPos blockposition1 = blockposition.below();
|
|
||||||
BlockState iblockdata1 = world.getBlockState(blockposition1);
|
|
||||||
BlockState iblockdata2 = this.enderman.getCarriedBlock();
|
|
||||||
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
|
||||||
int j = Mth.floor(this.enderman.getY() + randomsource.nextDouble() * 3.0D);
|
|
||||||
int k = Mth.floor(this.enderman.getZ() - 2.0D + randomsource.nextDouble() * 4.0D);
|
|
||||||
BlockPos blockposition = new BlockPos(i, j, k);
|
|
||||||
- BlockState iblockdata = world.getBlockState(blockposition);
|
|
||||||
+ BlockState iblockdata = world.getBlockStateIfLoaded(blockposition); // Paper
|
|
||||||
+ if (iblockdata == null) return; // Paper
|
|
||||||
Vec3 vec3d = new Vec3((double) this.enderman.getBlockX() + 0.5D, (double) j + 0.5D, (double) this.enderman.getBlockZ() + 0.5D);
|
|
||||||
Vec3 vec3d1 = new Vec3((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D);
|
|
||||||
BlockHitResult movingobjectpositionblock = world.clip(new ClipContext(vec3d, vec3d1, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, this.enderman));
|
|
@ -1,40 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aikar <aikar@aikar.co>
|
|
||||||
Date: Mon, 10 Sep 2018 23:56:36 -0400
|
|
||||||
Subject: [PATCH] Prevent Mob AI Rules from Loading Chunks
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
|
||||||
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private BlockPos getPosWithBlock(BlockPos pos, BlockGetter world) {
|
|
||||||
- if (world.getBlockState(pos).is(this.blockToRemove)) {
|
|
||||||
+ net.minecraft.world.level.block.state.BlockState block = world.getBlockStateIfLoaded(pos); // Paper
|
|
||||||
+ if (block == null) return null; // Paper
|
|
||||||
+ if (block.is(this.blockToRemove)) { // Paper
|
|
||||||
return pos;
|
|
||||||
} else {
|
|
||||||
BlockPos[] ablockposition = new BlockPos[]{pos.below(), pos.west(), pos.east(), pos.north(), pos.south(), pos.below().below()};
|
|
||||||
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
|
||||||
for (int j = 0; j < i; ++j) {
|
|
||||||
BlockPos blockposition1 = ablockposition1[j];
|
|
||||||
|
|
||||||
- if (world.getBlockState(blockposition1).is(this.blockToRemove)) {
|
|
||||||
+ net.minecraft.world.level.block.state.BlockState block2 = world.getBlockStateIfLoaded(blockposition1); // Paper
|
|
||||||
+ if (block2 != null && block2.is(this.blockToRemove)) { // Paper
|
|
||||||
return blockposition1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean isValidTarget(LevelReader world, BlockPos pos) {
|
|
||||||
- ChunkAccess ichunkaccess = world.getChunk(SectionPos.blockToSectionCoord(pos.getX()), SectionPos.blockToSectionCoord(pos.getZ()), ChunkStatus.FULL, false);
|
|
||||||
+ ChunkAccess ichunkaccess = world.getChunkIfLoadedImmediately(pos.getX() >> 4, pos.getZ() >> 4); // Paper
|
|
||||||
|
|
||||||
return ichunkaccess == null ? false : ichunkaccess.getBlockState(pos).is(this.blockToRemove) && ichunkaccess.getBlockState(pos.above()).isAir() && ichunkaccess.getBlockState(pos.above(2)).isAir();
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Shane Freeder <theboyetronic@gmail.com>
|
|
||||||
Date: Sun, 6 Nov 2022 22:35:51 +0000
|
|
||||||
Subject: [PATCH] Prevent compass from loading chunks
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/item/CompassItem.java b/src/main/java/net/minecraft/world/item/CompassItem.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/item/CompassItem.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/item/CompassItem.java
|
|
||||||
@@ -0,0 +0,0 @@ public class CompassItem extends Item implements Vanishable {
|
|
||||||
Optional<ResourceKey<Level>> optional = getLodestoneDimension(compoundTag);
|
|
||||||
if (optional.isPresent() && optional.get() == world.dimension() && compoundTag.contains("LodestonePos")) {
|
|
||||||
BlockPos blockPos = NbtUtils.readBlockPos(compoundTag.getCompound("LodestonePos"));
|
|
||||||
- if (!world.isInWorldBounds(blockPos) || !((ServerLevel)world).getPoiManager().existsAtPosition(PoiTypes.LODESTONE, blockPos)) {
|
|
||||||
+ if (!world.isInWorldBounds(blockPos) || (world.hasChunkAt(blockPos) && !((ServerLevel)world).getPoiManager().existsAtPosition(PoiTypes.LODESTONE, blockPos))) { // Paper - Prevent compass from loading chunks
|
|
||||||
compoundTag.remove("LodestonePos");
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,29 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aikar <aikar@aikar.co>
|
|
||||||
Date: Mon, 26 Nov 2018 19:21:58 -0500
|
|
||||||
Subject: [PATCH] Prevent rayTrace from loading chunks
|
|
||||||
|
|
||||||
ray tracing into an unloaded chunk should be treated as a miss
|
|
||||||
this saves a ton of lag for when AI tries to raytrace near unloaded chunks.
|
|
||||||
|
|
||||||
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
||||||
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
+++ b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
|
||||||
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
|
||||||
|
|
||||||
// CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
|
|
||||||
default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) {
|
|
||||||
- BlockState iblockdata = this.getBlockState(blockposition);
|
|
||||||
+ // Paper start - Prevent raytrace from loading chunks
|
|
||||||
+ BlockState iblockdata = this.getBlockStateIfLoaded(blockposition);
|
|
||||||
+ if (iblockdata == null) {
|
|
||||||
+ // copied the last function parameter (listed below)
|
|
||||||
+ Vec3 vec3d = raytrace1.getFrom().subtract(raytrace1.getTo());
|
|
||||||
+
|
|
||||||
+ return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
|
||||||
+ }
|
|
||||||
+ // Paper end
|
|
||||||
FluidState fluid = this.getFluidState(blockposition);
|
|
||||||
Vec3 vec3d = raytrace1.getFrom();
|
|
||||||
Vec3 vec3d1 = raytrace1.getTo();
|
|
@ -0,0 +1,99 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Aikar <aikar@aikar.co>
|
||||||
|
Date: Mon, 10 Sep 2018 23:56:36 -0400
|
||||||
|
Subject: [PATCH] Prevent various interactions from causing chunk loads
|
||||||
|
|
||||||
|
Co-authored-by: Shane Freeder <theboyetronic@gmail.com>
|
||||||
|
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/ai/goal/RemoveBlockGoal.java
|
||||||
|
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
private BlockPos getPosWithBlock(BlockPos pos, BlockGetter world) {
|
||||||
|
- if (world.getBlockState(pos).is(this.blockToRemove)) {
|
||||||
|
+ net.minecraft.world.level.block.state.BlockState block = world.getBlockStateIfLoaded(pos); // Paper - Prevent AI rules from loading chunks
|
||||||
|
+ if (block == null) return null; // Paper - Prevent AI rules from loading chunks
|
||||||
|
+ if (block.is(this.blockToRemove)) { // Paper - Prevent AI rules from loading chunks
|
||||||
|
return pos;
|
||||||
|
} else {
|
||||||
|
BlockPos[] ablockposition = new BlockPos[]{pos.below(), pos.west(), pos.east(), pos.north(), pos.south(), pos.below().below()};
|
||||||
|
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
||||||
|
for (int j = 0; j < i; ++j) {
|
||||||
|
BlockPos blockposition1 = ablockposition1[j];
|
||||||
|
|
||||||
|
- if (world.getBlockState(blockposition1).is(this.blockToRemove)) {
|
||||||
|
+ net.minecraft.world.level.block.state.BlockState block2 = world.getBlockStateIfLoaded(blockposition1); // Paper - Prevent AI rules from loading chunks
|
||||||
|
+ if (block2 != null && block2.is(this.blockToRemove)) { // Paper - Prevent AI rules from loading chunks
|
||||||
|
return blockposition1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -0,0 +0,0 @@ public class RemoveBlockGoal extends MoveToBlockGoal {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isValidTarget(LevelReader world, BlockPos pos) {
|
||||||
|
- ChunkAccess ichunkaccess = world.getChunk(SectionPos.blockToSectionCoord(pos.getX()), SectionPos.blockToSectionCoord(pos.getZ()), ChunkStatus.FULL, false);
|
||||||
|
+ ChunkAccess ichunkaccess = world.getChunkIfLoadedImmediately(pos.getX() >> 4, pos.getZ() >> 4); // Paper - Prevent AI rules from loading chunks
|
||||||
|
|
||||||
|
return ichunkaccess == null ? false : ichunkaccess.getBlockState(pos).is(this.blockToRemove) && ichunkaccess.getBlockState(pos.above()).isAir() && ichunkaccess.getBlockState(pos.above(2)).isAir();
|
||||||
|
}
|
||||||
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java
|
||||||
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
|
int j = Mth.floor(this.enderman.getY() + randomsource.nextDouble() * 2.0D);
|
||||||
|
int k = Mth.floor(this.enderman.getZ() - 1.0D + randomsource.nextDouble() * 2.0D);
|
||||||
|
BlockPos blockposition = new BlockPos(i, j, k);
|
||||||
|
- BlockState iblockdata = world.getBlockState(blockposition);
|
||||||
|
+ BlockState iblockdata = world.getBlockStateIfLoaded(blockposition); // Paper - Prevent endermen from loading chunks
|
||||||
|
+ if (iblockdata == null) return; // Paper - Prevent endermen from loading chunks
|
||||||
|
BlockPos blockposition1 = blockposition.below();
|
||||||
|
BlockState iblockdata1 = world.getBlockState(blockposition1);
|
||||||
|
BlockState iblockdata2 = this.enderman.getCarriedBlock();
|
||||||
|
@@ -0,0 +0,0 @@ public class EnderMan extends Monster implements NeutralMob {
|
||||||
|
int j = Mth.floor(this.enderman.getY() + randomsource.nextDouble() * 3.0D);
|
||||||
|
int k = Mth.floor(this.enderman.getZ() - 2.0D + randomsource.nextDouble() * 4.0D);
|
||||||
|
BlockPos blockposition = new BlockPos(i, j, k);
|
||||||
|
- BlockState iblockdata = world.getBlockState(blockposition);
|
||||||
|
+ BlockState iblockdata = world.getBlockStateIfLoaded(blockposition); // Paper - Prevent endermen from loading chunks
|
||||||
|
+ if (iblockdata == null) return; // Paper - Prevent endermen from loading chunks
|
||||||
|
Vec3 vec3d = new Vec3((double) this.enderman.getBlockX() + 0.5D, (double) j + 0.5D, (double) this.enderman.getBlockZ() + 0.5D);
|
||||||
|
Vec3 vec3d1 = new Vec3((double) i + 0.5D, (double) j + 0.5D, (double) k + 0.5D);
|
||||||
|
BlockHitResult movingobjectpositionblock = world.clip(new ClipContext(vec3d, vec3d1, ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, this.enderman));
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/item/CompassItem.java b/src/main/java/net/minecraft/world/item/CompassItem.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/item/CompassItem.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/item/CompassItem.java
|
||||||
|
@@ -0,0 +0,0 @@ public class CompassItem extends Item implements Vanishable {
|
||||||
|
Optional<ResourceKey<Level>> optional = getLodestoneDimension(compoundTag);
|
||||||
|
if (optional.isPresent() && optional.get() == world.dimension() && compoundTag.contains("LodestonePos")) {
|
||||||
|
BlockPos blockPos = NbtUtils.readBlockPos(compoundTag.getCompound("LodestonePos"));
|
||||||
|
- if (!world.isInWorldBounds(blockPos) || !((ServerLevel)world).getPoiManager().existsAtPosition(PoiTypes.LODESTONE, blockPos)) {
|
||||||
|
+ if (!world.isInWorldBounds(blockPos) || (world.hasChunkAt(blockPos) && !((ServerLevel)world).getPoiManager().existsAtPosition(PoiTypes.LODESTONE, blockPos))) { // Paper - Prevent compass from loading chunks
|
||||||
|
compoundTag.remove("LodestonePos");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
||||||
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
|
--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
|
||||||
|
+++ b/src/main/java/net/minecraft/world/level/BlockGetter.java
|
||||||
|
@@ -0,0 +0,0 @@ public interface BlockGetter extends LevelHeightAccessor {
|
||||||
|
|
||||||
|
// CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
|
||||||
|
default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) {
|
||||||
|
- BlockState iblockdata = this.getBlockState(blockposition);
|
||||||
|
+ // Paper start - Prevent raytrace from loading chunks
|
||||||
|
+ BlockState iblockdata = this.getBlockStateIfLoaded(blockposition);
|
||||||
|
+ if (iblockdata == null) {
|
||||||
|
+ // copied the last function parameter (listed below)
|
||||||
|
+ Vec3 vec3d = raytrace1.getFrom().subtract(raytrace1.getTo());
|
||||||
|
+
|
||||||
|
+ return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
|
||||||
|
+ }
|
||||||
|
+ // Paper end - Prevent raytrace from loading chunks
|
||||||
|
FluidState fluid = this.getFluidState(blockposition);
|
||||||
|
Vec3 vec3d = raytrace1.getFrom();
|
||||||
|
Vec3 vec3d1 = raytrace1.getTo();
|
@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
itemstack1 = CraftItemStack.asNMSCopy(event.getItem());
|
itemstack1 = CraftItemStack.asNMSCopy(event.getItem());
|
||||||
Vec3 vec3d = DispenseItemBehavior.getEntityPokingOutOfBlockPos(pointer, EntityType.FIREWORK_ROCKET, enumdirection);
|
Vec3 vec3d = DispenseItemBehavior.getEntityPokingOutOfBlockPos(pointer, EntityType.FIREWORK_ROCKET, enumdirection);
|
||||||
FireworkRocketEntity entityfireworks = new FireworkRocketEntity(pointer.level(), itemstack1, vec3d.x(), vec3d.y(), vec3d.z(), true); // Paper - GH-2871 - fix last firework in stack having no effects when dispensed
|
FireworkRocketEntity entityfireworks = new FireworkRocketEntity(pointer.level(), itemstack1, vec3d.x(), vec3d.y(), vec3d.z(), true); // Paper - GH-2871 - fix last firework in stack having no effects when dispensed
|
||||||
+ entityfireworks.projectileSource = new org.bukkit.craftbukkit.projectiles.CraftBlockProjectileSource(pointer.blockEntity()); // PaperTrack projectile source for fireworks from dispensers
|
+ entityfireworks.projectileSource = new org.bukkit.craftbukkit.projectiles.CraftBlockProjectileSource(pointer.blockEntity()); // Paper - Track projectile source for fireworks from dispensers
|
||||||
|
|
||||||
entityfireworks.shoot((double) enumdirection.getStepX(), (double) enumdirection.getStepY(), (double) enumdirection.getStepZ(), 0.5F, 1.0F);
|
entityfireworks.shoot((double) enumdirection.getStepX(), (double) enumdirection.getStepY(), (double) enumdirection.getStepZ(), 0.5F, 1.0F);
|
||||||
pointer.level().addFreshEntity(entityfireworks);
|
pointer.level().addFreshEntity(entityfireworks);
|
||||||
|
@ -39,7 +39,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
}
|
}
|
||||||
|
|
||||||
- player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer1)));
|
- player.connection.send(ClientboundPlayerInfoUpdatePacket.createPlayerInitializing(List.of(entityplayer1)));
|
||||||
+ onlinePlayers.add(entityplayer1); // Pape - Use single player info update packet on join
|
+ onlinePlayers.add(entityplayer1); // Paper - Use single player info update packet on join
|
||||||
}
|
}
|
||||||
+ // Paper start - Use single player info update packet on join
|
+ // Paper start - Use single player info update packet on join
|
||||||
+ if (!onlinePlayers.isEmpty()) {
|
+ if (!onlinePlayers.isEmpty()) {
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren