mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-29 12:27:59 +01:00
More more more more more more more more more work
This commit is contained in:
parent
11f73c13b5
commit
91961de7c2
@ -25,18 +25,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
@@ -0,0 +0,0 @@ public class ServerPlayer extends Player {
|
@@ -0,0 +0,0 @@ public class ServerPlayer extends Player {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCamera(Entity entity) {
|
public void setCamera(@Nullable Entity entity) {
|
||||||
+ // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity Event and improve implementation
|
+ // Paper start - Add PlayerStartSpectatingEntityEvent and PlayerStopSpectatingEntity Event and improve implementation
|
||||||
Entity entity1 = this.getCamera();
|
Entity entity1 = this.getCamera();
|
||||||
|
|
||||||
- this.camera = (Entity) (entity == null ? this : entity);
|
- this.camera = (Entity) (entity == null ? this : entity);
|
||||||
- if (entity1 != this.camera) {
|
- if (entity1 != this.camera) {
|
||||||
- this.connection.send(new ClientboundSetCameraPacket(this.camera));
|
- this.connection.send(new ClientboundSetCameraPacket(this.camera));
|
||||||
- this.connection.b(this.camera.getX(), this.camera.getY(), this.camera.getZ(), this.getYRot(), this.getXRot(), TeleportCause.SPECTATE); // CraftBukkit
|
- this.connection.teleport(this.camera.getX(), this.camera.getY(), this.camera.getZ(), this.getYRot(), this.getXRot(), TeleportCause.SPECTATE); // CraftBukkit
|
||||||
+ if (entity == null) {
|
+ if (entity == null) {
|
||||||
+ entity = this;
|
+ entity = this;
|
||||||
}
|
+ }
|
||||||
|
+
|
||||||
+ if (entity1 == entity) return; // new spec target is the current spec target
|
+ if (entity1 == entity) return; // new spec target is the current spec target
|
||||||
+
|
+
|
||||||
+ if (entity == this) {
|
+ if (entity == this) {
|
||||||
@ -63,8 +63,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+ MinecraftServer.LOGGER.debug("Blocking frozen player " + this + " from spectating entity " + entity);
|
+ MinecraftServer.LOGGER.debug("Blocking frozen player " + this + " from spectating entity " + entity);
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
}
|
||||||
+
|
|
||||||
+ this.camera = entity; // only set after validating state
|
+ this.camera = entity; // only set after validating state
|
||||||
+
|
+
|
||||||
+ if (entity != this) {
|
+ if (entity != this) {
|
@ -78,8 +78,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
|
||||||
+import net.minecraft.server.MCUtil;
|
+import net.minecraft.server.MCUtil;
|
||||||
import net.minecraft.world.Nameable;
|
import net.minecraft.world.Nameable;
|
||||||
|
import net.minecraft.world.item.BlockItem;
|
||||||
import net.minecraft.world.item.DyeColor;
|
import net.minecraft.world.item.DyeColor;
|
||||||
import net.minecraft.world.item.ItemStack;
|
|
||||||
@@ -0,0 +0,0 @@ public class BannerBlockEntity extends BlockEntity implements Nameable {
|
@@ -0,0 +0,0 @@ public class BannerBlockEntity extends BlockEntity implements Nameable {
|
||||||
public void load(CompoundTag nbt) {
|
public void load(CompoundTag nbt) {
|
||||||
super.load(nbt);
|
super.load(nbt);
|
@ -125,7 +125,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
+
|
+
|
||||||
String internal = SerializableMeta.getString(map, "internal", true);
|
String internal = SerializableMeta.getString(map, "internal", true);
|
||||||
if (internal != null) {
|
if (internal != null) {
|
||||||
ByteArrayInputStream buf = new ByteArrayInputStream(Base64.decodeBase64(internal));
|
ByteArrayInputStream buf = new ByteArrayInputStream(Base64.getDecoder().decode(internal));
|
||||||
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
@@ -0,0 +0,0 @@ class CraftMetaItem implements ItemMeta, Damageable, Repairable, BlockDataMeta {
|
||||||
if (this.hasDamage()) {
|
if (this.hasDamage()) {
|
||||||
itemTag.putInt(DAMAGE.NBT, damage);
|
itemTag.putInt(DAMAGE.NBT, damage);
|
@ -23,16 +23,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
Direction enumdirection = (Direction) iterator.next();
|
Direction enumdirection = (Direction) iterator.next();
|
||||||
BlockPos blockposition1 = pos.relative(enumdirection);
|
BlockPos blockposition1 = pos.relative(enumdirection);
|
||||||
- BlockState iblockdata1 = world.getBlockState(blockposition1);
|
- BlockState iblockdata1 = world.getBlockState(blockposition1);
|
||||||
|
+
|
||||||
+ BlockState iblockdata1 = world.getTypeIfLoaded(blockposition1); // Paper
|
+ BlockState iblockdata1 = world.getTypeIfLoaded(blockposition1); // Paper
|
||||||
+ if (iblockdata1 == null) continue; // Paper
|
+ if (iblockdata1 == null) continue; // Paper
|
||||||
FluidState fluid = iblockdata1.getFluidState();
|
FluidState fluid = iblockdata1.getFluidState();
|
||||||
|
|
||||||
if (fluid.getType().isSame((Fluid) this) && this.canPassThroughWall(enumdirection, (BlockGetter) world, pos, state, blockposition1, iblockdata1)) {
|
if (fluid.getType().isSame(this) && this.canPassThroughWall(enumdirection, world, pos, state, blockposition1, iblockdata1)) {
|
||||||
@@ -0,0 +0,0 @@ public abstract class FlowingFluid extends Fluid {
|
@@ -0,0 +0,0 @@ public abstract class FlowingFluid extends Fluid {
|
||||||
if (enumdirection1 != enumdirection) {
|
if (enumdirection1 != enumdirection) {
|
||||||
BlockPos blockposition2 = blockposition.relative(enumdirection1);
|
BlockPos blockposition2 = blockposition.relative(enumdirection1);
|
||||||
short short0 = FlowingFluid.getCacheKey(blockposition1, blockposition2);
|
short short0 = FlowingFluid.getCacheKey(blockposition1, blockposition2);
|
||||||
- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (k) -> {
|
- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (short1) -> {
|
||||||
- BlockState iblockdata1 = world.getBlockState(blockposition2);
|
- BlockState iblockdata1 = world.getBlockState(blockposition2);
|
||||||
+ // Paper start - avoid loading chunks
|
+ // Paper start - avoid loading chunks
|
||||||
+ Pair<BlockState, FluidState> pair = short2objectmap.get(short0);
|
+ Pair<BlockState, FluidState> pair = short2objectmap.get(short0);
|
||||||
@ -55,7 +56,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
Direction enumdirection = (Direction) iterator.next();
|
Direction enumdirection = (Direction) iterator.next();
|
||||||
BlockPos blockposition1 = pos.relative(enumdirection);
|
BlockPos blockposition1 = pos.relative(enumdirection);
|
||||||
short short0 = FlowingFluid.getCacheKey(pos, blockposition1);
|
short short0 = FlowingFluid.getCacheKey(pos, blockposition1);
|
||||||
- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (j) -> {
|
- Pair<BlockState, FluidState> pair = (Pair) short2objectmap.computeIfAbsent(short0, (short1) -> {
|
||||||
- BlockState iblockdata1 = world.getBlockState(blockposition1);
|
- BlockState iblockdata1 = world.getBlockState(blockposition1);
|
||||||
-
|
-
|
||||||
- return Pair.of(iblockdata1, iblockdata1.getFluidState());
|
- return Pair.of(iblockdata1, iblockdata1.getFluidState());
|
@ -28,5 +28,5 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
- if (NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint(world, chunk, blockposition_mutableblockposition, d2)) {
|
- if (NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint(world, chunk, blockposition_mutableblockposition, d2)) {
|
||||||
+ if (world.isLoadedAndInBounds(blockposition_mutableblockposition) && NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint(world, chunk, blockposition_mutableblockposition, d2)) { // Paper - don't load chunks for mob spawn
|
+ if (world.isLoadedAndInBounds(blockposition_mutableblockposition) && NaturalSpawner.isRightDistanceToPlayerAndSpawnPoint(world, chunk, blockposition_mutableblockposition, d2)) { // Paper - don't load chunks for mob spawn
|
||||||
if (biomesettingsmobs_c == null) {
|
if (biomesettingsmobs_c == null) {
|
||||||
Optional<MobSpawnSettings.SpawnerData> optional = NaturalSpawner.getRandomSpawnMobAt(world, structuremanager, chunkgenerator, group, world.random, (BlockPos) blockposition_mutableblockposition);
|
Optional<MobSpawnSettings.SpawnerData> optional = NaturalSpawner.getRandomSpawnMobAt(world, structuremanager, chunkgenerator, group, world.random, blockposition_mutableblockposition);
|
||||||
|
|
@ -21,28 +21,20 @@ diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/m
|
|||||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||||
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
--- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
||||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
+++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java
|
||||||
@@ -0,0 +0,0 @@ import net.minecraft.nbt.CompoundTag;
|
|
||||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
|
||||||
import net.minecraft.network.syncher.EntityDataSerializers;
|
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
|
||||||
+import net.minecraft.server.MCUtil;
|
|
||||||
import net.minecraft.server.level.ServerLevel;
|
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
|
||||||
import net.minecraft.sounds.SoundEvent;
|
|
||||||
@@ -0,0 +0,0 @@ public class Turtle extends Animal {
|
@@ -0,0 +0,0 @@ public class Turtle extends Animal {
|
||||||
|
|
||||||
if (!this.turtle.isInWater() && this.isReachedTarget()) {
|
if (!this.turtle.isInWater() && this.isReachedTarget()) {
|
||||||
if (this.turtle.layEggCounter < 1) {
|
if (this.turtle.layEggCounter < 1) {
|
||||||
- this.turtle.setLayingEgg(true);
|
- this.turtle.setLayingEgg(true);
|
||||||
+ this.turtle.setLayingEgg(new com.destroystokyo.paper.event.entity.TurtleStartDiggingEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), MCUtil.toLocation(this.turtle.level, this.getTargetPosition())).callEvent()); // Paper
|
+ this.turtle.setLayingEgg(new com.destroystokyo.paper.event.entity.TurtleStartDiggingEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), net.minecraft.server.MCUtil.toLocation(this.turtle.level, this.getTargetPosition())).callEvent()); // Paper
|
||||||
} else if (this.turtle.layEggCounter > 200) {
|
} else if (this.turtle.layEggCounter > this.adjustedTickDelay(200)) {
|
||||||
Level world = this.turtle.level;
|
Level world = this.turtle.level;
|
||||||
|
|
||||||
// CraftBukkit start
|
// CraftBukkit start
|
||||||
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.turtle, this.blockPos.above(), (BlockState) Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, this.turtle.random.nextInt(4) + 1)).isCancelled()) {
|
- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.turtle, this.blockPos.above(), (BlockState) Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, this.turtle.random.nextInt(4) + 1)).isCancelled()) {
|
||||||
+ // Paper start
|
+ // Paper start
|
||||||
+ int eggCount = this.turtle.random.nextInt(4) + 1;
|
+ int eggCount = this.turtle.random.nextInt(4) + 1;
|
||||||
+ com.destroystokyo.paper.event.entity.TurtleLayEggEvent layEggEvent = new com.destroystokyo.paper.event.entity.TurtleLayEggEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), MCUtil.toLocation(this.turtle.level, this.blockPos.above()), eggCount);
|
+ com.destroystokyo.paper.event.entity.TurtleLayEggEvent layEggEvent = new com.destroystokyo.paper.event.entity.TurtleLayEggEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity(), net.minecraft.server.MCUtil.toLocation(this.turtle.level, this.blockPos.above()), eggCount);
|
||||||
+ if (layEggEvent.callEvent() && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.turtle, this.blockPos.above(), Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, layEggEvent.getEggCount())).isCancelled()) {
|
+ if (layEggEvent.callEvent() && !org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this.turtle, this.blockPos.above(), Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, layEggEvent.getEggCount())).isCancelled()) {
|
||||||
world.playSound((Player) null, blockposition, SoundEvents.TURTLE_LAY_EGG, SoundSource.BLOCKS, 0.3F, 0.9F + world.random.nextFloat() * 0.2F);
|
world.playSound((Player) null, blockposition, SoundEvents.TURTLE_LAY_EGG, SoundSource.BLOCKS, 0.3F, 0.9F + world.random.nextFloat() * 0.2F);
|
||||||
- world.setBlock(this.blockPos.above(), (BlockState) Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, this.turtle.random.nextInt(4) + 1), 3);
|
- world.setBlock(this.blockPos.above(), (BlockState) Blocks.TURTLE_EGG.defaultBlockState().setValue(TurtleEggBlock.EGGS, this.turtle.random.nextInt(4) + 1), 3);
|
||||||
@ -54,8 +46,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canUse() {
|
public boolean canUse() {
|
||||||
- return this.turtle.isBaby() ? false : (this.turtle.hasEgg() ? true : (this.turtle.getRandom().nextInt(700) != 0 ? false : !this.turtle.getHomePos().closerThan((Position) this.turtle.position(), 64.0D)));
|
- return this.turtle.isBaby() ? false : (this.turtle.hasEgg() ? true : (this.turtle.getRandom().nextInt(reducedTickDelay(700)) != 0 ? false : !this.turtle.getHomePos().closerThan((Position) this.turtle.position(), 64.0D)));
|
||||||
+ return this.turtle.isBaby() ? false : (this.turtle.hasEgg() ? true : (this.turtle.getRandom().nextInt(700) != 0 ? false : !this.turtle.getHomePos().closerThan((Position) this.turtle.position(), 64.0D))) && new com.destroystokyo.paper.event.entity.TurtleGoHomeEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity()).callEvent(); // Paper
|
+ return this.turtle.isBaby() ? false : (this.turtle.hasEgg() ? true : (this.turtle.getRandom().nextInt(reducedTickDelay(700)) != 0 ? false : !this.turtle.getHomePos().closerThan((Position) this.turtle.position(), 64.0D))) && new com.destroystokyo.paper.event.entity.TurtleGoHomeEvent((org.bukkit.entity.Turtle) this.turtle.getBukkitEntity()).callEvent(); // Paper
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
1
todo.txt
1
todo.txt
@ -1,3 +1,4 @@
|
|||||||
Add Timings to LevelTicks and EntityTickList
|
Add Timings to LevelTicks and EntityTickList
|
||||||
Check IBlockDataList#GLOBAL_PALETTE
|
Check IBlockDataList#GLOBAL_PALETTE
|
||||||
Check if PlayerNaturallySpawnedEvent is called correctly
|
Check if PlayerNaturallySpawnedEvent is called correctly
|
||||||
|
Make sure fluids aren't completly fucked, there may be more sync loads to nuke there as well
|
||||||
|
Loading…
Reference in New Issue
Block a user