Paper 1.9
This commit is contained in:
@@ -1,9 +1,22 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Thu, 23 Apr 2015 17:26:21 -0400
|
||||
Date: Wed, 2 Mar 2016 23:30:53 -0600
|
||||
Subject: [PATCH] Add BeaconEffectEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobEffectList.java b/src/main/java/net/minecraft/server/MobEffectList.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobEffectList.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobEffectList.java
|
||||
@@ -0,0 +0,0 @@ public class MobEffectList {
|
||||
private final Map<IAttribute, AttributeModifier> a = Maps.newHashMap();
|
||||
private final boolean c;
|
||||
private final int d;
|
||||
- private String e = "";
|
||||
+ public String e = ""; // Paper - private -> public
|
||||
private int f = -1;
|
||||
public double durationModifier;
|
||||
private boolean h;
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityBeacon.java b/src/main/java/net/minecraft/server/TileEntityBeacon.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityBeacon.java
|
||||
@@ -12,52 +25,50 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
// CraftBukkit end
|
||||
|
||||
+// PaperSpigot start
|
||||
+// Paper start
|
||||
+import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
+import org.bukkit.entity.Player;
|
||||
+import org.bukkit.potion.PotionEffect;
|
||||
+import org.bukkit.potion.PotionEffectType;
|
||||
+import org.github.paperspigot.event.block.BeaconEffectEvent;
|
||||
+// PaperSpigot end
|
||||
+import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
||||
+// Paper end
|
||||
+
|
||||
public class TileEntityBeacon extends TileEntityContainer implements IUpdatePlayerListBox, IInventory {
|
||||
public class TileEntityBeacon extends TileEntityContainer implements ITickable, IWorldInventory {
|
||||
|
||||
public static final MobEffectList[][] a = new MobEffectList[][] { { MobEffectList.FASTER_MOVEMENT, MobEffectList.FASTER_DIG}, { MobEffectList.RESISTANCE, MobEffectList.JUMP}, { MobEffectList.INCREASE_DAMAGE}, { MobEffectList.REGENERATION}};
|
||||
@@ -0,0 +0,0 @@ public class TileEntityBeacon extends TileEntityContainer implements IUpdatePlay
|
||||
Iterator iterator = list.iterator();
|
||||
public static final MobEffectList[][] a = new MobEffectList[][] { { MobEffects.FASTER_MOVEMENT, MobEffects.FASTER_DIG}, { MobEffects.RESISTANCE, MobEffects.JUMP}, { MobEffects.INCREASE_DAMAGE}, { MobEffects.REGENERATION}};
|
||||
@@ -0,0 +0,0 @@ public class TileEntityBeacon extends TileEntityContainer implements ITickable,
|
||||
|
||||
EntityHuman entityhuman;
|
||||
+ // PaperSpigot start
|
||||
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
|
||||
+ PotionEffect primaryEffect = new PotionEffect(PotionEffectType.getById(this.k), 180, b0, true, true);
|
||||
+ // PaperSpigot end
|
||||
|
||||
+ // Paper start
|
||||
+ org.bukkit.block.Block block = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
|
||||
+ PotionEffect primaryEffect = new PotionEffect(PotionEffectType.getByName(this.l.e), 180, b0, true, true);
|
||||
+ // Paper end
|
||||
+
|
||||
while (iterator.hasNext()) {
|
||||
entityhuman = (EntityHuman) iterator.next();
|
||||
- entityhuman.addEffect(new MobEffect(this.k, 180, b0, true, true));
|
||||
+ // PaperSpigot start - BeaconEffectEvent
|
||||
- entityhuman.addEffect(new MobEffect(this.l, i, b0, true, true));
|
||||
+ // Paper start - BeaconEffectEvent
|
||||
+ BeaconEffectEvent event = new BeaconEffectEvent(block, primaryEffect, (Player) entityhuman.getBukkitEntity(), true);
|
||||
+ if (CraftEventFactory.callEvent(event).isCancelled()) continue;
|
||||
+
|
||||
+ PotionEffect effect = event.getEffect();
|
||||
+ entityhuman.addEffect(new MobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
|
||||
+ // PaperSpigot end
|
||||
+ entityhuman.addEffect(new MobEffect(MobEffectList.fromId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
if (this.j >= 4 && this.k != this.l && this.l > 0) {
|
||||
if (this.k >= 4 && this.l != this.m && this.m != null) {
|
||||
iterator = list.iterator();
|
||||
+ PotionEffect secondaryEffect = new PotionEffect(PotionEffectType.getById(this.l), 180, 0, true, true); // PaperSpigot
|
||||
+ PotionEffect secondaryEffect = new PotionEffect(PotionEffectType.getByName(this.m.e), 180, 0, true, true); // Paper
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
entityhuman = (EntityHuman) iterator.next();
|
||||
- entityhuman.addEffect(new MobEffect(this.l, 180, 0, true, true));
|
||||
+ // PaperSpigot start - BeaconEffectEvent
|
||||
- entityhuman.addEffect(new MobEffect(this.m, i, 0, true, true));
|
||||
+ // Paper start - BeaconEffectEvent
|
||||
+ BeaconEffectEvent event = new BeaconEffectEvent(block, secondaryEffect, (Player) entityhuman.getBukkitEntity(), false);
|
||||
+ if (CraftEventFactory.callEvent(event).isCancelled()) continue;
|
||||
+
|
||||
+ PotionEffect effect = event.getEffect();
|
||||
+ entityhuman.addEffect(new MobEffect(effect.getType().getId(), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
|
||||
+ // PaperSpigot end
|
||||
+ entityhuman.addEffect(new MobEffect(MobEffectList.fromId(effect.getType().getId()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()));
|
||||
+ // Paper end
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,146 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Fri, 17 Apr 2015 02:26:14 -0700
|
||||
Subject: [PATCH] Add FallingBlock source location API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockDragonEgg.java b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
@@ -0,0 +0,0 @@ public class BlockDragonEgg extends Block {
|
||||
byte b0 = 32;
|
||||
|
||||
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
||||
- world.addEntity(new EntityFallingBlock(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
||||
+ world.addEntity(new EntityFallingBlock(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
||||
+ // PaperSpigot end
|
||||
} else {
|
||||
world.setAir(blockposition);
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFalling.java b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
@@ -0,0 +0,0 @@ public class BlockFalling extends Block {
|
||||
|
||||
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
||||
if (!world.isClientSide) {
|
||||
- EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
||||
+ EntityFallingBlock entityfallingblock = new EntityFallingBlock(loc, world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
||||
+ // PaperSpigot end
|
||||
|
||||
this.a(entityfallingblock);
|
||||
world.addEntity(entityfallingblock);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
private int fallHurtMax = 40;
|
||||
private float fallHurtAmount = 2.0F;
|
||||
public NBTTagCompound tileEntityData;
|
||||
+ public org.bukkit.Location sourceLoc; // PaperSpigot
|
||||
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
public EntityFallingBlock(World world) {
|
||||
+ this(null, world);
|
||||
+ }
|
||||
+
|
||||
+ public EntityFallingBlock(org.bukkit.Location loc, World world) {
|
||||
super(world);
|
||||
+ sourceLoc = loc;
|
||||
}
|
||||
|
||||
public EntityFallingBlock(World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
||||
+ this(null, world, d0, d1, d2, iblockdata);
|
||||
+ }
|
||||
+
|
||||
+ public EntityFallingBlock(org.bukkit.Location loc, World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
||||
super(world);
|
||||
+ sourceLoc = loc;
|
||||
+ // PaperSpigot end
|
||||
this.block = iblockdata;
|
||||
this.k = true;
|
||||
this.setSize(0.98F, 0.98F);
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
if (this.tileEntityData != null) {
|
||||
nbttagcompound.set("TileEntityData", this.tileEntityData);
|
||||
}
|
||||
-
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ if (sourceLoc != null) {
|
||||
+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX());
|
||||
+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY());
|
||||
+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ());
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
protected void a(NBTTagCompound nbttagcompound) {
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
if (block == null || block.getMaterial() == Material.AIR) {
|
||||
this.block = Blocks.SAND.getBlockData();
|
||||
}
|
||||
-
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ if (nbttagcompound.hasKey("SourceLoc_x")) {
|
||||
+ int srcX = nbttagcompound.getInt("SourceLoc_x");
|
||||
+ int srcY = nbttagcompound.getInt("SourceLoc_y");
|
||||
+ int srcZ = nbttagcompound.getInt("SourceLoc_z");
|
||||
+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
public void a(boolean flag) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
double y = location.getBlockY() + 0.5;
|
||||
double z = location.getBlockZ() + 0.5;
|
||||
|
||||
- EntityFallingBlock entity = new EntityFallingBlock(world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ location = location.clone();
|
||||
+ EntityFallingBlock entity = new EntityFallingBlock(location, world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
||||
+ // PaperSpigot end
|
||||
entity.ticksLived = 1;
|
||||
|
||||
world.addEntity(entity, SpawnReason.CUSTOM);
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
IBlockData blockData = world.getType(new BlockPosition(x, y, z));
|
||||
int type = CraftMagicNumbers.getId(blockData.getBlock());
|
||||
int data = blockData.getBlock().toLegacyData(blockData);
|
||||
-
|
||||
- entity = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ location = location.clone();
|
||||
+ entity = new EntityFallingBlock(location, world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
||||
+ // PaperSpigot end
|
||||
} else if (Projectile.class.isAssignableFrom(clazz)) {
|
||||
if (Snowball.class.isAssignableFrom(clazz)) {
|
||||
entity = new EntitySnowball(world, x, y, z);
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
@@ -0,0 +0,0 @@ public class CraftFallingSand extends CraftEntity implements FallingSand {
|
||||
public void setHurtEntities(boolean hurtEntities) {
|
||||
getHandle().hurtEntities = hurtEntities;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Add FallingBlock source location API
|
||||
+ @Override
|
||||
+ public org.bukkit.Location getSourceLoc() {
|
||||
+ return getHandle().sourceLoc;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
--
|
||||
@@ -1,10 +1,24 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: DemonWav <demonwav@gmail.com>
|
||||
Date: Sat, 30 Jan 2016 19:17:19 -0600
|
||||
Date: Thu, 3 Mar 2016 01:44:39 -0600
|
||||
Subject: [PATCH] Add Location support to tab completers (vanilla feature
|
||||
missing in CraftBukkit)
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void allChunksAreSlimeChunks() {
|
||||
allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false);
|
||||
}
|
||||
+
|
||||
+ public boolean allowBlockLocationTabCompletion;
|
||||
+ private void allowBlockLocationTabCompletion() {
|
||||
+ allowBlockLocationTabCompletion = getBoolean("allow-block-location-tab-completion", true);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -13,8 +27,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
return arraylist;
|
||||
}
|
||||
*/
|
||||
- return server.tabComplete(icommandlistener, s);
|
||||
+ return server.tabComplete(icommandlistener, s, blockposition); // PaperSpigot - add Location argument
|
||||
- return server.tabComplete(icommandlistener, s); // PAIL : todo args
|
||||
+ return server.tabComplete(icommandlistener, s, blockposition); // PAIL : todo args // Paper - add Location arg
|
||||
// CraftBukkit end
|
||||
}
|
||||
|
||||
@@ -22,24 +36,36 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/ja
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.BanList;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.GameMode;
|
||||
+import org.bukkit.Location;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.UnsafeValues;
|
||||
@@ -0,0 +0,0 @@ import javax.imageio.ImageIO;
|
||||
|
||||
import net.minecraft.server.*;
|
||||
|
||||
-import org.bukkit.BanList;
|
||||
-import org.bukkit.Bukkit;
|
||||
-import org.bukkit.ChatColor;
|
||||
-import org.bukkit.GameMode;
|
||||
-import org.bukkit.OfflinePlayer;
|
||||
-import org.bukkit.Server;
|
||||
-import org.bukkit.UnsafeValues;
|
||||
+import net.minecraft.server.WorldType;
|
||||
+import org.bukkit.*;
|
||||
import org.bukkit.Warning.WarningState;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.World.Environment;
|
||||
-import org.bukkit.WorldCreator;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
public List<String> tabComplete(net.minecraft.server.ICommandListener sender, String message) {
|
||||
+ return tabComplete(sender, message, null); // PaperSpigot - location tab-completes. Original code here moved below
|
||||
+ return tabComplete(sender, message, null); // Paper - location tab-completes. Original code here moved below
|
||||
+ }
|
||||
+
|
||||
+ // PaperSpigot start - add BlockPosition support
|
||||
+ // Paper start - add BlockPosition support
|
||||
+ /*
|
||||
+ this code is copied, except for the noted change, from the original tabComplete(net.minecraft.server.ICommandListener sender, String message) method
|
||||
+ this code is copied, except for the noted change, from the original tabComplete(net.minecraft.server.ICommandListener sender, String message) method
|
||||
+ */
|
||||
+ public List<String> tabComplete(net.minecraft.server.ICommandListener sender, String message, BlockPosition blockPosition) {
|
||||
if (!(sender instanceof EntityPlayer)) {
|
||||
@@ -53,16 +79,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
} else {
|
||||
return tabCompleteChat(player, message);
|
||||
}
|
||||
+ // Paper end
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
|
||||
public List<String> tabCompleteCommand(Player player, String message) {
|
||||
+ return tabCompleteCommand(player, message, null); // PaperSpigot - location tab-completes. Original code here moved below
|
||||
+ return tabCompleteCommand(player, message, null); // Paper - location tab-completes. Original code here moved below
|
||||
+ }
|
||||
+
|
||||
+ // PaperSpigot start - add BlockPosition support
|
||||
+ // Paper start - add BlockPosition support
|
||||
+ /*
|
||||
+ this code is copied, except for the noted change, from the original tabCompleteCommand(Player player, String message) method
|
||||
+ this code is copied, except for the noted change, from the original tabComplete(net.minecraft.server.ICommandListener sender, String message) method
|
||||
+ */
|
||||
+ public List<String> tabCompleteCommand(Player player, String message, BlockPosition blockPosition) {
|
||||
// Spigot Start
|
||||
@@ -76,24 +102,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
List<String> completions = null;
|
||||
try {
|
||||
- completions = getCommandMap().tabComplete(player, message.substring(1));
|
||||
+ // send location info if present
|
||||
+ // send location info if presen
|
||||
+ // completions = getCommandMap().tabComplete(player, message.substring(1));
|
||||
+ if (blockPosition == null || !((CraftWorld) player.getWorld()).getHandle().paperSpigotConfig.allowBlockLocationTabCompletion) {
|
||||
+ if (blockPosition == null || !((CraftWorld) player.getWorld()).getHandle().paperConfig.allowBlockLocationTabCompletion) {
|
||||
+ completions = getCommandMap().tabComplete(player, message.substring(1));
|
||||
+ } else {
|
||||
+ completions = getCommandMap().tabComplete(player, message.substring(1), new Location(player.getWorld(), blockPosition.getX(), blockPosition.getY(), blockPosition.getZ()));
|
||||
+ }
|
||||
+ // Paper end
|
||||
} catch (CommandException ex) {
|
||||
player.sendMessage(ChatColor.RED + "An internal error occurred while attempting to tab-complete this command");
|
||||
getLogger().log(Level.SEVERE, "Exception when " + player.getName() + " attempted to tab complete " + message, ex);
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
|
||||
return completions == null ? ImmutableList.<String>of() : completions;
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
|
||||
public List<String> tabCompleteChat(Player player, String message) {
|
||||
List<String> completions = new ArrayList<String>();
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java b/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/command/VanillaCommandWrapper.java
|
||||
@@ -110,42 +129,25 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
@Override
|
||||
public List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException {
|
||||
+ return tabComplete(sender, alias, args, null); // PaperSpigot - location tab-completes. Original code moved below
|
||||
+ return tabComplete(sender, alias, args, null); // Paper - location tab-completes. Original code moved below
|
||||
+ }
|
||||
+
|
||||
+ // PaperSpigot start - location tab-completes
|
||||
+ // Paper start - location tab-completes
|
||||
+ /*
|
||||
+ this code is copied, except for the noted change, from the original tabComplete(CommandSender sender, String alias, String[] args) method
|
||||
+ this code is copied, except for the noted change, from the original tabComplete(CommandSender sender, String alias, String[] args) method
|
||||
+ */
|
||||
+ @Override
|
||||
+ public List<String> tabComplete(CommandSender sender, String alias, String[] args, Location location) throws IllegalArgumentException {
|
||||
Validate.notNull(sender, "Sender cannot be null");
|
||||
Validate.notNull(args, "Arguments cannot be null");
|
||||
Validate.notNull(alias, "Alias cannot be null");
|
||||
- return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
|
||||
- return (List<String>) vanillaCommand.tabComplete(MinecraftServer.getServer(), getListener(sender), args, new BlockPosition(0, 0, 0));
|
||||
+ if (location == null) { // PaperSpigot use location information if available
|
||||
+ return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(0, 0, 0));
|
||||
+ return (List<String>) vanillaCommand.tabComplete(MinecraftServer.getServer(), getListener(sender), args, new BlockPosition(0, 0, 0));
|
||||
+ } else {
|
||||
+ return (List<String>) vanillaCommand.tabComplete(getListener(sender), args, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()));
|
||||
+ return (List<String>) vanillaCommand.tabComplete(MinecraftServer.getServer(), getListener(sender), args, new BlockPosition(location.getBlockX(), location.getBlockY(), location.getBlockZ()));
|
||||
+ }
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
|
||||
public static CommandSender lastSender = null; // Nasty :(
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
allChunksAreSlimeChunks = getBoolean( "all-chunks-are-slime-chunks", false );
|
||||
}
|
||||
+
|
||||
+ public boolean allowBlockLocationTabCompletion;
|
||||
+ private void allowBlockLocationTabCompletion()
|
||||
+ {
|
||||
+ allowBlockLocationTabCompletion = getBoolean( "allow-block-location-tab-completion", true );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Steve Anton <anxuiz.nx@gmail.com>
|
||||
Date: Tue, 22 Dec 2015 22:04:15 -0600
|
||||
Date: Thu, 3 Mar 2016 00:09:38 -0600
|
||||
Subject: [PATCH] Add PlayerInitialSpawnEvent
|
||||
|
||||
For modifying a player's initial spawn location as they join the server
|
||||
@@ -13,9 +13,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
+ // PaperSpigot start - support PlayerInitialSpawnEvent
|
||||
+ // Paper start - support PlayerInitialSpawnEvent
|
||||
+ Location originalLoc = new Location(entityplayer.world.getWorld(), entityplayer.locX, entityplayer.locY, entityplayer.locZ, entityplayer.yaw, entityplayer.pitch);
|
||||
+ org.bukkit.event.player.PlayerInitialSpawnEvent event = new org.bukkit.event.player.PlayerInitialSpawnEvent(entityplayer.getBukkitEntity(), originalLoc);
|
||||
+ com.destroystokyo.paper.event.player.PlayerInitialSpawnEvent event = new com.destroystokyo.paper.event.player.PlayerInitialSpawnEvent(entityplayer.getBukkitEntity(), originalLoc);
|
||||
+ this.server.server.getPluginManager().callEvent(event);
|
||||
+
|
||||
+ Location newLoc = event.getSpawnLocation();
|
||||
@@ -27,7 +27,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ entityplayer.pitch = newLoc.getPitch();
|
||||
+ entityplayer.dimension = ((CraftWorld) newLoc.getWorld()).getHandle().dimension;
|
||||
+ entityplayer.spawnWorld = entityplayer.world.worldData.getName();
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
entityplayer.spawnIn(this.server.getWorldServer(entityplayer.dimension));
|
||||
entityplayer.playerInteractManager.a((WorldServer) entityplayer.world);
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Isaac Moore <rmsy@me.com>
|
||||
Date: Fri, 27 Mar 2015 00:52:24 -0400
|
||||
Subject: [PATCH] Add PlayerLocaleChangeEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
}
|
||||
|
||||
public void a(PacketPlayInSettings packetplayinsettings) {
|
||||
+ // PaperSpigot start - Add PlayerLocaleChangeEvent
|
||||
+ String oldLocale = this.locale;
|
||||
this.locale = packetplayinsettings.a();
|
||||
+ if (!this.locale.equals(oldLocale)) {
|
||||
+ CraftEventFactory.callPlayerLocaleChangeEvent(this, oldLocale, this.locale);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
this.bR = packetplayinsettings.c();
|
||||
this.bS = packetplayinsettings.d();
|
||||
this.getDataWatcher().watch(10, Byte.valueOf((byte) packetplayinsettings.e()));
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/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 {
|
||||
firework.world.getServer().getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Add PlayerLocaleChangeEvent
|
||||
+ public static PlayerLocaleChangeEvent callPlayerLocaleChangeEvent(EntityHuman who, String oldLocale, String newLocale) {
|
||||
+ Player player = (Player) who.getBukkitEntity();
|
||||
+ PlayerLocaleChangeEvent event = new PlayerLocaleChangeEvent(player, oldLocale, newLocale);
|
||||
+ Bukkit.getPluginManager().callEvent(event);
|
||||
+ return event;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
--
|
||||
@@ -1,130 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 8 Mar 2015 04:23:41 -0500
|
||||
Subject: [PATCH] Add TNT source location API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
|
||||
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
|
||||
if (!world.isClientSide) {
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource());
|
||||
+ org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // PaperSpigot
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // PaperSpigot - add loc
|
||||
|
||||
entitytntprimed.fuseTicks = world.random.nextInt(entitytntprimed.fuseTicks / 4) + entitytntprimed.fuseTicks / 8;
|
||||
world.addEntity(entitytntprimed);
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) {
|
||||
if (!world.isClientSide) {
|
||||
if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) {
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving);
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // PaperSpigot
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // PaperSpigot - add loc
|
||||
|
||||
world.addEntity(entitytntprimed);
|
||||
world.makeSound(entitytntprimed, "game.tnt.primed", 1.0F, 1.0F);
|
||||
diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
+++ b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
@@ -0,0 +0,0 @@ public class DispenserRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null);
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(block.getLocation(), world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null); // PaperSpigot
|
||||
// CraftBukkit end
|
||||
|
||||
world.addEntity(entitytntprimed);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
private EntityLiving source;
|
||||
public float yield = 4; // CraftBukkit - add field
|
||||
public boolean isIncendiary = false; // CraftBukkit - add field
|
||||
+ public org.bukkit.Location sourceLoc; // PaperSpigot
|
||||
|
||||
+ // PaperSpigot start - TNT source location API
|
||||
public EntityTNTPrimed(World world) {
|
||||
+ this(null, world);
|
||||
+ }
|
||||
+
|
||||
+ public EntityTNTPrimed(org.bukkit.Location loc, World world) {
|
||||
super(world);
|
||||
+ sourceLoc = loc;
|
||||
+ // PaperSpigot end
|
||||
this.k = true;
|
||||
this.setSize(0.98F, 0.98F);
|
||||
}
|
||||
|
||||
- public EntityTNTPrimed(World world, double d0, double d1, double d2, EntityLiving entityliving) {
|
||||
- this(world);
|
||||
+ public EntityTNTPrimed(org.bukkit.Location loc, World world, double d0, double d1, double d2, EntityLiving entityliving) {
|
||||
+ this(loc, world);
|
||||
this.setPosition(d0, d1, d2);
|
||||
float f = (float) (Math.random() * 3.1415927410125732D * 2.0D);
|
||||
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
|
||||
protected void b(NBTTagCompound nbttagcompound) {
|
||||
nbttagcompound.setByte("Fuse", (byte) this.fuseTicks);
|
||||
+ // PaperSpigot start - TNT source location API
|
||||
+ if (sourceLoc != null) {
|
||||
+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX());
|
||||
+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY());
|
||||
+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ());
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
protected void a(NBTTagCompound nbttagcompound) {
|
||||
this.fuseTicks = nbttagcompound.getByte("Fuse");
|
||||
+ // PaperSpigot start - TNT source location API
|
||||
+ if (nbttagcompound.hasKey("SourceLoc_x")) {
|
||||
+ int srcX = nbttagcompound.getInt("SourceLoc_x");
|
||||
+ int srcY = nbttagcompound.getInt("SourceLoc_y");
|
||||
+ int srcZ = nbttagcompound.getInt("SourceLoc_z");
|
||||
+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
public EntityLiving getSource() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
throw new IllegalArgumentException("Cannot spawn hanging entity for " + clazz.getName() + " at " + location);
|
||||
}
|
||||
} else if (TNTPrimed.class.isAssignableFrom(clazz)) {
|
||||
- entity = new EntityTNTPrimed(world, x, y, z, null);
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), x, y, z); // PaperSpigot
|
||||
+ entity = new EntityTNTPrimed(loc, world, x, y, z, null);
|
||||
} else if (ExperienceOrb.class.isAssignableFrom(clazz)) {
|
||||
entity = new EntityExperienceOrb(world, x, y, z, 0);
|
||||
} else if (Weather.class.isAssignableFrom(clazz)) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
||||
|
||||
return null;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start
|
||||
+ @Override
|
||||
+ public org.bukkit.Location getSourceLoc() {
|
||||
+ return getHandle().sourceLoc;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Thu, 6 Nov 2014 18:29:20 -0600
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Tue, 1 Mar 2016 23:19:01 -0600
|
||||
Subject: [PATCH] Add async chunk load API
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Async chunk load API
|
||||
+ // Paper start - Async chunk load API
|
||||
+ public void getChunkAtAsync(final int x, final int z, final ChunkLoadCallback callback) {
|
||||
+ final ChunkProviderServer cps = this.world.chunkProviderServer;
|
||||
+ final ChunkProviderServer cps = this.world.getChunkProviderServer();
|
||||
+ cps.getChunkAt(x, z, new Runnable() {
|
||||
+ @Override
|
||||
+ public void run() {
|
||||
@@ -22,15 +22,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+ });
|
||||
+ }
|
||||
+
|
||||
+ public void getChunkAtAsync(Block block, ChunkLoadCallback callback) {
|
||||
+ getChunkAtAsync(block.getX() >> 4, block.getZ() >> 4, callback);
|
||||
+ }
|
||||
+
|
||||
+ public void getChunkAtAsync(Location location, ChunkLoadCallback callback) {
|
||||
+ getChunkAtAsync(location.getBlockX() >> 4, location.getBlockZ() >> 4, callback);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
public Chunk getChunkAt(int x, int z) {
|
||||
return this.world.chunkProviderServer.getChunkAt(x, z).bukkitChunk;
|
||||
return this.world.getChunkProviderServer().getChunkAt(x, z).bukkitChunk;
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,34 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Suddenly <suddenly@suddenly.coffee>
|
||||
Date: Sat, 7 Mar 2015 21:40:48 -0600
|
||||
Date: Tue, 1 Mar 2016 13:51:54 -0600
|
||||
Subject: [PATCH] Add configurable despawn distances for living entities
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
log("Player exhaustion penalty for breaking blocks is " + blockBreakExhaustion);
|
||||
log("Player exhaustion penalty for swimming is " + playerSwimmingExhaustion);
|
||||
}
|
||||
+
|
||||
+ public int softDespawnDistance;
|
||||
+ public int hardDespawnDistance;
|
||||
+ private void despawnDistances() {
|
||||
+ softDespawnDistance = getInt("despawn-ranges.soft", 32); // 32^2 = 1024, Minecraft Default
|
||||
+ hardDespawnDistance = getInt("despawn-ranges.hard", 128); // 128^2 = 16384, Minecraft Default
|
||||
+
|
||||
+ if (softDespawnDistance > hardDespawnDistance) {
|
||||
+ softDespawnDistance = hardDespawnDistance;
|
||||
+ }
|
||||
+
|
||||
+ log("Living Entity Despawn Ranges: Soft: " + softDespawnDistance + " Hard: " + hardDespawnDistance);
|
||||
+
|
||||
+ softDespawnDistance = softDespawnDistance*softDespawnDistance;
|
||||
+ hardDespawnDistance = hardDespawnDistance*hardDespawnDistance;
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -13,42 +38,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
double d3 = d0 * d0 + d1 * d1 + d2 * d2;
|
||||
|
||||
- if (d3 > 16384.0D) { // CraftBukkit - remove isTypeNotPersistent() check
|
||||
+ if (d3 > this.world.paperSpigotConfig.hardDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // PaperSpigot - custom despawn distances
|
||||
+ if (d3 > world.paperConfig.hardDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances
|
||||
this.die();
|
||||
}
|
||||
|
||||
- if (this.ticksFarFromPlayer > 600 && this.random.nextInt(800) == 0 && d3 > 1024.0D) { // CraftBukkit - remove isTypeNotPersistent() check
|
||||
+ if (this.ticksFarFromPlayer > 600 && this.random.nextInt(800) == 0 && d3 > this.world.paperSpigotConfig.softDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // PaperSpigot - custom despawn distance
|
||||
+ if (this.ticksFarFromPlayer > 600 && this.random.nextInt(800) == 0 && d3 > world.paperConfig.softDespawnDistance) { // CraftBukkit - remove isTypeNotPersistent() check // Paper - custom despawn distances
|
||||
this.die();
|
||||
- } else if (d3 < 1024.0D) {
|
||||
+ } else if (d3 < this.world.paperSpigotConfig.softDespawnDistance) { // PaperSpigot - custom despawn distances
|
||||
+ } else if (d3 < world.paperConfig.softDespawnDistance) { // Paper - custom despawn distances
|
||||
this.ticksFarFromPlayer = 0;
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
blockBreakExhaustion = getFloat( "player-exhaustion.block-break", 0.025F );
|
||||
playerSwimmingExhaustion = getFloat( "player-exhaustion.swimming", 0.015F );
|
||||
}
|
||||
+
|
||||
+ public int softDespawnDistance;
|
||||
+ public int hardDespawnDistance;
|
||||
+ private void despawnDistances()
|
||||
+ {
|
||||
+ softDespawnDistance = getInt( "despawn-ranges.soft", 32 ); // 32^2 = 1024, Minecraft Default
|
||||
+ hardDespawnDistance = getInt( "despawn-ranges.hard", 128 ); // 128^2 = 16384, Minecraft Default;
|
||||
+
|
||||
+ if ( softDespawnDistance > hardDespawnDistance ) {
|
||||
+ softDespawnDistance = hardDespawnDistance;
|
||||
+ }
|
||||
+
|
||||
+ log( "Living Entity Despawn Ranges: Soft: " + softDespawnDistance + " Hard: " + hardDespawnDistance );
|
||||
+
|
||||
+ softDespawnDistance = softDespawnDistance*softDespawnDistance;
|
||||
+ hardDespawnDistance = hardDespawnDistance*hardDespawnDistance;
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Hirschfeld <joe@ibj.io>
|
||||
Date: Sat, 20 Feb 2016 23:38:24 -0500
|
||||
Date: Thu, 3 Mar 2016 02:46:17 -0600
|
||||
Subject: [PATCH] Add configurable portal search radius
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void allowBlockLocationTabCompletion() {
|
||||
allowBlockLocationTabCompletion = getBoolean("allow-block-location-tab-completion", true);
|
||||
}
|
||||
+
|
||||
+ public int portalSearchRadius;
|
||||
+ private void portalSearchRadius() {
|
||||
+ portalSearchRadius = getInt("portal-search-radius", 128);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PortalTravelAgent.java b/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PortalTravelAgent.java
|
||||
@@ -13,49 +27,34 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- public BlockPosition findPortal(double x, double y, double z, int short1) {
|
||||
+ public BlockPosition findPortal(double x, double y, double z, int searchRadius) { // Paper - actually use search radius
|
||||
if (this.a.getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END) {
|
||||
return this.findEndPortal(this.a.worldProvider.h());
|
||||
+ public BlockPosition findPortal(double x, double y, double z, int searchRadius) { // Paper - short1 -> searchRadius
|
||||
if (this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.THE_END) {
|
||||
return this.findEndPortal(this.world.worldProvider.h());
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class PortalTravelAgent {
|
||||
} else {
|
||||
BlockPosition blockposition = new BlockPosition(x, y, z);
|
||||
BlockPosition blockposition = new BlockPosition(x, y, z); // CraftBukkit
|
||||
|
||||
- for (int l = -128; l <= 128; ++l) {
|
||||
+ for (int l = -searchRadius; l <= searchRadius; ++l) { // Paper - actually use search radius
|
||||
+ for (int l = -searchRadius; l <= searchRadius; ++l) { // Paper - actually use search radiusfor (int l = -128; l <= 128; ++l) {
|
||||
BlockPosition blockposition1;
|
||||
|
||||
- for (int i1 = -128; i1 <= 128; ++i1) {
|
||||
+ for (int i1 = -searchRadius; i1 <= searchRadius; ++i1) { // Paper - actually use search radius
|
||||
for (BlockPosition blockposition2 = blockposition.a(l, this.a.V() - 1 - blockposition.getY(), i1); blockposition2.getY() >= 0; blockposition2 = blockposition1) {
|
||||
+ for (int i1 = -searchRadius; i1 <= searchRadius; ++i1) { // Paper - actually use search radius
|
||||
for (BlockPosition blockposition2 = blockposition.a(l, this.world.Z() - 1 - blockposition.getY(), i1); blockposition2.getY() >= 0; blockposition2 = blockposition1) {
|
||||
blockposition1 = blockposition2.down();
|
||||
if (this.a.getType(blockposition2).getBlock() == Blocks.PORTAL) {
|
||||
if (this.world.getType(blockposition2).getBlock() == Blocks.PORTAL) {
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
this.manager = new PlayerChunkMap(this, spigotConfig.viewDistance); // Spigot
|
||||
this.worldProvider.a(this);
|
||||
this.chunkProvider = this.k();
|
||||
- this.Q = new org.bukkit.craftbukkit.CraftTravelAgent(this); // CraftBukkit
|
||||
+ this.Q = ((org.bukkit.craftbukkit.CraftTravelAgent) new org.bukkit.craftbukkit.CraftTravelAgent(this).setSearchRadius(paperSpigotConfig.portalSearchRadius)); // CraftBukkit // Paper - configurable search radius
|
||||
this.B();
|
||||
this.C();
|
||||
this.getWorldBorder().a(minecraftserver.aI());
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
allowBlockLocationTabCompletion = getBoolean( "allow-block-location-tab-completion", true );
|
||||
}
|
||||
+
|
||||
+ public int portalSearchRadius;
|
||||
+ private void portalSearchRadius()
|
||||
+ {
|
||||
+ portalSearchRadius = getInt("portal-search-radius", 128);
|
||||
+ }
|
||||
}
|
||||
this.worldProvider.a((World) this);
|
||||
this.chunkProvider = this.n();
|
||||
- this.portalTravelAgent = new org.bukkit.craftbukkit.CraftTravelAgent(this); // CraftBukkit
|
||||
+ this.portalTravelAgent = ((org.bukkit.craftbukkit.CraftTravelAgent) new org.bukkit.craftbukkit.CraftTravelAgent(this).setSearchRadius(paperConfig.portalSearchRadius)); // CraftBukkit // Paper - configurable search radius
|
||||
this.H();
|
||||
this.I();
|
||||
this.getWorldBorder().a(minecraftserver.aD());
|
||||
--
|
||||
@@ -1,434 +1,21 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Hirschfeld <joe@ibj.io>
|
||||
Date: Sat, 20 Feb 2016 20:07:46 -0500
|
||||
Date: Thu, 3 Mar 2016 03:15:41 -0600
|
||||
Subject: [PATCH] Add exception reporting event
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.google.common.collect.Lists; // CraftBukkit
|
||||
import org.bukkit.Bukkit; // CraftBukkit
|
||||
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
|
||||
public class Chunk {
|
||||
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
this.tileEntities.remove(blockposition);
|
||||
// PaperSpigot end
|
||||
} else {
|
||||
- System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ()
|
||||
- + " (" + org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getType(blockposition)) + ") where there was no entity tile!");
|
||||
- System.out.println("Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16));
|
||||
- new Exception().printStackTrace();
|
||||
+ // Paper start
|
||||
+ ServerInternalException e = new ServerInternalException(
|
||||
+ "Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + ","
|
||||
+ + tileentity.position.getY() + "," + tileentity.position.getZ()
|
||||
+ + " (" + CraftMagicNumbers.getMaterial(getType(blockposition)) + ") where there was no entity tile!\n" +
|
||||
+ "Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16));
|
||||
+ e.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(e);
|
||||
+ // Paper end
|
||||
// CraftBukkit end
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
import java.util.Random;
|
||||
import java.util.logging.Level;
|
||||
|
||||
+import org.bukkit.Bukkit;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.craftbukkit.chunkio.ChunkIOExecutor;
|
||||
import org.bukkit.craftbukkit.util.LongHash;
|
||||
import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
import org.bukkit.craftbukkit.util.LongObjectHashMap;
|
||||
import org.bukkit.event.world.ChunkUnloadEvent;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
// CraftBukkit end
|
||||
|
||||
public class ChunkProviderServer implements IChunkProvider {
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
|
||||
if (chunk == emptyChunk) return chunk;
|
||||
if (i != chunk.locX || j != chunk.locZ) {
|
||||
- b.error("Chunk (" + chunk.locX + ", " + chunk.locZ + ") stored at (" + i + ", " + j + ") in world '" + world.getWorld().getName() + "'");
|
||||
+ // Paper start
|
||||
+ String msg = "Chunk (" + chunk.locX + ", " + chunk.locZ + ") stored at (" + i + ", " + j + ") in world '" + world.getWorld().getName() + "'";
|
||||
+ b.error(msg);
|
||||
b.error(chunk.getClass().getName());
|
||||
- Throwable ex = new Throwable();
|
||||
- ex.fillInStackTrace();
|
||||
+ ServerInternalException ex = new ServerInternalException(msg);
|
||||
ex.printStackTrace();
|
||||
+ Bukkit.getPluginManager().callEvent(new ServerExceptionEvent(ex));
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
return chunk;
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
|
||||
return chunk;
|
||||
} catch (Exception exception) {
|
||||
- ChunkProviderServer.b.error("Couldn\'t load chunk", exception);
|
||||
+ // Paper start
|
||||
+ String msg = "Couldn\'t load chunk";
|
||||
+ ChunkProviderServer.b.error(msg, exception);
|
||||
+ ServerInternalException.reportInternalException(exception);
|
||||
+ // Paper end
|
||||
return null;
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
+++ b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
@@ -0,0 +0,0 @@ import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
|
||||
public class NameReferencingFileConverter {
|
||||
|
||||
@@ -0,0 +0,0 @@ public class NameReferencingFileConverter {
|
||||
root = NBTCompressedStreamTools.a(new java.io.FileInputStream(file1));
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
if (root != null) {
|
||||
@@ -0,0 +0,0 @@ public class NameReferencingFileConverter {
|
||||
NBTCompressedStreamTools.a(root, new java.io.FileOutputStream(file2));
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
- }
|
||||
+ }
|
||||
// CraftBukkit end
|
||||
|
||||
NameReferencingFileConverter.b(file);
|
||||
diff --git a/src/main/java/net/minecraft/server/PersistentCollection.java b/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
@@ -0,0 +0,0 @@ package net.minecraft.server;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
+
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutput;
|
||||
import java.io.DataOutputStream;
|
||||
@@ -0,0 +0,0 @@ public class PersistentCollection {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class PersistentCollection {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
return oshort.shortValue();
|
||||
diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/RegionFile.java
|
||||
+++ b/src/main/java/net/minecraft/server/RegionFile.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
+
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
@@ -0,0 +0,0 @@ public class RegionFile {
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class RegionFile {
|
||||
this.b(i, j, (int) (MinecraftServer.az() / 1000L));
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
+
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
@@ -0,0 +0,0 @@ public class RegionFileCache {
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
@@ -0,0 +0,0 @@ import java.util.Set;
|
||||
import org.bukkit.craftbukkit.util.LongHash;
|
||||
import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
// CraftBukkit end
|
||||
|
||||
public final class SpawnerCreature {
|
||||
@@ -0,0 +0,0 @@ public final class SpawnerCreature {
|
||||
entityinsentient = (EntityInsentient) biomebase_biomemeta.b.getConstructor(new Class[] { World.class}).newInstance(new Object[] { worldserver});
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
return j1;
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public final class SpawnerCreature {
|
||||
entityinsentient = (EntityInsentient) biomebase_biomemeta.b.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
continue;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntity.java b/src/main/java/net/minecraft/server/TileEntity.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntity.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntity.java
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
import co.aikar.timings.SpigotTimings; // Spigot
|
||||
import co.aikar.timings.Timing; // Spigot
|
||||
import org.bukkit.inventory.InventoryHolder; // CraftBukkit
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
|
||||
public abstract class TileEntity {
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class TileEntity {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
if (tileentity != null) {
|
||||
diff --git a/src/main/java/net/minecraft/server/VillageSiege.java b/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
+++ b/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
+
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class VillageSiege {
|
||||
entityzombie.setVillager(false);
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
return false;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
// PaperSpigot end
|
||||
|
||||
// CraftBukkit start
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
} catch (Throwable throwable1) {
|
||||
// PaperSpigot start - Prevent tile entity and entity crashes
|
||||
entity.tickTimer.stopTiming();
|
||||
- System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ);
|
||||
+ String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ;
|
||||
+ System.err.println(msg);
|
||||
throwable1.printStackTrace();
|
||||
+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable1)));
|
||||
entity.dead = true;
|
||||
continue;
|
||||
// PaperSpigot end
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
} catch (Throwable throwable2) {
|
||||
// PaperSpigot start - Prevent tile entity and entity crashes
|
||||
tileentity.tickTimer.stopTiming();
|
||||
- System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ());
|
||||
+ String msg = "TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ();
|
||||
+ System.err.println(msg);
|
||||
throwable2.printStackTrace();
|
||||
+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable2)));
|
||||
tilesThisCycle--;
|
||||
this.tileEntityList.remove(tileTickPosition--);
|
||||
continue;
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldNBTStorage.java b/src/main/java/net/minecraft/server/WorldNBTStorage.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldNBTStorage.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldNBTStorage.java
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
// CraftBukkit end
|
||||
|
||||
public class WorldNBTStorage implements IDataManager, IPlayerFileData {
|
||||
@@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData {
|
||||
return new WorldData(nbttagcompound1);
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData {
|
||||
return new WorldData(nbttagcompound1);
|
||||
} catch (Exception exception1) {
|
||||
exception1.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception1); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class WorldNBTStorage implements IDataManager, IPlayerFileData {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||
import org.bukkit.util.Vector;
|
||||
+import org.github.paperspigot.exception.ServerInternalException;
|
||||
|
||||
public class CraftWorld implements World {
|
||||
public static final int CUSTOM_DIMENSION_OFFSET = 10;
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
world.savingDisabled = oldSave;
|
||||
} catch (ExceptionWorldConflict ex) {
|
||||
ex.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ex); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import org.bukkit.scheduler.BukkitWorker;
|
||||
+import org.github.paperspigot.ServerSchedulerReportingWrapper;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerSchedulerException;
|
||||
|
||||
/**
|
||||
* The fundamental concepts for this implementation:
|
||||
@@ -0,0 +0,0 @@ public class CraftScheduler implements BukkitScheduler {
|
||||
try {
|
||||
task.run();
|
||||
} catch (final Throwable throwable) {
|
||||
+ // Paper start
|
||||
+ String msg = String.format(
|
||||
+ "Task #%s for %s generated an exception",
|
||||
+ task.getTaskId(),
|
||||
+ task.getOwner().getDescription().getFullName());
|
||||
task.getOwner().getLogger().log(
|
||||
Level.WARNING,
|
||||
- String.format(
|
||||
- "Task #%s for %s generated an exception",
|
||||
- task.getTaskId(),
|
||||
- task.getOwner().getDescription().getFullName()),
|
||||
+ msg,
|
||||
throwable);
|
||||
+ task.getOwner().getServer().getPluginManager().callEvent(
|
||||
+ new ServerExceptionEvent(new ServerSchedulerException(msg, throwable, task))
|
||||
+ );
|
||||
+ // Paper end
|
||||
}
|
||||
parsePending();
|
||||
} else {
|
||||
debugTail = debugTail.setNext(new CraftAsyncDebugger(currentTick + RECENT_TICKS, task.getOwner(), task.getTaskClass()));
|
||||
- executor.execute(task);
|
||||
+ executor.execute(new ServerSchedulerReportingWrapper(task)); // Paper
|
||||
// We don't need to parse pending
|
||||
// (async tasks must live with race-conditions if they attempt to cancel between these few lines of code)
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java b/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/ServerSchedulerReportingWrapper.java b/src/main/java/com/destroystokyo/paper/ServerSchedulerReportingWrapper.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/github/paperspigot/ServerSchedulerReportingWrapper.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/ServerSchedulerReportingWrapper.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package org.github.paperspigot;
|
||||
+package com.destroystokyo.paper;
|
||||
+
|
||||
+import com.google.common.base.Preconditions;
|
||||
+import org.apache.commons.lang.Validate;
|
||||
+import org.bukkit.craftbukkit.scheduler.CraftTask;
|
||||
+import org.github.paperspigot.event.ServerExceptionEvent;
|
||||
+import org.github.paperspigot.exception.ServerSchedulerException;
|
||||
+import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
||||
+import com.destroystokyo.paper.exception.ServerSchedulerException;
|
||||
+
|
||||
+/**
|
||||
+ * Reporting wrapper to catch exceptions not natively
|
||||
@@ -461,4 +48,327 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ return internalTask;
|
||||
+ }
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Queues;
|
||||
@@ -0,0 +0,0 @@ import org.apache.logging.log4j.Logger;
|
||||
|
||||
import com.google.common.collect.Lists; // CraftBukkit
|
||||
import org.bukkit.Bukkit; // CraftBukkit
|
||||
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
|
||||
public class Chunk {
|
||||
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
this.tileEntities.remove(blockposition);
|
||||
// Paper end
|
||||
} else {
|
||||
- System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ()
|
||||
- + " (" + org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getBlockData(blockposition).getBlock()) + ") where there was no entity tile!");
|
||||
- System.out.println("Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16));
|
||||
- new Exception().printStackTrace();
|
||||
+ // Paper start
|
||||
+ ServerInternalException e = new ServerInternalException(
|
||||
+ "Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + ","
|
||||
+ + tileentity.position.getY() + "," + tileentity.position.getZ()
|
||||
+ + " (" + CraftMagicNumbers.getMaterial(getBlockData(blockposition).getBlock()) + ") where there was no entity tile!\n" +
|
||||
+ "Chunk coordinates: " + (this.locX * 16) + "," + (this.locZ * 16));
|
||||
+ e.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(e);
|
||||
+ // Paper end
|
||||
// CraftBukkit end
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -0,0 +0,0 @@ import java.io.IOException;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
|
||||
return chunk;
|
||||
} catch (Exception exception) {
|
||||
- ChunkProviderServer.a.error("Couldn\'t load chunk", exception);
|
||||
+ // Paper start
|
||||
+ String msg = "Couldn\'t load chunk";
|
||||
+ ChunkProviderServer.a.error(msg, exception);
|
||||
+ ServerInternalException.reportInternalException(exception);
|
||||
+ // Paper end
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
try {
|
||||
this.chunkLoader.b(this.world, chunk);
|
||||
} catch (Exception exception) {
|
||||
- ChunkProviderServer.a.error("Couldn\'t save entities", exception);
|
||||
+ // Paper start
|
||||
+ String msg = "Couldn\'t save entities";
|
||||
+ ChunkProviderServer.a.error(msg, exception);
|
||||
+ ServerInternalException.reportInternalException(exception);
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
chunk.setLastSaved(this.world.getTime());
|
||||
this.chunkLoader.a(this.world, chunk);
|
||||
} catch (IOException ioexception) {
|
||||
- ChunkProviderServer.a.error("Couldn\'t save chunk", ioexception);
|
||||
+ // Paper start
|
||||
+ String msg = "Couldn\'t save chunk";
|
||||
+ ChunkProviderServer.a.error(msg, ioexception);
|
||||
+ ServerInternalException.reportInternalException(ioexception);
|
||||
} catch (ExceptionWorldConflict exceptionworldconflict) {
|
||||
- ChunkProviderServer.a.error("Couldn\'t save chunk; already in use by another instance of Minecraft?", exceptionworldconflict);
|
||||
+ String msg = "Couldn\'t save chunk; already in use by another instance of Minecraft?";
|
||||
+ ChunkProviderServer.a.error(msg, exceptionworldconflict);
|
||||
+ ServerInternalException.reportInternalException(exceptionworldconflict);
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
+++ b/src/main/java/net/minecraft/server/NameReferencingFileConverter.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Iterators;
|
||||
@@ -0,0 +0,0 @@ public class NameReferencingFileConverter {
|
||||
root = NBTCompressedStreamTools.a(new java.io.FileInputStream(file1));
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
if (root != null) {
|
||||
@@ -0,0 +0,0 @@ public class NameReferencingFileConverter {
|
||||
NBTCompressedStreamTools.a(root, new java.io.FileOutputStream(file2));
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
diff --git a/src/main/java/net/minecraft/server/PersistentCollection.java b/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PersistentCollection.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import java.io.DataInputStream;
|
||||
@@ -0,0 +0,0 @@ public class PersistentCollection {
|
||||
}
|
||||
} catch (Exception exception1) {
|
||||
exception1.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception1); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PersistentCollection {
|
||||
}
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/RegionFile.java b/src/main/java/net/minecraft/server/RegionFile.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/RegionFile.java
|
||||
+++ b/src/main/java/net/minecraft/server/RegionFile.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.collect.Lists;
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.BufferedOutputStream;
|
||||
@@ -0,0 +0,0 @@ public class RegionFile {
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class RegionFile {
|
||||
this.b(i, j, (int) (MinecraftServer.av() / 1000L));
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/RegionFileCache.java b/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
+++ b/src/main/java/net/minecraft/server/RegionFileCache.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.collect.Maps;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
@@ -0,0 +0,0 @@ public class RegionFileCache {
|
||||
}
|
||||
} catch (IOException ioexception) {
|
||||
ioexception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(ioexception); // Paper
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/SpawnerCreature.java b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
+++ b/src/main/java/net/minecraft/server/SpawnerCreature.java
|
||||
@@ -0,0 +0,0 @@ import java.util.List;
|
||||
import java.util.Random;
|
||||
|
||||
// CraftBukkit start
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import org.bukkit.craftbukkit.util.LongHash;
|
||||
import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
@@ -0,0 +0,0 @@ public final class SpawnerCreature {
|
||||
entityinsentient = (EntityInsentient) biomebase_biomemeta.b.getConstructor(new Class[] { World.class}).newInstance(new Object[] { worldserver});
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
return j1;
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public final class SpawnerCreature {
|
||||
entityinsentient = (EntityInsentient) biomebase_biomemeta.b.getConstructor(new Class[] { World.class}).newInstance(new Object[] { world});
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
continue;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/VillageSiege.java b/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
+++ b/src/main/java/net/minecraft/server/VillageSiege.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
+
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class VillageSiege {
|
||||
entityzombie.clearVillagerType();
|
||||
} catch (Exception exception) {
|
||||
exception.printStackTrace();
|
||||
+ ServerInternalException.reportInternalException(exception); // Paper
|
||||
return false;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
||||
+import com.destroystokyo.paper.exception.ServerInternalException;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Objects;
|
||||
import com.google.common.base.Predicate;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
} catch (Throwable throwable1) {
|
||||
// Paper start - Prevent tile entity and entity crashes
|
||||
entity.tickTimer.stopTiming();
|
||||
- System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ);
|
||||
+ String msg = "Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ;
|
||||
+ System.err.println(msg);
|
||||
throwable1.printStackTrace();
|
||||
+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable1)));
|
||||
entity.dead = true;
|
||||
continue;
|
||||
// Paper end
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
} catch (Throwable throwable2) {
|
||||
// Paper start - Prevent tile entity and entity crashes
|
||||
tileentity.tickTimer.stopTiming();
|
||||
- System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ());
|
||||
+ String msg = "TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ();
|
||||
+ System.err.println(msg);
|
||||
throwable2.printStackTrace();
|
||||
+ getServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable2)));
|
||||
tilesThisCycle--;
|
||||
this.tileEntityListTick.remove(tileTickPosition--);
|
||||
continue;
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
||||
@@ -0,0 +0,0 @@ import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.logging.Level;
|
||||
|
||||
+import com.destroystokyo.paper.ServerSchedulerReportingWrapper;
|
||||
+import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
||||
+import com.destroystokyo.paper.exception.ServerSchedulerException;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.plugin.IllegalPluginAccessException;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
@@ -0,0 +0,0 @@ public class CraftScheduler implements BukkitScheduler {
|
||||
try {
|
||||
task.run();
|
||||
} catch (final Throwable throwable) {
|
||||
+ // Paper start
|
||||
+ String msg = String.format(
|
||||
+ "Task #%s for %s generated an exception",
|
||||
+ task.getTaskId(),
|
||||
+ task.getOwner().getDescription().getFullName());
|
||||
task.getOwner().getLogger().log(
|
||||
Level.WARNING,
|
||||
- String.format(
|
||||
- "Task #%s for %s generated an exception",
|
||||
- task.getTaskId(),
|
||||
- task.getOwner().getDescription().getFullName()),
|
||||
+ msg,
|
||||
throwable);
|
||||
+ task.getOwner().getServer().getPluginManager().callEvent(
|
||||
+ new ServerExceptionEvent(new ServerSchedulerException(msg, throwable, task))
|
||||
+ );
|
||||
+ // Paper end
|
||||
}
|
||||
parsePending();
|
||||
} else {
|
||||
debugTail = debugTail.setNext(new CraftAsyncDebugger(currentTick + RECENT_TICKS, task.getOwner(), task.getTaskClass()));
|
||||
- executor.execute(task);
|
||||
+ executor.execute(new ServerSchedulerReportingWrapper(task)); // Paper
|
||||
// We don't need to parse pending
|
||||
// (async tasks must live with race-conditions if they attempt to cancel between these few lines of code)
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Wed, 1 Jul 2015 00:59:06 -0700
|
||||
Date: Wed, 2 Mar 2016 14:35:27 -0600
|
||||
Subject: [PATCH] Add player view distance API
|
||||
|
||||
|
||||
@@ -9,18 +9,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
// CraftBukkit end
|
||||
// Spigot start
|
||||
public boolean collidesWithEntities = true;
|
||||
+ public int viewDistance; // PaperSpigot - Player view distance API
|
||||
public boolean f;
|
||||
public int ping;
|
||||
public boolean viewingCredits;
|
||||
+ public int viewDistance; // Paper - Player view distance API
|
||||
|
||||
@Override
|
||||
public boolean ad()
|
||||
// CraftBukkit start
|
||||
public String displayName;
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
|
||||
public EntityPlayer(MinecraftServer minecraftserver, WorldServer worldserver, GameProfile gameprofile, PlayerInteractManager playerinteractmanager) {
|
||||
super(worldserver, gameprofile);
|
||||
+ this.viewDistance = world.spigotConfig.viewDistance; // PaperSpigot - Player view distance API
|
||||
+ this.viewDistance = world.spigotConfig.viewDistance; // Paper - Player view distance API
|
||||
playerinteractmanager.player = this;
|
||||
this.playerInteractManager = playerinteractmanager;
|
||||
BlockPosition blockposition = worldserver.getSpawn();
|
||||
@@ -28,55 +28,34 @@ diff --git a/src/main/java/net/minecraft/server/PlayerChunkMap.java b/src/main/j
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerChunkMap.java
|
||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
|
||||
// CraftBukkit start - Load nearby chunks first
|
||||
List<ChunkCoordIntPair> chunkList = new LinkedList<ChunkCoordIntPair>();
|
||||
|
||||
- for (int k = i - this.g; k <= i + this.g; ++k) {
|
||||
- for (int l = j - this.g; l <= j + this.g; ++l) {
|
||||
+ // PaperSpigot start - Player view distance API
|
||||
+ for (int k = i - entityplayer.viewDistance; k <= i + entityplayer.viewDistance; ++k) {
|
||||
+ for (int l = j - entityplayer.viewDistance; l <= j + entityplayer.viewDistance; ++l) {
|
||||
+ // PaperSpigot end
|
||||
chunkList.add(new ChunkCoordIntPair(k, l));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
|
||||
public void b(EntityPlayer entityplayer) {
|
||||
ArrayList arraylist = Lists.newArrayList(entityplayer.chunkCoordIntPairQueue);
|
||||
int i = 0;
|
||||
- int j = this.g;
|
||||
+ int j = entityplayer.viewDistance; // PaperSpigot - Player view distance API
|
||||
int k = (int) entityplayer.locX >> 4;
|
||||
int l = (int) entityplayer.locZ >> 4;
|
||||
int i1 = 0;
|
||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
|
||||
int i = (int) entityplayer.d >> 4;
|
||||
int j = (int) entityplayer.e >> 4;
|
||||
|
||||
- for (int k = i - this.g; k <= i + this.g; ++k) {
|
||||
- for (int l = j - this.g; l <= j + this.g; ++l) {
|
||||
+ // PaperSpigot start - Player view distance API
|
||||
- for (int k = i - this.j; k <= i + this.j; ++k) {
|
||||
- for (int l = j - this.j; l <= j + this.j; ++l) {
|
||||
+ // Paper start - Player view distance API
|
||||
+ for (int k = i - entityplayer.viewDistance; k <= i + entityplayer.viewDistance; ++k) {
|
||||
+ for (int l = j - entityplayer.viewDistance; l <= j + entityplayer.viewDistance; ++l) {
|
||||
+ // PaperSpigot end
|
||||
PlayerChunkMap.PlayerChunk playerchunkmap_playerchunk = this.a(k, l, false);
|
||||
+ // Paper end
|
||||
PlayerChunk playerchunk = this.b(k, l);
|
||||
|
||||
if (playerchunkmap_playerchunk != null) {
|
||||
if (playerchunk != null) {
|
||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
|
||||
if (d2 >= 64.0D) {
|
||||
int k = (int) entityplayer.d >> 4;
|
||||
int l = (int) entityplayer.e >> 4;
|
||||
- int i1 = this.g;
|
||||
+ int i1 = entityplayer.viewDistance; // PaperSpigot - Player view distance API
|
||||
- int i1 = this.j;
|
||||
+ int i1 = entityplayer.viewDistance; // Paper - Player view distance API
|
||||
int j1 = i - k;
|
||||
int k1 = j - l;
|
||||
List<ChunkCoordIntPair> chunksToLoad = new LinkedList<ChunkCoordIntPair>(); // CraftBukkit
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PlayerChunkMap {
|
||||
}
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Player view distance API
|
||||
// CraftBukkit end
|
||||
+
|
||||
+ // Paper start - Player view distance API
|
||||
+ public void updateViewDistance(EntityPlayer player, int viewDistance) {
|
||||
+ viewDistance = MathHelper.clamp(viewDistance, 3, 32);
|
||||
+ if (viewDistance != player.viewDistance) {
|
||||
@@ -86,9 +65,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ if (viewDistance - player.viewDistance > 0) {
|
||||
+ for (int x = cx - viewDistance; x <= cx + viewDistance; ++x) {
|
||||
+ for (int z = cz - viewDistance; z <= cz + viewDistance; ++z) {
|
||||
+ PlayerChunkMap.PlayerChunk playerchunkmap_playerchunk = this.a(x, z, true);
|
||||
+ PlayerChunk playerchunkmap_playerchunk = this.c(x, z);
|
||||
+
|
||||
+ if (!playerchunkmap_playerchunk.b.contains(player)) {
|
||||
+ if (!playerchunkmap_playerchunk.c.contains(player)) {
|
||||
+ playerchunkmap_playerchunk.a(player);
|
||||
+ }
|
||||
+ }
|
||||
@@ -97,7 +76,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ for (int x = cx - player.viewDistance; x <= cx + player.viewDistance; ++x) {
|
||||
+ for (int z = cz - player.viewDistance; z <= cz + player.viewDistance; ++z) {
|
||||
+ if (!this.a(x, z, cx, cz, viewDistance)) {
|
||||
+ this.a(x, z, true).b(player);
|
||||
+ this.c(x, z).b(player);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
@@ -106,32 +85,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ player.viewDistance = viewDistance;
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
public static int getFurthestViewableBlock(int i) {
|
||||
return i * 16 - 16;
|
||||
}
|
||||
+ // Paper end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
getHandle().affectsSpawning = affects;
|
||||
}
|
||||
// PaperSpigot end
|
||||
public void setAffectsSpawning(boolean affects) {
|
||||
getHandle().affectsSpawning = affects;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Player view distance API
|
||||
+ @Override
|
||||
+ public int getViewDistance() {
|
||||
+ return getHandle().viewDistance;
|
||||
+ }
|
||||
+ @Override
|
||||
+ public int getViewDistance() {
|
||||
+ return getHandle().viewDistance;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setViewDistance(int viewDistance) {
|
||||
+ ((WorldServer) getHandle().world).getPlayerChunkMap().updateViewDistance(getHandle(), viewDistance);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
};
|
||||
+ @Override
|
||||
+ public void setViewDistance(int viewDistance) {
|
||||
+ ((WorldServer) getHandle().world).getPlayerChunkMap().updateViewDistance(getHandle(), viewDistance);
|
||||
+ }
|
||||
// Paper end
|
||||
|
||||
public Player.Spigot spigot()
|
||||
// Spigot start
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Hirschfeld <joe@ibj.io>
|
||||
Date: Mon, 22 Feb 2016 16:05:32 -0500
|
||||
Date: Thu, 3 Mar 2016 02:48:12 -0600
|
||||
Subject: [PATCH] Add velocity warnings
|
||||
|
||||
|
||||
@@ -8,43 +8,17 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||
import org.bukkit.permissions.ServerOperator;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.util.Vector;
|
||||
+import org.github.paperspigot.PaperSpigotConfig;
|
||||
|
||||
public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
private static final PermissibleBase perm = new PermissibleBase(new ServerOperator() {
|
||||
@@ -0,0 +0,0 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
||||
}
|
||||
|
||||
public void setVelocity(Vector vel) {
|
||||
+ // Paper start - warn server owners when plugins try to set super high velocities
|
||||
+ if (PaperSpigotConfig.warnForExcessiveVelocity) {
|
||||
+ if(vel.getX() > 4 || vel.getX() < -4 || vel.getY() > 4 || vel.getY() < -4 || vel.getZ() > 4 || vel.getZ() < -4) {
|
||||
+ getServer().getLogger().warning("Excessive velocity set detected: tried to set velocity of entity #"+getEntityId()+" to ("+vel.getX()+","+vel.getY()+","+vel.getZ()+").");
|
||||
+ Thread.dumpStack();
|
||||
+ }
|
||||
+ // Paper start - Warn server owners when plugins try to set super high velocities
|
||||
+ if (vel.getX() > 4 || vel.getX() < -4 || vel.getY() > 4 || vel.getY() < -4 || vel.getZ() > 4 || vel.getZ() < -4) {
|
||||
+ getServer().getLogger().warning("Excessive velocity set detected: tried to set velocity of entity #"+getEntityId()+" to ("+vel.getX()+","+vel.getY()+","+vel.getZ()+").");
|
||||
+ Thread.dumpStack();
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
entity.motX = vel.getX();
|
||||
entity.motY = vel.getY();
|
||||
entity.motZ = vel.getZ();
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public static boolean warnForExcessiveVelocity;
|
||||
+ private static void excessiveVelocityWarning()
|
||||
+ {
|
||||
+ warnForExcessiveVelocity = getBoolean("warnWhenSettingExcessiveVelocity", true);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,37 +1,35 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: vemacs <d@nkmem.es>
|
||||
Date: Fri, 29 Jan 2016 02:28:17 -0600
|
||||
Date: Thu, 3 Mar 2016 01:19:22 -0600
|
||||
Subject: [PATCH] All chunks are slime spawn chunks toggle
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void disableChestCatDetection() {
|
||||
disableChestCatDetection = getBoolean("game-mechanics.disable-chest-cat-detection", false);
|
||||
}
|
||||
+
|
||||
+ public boolean allChunksAreSlimeChunks;
|
||||
+ private void allChunksAreSlimeChunks() {
|
||||
+ allChunksAreSlimeChunks = getBoolean("all-chunks-are-slime-chunks", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntitySlime.java b/src/main/java/net/minecraft/server/EntitySlime.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntitySlime.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntitySlime.java
|
||||
@@ -0,0 +0,0 @@ public class EntitySlime extends EntityInsentient implements IMonster {
|
||||
return super.bR();
|
||||
return super.cF();
|
||||
}
|
||||
|
||||
- if (this.random.nextInt(10) == 0 && chunk.a(987234911L).nextInt(10) == 0 && this.locY < 40.0D) {
|
||||
+ // PaperSpigot - Toggle to make all chunks spawn chunks
|
||||
+ boolean isSlimeChunk = world.paperSpigotConfig.allChunksAreSlimeChunks || chunk.a(987234911L).nextInt(10) == 0;
|
||||
+ boolean isSlimeChunk = world.paperConfig.allChunksAreSlimeChunks || chunk.a(987234911L).nextInt(10) == 0;
|
||||
+ if (this.random.nextInt(10) == 0 && isSlimeChunk && this.locY < 40.0D) {
|
||||
return super.bR();
|
||||
return super.cF();
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
useHopperCheck = getBoolean( "use-hopper-check", false );
|
||||
}
|
||||
+
|
||||
+ public boolean allChunksAreSlimeChunks;
|
||||
+ private void allChunksAreSlimeChunks()
|
||||
+ {
|
||||
+ allChunksAreSlimeChunks = getBoolean( "all-chunks-are-slime-chunks", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,35 +1,34 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Dmck2b <itallhappenedverysuddenly@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 21:50:40 -0600
|
||||
Date: Tue, 1 Mar 2016 13:59:50 -0600
|
||||
Subject: [PATCH] Allow for toggling of spawn chunks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
});
|
||||
this.getServer().addWorld(this.world);
|
||||
// CraftBukkit end
|
||||
+ this.keepSpawnInMemory = this.paperSpigotConfig.keepSpawnInMemory; // PaperSpigot
|
||||
timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
||||
this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
|
||||
this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime);
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
softDespawnDistance = softDespawnDistance*softDespawnDistance;
|
||||
hardDespawnDistance = hardDespawnDistance*hardDespawnDistance;
|
||||
}
|
||||
+
|
||||
+ public boolean keepSpawnInMemory;
|
||||
+ private void keepSpawnInMemory()
|
||||
+ {
|
||||
+ keepSpawnInMemory = getBoolean( "keep-spawn-loaded", true );
|
||||
+ log( "Keep spawn chunk loaded: " + keepSpawnInMemory );
|
||||
+ private void keepSpawnInMemory() {
|
||||
+ keepSpawnInMemory = getBoolean("keep-spawn-loaded", true);
|
||||
+ log("Keep spawn chunk loaded: " + keepSpawnInMemory);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
this.isClientSide = flag;
|
||||
this.N = worldprovider.getWorldBorder();
|
||||
this.getServer().addWorld(this.world); // CraftBukkit
|
||||
+ this.keepSpawnInMemory = this.paperConfig.keepSpawnInMemory; // Paper
|
||||
timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
||||
this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
|
||||
this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime);
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 21:03:06 -0600
|
||||
Date: Tue, 1 Mar 2016 13:24:16 -0600
|
||||
Subject: [PATCH] Allow nerfed mobs to jump
|
||||
|
||||
|
||||
@@ -9,10 +9,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityInsentient.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityInsentient extends EntityLiving {
|
||||
private boolean bo;
|
||||
private Entity bp;
|
||||
private NBTTagCompound bq;
|
||||
+ public PathfinderGoalFloat goalFloat; // PaperSpigot
|
||||
private boolean bC;
|
||||
private Entity leashHolder;
|
||||
private NBTTagCompound bE;
|
||||
+ public PathfinderGoalFloat goalFloat; // Paper
|
||||
|
||||
public EntityInsentient(World world) {
|
||||
super(world);
|
||||
@@ -20,12 +20,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
// Spigot Start
|
||||
if ( this.fromMobSpawner )
|
||||
{
|
||||
+ // PaperSpigot start - Allow nerfed mobs to jump
|
||||
+ // Paper start - Allow nerfed mobs to jump and float
|
||||
+ if (goalFloat != null) {
|
||||
+ if (goalFloat.a()) goalFloat.e();
|
||||
+ this.g.b();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
return;
|
||||
}
|
||||
// Spigot End
|
||||
@@ -37,8 +37,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public PathfinderGoalFloat(EntityInsentient entityinsentient) {
|
||||
this.a = entityinsentient;
|
||||
+ entityinsentient.goalFloat = this; // PaperSpigot
|
||||
+ entityinsentient.goalFloat = this; // Paper
|
||||
this.a(4);
|
||||
((Navigation) entityinsentient.getNavigation()).d(true);
|
||||
((Navigation) entityinsentient.getNavigation()).c(true);
|
||||
}
|
||||
--
|
||||
@@ -1,66 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Sun, 30 Nov 2014 18:58:07 -0600
|
||||
Subject: [PATCH] Allow specified ItemStacks to retain their invalid data
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.world.StructureGrowEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
+import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot
|
||||
+
|
||||
public final class ItemStack {
|
||||
|
||||
public static final DecimalFormat a = new DecimalFormat("#.###");
|
||||
@@ -0,0 +0,0 @@ public final class ItemStack {
|
||||
}
|
||||
|
||||
// Is this a block?
|
||||
- if (CraftMagicNumbers.getBlock(CraftMagicNumbers.getId(this.getItem())) != Blocks.AIR) {
|
||||
+ // PaperSpigot start - Allow specific blocks to retain their data values
|
||||
+ int id = CraftMagicNumbers.getId(this.getItem());
|
||||
+ if (CraftMagicNumbers.getBlock(id) != Blocks.AIR) {
|
||||
// If vanilla doesn't use data on it don't allow any
|
||||
- if (!(this.usesData() || this.getItem().usesDurability())) {
|
||||
+ if ((PaperSpigotConfig.dataValueAllowedItems == null || !PaperSpigotConfig.dataValueAllowedItems.contains(id)) &&
|
||||
+ (!(this.usesData() || this.getItem().usesDurability()))) {
|
||||
+ // PaperSpigot end
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ import java.io.IOException;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
-import java.util.HashMap;
|
||||
-import java.util.List;
|
||||
-import java.util.Map;
|
||||
+import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
+import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
strengthEffectModifier = getDouble( "effect-modifiers.strength", 1.3D );
|
||||
weaknessEffectModifier = getDouble( "effect-modifiers.weakness", -0.5D );
|
||||
}
|
||||
+
|
||||
+ public static Set<Integer> dataValueAllowedItems;
|
||||
+ private static void dataValueAllowedItems()
|
||||
+ {
|
||||
+ dataValueAllowedItems = new HashSet<Integer>( getList( "data-value-allowed-items", Collections.emptyList() ) );
|
||||
+ Bukkit.getLogger().info( "Data value allowed items: " + StringUtils.join(dataValueAllowedItems, ", ") );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,39 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 19:57:50 -0600
|
||||
Subject: [PATCH] Allow undead horse types to be leashed
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHorse.java b/src/main/java/net/minecraft/server/EntityHorse.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHorse.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHorse.java
|
||||
@@ -0,0 +0,0 @@ public class EntityHorse extends EntityAnimal implements IInventoryListener {
|
||||
}
|
||||
|
||||
public boolean cb() {
|
||||
+ // PaperSpigot start - Configurable undead horse leashing
|
||||
+ if (this.world.paperSpigotConfig.allowUndeadHorseLeashing) {
|
||||
+ return super.cb();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
return !this.cR() && super.cb();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
config.addDefault( "world-settings.default." + path, def );
|
||||
return config.getString( "world-settings." + worldName + "." + path, config.getString( "world-settings.default." + path ) );
|
||||
}
|
||||
+
|
||||
+ public boolean allowUndeadHorseLeashing;
|
||||
+ private void allowUndeadHorseLeashing()
|
||||
+ {
|
||||
+ allowUndeadHorseLeashing = getBoolean( "allow-undead-horse-leashing", false );
|
||||
+ log( "Allow undead horse types to be leashed: " + allowUndeadHorseLeashing );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Fri, 10 Apr 2015 18:07:36 -0500
|
||||
Date: Wed, 2 Mar 2016 00:32:25 -0600
|
||||
Subject: [PATCH] Always tick falling blocks
|
||||
|
||||
|
||||
@@ -8,19 +8,47 @@ diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -0,0 +0,0 @@ import net.minecraft.server.EntityCreature;
|
||||
import net.minecraft.server.EntityCreeper;
|
||||
import net.minecraft.server.EntityEnderCrystal;
|
||||
import net.minecraft.server.EntityEnderDragon;
|
||||
+import net.minecraft.server.EntityFallingBlock;
|
||||
import net.minecraft.server.EntityFireball;
|
||||
import net.minecraft.server.EntityFireworks;
|
||||
import net.minecraft.server.EntityHuman;
|
||||
@@ -0,0 +0,0 @@ package org.spigotmc;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
-import net.minecraft.server.AxisAlignedBB;
|
||||
-import net.minecraft.server.Chunk;
|
||||
-import net.minecraft.server.Entity;
|
||||
-import net.minecraft.server.EntityAmbient;
|
||||
-import net.minecraft.server.EntityAnimal;
|
||||
-import net.minecraft.server.EntityArrow;
|
||||
-import net.minecraft.server.EntityComplexPart;
|
||||
-import net.minecraft.server.EntityCreature;
|
||||
-import net.minecraft.server.EntityCreeper;
|
||||
-import net.minecraft.server.EntityEnderCrystal;
|
||||
-import net.minecraft.server.EntityEnderDragon;
|
||||
-import net.minecraft.server.EntityFireball;
|
||||
-import net.minecraft.server.EntityFireworks;
|
||||
-import net.minecraft.server.EntityHuman;
|
||||
-import net.minecraft.server.EntityLiving;
|
||||
-import net.minecraft.server.EntityMonster;
|
||||
-import net.minecraft.server.EntityProjectile;
|
||||
-import net.minecraft.server.EntitySheep;
|
||||
-import net.minecraft.server.EntitySlice;
|
||||
-import net.minecraft.server.EntitySlime;
|
||||
-import net.minecraft.server.EntityTNTPrimed;
|
||||
-import net.minecraft.server.EntityVillager;
|
||||
-import net.minecraft.server.EntityWeather;
|
||||
-import net.minecraft.server.EntityWither;
|
||||
-import net.minecraft.server.MathHelper;
|
||||
-import net.minecraft.server.MinecraftServer;
|
||||
-import net.minecraft.server.World;
|
||||
+
|
||||
+import net.minecraft.server.*;
|
||||
import org.bukkit.craftbukkit.SpigotTimings;
|
||||
|
||||
public class ActivationRange
|
||||
@@ -0,0 +0,0 @@ public class ActivationRange
|
||||
|| entity instanceof EntityFireball
|
||||
|| entity instanceof EntityWeather
|
||||
|| entity instanceof EntityTNTPrimed
|
||||
+ || entity instanceof EntityFallingBlock // PaperSpigot - Always tick falling blocks
|
||||
+ || entity instanceof EntityFallingBlock // Paper - Always tick falling blocks
|
||||
|| entity instanceof EntityEnderCrystal
|
||||
|| entity instanceof EntityFireworks )
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: CullanP <cullanpage@gmail.com>
|
||||
Date: Thu, 11 Feb 2016 21:43:17 -0700
|
||||
Date: Thu, 3 Mar 2016 02:13:38 -0600
|
||||
Subject: [PATCH] Avoid hopper searches if there are no items
|
||||
|
||||
Hoppers searching for items and minecarts is the most expensive part of hopper ticking.
|
||||
@@ -18,28 +18,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
private boolean k;
|
||||
public final Map<BlockPosition, TileEntity> tileEntities;
|
||||
public final List<Entity>[] entitySlices; // Spigot
|
||||
+ // PaperSpigot start - track the number of minecarts and items
|
||||
// Paper start - Asynchronous light updates
|
||||
public AtomicInteger pendingLightUpdates = new AtomicInteger();
|
||||
public long lightUpdateTime;
|
||||
+ // Track the number of minecarts and items
|
||||
+ // Keep this synced with entitySlices.add() and entitySlices.remove()
|
||||
+ private final int[] itemCounts = new int[16];
|
||||
+ private final int[] inventoryEntityCounts = new int[16];
|
||||
+ // PaperSpigot end
|
||||
private boolean done;
|
||||
private boolean lit;
|
||||
private boolean p;
|
||||
// Paper end
|
||||
|
||||
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
entity.af = k;
|
||||
entity.ag = this.locZ;
|
||||
entity.ac = k;
|
||||
entity.ad = this.locZ;
|
||||
this.entitySlices[k].add(entity);
|
||||
+ // PaperSpigot start - update counts
|
||||
+ // Paper start - update count
|
||||
+ if (entity instanceof EntityItem) {
|
||||
+ itemCounts[k]++;
|
||||
+ } else if (entity instanceof IInventory) {
|
||||
+ inventoryEntityCounts[k]++;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
// Spigot start - increment creature type count
|
||||
// Keep this synced up with World.a(Class)
|
||||
if (entity instanceof EntityInsentient) {
|
||||
@@ -47,30 +46,29 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
this.entitySlices[i].remove(entity);
|
||||
+ // PaperSpigot start - update counts
|
||||
+ // Paper start - update counts
|
||||
+ if (entity instanceof EntityItem) {
|
||||
+ itemCounts[i]--;
|
||||
+ } else if (entity instanceof IInventory) {
|
||||
+ inventoryEntityCounts[i]--;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
// Spigot start - decrement creature type count
|
||||
// Keep this synced up with World.a(Class)
|
||||
if (entity instanceof EntityInsentient) {
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
for (int k = i; k <= j; ++k) {
|
||||
if (!this.entitySlices[k].isEmpty()) {
|
||||
Iterator iterator = this.entitySlices[k].iterator();
|
||||
-
|
||||
+ // PaperSpigot start - Don't search for inventories if we have none, and that is all we want
|
||||
|
||||
+ // Paper start - Don't search for inventories if we have none, and that is all we want
|
||||
+ /*
|
||||
+ * We check if they want inventories by seeing if it is the static `IEntitySelector.c`
|
||||
+ *
|
||||
+ * Make sure the inventory selector stays in sync.
|
||||
+ * It should be the one that checks `var1 instanceof IInventory && var1.isAlive()`
|
||||
+ */
|
||||
+ * We check if they want inventories by seeing if it is the static `IEntitySelector.c`
|
||||
+ *
|
||||
+ * Make sure the inventory selector stays in sync.
|
||||
+ * It should be the one that checks `var1 instanceof IInventory && var1.isAlive()`
|
||||
+ */
|
||||
+ if (predicate == IEntitySelector.c && inventoryEntityCounts[k] <= 0) continue;
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
while (iterator.hasNext()) {
|
||||
Entity entity1 = (Entity) iterator.next();
|
||||
|
||||
@@ -78,7 +76,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
i = MathHelper.clamp(i, 0, this.entitySlices.length - 1);
|
||||
j = MathHelper.clamp(j, 0, this.entitySlices.length - 1);
|
||||
|
||||
+ // PaperSpigot start
|
||||
+ // Paper start
|
||||
+ int[] counts;
|
||||
+ if (ItemStack.class.isAssignableFrom(oclass)) {
|
||||
+ counts = itemCounts;
|
||||
@@ -87,9 +85,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ } else {
|
||||
+ counts = null;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
for (int k = i; k <= j; ++k) {
|
||||
+ if (counts != null && counts[k] <= 0) continue; // PaperSpigot - Don't check a chunk if it doesn't have the type we are looking for
|
||||
+ if (counts != null && counts[k] <= 0) continue; // Paper - Don't check a chunk if it doesn't have the type we are looking for
|
||||
Iterator iterator = this.entitySlices[k].iterator(); // Spigot
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Riley Park <rileysebastianpark@gmail.com>
|
||||
Date: Tue, 16 Feb 2016 13:36:04 -0800
|
||||
Date: Thu, 3 Mar 2016 02:18:39 -0600
|
||||
Subject: [PATCH] Be a bit more informative in maxHealth exception
|
||||
|
||||
|
||||
@@ -13,12 +13,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public void setHealth(double health) {
|
||||
if ((health < 0) || (health > getMaxHealth())) {
|
||||
- throw new IllegalArgumentException("Health must be between 0 and " + getMaxHealth());
|
||||
+ // Paper - Be more informative
|
||||
+ throw new IllegalArgumentException("Health must be between 0 and " + getMaxHealth() + ", but was " + health
|
||||
+ + ". (attribute base value: " + this.getHandle().getAttributeInstance(GenericAttributes.maxHealth).b()
|
||||
+ + (this instanceof CraftPlayer ? ", player: " + this.getName() + ')' : ')'));
|
||||
+ + ". (attribute base value: " + this.getHandle().getAttributeInstance(GenericAttributes.maxHealth).b()
|
||||
+ + (this instanceof CraftPlayer ? ", player: " + this.getName() + ')' : ')'));
|
||||
}
|
||||
|
||||
if (entity instanceof EntityPlayer && health == 0) {
|
||||
--
|
||||
2.7.0.rc0.20.g4b9ab0e
|
||||
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 15 Nov 2015 19:36:37 -0600
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Wed, 2 Mar 2016 23:46:57 -0600
|
||||
Subject: [PATCH] Bump thread count for chunk loading
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public class ChunkIOExecutor {
|
||||
- static final int BASE_THREADS = 1;
|
||||
+ static final int BASE_THREADS = 2; // PaperSpigot - Bumped value
|
||||
+ static final int BASE_THREADS = 2; // Paper - Bumped value
|
||||
static final int PLAYERS_PER_THREAD = 50;
|
||||
|
||||
private static final AsynchronousExecutor<QueuedChunk, Chunk, Runnable, RuntimeException> instance = new AsynchronousExecutor<QueuedChunk, Chunk, Runnable, RuntimeException>(new ChunkIOProvider(), BASE_THREADS);
|
||||
|
||||
@@ -1,63 +1,63 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Hirschfeld <joe@ibj.io>
|
||||
Date: Sat, 20 Feb 2016 00:42:18 -0500
|
||||
Date: Thu, 3 Mar 2016 02:39:54 -0600
|
||||
Subject: [PATCH] Change implementation of (tile)entity removal list
|
||||
|
||||
As it stood, the complexity of a ArrayList.removeAll(ArrayList) is
|
||||
much greater as the argument array list grew than .removeAll(HashSet).
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ package net.minecraft.server;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.generator.ChunkGenerator;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.HashMap;
|
||||
+import java.util.Set;
|
||||
+import com.google.common.collect.Sets;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
// Paper end
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
};
|
||||
// Spigot end
|
||||
- protected final List<Entity> g = Lists.newArrayList();
|
||||
+ protected final Set<Entity> g = Sets.newHashSet(); // Paper
|
||||
//public final List<TileEntity> h = Lists.newArrayList(); // PaperSpigot - Remove unused list
|
||||
public final List<TileEntity> tileEntityList = Lists.newArrayList();
|
||||
- protected final List<Entity> f = Lists.newArrayList();
|
||||
+ protected final Set<Entity> f = Sets.newHashSet(); // Paper
|
||||
//public final List<TileEntity> tileEntityList = Lists.newArrayList(); // Paper - Remove unused list
|
||||
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
|
||||
private final List<TileEntity> b = Lists.newArrayList();
|
||||
- private final List<TileEntity> c = Lists.newArrayList();
|
||||
+ private final Set<TileEntity> c = Sets.newHashSet(); // Paper
|
||||
- private final List<TileEntity> tileEntityListUnload = Lists.newArrayList();
|
||||
+ private final Set<TileEntity> tileEntityListUnload = Sets.newHashSet(); // Paper
|
||||
public final List<EntityHuman> players = Lists.newArrayList();
|
||||
public final List<Entity> k = Lists.newArrayList();
|
||||
public final List<Entity> j = Lists.newArrayList();
|
||||
protected final IntHashMap<Entity> entitiesById = new IntHashMap();
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
int j;
|
||||
int k;
|
||||
|
||||
- for (i = 0; i < this.g.size(); ++i) {
|
||||
- entity = (Entity) this.g.get(i);
|
||||
- j = entity.ae;
|
||||
- k = entity.ag;
|
||||
- if (entity.ad && this.isChunkLoaded(j, k, true)) {
|
||||
- this.getChunkAt(j, k).b(entity);
|
||||
int j;
|
||||
|
||||
- for (i = 0; i < this.f.size(); ++i) {
|
||||
- entity = (Entity) this.f.get(i);
|
||||
- int k = entity.ab;
|
||||
+ // Paper start - Set based removal lists
|
||||
+ for (Entity e : this.g) {
|
||||
+ j = e.ae;
|
||||
+ k = e.ag;
|
||||
+ if (e.ad && this.isChunkLoaded(j, k, true)) {
|
||||
+ this.getChunkAt(j, k).b(e);
|
||||
+ for (Entity e : this.f) {
|
||||
+ j = e.getChunkX();
|
||||
+ int k = e.getChunkZ();
|
||||
|
||||
- j = entity.ad;
|
||||
- if (entity.aa && this.isChunkLoaded(k, j, true)) {
|
||||
- this.getChunkAt(k, j).b(entity);
|
||||
+ if (e.aa && this.isChunkLoaded(k, j, true)) {
|
||||
+ this.getChunkAt(k, j).b(e);
|
||||
}
|
||||
}
|
||||
|
||||
- for (i = 0; i < this.g.size(); ++i) {
|
||||
- this.b((Entity) this.g.get(i));
|
||||
+ for (Entity e : this.g) {
|
||||
+ this.b(e);
|
||||
- for (i = 0; i < this.f.size(); ++i) {
|
||||
- this.c((Entity) this.f.get(i));
|
||||
+ for (Entity e : this.f) {
|
||||
+ this.c(e);
|
||||
}
|
||||
+ // Paper end
|
||||
|
||||
this.g.clear();
|
||||
timings.entityRemoval.stopTiming(); // Spigot
|
||||
this.f.clear();
|
||||
this.l();
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Thu, 5 Mar 2015 15:30:06 -0600
|
||||
Date: Wed, 2 Mar 2016 00:03:55 -0600
|
||||
Subject: [PATCH] Check online mode before converting and renaming player data
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
// Spigot Start
|
||||
boolean usingWrongFile = false;
|
||||
- if ( !file.exists() )
|
||||
+ if ( org.bukkit.Bukkit.getOnlineMode() && !file.exists() ) // PaperSpigot - Check online mode first
|
||||
+ if ( org.bukkit.Bukkit.getOnlineMode() && !file.exists() ) // Paper - Check online mode first
|
||||
{
|
||||
file = new File( this.playerDir, UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + entityhuman.getName() ).getBytes( "UTF-8" ) ).toString() + ".dat");
|
||||
if ( file.exists() )
|
||||
|
||||
@@ -1,138 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Wed, 15 Jul 2015 02:41:12 -0700
|
||||
Subject: [PATCH] ChunkMap caching
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
public long lightUpdateTime;
|
||||
// PaperSpigot end
|
||||
|
||||
+ // PaperSpigot start - ChunkMap caching
|
||||
+ private PacketPlayOutMapChunk.ChunkMap chunkMap;
|
||||
+ private int emptySectionBits;
|
||||
+
|
||||
+ public PacketPlayOutMapChunk.ChunkMap getChunkMap(boolean groundUpContinuous, int primaryBitMask) {
|
||||
+ if (!world.paperSpigotConfig.cacheChunkMaps || !groundUpContinuous || (primaryBitMask != 0 && primaryBitMask != '\uffff')) {
|
||||
+ return PacketPlayOutMapChunk.a(this, groundUpContinuous, !world.worldProvider.o(), primaryBitMask);
|
||||
+ }
|
||||
+
|
||||
+ if (primaryBitMask == 0) {
|
||||
+ PacketPlayOutMapChunk.ChunkMap chunkMap = new PacketPlayOutMapChunk.ChunkMap();
|
||||
+ chunkMap.a = new byte[0];
|
||||
+ return chunkMap;
|
||||
+ }
|
||||
+
|
||||
+ boolean isDirty = false;
|
||||
+ for (int i = 0; i < sections.length; ++i) {
|
||||
+ ChunkSection section = sections[i];
|
||||
+ if (section == null) {
|
||||
+ if ((emptySectionBits & (1 << i)) == 0) {
|
||||
+ isDirty = true;
|
||||
+ emptySectionBits |= (1 << i);
|
||||
+ }
|
||||
+ } else {
|
||||
+ if ((emptySectionBits & (1 << i)) == 1) {
|
||||
+ isDirty = true;
|
||||
+ emptySectionBits &= ~(1 << i);
|
||||
+ section.isDirty = false;
|
||||
+ } else if (section.isDirty) {
|
||||
+ isDirty = true;
|
||||
+ section.isDirty = false;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (isDirty || chunkMap == null) {
|
||||
+ chunkMap = PacketPlayOutMapChunk.a(this, true, !world.worldProvider.o(), '\uffff');
|
||||
+ }
|
||||
+
|
||||
+ return chunkMap;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
|
||||
private int neighbors = 0x1 << 12;
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkSection.java b/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkSection.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkSection {
|
||||
private char[] blockIds;
|
||||
private NibbleArray emittedLight;
|
||||
private NibbleArray skyLight;
|
||||
+ boolean isDirty; // PaperSpigot
|
||||
|
||||
public ChunkSection(int i, boolean flag) {
|
||||
this.yPos = i;
|
||||
@@ -0,0 +0,0 @@ public class ChunkSection {
|
||||
}
|
||||
|
||||
this.blockIds[j << 8 | k << 4 | i] = (char) Block.d.b(iblockdata);
|
||||
+ isDirty = true; // PaperSpigot
|
||||
}
|
||||
|
||||
public Block b(int i, int j, int k) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkSection {
|
||||
|
||||
public void a(int i, int j, int k, int l) {
|
||||
this.skyLight.a(i, j, k, l);
|
||||
+ isDirty = true; // PaperSpigot
|
||||
}
|
||||
|
||||
public int d(int i, int j, int k) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkSection {
|
||||
|
||||
public void b(int i, int j, int k, int l) {
|
||||
this.emittedLight.a(i, j, k, l);
|
||||
+ isDirty = true; // PaperSpigot
|
||||
}
|
||||
|
||||
public int e(int i, int j, int k) {
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunk.java
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutMapChunk implements Packet<PacketListenerPlayOut> {
|
||||
this.a = chunk.locX;
|
||||
this.b = chunk.locZ;
|
||||
this.d = flag;
|
||||
- this.c = a(chunk, flag, !chunk.getWorld().worldProvider.o(), i);
|
||||
+ this.c = chunk.getChunkMap(flag, i); // PaperSpigot
|
||||
chunk.world.spigotConfig.antiXrayInstance.obfuscateSync(chunk.locX, chunk.locZ, c.b, c.a, chunk.world);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutMapChunkBulk.java
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutMapChunkBulk implements Packet<PacketListenerPlayOut>
|
||||
|
||||
for (int j = 0; j < i; ++j) {
|
||||
Chunk chunk = (Chunk) list.get(j);
|
||||
- PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = PacketPlayOutMapChunk.a(chunk, true, this.d, '\uffff');
|
||||
+ PacketPlayOutMapChunk.ChunkMap packetplayoutmapchunk_chunkmap = chunk.getChunkMap(true, '\uffff'); // PaperSpigot
|
||||
|
||||
this.a[j] = chunk.locX;
|
||||
this.b[j] = chunk.locZ;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
mobSpawnerTickRate = getInt( "mob-spawner-tick-rate", 1 );
|
||||
}
|
||||
+
|
||||
+ public boolean cacheChunkMaps;
|
||||
+ private void cacheChunkMaps()
|
||||
+ {
|
||||
+ cacheChunkMaps = getBoolean( "cache-chunk-maps", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,19 +1,34 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Thu, 4 Jun 2015 13:55:02 -0700
|
||||
Date: Wed, 2 Mar 2016 23:00:53 -0600
|
||||
Subject: [PATCH] Configurable TNT cannon fix
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void mobSpawnerTickRate() {
|
||||
mobSpawnerTickRate = getInt("mob-spawner-tick-rate", 1);
|
||||
}
|
||||
+
|
||||
+ public boolean fixCannons;
|
||||
+ private void fixCannons() {
|
||||
+ fixCannons = getBoolean("fix-cannons", false);
|
||||
+ log("Fix TNT cannons: " + fixCannons);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockDiodeAbstract.java b/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockDiodeAbstract.java
|
||||
@@ -0,0 +0,0 @@ public abstract class BlockDiodeAbstract extends BlockDirectional {
|
||||
@@ -0,0 +0,0 @@ public abstract class BlockDiodeAbstract extends BlockFacingHorizontal {
|
||||
} else {
|
||||
this.b(world, blockposition, iblockdata, 0);
|
||||
world.setAir(blockposition);
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.SOUTH), this);
|
||||
@@ -22,16 +37,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this);
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i = aenumdirection.length;
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class BlockDiodeAbstract extends BlockDirectional {
|
||||
@@ -0,0 +0,0 @@ public abstract class BlockDiodeAbstract extends BlockFacingHorizontal {
|
||||
|
||||
public void postBreak(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
||||
if (this.N) {
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
if (this.d) {
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this);
|
||||
@@ -40,7 +55,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this);
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i = aenumdirection.length;
|
||||
|
||||
@@ -52,8 +67,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
||||
if (this.isOn) {
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this);
|
||||
@@ -62,7 +77,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this);
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i = aenumdirection.length;
|
||||
|
||||
@@ -70,8 +85,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public void remove(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
||||
if (this.isOn) {
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.DOWN), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this);
|
||||
@@ -80,7 +95,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this);
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i = aenumdirection.length;
|
||||
|
||||
@@ -91,27 +106,27 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public class BlockRedstoneWire extends Block {
|
||||
}
|
||||
|
||||
this.R.add(blockposition);
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
+ this.R.add(blockposition.shift(EnumDirection.WEST));
|
||||
+ this.R.add(blockposition.shift(EnumDirection.EAST));
|
||||
+ this.R.add(blockposition.shift(EnumDirection.DOWN));
|
||||
+ this.R.add(blockposition.shift(EnumDirection.UP));
|
||||
+ this.R.add(blockposition.shift(EnumDirection.NORTH));
|
||||
+ this.R.add(blockposition.shift(EnumDirection.SOUTH));
|
||||
this.B.add(blockposition);
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ this.B.add(blockposition.shift(EnumDirection.WEST));
|
||||
+ this.B.add(blockposition.shift(EnumDirection.EAST));
|
||||
+ this.B.add(blockposition.shift(EnumDirection.DOWN));
|
||||
+ this.B.add(blockposition.shift(EnumDirection.UP));
|
||||
+ this.B.add(blockposition.shift(EnumDirection.NORTH));
|
||||
+ this.B.add(blockposition.shift(EnumDirection.SOUTH));
|
||||
+ return iblockdata;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i1 = aenumdirection.length;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class BlockRedstoneWire extends Block {
|
||||
private void e(World world, BlockPosition blockposition) {
|
||||
private void b(World world, BlockPosition blockposition) {
|
||||
if (world.getType(blockposition).getBlock() == this) {
|
||||
world.applyPhysics(blockposition, this);
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ if (world.paperSpigotConfig.fixCannons) {
|
||||
+ // Paper start - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) {
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.WEST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.EAST), this);
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.NORTH), this);
|
||||
@@ -120,7 +135,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ world.applyPhysics(blockposition.shift(EnumDirection.UP), this);
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
EnumDirection[] aenumdirection = EnumDirection.values();
|
||||
int i = aenumdirection.length;
|
||||
|
||||
@@ -131,29 +146,29 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
|
||||
if (!world.isClientSide) {
|
||||
org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // PaperSpigot
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // PaperSpigot - add loc
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc
|
||||
+ // Paper start - Fix cannons
|
||||
+ double y = blockposition.getY();
|
||||
+ if (!world.paperSpigotConfig.fixCannons) y += 0.5;
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // PaperSpigot - add loc
|
||||
+ // PaperSpigot end
|
||||
+ if (!world.paperConfig.fixCannons) y += 0.5;
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc
|
||||
+ // Paper end
|
||||
|
||||
entitytntprimed.fuseTicks = world.random.nextInt(entitytntprimed.fuseTicks / 4) + entitytntprimed.fuseTicks / 8;
|
||||
entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8));
|
||||
world.addEntity(entitytntprimed);
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
if (!world.isClientSide) {
|
||||
if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) {
|
||||
org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // PaperSpigot
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) ((float) blockposition.getY() + 0.5F), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // PaperSpigot - add loc
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc
|
||||
+ // Paper start - Fix cannons
|
||||
+ double y = blockposition.getY();
|
||||
+ if (!world.paperSpigotConfig.fixCannons) y += 0.5;
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving); // PaperSpigot - add loc
|
||||
+ // PaperSpigot end
|
||||
+ if (!world.paperConfig.fixCannons) y += 0.5;
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), y, (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc
|
||||
+ // Paper end
|
||||
|
||||
world.addEntity(entitytntprimed);
|
||||
world.makeSound(entitytntprimed, "game.tnt.primed", 1.0F, 1.0F);
|
||||
world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gj, SoundCategory.BLOCKS, 1.0F, 1.0F);
|
||||
diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
@@ -162,12 +177,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
org.bukkit.block.Block block = world.getWorld().getBlockAt(isourceblock.getBlockPosition().getX(), isourceblock.getBlockPosition().getY(), isourceblock.getBlockPosition().getZ());
|
||||
CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemstack1);
|
||||
|
||||
- BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX() + 0.5, blockposition.getY() + 0.5, blockposition.getZ() + 0.5));
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
- BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector((double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D));
|
||||
+ // Paper start - Fix cannons
|
||||
+ double y = blockposition.getY();
|
||||
+ if (!world.paperSpigotConfig.fixCannons) y += 0.5;
|
||||
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector(blockposition.getX() + 0.5, y, blockposition.getZ() + 0.5));
|
||||
+ // PaperSpigot end
|
||||
+ if (!world.paperConfig.fixCannons) y += 0.5;
|
||||
+ BlockDispenseEvent event = new BlockDispenseEvent(block, craftItem.clone(), new org.bukkit.util.Vector((double) blockposition.getX() + 0.5D, y, (double) blockposition.getZ() + 0.5D));
|
||||
+ // Paper end
|
||||
if (!BlockDispenser.eventFired) {
|
||||
world.getServer().getPluginManager().callEvent(event);
|
||||
}
|
||||
@@ -176,14 +191,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
public IBlockData getBlock() {
|
||||
return this.block;
|
||||
public boolean br() {
|
||||
return true;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ // Paper start - Fix cannons
|
||||
+ @Override
|
||||
+ public double f(double d0, double d1, double d2) {
|
||||
+ if (!world.paperSpigotConfig.fixCannons) return super.f(d0, d1, d2);
|
||||
+ if (!world.paperConfig.fixCannons) return super.f(d0, d1, d2);
|
||||
+
|
||||
+ double d3 = this.locX - d0;
|
||||
+ double d4 = this.locY + this.getHeadHeight() - d1;
|
||||
@@ -194,9 +209,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+
|
||||
+ @Override
|
||||
+ public float getHeadHeight() {
|
||||
+ return world.paperSpigotConfig.fixCannons ? this.length / 2 : super.getHeadHeight();
|
||||
+ return world.paperConfig.fixCannons ? this.length / 2 : super.getHeadHeight();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
@@ -206,18 +221,18 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.lastY = d1;
|
||||
this.lastZ = d2;
|
||||
this.source = entityliving;
|
||||
+ if (world.paperSpigotConfig.fixCannons) this.motX = this.motZ = 0.0F; // PaperSpigot - Fix cannons
|
||||
+ if (world.paperConfig.fixCannons) this.motX = this.motZ = 0.0F; // Paper - Fix cannons
|
||||
}
|
||||
|
||||
protected void h() {}
|
||||
protected void i() {
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
return this.source;
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ // Paper start - Fix cannons
|
||||
+ @Override
|
||||
+ public double f(double d0, double d1, double d2) {
|
||||
+ if (!world.paperSpigotConfig.fixCannons) return super.f(d0, d1, d2);
|
||||
+ if (!world.paperConfig.fixCannons) return super.f(d0, d1, d2);
|
||||
+
|
||||
+ double d3 = this.locX - d0;
|
||||
+ double d4 = this.locY + this.getHeadHeight() - d1;
|
||||
@@ -227,29 +242,29 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public boolean aL() {
|
||||
+ return !world.paperSpigotConfig.fixCannons && super.aL();
|
||||
+ public boolean bd() {
|
||||
+ return !world.paperConfig.fixCannons && super.bd();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
public float getHeadHeight() {
|
||||
- return 0.0F;
|
||||
+ return world.paperSpigotConfig.fixCannons ? this.length / 2 : 0.0F;
|
||||
}
|
||||
+ return world.paperConfig.fixCannons ? this.length / 2 : 0.0F;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * Author: Jedediah Smith <jedediah@silencegreys.com>
|
||||
+ */
|
||||
+ @Override
|
||||
+ public boolean W() {
|
||||
+ if (!world.paperSpigotConfig.fixCannons) return super.W();
|
||||
+ public boolean aj() {
|
||||
+ if (!world.paperConfig.fixCannons) return super.aj();
|
||||
+
|
||||
+ // Preserve velocity while calling the super method
|
||||
+ double oldMotX = this.motX;
|
||||
+ double oldMotY = this.motY;
|
||||
+ double oldMotZ = this.motZ;
|
||||
+
|
||||
+ super.W();
|
||||
+ super.aj();
|
||||
+
|
||||
+ this.motX = oldMotX;
|
||||
+ this.motY = oldMotY;
|
||||
@@ -273,18 +288,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+
|
||||
+ return this.inWater;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
}
|
||||
+ // Paper end
|
||||
|
||||
public void setFuseTicks(int i) {
|
||||
this.datawatcher.set(EntityTNTPrimed.FUSE_TICKS, Integer.valueOf(i));
|
||||
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/server/Explosion.java
|
||||
@@ -0,0 +0,0 @@ public class Explosion {
|
||||
// CraftBukkit end
|
||||
double d14 = EnchantmentProtection.a(entity, d13);
|
||||
d14 = entity instanceof EntityHuman && world.paperConfig.disableExplosionKnockback ? 0 : EnchantmentProtection.a((EntityLiving) entity, d13); // Paper - Disable explosion knockback
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Fix cannons
|
||||
+ // Paper start - Fix cannons
|
||||
+ /*
|
||||
entity.motX += d8 * d14;
|
||||
entity.motY += d9 * d14;
|
||||
@@ -292,57 +309,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ */
|
||||
+ // This impulse method sets the dirty flag, so clients will get an immediate velocity update
|
||||
+ entity.g(d8 * d14, d9 * d14, d10 * d14);
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
if (entity instanceof EntityHuman && !((EntityHuman) entity).abilities.isInvulnerable) {
|
||||
this.k.put((EntityHuman) entity, new Vec3D(d8 * d13, d9 * d13, d10 * d13));
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
generateVillage = getBoolean( "generator-settings.village", true );
|
||||
generateFlatBedrock = getBoolean( "generator-settings.flat-bedrock", false );
|
||||
}
|
||||
+
|
||||
+ public boolean fixCannons;
|
||||
+ private void fixCannons()
|
||||
+ {
|
||||
+ // TODO: Remove migrations after most users have upgraded.
|
||||
+ if ( PaperSpigotConfig.version < 9 )
|
||||
+ {
|
||||
+ // Migrate default value
|
||||
+
|
||||
+ boolean value = config.getBoolean( "world-settings.default.fix-cannons", false );
|
||||
+ if ( !value ) value = config.getBoolean( "world-settings.default.tnt-gameplay.fix-directional-bias", false );
|
||||
+ if ( !value ) value = !config.getBoolean( "world-settings.default.tnt-gameplay.moves-in-water", true );
|
||||
+ if ( !value ) value = config.getBoolean( "world-settings.default.tnt-gameplay.legacy-explosion-height", false );
|
||||
+ if ( value ) config.set( "world-settings.default.fix-cannons", true );
|
||||
+
|
||||
+ if ( config.contains( "world-settings.default.tnt-gameplay" ) )
|
||||
+ {
|
||||
+ config.getDefaults().set( "world-settings.default.tnt-gameplay", null);
|
||||
+ config.set( "world-settings.default.tnt-gameplay", null );
|
||||
+ }
|
||||
+
|
||||
+ // Migrate world setting
|
||||
+
|
||||
+ value = config.getBoolean( "world-settings." + worldName + ".fix-cannons", false );
|
||||
+ if ( !value ) value = config.getBoolean( "world-settings." + worldName + ".tnt-gameplay.fix-directional-bias", false );
|
||||
+ if ( !value ) value = !config.getBoolean( "world-settings." + worldName + ".tnt-gameplay.moves-in-water", true );
|
||||
+ if ( !value ) value = config.getBoolean( "world-settings." + worldName + ".tnt-gameplay.legacy-explosion-height", false );
|
||||
+ if ( value ) config.set( "world-settings." + worldName + ".fix-cannons", true );
|
||||
+
|
||||
+ if ( config.contains( "world-settings." + worldName + ".tnt-gameplay" ) )
|
||||
+ {
|
||||
+ config.getDefaults().set( "world-settings." + worldName + ".tnt-gameplay", null);
|
||||
+ config.set( "world-settings." + worldName + ".tnt-gameplay", null );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ fixCannons = getBoolean( "fix-cannons", false );
|
||||
+ log( "Fix TNT cannons: " + fixCannons );
|
||||
+ }
|
||||
}
|
||||
if (entity instanceof EntityHuman) {
|
||||
EntityHuman entityhuman = (EntityHuman) entity;
|
||||
|
||||
--
|
||||
@@ -1,38 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 4 Aug 2015 17:45:00 -0700
|
||||
Subject: [PATCH] Configurable TNT explosion volume
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/server/Explosion.java
|
||||
@@ -0,0 +0,0 @@ public class Explosion {
|
||||
}
|
||||
|
||||
public void a(boolean flag) {
|
||||
- this.world.makeSound(this.posX, this.posY, this.posZ, "random.explode", 4.0F, (1.0F + (this.world.random.nextFloat() - this.world.random.nextFloat()) * 0.2F) * 0.7F);
|
||||
+ // PaperSpigot start - Configurable TNT explosion volume.
|
||||
+ float volume = source instanceof EntityTNTPrimed ? world.paperSpigotConfig.tntExplosionVolume : 4.0F;
|
||||
+ this.world.makeSound(this.posX, this.posY, this.posZ, "random.explode", volume, (1.0F + (this.world.random.nextFloat() - this.world.random.nextFloat()) * 0.2F) * 0.7F);
|
||||
+ // PaperSpigot end
|
||||
if (this.size >= 2.0F && this.b) {
|
||||
this.world.addParticle(EnumParticle.EXPLOSION_HUGE, this.posX, this.posY, this.posZ, 1.0D, 0.0D, 0.0D, new int[0]);
|
||||
} else {
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
containerUpdateTickRate = getInt( "container-update-tick-rate", 1 );
|
||||
}
|
||||
+
|
||||
+ public float tntExplosionVolume;
|
||||
+ private void tntExplosionVolume()
|
||||
+ {
|
||||
+ tntExplosionVolume = getFloat( "tnt-explosion-volume", 4.0F );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Wed, 1 Jul 2015 00:18:10 -0700
|
||||
Date: Wed, 2 Mar 2016 00:52:31 -0600
|
||||
Subject: [PATCH] Configurable async light updates
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
|
||||
}
|
||||
|
||||
+ public boolean useAsyncLighting;
|
||||
+ private void useAsyncLighting() {
|
||||
+ useAsyncLighting = getBoolean( "use-async-lighting", false );
|
||||
+ log("World async lighting: " + useAsyncLighting);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -12,19 +26,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
+import java.util.concurrent.atomic.AtomicInteger; // PaperSpigot
|
||||
+import java.util.concurrent.atomic.AtomicInteger; // Paper
|
||||
+
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
private int v;
|
||||
private ConcurrentLinkedQueue<BlockPosition> w;
|
||||
private int w;
|
||||
private ConcurrentLinkedQueue<BlockPosition> x;
|
||||
protected gnu.trove.map.hash.TObjectIntHashMap<Class> entityCount = new gnu.trove.map.hash.TObjectIntHashMap<Class>(); // Spigot
|
||||
+ // PaperSpigot start - Asynchronous light updates
|
||||
+ // Paper start - Asynchronous light updates
|
||||
+ public AtomicInteger pendingLightUpdates = new AtomicInteger();
|
||||
+ public long lightUpdateTime;
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
|
||||
// CraftBukkit start - Neighbor loaded cache for chunk lighting and entity ticking
|
||||
private int neighbors = 0x1 << 12;
|
||||
@@ -33,29 +47,29 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
if (l > k && this.world.areChunksLoaded(new BlockPosition(i, 0, j), 16)) {
|
||||
for (int i1 = k; i1 < l; ++i1) {
|
||||
- this.world.c(EnumSkyBlock.SKY, new BlockPosition(i, i1, j));
|
||||
+ this.world.updateLight(EnumSkyBlock.SKY, new BlockPosition(i, i1, j)); // PaperSpigot - Asynchronous lighting updates
|
||||
+ this.world.updateLight(EnumSkyBlock.SKY, new BlockPosition(i, i1, j));
|
||||
}
|
||||
|
||||
this.q = true;
|
||||
this.r = true;
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
|
||||
public void b(boolean flag) {
|
||||
if (this.k && !this.world.worldProvider.o() && !flag) {
|
||||
if (this.l && !this.world.worldProvider.m() && !flag) {
|
||||
- this.h(this.world.isClientSide);
|
||||
+ this.recheckGaps(this.world.isClientSide); // PaperSpigot - Asynchronous lighting updates
|
||||
+ this.recheckGaps(this.world.isClientSide); // Paper - Asynchronous lighting updates
|
||||
}
|
||||
|
||||
this.p = true;
|
||||
this.q = true;
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * PaperSpigot - Recheck gaps asynchronously.
|
||||
+ * Paper- Recheck gaps asynchronously
|
||||
+ */
|
||||
+ public void recheckGaps(final boolean isClientSide) {
|
||||
+ if (!world.paperSpigotConfig.useAsyncLighting) {
|
||||
+ this.h(isClientSide);
|
||||
+ if (!world.paperConfig.useAsyncLighting) {
|
||||
+ this.h(this.world.isClientSide);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
@@ -78,59 +92,59 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
public void queueUnload(int i, int j) {
|
||||
+ // PaperSpigot start - Asynchronous lighting updates
|
||||
+ // Paper start - Asynchronous lighting updates
|
||||
+ Chunk chunk = chunks.get(LongHash.toLong(i, j));
|
||||
+ if (chunk != null && chunk.world.paperSpigotConfig.useAsyncLighting && (chunk.pendingLightUpdates.get() > 0 || chunk.world.getTime() - chunk.lightUpdateTime < 20)) {
|
||||
+ if (chunk != null && chunk.world.paperConfig.useAsyncLighting && (chunk.pendingLightUpdates.get() > 0 || chunk.world.getTime() - chunk.lightUpdateTime < 20)) {
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
if (this.world.worldProvider.e()) {
|
||||
if (!this.world.c(i, j)) {
|
||||
// CraftBukkit start
|
||||
+ // Paper end
|
||||
if (this.world.worldProvider.c(i, j)) {
|
||||
// CraftBukkit start
|
||||
this.unloadQueue.add(i, j);
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.generator.ChunkGenerator;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.Callable;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
// CraftBukkit end
|
||||
|
||||
+// PaperSpigot start
|
||||
+// Paper start
|
||||
+import java.util.concurrent.ExecutorService;
|
||||
+import java.util.concurrent.Executors;
|
||||
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
+// PaperSpigot end
|
||||
+// Paper end
|
||||
+
|
||||
// CraftBukkit start
|
||||
// CraftBukkit end
|
||||
public abstract class World implements IBlockAccess {
|
||||
|
||||
private int a = 63;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
private org.spigotmc.TickLimiter entityLimiter;
|
||||
private org.spigotmc.TickLimiter tileLimiter;
|
||||
private int tileTickPosition;
|
||||
+ public ExecutorService lightingExecutor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("PaperSpigot - Lighting Thread").build()); // PaperSpigot - Asynchronous lighting updates
|
||||
+ public ExecutorService lightingExecutor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("Paper - Lighting Thread").build()); // Paper - Asynchronous lighting updates
|
||||
|
||||
public static long chunkToKey(int x, int z)
|
||||
{
|
||||
public CraftWorld getWorld() {
|
||||
return this.world;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
if (!this.worldProvider.o()) {
|
||||
if (!this.worldProvider.m()) {
|
||||
for (i1 = k; i1 <= l; ++i1) {
|
||||
- this.c(EnumSkyBlock.SKY, new BlockPosition(i, i1, j));
|
||||
+ this.updateLight(EnumSkyBlock.SKY, new BlockPosition(i, i1, j)); // PaperSpigot - Asynchronous lighting updates
|
||||
+ this.updateLight(EnumSkyBlock.SKY, new BlockPosition(i, i1, j)); // Paper - Asynchronous lighting updates
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
boolean flag = false;
|
||||
|
||||
if (!this.worldProvider.o()) {
|
||||
if (!this.worldProvider.m()) {
|
||||
- flag |= this.c(EnumSkyBlock.SKY, blockposition);
|
||||
+ flag |= this.updateLight(EnumSkyBlock.SKY, blockposition); // PaperSpigot - Asynchronous lighting updates
|
||||
+ flag |= this.updateLight(EnumSkyBlock.SKY, blockposition); // Paper - Asynchronous lighting updates
|
||||
}
|
||||
|
||||
- flag |= this.c(EnumSkyBlock.BLOCK, blockposition);
|
||||
+ flag |= this.updateLight(EnumSkyBlock.BLOCK, blockposition); // PaperSpigot - Asynchronous lighting updates
|
||||
+ flag |= this.updateLight(EnumSkyBlock.BLOCK, blockposition); // Paper - Asynchronous lighting updates
|
||||
return flag;
|
||||
}
|
||||
|
||||
@@ -138,8 +152,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
}
|
||||
|
||||
- public boolean c(EnumSkyBlock enumskyblock, BlockPosition blockposition) {
|
||||
+ public boolean c(EnumSkyBlock enumskyblock, BlockPosition blockposition, Chunk chunk, List<Chunk> neighbors) { // PaperSpigot
|
||||
+ // Paper start - Asynchronous lighting updates
|
||||
public boolean c(EnumSkyBlock enumskyblock, BlockPosition blockposition) {
|
||||
+ return this.c(enumskyblock, blockposition, null, null);
|
||||
+ }
|
||||
+
|
||||
+ public boolean c(EnumSkyBlock enumskyblock, BlockPosition blockposition, Chunk chunk, List<Chunk> neighbors) { // Paper
|
||||
// CraftBukkit start - Use neighbor cache instead of looking up
|
||||
- Chunk chunk = this.getChunkIfLoaded(blockposition.getX() >> 4, blockposition.getZ() >> 4);
|
||||
- if (chunk == null || !chunk.areNeighborsLoaded(1) /*!this.areChunksLoaded(blockposition, 17, false)*/) {
|
||||
@@ -149,11 +167,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
return false;
|
||||
} else {
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
i = 0;
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Asynchronous light updates
|
||||
+ if (chunk.world.paperSpigotConfig.useAsyncLighting) {
|
||||
+ // Paper start - Asynchronous light updates
|
||||
+ if (chunk.world.paperConfig.useAsyncLighting) {
|
||||
+ chunk.pendingLightUpdates.decrementAndGet();
|
||||
+ if (neighbors != null) {
|
||||
+ for (Chunk neighbor : neighbors) {
|
||||
@@ -161,14 +179,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.methodProfiler.b();
|
||||
return true;
|
||||
this.methodProfiler.a("checkedPosition < toCheckCount");
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * PaperSpigot - Asynchronous lighting updates
|
||||
+ * Paper - Asynchronous lighting updates
|
||||
+ */
|
||||
+ public boolean updateLight(final EnumSkyBlock enumskyblock, final BlockPosition position) {
|
||||
+ int x = position.getX();
|
||||
@@ -178,7 +199,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ if (!chunk.world.paperSpigotConfig.useAsyncLighting) {
|
||||
+ if (!chunk.world.paperConfig.useAsyncLighting) {
|
||||
+ return this.c(enumskyblock, position, chunk, null);
|
||||
+ }
|
||||
+
|
||||
@@ -186,6 +207,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ chunk.lightUpdateTime = chunk.world.getTime();
|
||||
+
|
||||
+ final List<Chunk> neighbors = new ArrayList<Chunk>();
|
||||
+
|
||||
+ for (int cx = (x >> 4) - 1; cx <= (x >> 4) + 1; ++cx) {
|
||||
+ for (int cz = (z >> 4) - 1; cz <= (z >> 4) + 1; ++cz) {
|
||||
+ if (cx != x >> 4 && cz != z >> 4) {
|
||||
@@ -215,20 +237,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public boolean a(boolean flag) {
|
||||
return false;
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
log( "WorldServer TickNextTick cap set at " + tickNextTickCap );
|
||||
log( "WorldServer TickNextTickList cap always processes redstone: " + tickNextTickListCapIgnoresRedstone );
|
||||
}
|
||||
+
|
||||
+ public boolean useAsyncLighting;
|
||||
+ private void useAsyncLighting()
|
||||
+ {
|
||||
+ useAsyncLighting = getBoolean( "use-async-lighting", false );
|
||||
+ log( "World async lighting: " + useAsyncLighting );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,24 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 20:41:55 -0600
|
||||
Date: Tue, 1 Mar 2016 13:09:16 -0600
|
||||
Subject: [PATCH] Configurable baby zombie movement speed
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
log("Max height for cactus growth " + cactusMaxHeight + ". Max height for reed growth " + reedMaxHeight);
|
||||
|
||||
}
|
||||
+
|
||||
+ public double babyZombieMovementSpeed;
|
||||
+ private void babyZombieMovementSpeed() {
|
||||
+ babyZombieMovementSpeed = getDouble("baby-zombie-movement-speed", 0.5D); // Player moves at 0.1F, for reference
|
||||
+ log("Baby zombies will move at the speed of " + babyZombieMovementSpeed);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityZombie.java b/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityZombie.java
|
||||
@@ -13,23 +28,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
protected static final IAttribute a = (new AttributeRanged((IAttribute) null, "zombie.spawnReinforcements", 0.0D, 0.0D, 1.0D)).a("Spawn Reinforcements Chance");
|
||||
private static final UUID b = UUID.fromString("B9766B59-9566-4402-BC1F-2EE2A276D836");
|
||||
- private static final AttributeModifier c = new AttributeModifier(EntityZombie.b, "Baby speed boost", 0.5D, 1);
|
||||
+ private static final AttributeModifier c = new AttributeModifier(EntityZombie.b, "Baby speed boost", org.github.paperspigot.PaperSpigotConfig.babyZombieMovementSpeed, 1); // PaperSpigot - Configurable baby zombie movement speed
|
||||
private final PathfinderGoalBreakDoor bm = new PathfinderGoalBreakDoor(this);
|
||||
private int bn;
|
||||
private boolean bo = false;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
config.addDefault( path, def );
|
||||
return config.getString( path, config.getString( path ) );
|
||||
}
|
||||
+
|
||||
+ public static double babyZombieMovementSpeed;
|
||||
+ private static void babyZombieMovementSpeed()
|
||||
+ {
|
||||
+ babyZombieMovementSpeed = getDouble( "settings.baby-zombie-movement-speed", 0.5D ); // Player moves at 0.1F, for reference
|
||||
+ }
|
||||
}
|
||||
+ private final AttributeModifier c = new AttributeModifier(EntityZombie.b, "Baby speed boost", world.paperConfig.babyZombieMovementSpeed, 1); // Paper - Remove static - Make baby speed configurable
|
||||
private static final DataWatcherObject<Boolean> bv = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.h);
|
||||
private static final DataWatcherObject<Integer> bw = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.b);
|
||||
private static final DataWatcherObject<Boolean> bx = DataWatcher.a(EntityZombie.class, DataWatcherRegistry.h);
|
||||
@@ -0,0 +0,0 @@ public class EntityZombie extends EntityMonster {
|
||||
if (this.world != null && !this.world.isClientSide) {
|
||||
AttributeInstance attributeinstance = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED);
|
||||
|
||||
- attributeinstance.c(EntityZombie.c);
|
||||
+ attributeinstance.c(this.c);
|
||||
if (flag) {
|
||||
- attributeinstance.b(EntityZombie.c);
|
||||
+ attributeinstance.b(this.c);
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
@@ -1,9 +1,27 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 20:32:13 -0600
|
||||
Date: Tue, 1 Mar 2016 13:02:51 -0600
|
||||
Subject: [PATCH] Configurable cactus and reed natural growth heights
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
squidMaxSpawnHeight = getDouble("squid-spawn-height.maximum", 63.0D);
|
||||
log("Squids will spawn between Y: " + squidMinSpawnHeight + " and Y: " + squidMaxSpawnHeight);
|
||||
}
|
||||
+
|
||||
+ public int cactusMaxHeight;
|
||||
+ public int reedMaxHeight;
|
||||
+ private void blowGrowthHeight() {
|
||||
+ cactusMaxHeight = getInt("max-growth-height.cactus", 3);
|
||||
+ reedMaxHeight = getInt("max-growth-height.reeds", 3);
|
||||
+ log("Max height for cactus growth " + cactusMaxHeight + ". Max height for reed growth " + reedMaxHeight);
|
||||
+
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockCactus.java b/src/main/java/net/minecraft/server/BlockCactus.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockCactus.java
|
||||
@@ -13,10 +31,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- if (i < 3) {
|
||||
+ if (i < world.paperSpigotConfig.cactusMaxHeight) { // PaperSpigot - Configurable max growth height for cactus blocks) {
|
||||
+ if (i < world.paperConfig.cactusMaxHeight) { // Paper - Configurable growth height
|
||||
int j = ((Integer) iblockdata.get(BlockCactus.AGE)).intValue();
|
||||
|
||||
if (j >= (byte) range(3, (world.growthOdds / world.spigotConfig.cactusModifier * 15) + 0.5F, 15)) { // Spigot
|
||||
if (j >= (byte) range(3, (world.spigotConfig.cactusModifier / 100 * 15) + 0.5F, 15)) { // Spigot
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockReed.java b/src/main/java/net/minecraft/server/BlockReed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockReed.java
|
||||
@@ -26,26 +44,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- if (i < 3) {
|
||||
+ if (i < world.paperSpigotConfig.reedMaxHeight) { // PaperSpigot - Configurable max growth height for reed blocks) {
|
||||
+ if (i < world.paperConfig.reedMaxHeight) { // Paper - Configurable growth height
|
||||
int j = ((Integer) iblockdata.get(BlockReed.AGE)).intValue();
|
||||
|
||||
if (j >= (byte) range(3, (world.growthOdds / world.spigotConfig.caneModifier * 15) + 0.5F, 15)) { // Spigot
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
playerBlockingDamageMultiplier = getFloat( "player-blocking-damage-multiplier", 0.5F );
|
||||
log( "Player blocking damage multiplier set to " + playerBlockingDamageMultiplier );
|
||||
}
|
||||
+
|
||||
+ public int cactusMaxHeight;
|
||||
+ public int reedMaxHeight;
|
||||
+ private void blockGrowthHeight()
|
||||
+ {
|
||||
+ cactusMaxHeight = getInt( "max-growth-height.cactus", 3 );
|
||||
+ reedMaxHeight = getInt( "max-growth-height.reeds", 3 );
|
||||
+ log( "Max height for cactus growth " + cactusMaxHeight + ". Max height for reed growth " + reedMaxHeight );
|
||||
+ }
|
||||
}
|
||||
if (j >= (byte) range(3, (world.spigotConfig.caneModifier /100 * 15) + 0.5F, 15)) { // Spigot
|
||||
--
|
||||
@@ -1,50 +1,47 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Thu, 23 Jul 2015 22:05:22 -0700
|
||||
Date: Wed, 2 Mar 2016 23:34:44 -0600
|
||||
Subject: [PATCH] Configurable container update tick rate
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
fixCannons = getBoolean("fix-cannons", false);
|
||||
log("Fix TNT cannons: " + fixCannons);
|
||||
}
|
||||
+
|
||||
+ public int containerUpdateTickRate;
|
||||
+ private void containerUpdateTickRate() {
|
||||
+ containerUpdateTickRate = getInt("container-update-tick-rate", 1);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
// Spigot start
|
||||
public boolean collidesWithEntities = true;
|
||||
public int viewDistance; // PaperSpigot - Player view distance API
|
||||
+ private int containerUpdateDelay; // PaperSpigot
|
||||
public int ping;
|
||||
public boolean viewingCredits;
|
||||
public int viewDistance; // Paper - Player view distance API
|
||||
+ private int containerUpdateDelay; // Paper
|
||||
|
||||
@Override
|
||||
public boolean ad()
|
||||
// CraftBukkit start
|
||||
public String displayName;
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
if (this.noDamageTicks > 0) {
|
||||
--this.noDamageTicks;
|
||||
}
|
||||
-
|
||||
|
||||
- this.activeContainer.b();
|
||||
+
|
||||
+ // PaperSpigot start - Configurable container update tick rate
|
||||
+ // Paper start - Configurable container update tick rate
|
||||
+ if (--containerUpdateDelay <= 0) {
|
||||
+ this.activeContainer.b();
|
||||
+ containerUpdateDelay = world.paperSpigotConfig.containerUpdateTickRate;
|
||||
+ containerUpdateDelay = world.paperConfig.containerUpdateTickRate;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
if (!this.world.isClientSide && !this.activeContainer.a((EntityHuman) this)) {
|
||||
this.closeInventory();
|
||||
this.activeContainer = this.defaultContainer;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
cacheChunkMaps = getBoolean( "cache-chunk-maps", false );
|
||||
}
|
||||
+
|
||||
+ public int containerUpdateTickRate;
|
||||
+ private void containerUpdateTickRate()
|
||||
+ {
|
||||
+ containerUpdateTickRate = getInt( "container-update-tick-rate", 1 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,36 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 20:27:02 -0600
|
||||
Subject: [PATCH] Configurable damage multiplier for PvP blocking
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
// CraftBukkit end
|
||||
if (!this.isInvulnerable(damagesource)) {
|
||||
if (!damagesource.ignoresArmor() && this.isBlocking() && f > 0.0F) {
|
||||
- f = (1.0F + f) * 0.5F;
|
||||
+ f = (1.0F + f) * this.world.paperSpigotConfig.playerBlockingDamageMultiplier; // PaperSpigot - Configurable damage multiplier for blocking;
|
||||
}
|
||||
|
||||
f = this.applyArmorModifier(damagesource, f);
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
squidMaxSpawnHeight = getDouble( "squid-spawn-height.maximum", 63.0D );
|
||||
log( "Squids will spawn between Y: " + squidMinSpawnHeight + " and Y: " + squidMaxSpawnHeight );
|
||||
}
|
||||
+
|
||||
+ public float playerBlockingDamageMultiplier;
|
||||
+ private void playerBlockingDamageMultiplier()
|
||||
+ {
|
||||
+ playerBlockingDamageMultiplier = getFloat( "player-blocking-damage-multiplier", 0.5F );
|
||||
+ log( "Player blocking damage multiplier set to " + playerBlockingDamageMultiplier );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,91 +1,73 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: DoctorDark <doctordark11@gmail.com>
|
||||
Date: Thu, 28 May 2015 20:12:38 -0500
|
||||
Date: Wed, 2 Mar 2016 01:17:06 -0600
|
||||
Subject: [PATCH] Configurable end credits when leaving the end
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
useAsyncLighting = getBoolean( "use-async-lighting", false );
|
||||
log("World async lighting: " + useAsyncLighting);
|
||||
}
|
||||
+
|
||||
+ public boolean disableEndCredits;
|
||||
+ private void disableEndCredits() {
|
||||
+ disableEndCredits = getBoolean("game-mechanics.disable-end-credits", false);
|
||||
+ log("End credits disabled: " + disableEndCredits);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityPlayer.java b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityPlayer.java
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
}
|
||||
|
||||
public void c(int i) {
|
||||
- if (this.dimension == 1 && i == 1) {
|
||||
+ // PaperSpigot start - Allow configurable end portal credits
|
||||
+ boolean endPortal = this.dimension == 1 && i == 1;
|
||||
+ if (endPortal) {
|
||||
this.b((Statistic) AchievementList.D);
|
||||
public Entity c(int i) {
|
||||
this.cj = true;
|
||||
+ // Paper start - Allow configurable end portal credits
|
||||
if (this.dimension == 1 && i == 1) {
|
||||
- this.world.kill(this);
|
||||
- this.viewingCredits = true;
|
||||
- this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
|
||||
+ if (!world.paperSpigotConfig.disableEndCredits) {
|
||||
- if (!this.viewingCredits) {
|
||||
+ if (!this.viewingCredits && !world.paperConfig.disableEndCredits) {
|
||||
+ this.world.kill(this);
|
||||
+ this.viewingCredits = true;
|
||||
+ this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
} else {
|
||||
if (this.dimension == 0 && i == 1) {
|
||||
this.b((Statistic) AchievementList.C);
|
||||
+ // Paper end
|
||||
this.viewingCredits = true;
|
||||
if (this.a(AchievementList.D)) {
|
||||
this.playerConnection.sendPacket(new PacketPlayOutGameStateChange(4, 0.0F));
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
} else {
|
||||
this.b((Statistic) AchievementList.y);
|
||||
}
|
||||
+ }
|
||||
|
||||
+ // PaperSpigot start - Allow configurable end portal credits
|
||||
+ if (!endPortal || world.paperSpigotConfig.disableEndCredits) {
|
||||
+ if (!(this.dimension == 1 && i == 1) || world.paperConfig.disableEndCredits) { // Paper - Allow configurable end portal credits
|
||||
// CraftBukkit start
|
||||
- TeleportCause cause = (this.dimension == 1 || i == 1) ? TeleportCause.END_PORTAL : TeleportCause.NETHER_PORTAL;
|
||||
+ TeleportCause cause = (endPortal || (this.dimension == 1 || i == 1)) ? TeleportCause.END_PORTAL : TeleportCause.NETHER_PORTAL;
|
||||
this.server.getPlayerList().changeDimension(this, i, cause);
|
||||
// CraftBukkit end
|
||||
this.lastSentExp = -1;
|
||||
this.bM = -1.0F;
|
||||
this.bN = -1;
|
||||
TeleportCause cause = (this.dimension == 1 || i == 1) ? TeleportCause.END_PORTAL : TeleportCause.NETHER_PORTAL;
|
||||
this.server.getPlayerList().changeDimension(this, i, cause); // PAIL: check all this
|
||||
@@ -0,0 +0,0 @@ public class EntityPlayer extends EntityHuman implements ICrafting {
|
||||
this.cb = -1;
|
||||
return this;
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
|
||||
+
|
||||
+ return null; // Paper - Theoretically it should never make it here
|
||||
}
|
||||
|
||||
public boolean a(EntityPlayer entityplayer) {
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerList.java b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerList.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerList.java
|
||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
||||
}
|
||||
|
||||
TravelAgent agent = exit != null ? (TravelAgent) ((CraftWorld) exit.getWorld()).getHandle().getTravelAgent() : org.bukkit.craftbukkit.CraftTravelAgent.DEFAULT; // return arbitrary TA to compensate for implementation dependent plugins
|
||||
+ agent.setCanCreatePortal(cause != TeleportCause.END_PORTAL); // PaperSpigot - Configurable end credits, don't allow End Portals to create portals
|
||||
+
|
||||
PlayerPortalEvent event = new PlayerPortalEvent(entityplayer.getBukkitEntity(), enter, exit, agent, cause);
|
||||
event.useTravelAgent(useTravelAgent);
|
||||
Bukkit.getServer().getPluginManager().callEvent(event);
|
||||
@@ -0,0 +0,0 @@ public abstract class PlayerList {
|
||||
return;
|
||||
}
|
||||
|
||||
- exit = event.useTravelAgent() ? event.getPortalTravelAgent().findOrCreate(event.getTo()) : event.getTo();
|
||||
+ // PaperSpigot - Configurable end credits, if a plugin sets to use a travel agent even if the cause is an end portal, ignore it
|
||||
+ // Paper - Configurable end credits, if a plugin sets to use a travel agent even if the cause is an end portal, ignore it
|
||||
+ exit = cause != TeleportCause.END_PORTAL && event.useTravelAgent() ? event.getPortalTravelAgent().findOrCreate(event.getTo()) : event.getTo();
|
||||
if (exit == null) {
|
||||
return;
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
useAsyncLighting = getBoolean( "use-async-lighting", false );
|
||||
log( "World async lighting: " + useAsyncLighting );
|
||||
}
|
||||
+
|
||||
+ public boolean disableEndCredits;
|
||||
+ private void disableEndCredits()
|
||||
+ {
|
||||
+ disableEndCredits = getBoolean( "game-mechanics.disable-end-credits", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,37 +1,37 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 21:00:13 -0600
|
||||
Date: Tue, 1 Mar 2016 13:14:11 -0600
|
||||
Subject: [PATCH] Configurable fishing time ranges
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
babyZombieMovementSpeed = getDouble("baby-zombie-movement-speed", 0.5D); // Player moves at 0.1F, for reference
|
||||
log("Baby zombies will move at the speed of " + babyZombieMovementSpeed);
|
||||
}
|
||||
+
|
||||
+ public int fishingMinTicks;
|
||||
+ public int fishingMaxTicks;
|
||||
+ private void fishingTickRange() {
|
||||
+ fishingMinTicks = getInt("fishing-time-range.MinimumTicks", 100);
|
||||
+ fishingMaxTicks = getInt("fishing-time-range.MaximumTicks", 900);
|
||||
+ log("Fishing time ranges are between " + fishingMinTicks +" and " + fishingMaxTicks + " ticks");
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFishingHook.java b/src/main/java/net/minecraft/server/EntityFishingHook.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFishingHook.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFishingHook.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFishingHook extends Entity {
|
||||
this.ax = MathHelper.nextInt(this.random, 20, 80);
|
||||
this.aw = MathHelper.nextInt(this.random, 20, 80);
|
||||
}
|
||||
} else {
|
||||
- this.aw = MathHelper.nextInt(this.random, 100, 900);
|
||||
+ this.aw = MathHelper.nextInt(this.random, this.world.paperSpigotConfig.fishingMinTicks, this.world.paperSpigotConfig.fishingMaxTicks); // PaperSpigot - Configurable fishing tick range
|
||||
this.aw -= EnchantmentManager.h(this.owner) * 20 * 5;
|
||||
- this.av = MathHelper.nextInt(this.random, 100, 900);
|
||||
+ this.av = MathHelper.nextInt(this.random, world.paperConfig.fishingMinTicks, world.paperConfig.fishingMaxTicks); // Paper - Configurable fishing time range
|
||||
this.av -= EnchantmentManager.g(this.owner) * 20 * 5;
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
reedMaxHeight = getInt( "max-growth-height.reeds", 3 );
|
||||
log( "Max height for cactus growth " + cactusMaxHeight + ". Max height for reed growth " + reedMaxHeight );
|
||||
}
|
||||
+
|
||||
+ public int fishingMinTicks;
|
||||
+ public int fishingMaxTicks;
|
||||
+ private void fishingTickRange()
|
||||
+ {
|
||||
+ fishingMinTicks = getInt( "fishing-time-range.MinimumTicks", 100 );
|
||||
+ fishingMaxTicks = getInt( "fishing-time-range.MaximumTicks", 900 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,80 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: gsand <gsandowns@gmail.com>
|
||||
Date: Sun, 8 Mar 2015 04:10:02 -0500
|
||||
Subject: [PATCH] Configurable game mechanics changes
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityBoat.java b/src/main/java/net/minecraft/server/EntityBoat.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityBoat.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityBoat.java
|
||||
@@ -0,0 +0,0 @@ public class EntityBoat extends Entity {
|
||||
if (!destroyEvent.isCancelled()) {
|
||||
this.die();
|
||||
if (this.world.getGameRules().getBoolean("doEntityDrops")) {
|
||||
- for (k = 0; k < 3; ++k) {
|
||||
- this.a(Item.getItemOf(Blocks.PLANKS), 1, 0.0F);
|
||||
- }
|
||||
-
|
||||
- for (k = 0; k < 2; ++k) {
|
||||
- this.a(Items.STICK, 1, 0.0F);
|
||||
- }
|
||||
+ breakNaturally(); // PaperSpigot
|
||||
}
|
||||
} // CraftBukkit end
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class EntityBoat extends Entity {
|
||||
if (!destroyEvent.isCancelled()) {
|
||||
this.die();
|
||||
if (this.world.getGameRules().getBoolean("doEntityDrops")) {
|
||||
- int i;
|
||||
-
|
||||
- for (i = 0; i < 3; ++i) {
|
||||
- this.a(Item.getItemOf(Blocks.PLANKS), 1, 0.0F);
|
||||
- }
|
||||
-
|
||||
- for (i = 0; i < 2; ++i) {
|
||||
- this.a(Items.STICK, 1, 0.0F);
|
||||
- }
|
||||
+ breakNaturally(); // PaperSpigot
|
||||
}
|
||||
} // CraftBukkit end
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class EntityBoat extends Entity {
|
||||
public int m() {
|
||||
return this.datawatcher.getInt(18);
|
||||
}
|
||||
+
|
||||
+ /**
|
||||
+ * PaperSpigot - Handles boat drops depending on the user's config setting
|
||||
+ */
|
||||
+ public void breakNaturally() {
|
||||
+ if (this.world.paperSpigotConfig.boatsDropBoats) {
|
||||
+ this.a(Items.BOAT, 1, 0.0F);
|
||||
+ } else {
|
||||
+ for (int k = 0; k < 3; ++k) {
|
||||
+ this.a(Item.getItemOf(Blocks.PLANKS), 1, 0.0F);
|
||||
+ }
|
||||
+
|
||||
+ for (int k = 0; k < 2; ++k) {
|
||||
+ this.a(Items.STICK, 1, 0.0F);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
removeUnloadedTNTEntities = getBoolean( "remove-unloaded.tnt-entities", true );
|
||||
removeUnloadedFallingBlocks = getBoolean( "remove-unloaded.falling-blocks", true );
|
||||
}
|
||||
+
|
||||
+ public boolean boatsDropBoats;
|
||||
+ private void mechanicsChanges()
|
||||
+ {
|
||||
+ boatsDropBoats = getBoolean( "game-mechanics.boats-drop-boats", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,38 +1,37 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Wed, 1 Jul 2015 00:38:10 -0700
|
||||
Date: Wed, 2 Mar 2016 12:27:07 -0600
|
||||
Subject: [PATCH] Configurable lava flow speed
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
fastDrainLava = getBoolean("fast-drain.lava", false);
|
||||
fastDrainWater = getBoolean("fast-drain.water", false);
|
||||
}
|
||||
+
|
||||
+ public int lavaFlowSpeedNormal;
|
||||
+ public int lavaFlowSpeedNether;
|
||||
+ private void lavaFlowSpeeds() {
|
||||
+ lavaFlowSpeedNormal = getInt("lava-flow-speed.normal", 30);
|
||||
+ lavaFlowSpeedNether = getInt("lava-flow-speed.nether", 10);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFlowing.java b/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
@@ -0,0 +0,0 @@ public class BlockFlowing extends BlockFluids {
|
||||
* PaperSpigot - Get flow speed. Throttle if its water and flowing adjacent to lava
|
||||
* Paper - Get flow speed. Throttle if its water and flowing adjacent to lava
|
||||
*/
|
||||
public int getFlowSpeed(World world, BlockPosition blockposition) {
|
||||
+ if (this.getMaterial() == Material.LAVA) {
|
||||
+ return world.worldProvider.o() ? world.paperSpigotConfig.lavaFlowSpeedNether : world.paperSpigotConfig.lavaFlowSpeedNormal;
|
||||
+ if (this.material == Material.LAVA) {
|
||||
+ return world.worldProvider.m() ? world.paperConfig.lavaFlowSpeedNether : world.paperConfig.lavaFlowSpeedNormal;
|
||||
+ }
|
||||
if (this.getMaterial() == Material.WATER && (
|
||||
world.getType(blockposition.north(1)).getBlock().getMaterial() == Material.LAVA ||
|
||||
world.getType(blockposition.south(1)).getBlock().getMaterial() == Material.LAVA ||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
fastDrainLava = getBoolean( "fast-drain.lava", false );
|
||||
fastDrainWater = getBoolean( "fast-drain.water", false );
|
||||
}
|
||||
+
|
||||
+ public int lavaFlowSpeedNormal;
|
||||
+ public int lavaFlowSpeedNether;
|
||||
+ private void lavaFlowSpeed()
|
||||
+ {
|
||||
+ lavaFlowSpeedNormal = getInt( "lava-flow-speed.normal", 30 );
|
||||
+ lavaFlowSpeedNether = getInt( "lava-flow-speed.nether", 10 );
|
||||
+ }
|
||||
}
|
||||
if (this.material == Material.WATER && (
|
||||
world.getType(blockposition.north(1)).getBlock().material == Material.LAVA ||
|
||||
world.getType(blockposition.south(1)).getBlock().material == Material.LAVA ||
|
||||
--
|
||||
@@ -1,9 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Tue, 14 Jul 2015 09:58:15 -0700
|
||||
Date: Wed, 2 Mar 2016 15:03:53 -0600
|
||||
Subject: [PATCH] Configurable mob spawner tick rate
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void disableIceAndSnow(){
|
||||
disableIceAndSnow = getBoolean("disable-ice-and-snow", false);
|
||||
}
|
||||
+
|
||||
+ public int mobSpawnerTickRate;
|
||||
+ private void mobSpawnerTickRate() {
|
||||
+ mobSpawnerTickRate = getInt("mob-spawner-tick-rate", 1);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
@@ -12,7 +26,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
private int maxNearbyEntities = 6;
|
||||
private int requiredPlayerRange = 16;
|
||||
private int spawnRange = 4;
|
||||
+ private int tickDelay = 0; // PaperSpigot
|
||||
+ private int tickDelay = 0; // Paper
|
||||
|
||||
public MobSpawnerAbstract() {}
|
||||
|
||||
@@ -20,48 +34,33 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
public void c() {
|
||||
+ // PaperSpigot start - Configurable mob spawner tick rate
|
||||
+ // Paper start - Configurable mob spawner tick rate
|
||||
+ if (spawnDelay > 0 && --tickDelay > 0) return;
|
||||
+ tickDelay = this.a().paperSpigotConfig.mobSpawnerTickRate;
|
||||
+ // PaperSpigot end
|
||||
if (this.g()) {
|
||||
BlockPosition blockposition = this.b();
|
||||
double d0;
|
||||
+ tickDelay = this.a().paperConfig.mobSpawnerTickRate;
|
||||
+ // Paper end
|
||||
if (!this.h()) {
|
||||
this.e = this.d;
|
||||
} else {
|
||||
@@ -0,0 +0,0 @@ public abstract class MobSpawnerAbstract {
|
||||
this.a().addParticle(EnumParticle.SMOKE_NORMAL, d1, d2, d0, 0.0D, 0.0D, 0.0D, new int[0]);
|
||||
this.a().addParticle(EnumParticle.FLAME, d1, d2, d0, 0.0D, 0.0D, 0.0D, new int[0]);
|
||||
this.a().addParticle(EnumParticle.SMOKE_NORMAL, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]);
|
||||
this.a().addParticle(EnumParticle.FLAME, d0, d1, d2, 0.0D, 0.0D, 0.0D, new int[0]);
|
||||
if (this.spawnDelay > 0) {
|
||||
- --this.spawnDelay;
|
||||
+ this.spawnDelay -= tickDelay; // PaperSpigot
|
||||
+ this.spawnDelay -= tickDelay; // Paper
|
||||
}
|
||||
|
||||
this.f = this.e;
|
||||
this.e = (this.e + (double) (1000.0F / ((float) this.spawnDelay + 200.0F))) % 360.0D;
|
||||
this.e = this.d;
|
||||
this.d = (this.d + (double) (1000.0F / ((float) this.spawnDelay + 200.0F))) % 360.0D;
|
||||
} else {
|
||||
- if (this.spawnDelay == -1) {
|
||||
+ if (this.spawnDelay < -tickDelay) { // PaperSpigot
|
||||
this.h();
|
||||
+ if (this.spawnDelay < -tickDelay) { // Paper
|
||||
this.i();
|
||||
}
|
||||
|
||||
if (this.spawnDelay > 0) {
|
||||
- --this.spawnDelay;
|
||||
+ this.spawnDelay -= tickDelay; // PaperSpigot
|
||||
+ this.spawnDelay -= tickDelay; // Paper
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
disableMoodSounds = getBoolean( "disable-mood-sounds", false );
|
||||
}
|
||||
+
|
||||
+ public int mobSpawnerTickRate;
|
||||
+ private void mobSpawnerTickRate()
|
||||
+ {
|
||||
+ mobSpawnerTickRate = getInt( "mob-spawner-tick-rate", 1 );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,24 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Sat, 7 Mar 2015 22:17:03 -0600
|
||||
Date: Tue, 1 Mar 2016 14:27:13 -0600
|
||||
Subject: [PATCH] Configurable speed for water flowing over lava
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
if (fallingBlockHeightNerf != 0) log("Falling Block Height Limit set to Y: " + fallingBlockHeightNerf);
|
||||
if (entityTNTHeightNerf != 0) log("TNT Entity Height Limit set to Y: " + entityTNTHeightNerf);
|
||||
}
|
||||
+
|
||||
+ public int waterOverLavaFlowSpeed;
|
||||
+ private void waterOverLawFlowSpeed() {
|
||||
+ waterOverLavaFlowSpeed = getInt("water-over-lava-flow-speed", 5);
|
||||
+ log("Water over lava flow speed: " + waterOverLavaFlowSpeed);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFlowing.java b/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
@@ -13,7 +28,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- int j = this.a(world);
|
||||
+ int j = this.getFlowSpeed(world, blockposition); // PaperSpigot
|
||||
+ int j = this.getFlowSpeed(world, blockposition); // Paper
|
||||
int k;
|
||||
|
||||
if (i > 0) {
|
||||
@@ -22,39 +37,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public void onPlace(World world, BlockPosition blockposition, IBlockData iblockdata) {
|
||||
if (!this.e(world, blockposition, iblockdata)) {
|
||||
- world.a(blockposition, (Block) this, this.a(world));
|
||||
+ world.a(blockposition, (Block) this, this.getFlowSpeed(world, blockposition)); // PaperSpigot
|
||||
+ world.a(blockposition, (Block) this, this.getFlowSpeed(world, blockposition)); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
+
|
||||
+ /**
|
||||
+ * PaperSpigot - Get flow speed. Throttle if its water and flowing adjacent to lava
|
||||
+ * Paper - Get flow speed. Throttle if its water and flowing adjacent to lava
|
||||
+ */
|
||||
+ public int getFlowSpeed(World world, BlockPosition blockposition) {
|
||||
+ if (this.getMaterial() == Material.WATER && (
|
||||
+ world.getType(blockposition.north(1)).getBlock().getMaterial() == Material.LAVA ||
|
||||
+ world.getType(blockposition.south(1)).getBlock().getMaterial() == Material.LAVA ||
|
||||
+ world.getType(blockposition.west(1)).getBlock().getMaterial() == Material.LAVA ||
|
||||
+ world.getType(blockposition.east(1)).getBlock().getMaterial() == Material.LAVA)) {
|
||||
+ return world.paperSpigotConfig.waterOverLavaFlowSpeed;
|
||||
+ if (this.material == Material.WATER && (
|
||||
+ world.getType(blockposition.north(1)).getBlock().material == Material.LAVA ||
|
||||
+ world.getType(blockposition.south(1)).getBlock().material == Material.LAVA ||
|
||||
+ world.getType(blockposition.west(1)).getBlock().material == Material.LAVA ||
|
||||
+ world.getType(blockposition.east(1)).getBlock().material == Material.LAVA)) {
|
||||
+ return world.paperConfig.waterOverLavaFlowSpeed;
|
||||
+ }
|
||||
+ return super.a(world);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
log( "TNT Entity Height Limit set to Y: " + tntEntityHeightNerf );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public int waterOverLavaFlowSpeed;
|
||||
+ private void waterOverLavaFlowSpeed()
|
||||
+ {
|
||||
+ waterOverLavaFlowSpeed = getInt( "water-over-lava-flow-speed", 5 );
|
||||
+ log( "Water over lava flow speed: " + waterOverLavaFlowSpeed );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,26 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 20:20:29 -0600
|
||||
Date: Tue, 1 Mar 2016 12:45:11 -0600
|
||||
Subject: [PATCH] Configurable squid spawn ranges
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
config.addDefault("world-settings.default." + path, def);
|
||||
return config.getString("world-settings." + worldName + "." + path, config.getString("world-settings.default." + path));
|
||||
}
|
||||
+
|
||||
+ public double squidMinSpawnHeight;
|
||||
+ public double squidMaxSpawnHeight;
|
||||
+ private void squidSpawnHeights() {
|
||||
+ squidMinSpawnHeight = getDouble("squid-spawn-height.minimum", 45.0D);
|
||||
+ squidMaxSpawnHeight = getDouble("squid-spawn-height.maximum", 63.0D);
|
||||
+ log("Squids will spawn between Y: " + squidMinSpawnHeight + " and Y: " + squidMaxSpawnHeight);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntitySquid.java b/src/main/java/net/minecraft/server/EntitySquid.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntitySquid.java
|
||||
@@ -11,29 +28,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public class EntitySquid extends EntityWaterAnimal {
|
||||
}
|
||||
|
||||
public boolean bR() {
|
||||
- return this.locY > 45.0D && this.locY < (double) this.world.F() && super.bR();
|
||||
+ // PaperSpigot - Configurable squid spawn range
|
||||
+ return this.locY > this.world.paperSpigotConfig.squidMinSpawnHeight && this.locY < (double) this.world.paperSpigotConfig.squidMaxSpawnHeight && super.bR();
|
||||
public boolean cF() {
|
||||
- return this.locY > 45.0D && this.locY < (double) this.world.K() && super.cF();
|
||||
+ // Paper - Configurable squid spawn height range
|
||||
+ return this.locY > world.paperConfig.squidMinSpawnHeight && this.locY < world.paperConfig.squidMaxSpawnHeight && super.cF();
|
||||
}
|
||||
|
||||
public void b(float f, float f1, float f2) {
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
allowUndeadHorseLeashing = getBoolean( "allow-undead-horse-leashing", false );
|
||||
log( "Allow undead horse types to be leashed: " + allowUndeadHorseLeashing );
|
||||
}
|
||||
+
|
||||
+ public double squidMinSpawnHeight;
|
||||
+ public double squidMaxSpawnHeight;
|
||||
+ private void squidSpawnHeight()
|
||||
+ {
|
||||
+ squidMinSpawnHeight = getDouble( "squid-spawn-height.minimum", 45.0D );
|
||||
+ squidMaxSpawnHeight = getDouble( "squid-spawn-height.maximum", 63.0D );
|
||||
+ log( "Squids will spawn between Y: " + squidMinSpawnHeight + " and Y: " + squidMaxSpawnHeight );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,37 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: gsand <gsandowns@gmail.com>
|
||||
Date: Sun, 8 Mar 2015 03:41:33 -0500
|
||||
Subject: [PATCH] Configurable strength and weakness effect modifiers
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MobEffectAttackDamage.java b/src/main/java/net/minecraft/server/MobEffectAttackDamage.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/MobEffectAttackDamage.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobEffectAttackDamage.java
|
||||
@@ -0,0 +0,0 @@ public class MobEffectAttackDamage extends MobEffectList {
|
||||
}
|
||||
|
||||
public double a(int i, AttributeModifier attributemodifier) {
|
||||
- return this.id == MobEffectList.WEAKNESS.id ? (double) (-0.5F * (float) (i + 1)) : 1.3D * (double) (i + 1);
|
||||
+ // PaperSpigot - Configurable modifiers for strength and weakness effects
|
||||
+ return this.id == MobEffectList.WEAKNESS.id ? (double) (org.github.paperspigot.PaperSpigotConfig.weaknessEffectModifier * (float) (i + 1)) : org.github.paperspigot.PaperSpigotConfig.strengthEffectModifier * (double) (i + 1);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
Bukkit.getLogger().log( Level.INFO, "Disabling player interaction limiter, your server may be more vulnerable to malicious users" );
|
||||
}
|
||||
}
|
||||
+
|
||||
+ public static double strengthEffectModifier;
|
||||
+ public static double weaknessEffectModifier;
|
||||
+ private static void effectModifiers()
|
||||
+ {
|
||||
+ strengthEffectModifier = getDouble( "effect-modifiers.strength", 1.3D );
|
||||
+ weaknessEffectModifier = getDouble( "effect-modifiers.weakness", -0.5D );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,49 +1,49 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Mon, 23 Feb 2015 14:57:28 -0600
|
||||
Date: Tue, 1 Mar 2016 23:58:50 -0600
|
||||
Subject: [PATCH] Configurable top of nether void damage
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
waterOverLavaFlowSpeed = getInt("water-over-lava-flow-speed", 5);
|
||||
log("Water over lava flow speed: " + waterOverLavaFlowSpeed);
|
||||
}
|
||||
+
|
||||
+ public boolean netherVoidTopDamage;
|
||||
+ private void netherVoidTopDamage() {
|
||||
+ netherVoidTopDamage = getBoolean( "nether-ceiling-void-damage", false );
|
||||
+ log("Top of the nether void damage: " + netherVoidTopDamage);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
this.K();
|
||||
this.U();
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * PaperSpigot - Checks if the feature is enabled and the entity is above the nether world bedrock height
|
||||
+ * Paper - Checks if the feature is enabled and the entity is above the nether world bedrock height
|
||||
+ */
|
||||
+ private boolean paperNetherCheck() {
|
||||
+ return this.world.paperSpigotConfig.netherVoidTopDamage && this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER && this.locY >= 128.0D;
|
||||
+ return this.world.paperConfig.netherVoidTopDamage && this.world.getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER && this.locY >= 128.0D;
|
||||
+ }
|
||||
+
|
||||
public void K() {
|
||||
public void U() {
|
||||
this.world.methodProfiler.a("entityBaseTick");
|
||||
if (this.vehicle != null && this.vehicle.dead) {
|
||||
if (this.isPassenger() && this.by().dead) {
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
this.fallDistance *= 0.5F;
|
||||
}
|
||||
|
||||
- if (this.locY < -64.0D) {
|
||||
+ if (this.locY < -64.0D || paperNetherCheck()) { // PaperSpigot - Configurable top-of-nether void damage
|
||||
this.O();
|
||||
+ if (this.locY < -64.0D || paperNetherCheck()) { // Paper - Configurable top-of-nether void damage)
|
||||
this.Y();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
boatsDropBoats = getBoolean( "game-mechanics.boats-drop-boats", false );
|
||||
}
|
||||
+
|
||||
+ public boolean netherVoidTopDamage;
|
||||
+ private void nethervoidTopDamage()
|
||||
+ {
|
||||
+ netherVoidTopDamage = getBoolean( "nether-ceiling-void-damage", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,40 +1,37 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 10 Jan 2016 20:40:33 -0600
|
||||
Date: Thu, 3 Mar 2016 01:13:45 -0600
|
||||
Subject: [PATCH] Disable chest cat detection
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void containerUpdateTickRate() {
|
||||
containerUpdateTickRate = getInt("container-update-tick-rate", 1);
|
||||
}
|
||||
+
|
||||
+ public boolean disableChestCatDetection;
|
||||
+ private void disableChestCatDetection() {
|
||||
+ disableChestCatDetection = getBoolean("game-mechanics.disable-chest-cat-detection", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockChest.java b/src/main/java/net/minecraft/server/BlockChest.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockChest.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockChest.java
|
||||
@@ -0,0 +0,0 @@ public class BlockChest extends BlockContainer {
|
||||
@@ -0,0 +0,0 @@ public class BlockChest extends BlockTileEntity {
|
||||
}
|
||||
|
||||
private boolean p(World world, BlockPosition blockposition) {
|
||||
+ // PaperSpigot start - Option to disable chest's cat detection (Performance++)
|
||||
+ if (world.paperSpigotConfig.disableChestCatDetection) {
|
||||
private boolean j(World world, BlockPosition blockposition) {
|
||||
+ // Paper start - Option ti dsiable chest cat detection
|
||||
+ if (world.paperConfig.disableChestCatDetection) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
Iterator iterator = world.a(EntityOcelot.class, new AxisAlignedBB((double) blockposition.getX(), (double) (blockposition.getY() + 1), (double) blockposition.getZ(), (double) (blockposition.getX() + 1), (double) (blockposition.getY() + 2), (double) (blockposition.getZ() + 1))).iterator();
|
||||
|
||||
EntityOcelot entityocelot;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
|
||||
public boolean boatsDropBoats;
|
||||
public boolean disablePlayerCrits;
|
||||
+ public boolean disableChestCatDetection;
|
||||
private void mechanicsChanges()
|
||||
{
|
||||
boatsDropBoats = getBoolean( "game-mechanics.boats-drop-boats", false );
|
||||
disablePlayerCrits = getBoolean( "game-mechanics.disable-player-crits", false );
|
||||
+ disableChestCatDetection = getBoolean( "game-mechanics.disable-chest-cat-detection", false );
|
||||
}
|
||||
|
||||
public boolean netherVoidTopDamage;
|
||||
--
|
||||
@@ -1,9 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Tue, 14 Jul 2015 09:20:44 -0700
|
||||
Date: Wed, 2 Mar 2016 14:48:03 -0600
|
||||
Subject: [PATCH] Disable explosion knockback
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
lavaFlowSpeedNormal = getInt("lava-flow-speed.normal", 30);
|
||||
lavaFlowSpeedNether = getInt("lava-flow-speed.nether", 10);
|
||||
}
|
||||
+
|
||||
+ public boolean disableExplosionKnockback;
|
||||
+ private void disableExplosionKnockback(){
|
||||
+ disableExplosionKnockback = getBoolean("disable-explosion-knockback", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -12,58 +26,46 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
}
|
||||
|
||||
- if (flag) {
|
||||
+ // PaperSpigot start - Disable explosion knockback
|
||||
+ boolean knockbackCancelled = false;
|
||||
+ if (flag && !(knockbackCancelled = world.paperSpigotConfig.disableExplosionKnockback && damagesource.isExplosion() && this instanceof EntityHuman)) {
|
||||
+ // PaperSpigot end
|
||||
this.world.broadcastEntityEffect(this, (byte) 2);
|
||||
if (damagesource != DamageSource.DROWN) {
|
||||
this.ac();
|
||||
+ boolean knockbackCancelled = world.paperConfig.disableExplosionKnockback && damagesource.isExplosion() && this instanceof EntityHuman; // Paper - Disable explosion knockback
|
||||
if (flag1) {
|
||||
if (flag) {
|
||||
this.world.broadcastEntityEffect(this, (byte) 29);
|
||||
} else if (damagesource instanceof EntityDamageSource && ((EntityDamageSource) damagesource).x()) {
|
||||
this.world.broadcastEntityEffect(this, (byte) 33);
|
||||
} else {
|
||||
+ if (!knockbackCancelled) // Paper - Disable explosion knockback
|
||||
this.world.broadcastEntityEffect(this, (byte) 2);
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
}
|
||||
|
||||
+ if (knockbackCancelled) this.world.broadcastEntityEffect(this, (byte) 2); // PaperSpigot
|
||||
+ if (knockbackCancelled) this.world.broadcastEntityEffect(this, (byte) 2); // Paper - Disable explosion knockback
|
||||
+
|
||||
String s;
|
||||
|
||||
if (this.getHealth() <= 0.0F) {
|
||||
SoundEffect soundeffect = this.bS();
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Explosion.java
|
||||
+++ b/src/main/java/net/minecraft/server/Explosion.java
|
||||
@@ -0,0 +0,0 @@ public class Explosion {
|
||||
continue;
|
||||
}
|
||||
// CraftBukkit end
|
||||
- double d14 = EnchantmentProtection.a(entity, d13);
|
||||
+ double d14 = entity instanceof EntityHuman && world.paperSpigotConfig.disableExplosionKnockback ? 0 : EnchantmentProtection.a(entity, d13); // PaperSpigot
|
||||
double d14 = 1.0D;
|
||||
|
||||
// PaperSpigot start - Fix cannons
|
||||
/*
|
||||
if (entity instanceof EntityLiving) {
|
||||
- d14 = EnchantmentProtection.a((EntityLiving) entity, d13);
|
||||
+ d14 = entity instanceof EntityHuman && world.paperConfig.disableExplosionKnockback ? 0 : EnchantmentProtection.a((EntityLiving) entity, d13); // Paper - Disable explosion knockback
|
||||
}
|
||||
|
||||
entity.motX += d8 * d14;
|
||||
@@ -0,0 +0,0 @@ public class Explosion {
|
||||
entity.g(d8 * d14, d9 * d14, d10 * d14);
|
||||
// PaperSpigot end
|
||||
if (entity instanceof EntityHuman) {
|
||||
EntityHuman entityhuman = (EntityHuman) entity;
|
||||
|
||||
- if (entity instanceof EntityHuman && !((EntityHuman) entity).abilities.isInvulnerable) {
|
||||
+ if (entity instanceof EntityHuman && !((EntityHuman) entity).abilities.isInvulnerable && !world.paperSpigotConfig.disableExplosionKnockback) { // PaperSpigot
|
||||
this.k.put((EntityHuman) entity, new Vec3D(d8 * d13, d9 * d13, d10 * d13));
|
||||
- if (!entityhuman.isSpectator() && (!entityhuman.l_() || !entityhuman.abilities.isFlying)) {
|
||||
+ if (!entityhuman.isSpectator() && (!entityhuman.l_() && !world.paperConfig.disableExplosionKnockback|| !entityhuman.abilities.isFlying)) { // Paper - Disable explosion knockback
|
||||
this.k.put(entityhuman, new Vec3D(d8 * d13, d9 * d13, d10 * d13));
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
lavaFlowSpeedNormal = getInt( "lava-flow-speed.normal", 30 );
|
||||
lavaFlowSpeedNether = getInt( "lava-flow-speed.nether", 10 );
|
||||
}
|
||||
+
|
||||
+ public boolean disableExplosionKnockback;
|
||||
+ private void disableExplosionKnockback()
|
||||
+ {
|
||||
+ disableExplosionKnockback = getBoolean( "disable-explosion-knockback", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,23 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Tue, 14 Jul 2015 09:28:31 -0700
|
||||
Date: Wed, 2 Mar 2016 14:57:24 -0600
|
||||
Subject: [PATCH] Disable ice and snow
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void disableThunder() {
|
||||
disableThunder = getBoolean("disable-thunder", false);
|
||||
}
|
||||
+
|
||||
+ public boolean disableIceAndSnow;
|
||||
+ private void disableIceAndSnow(){
|
||||
+ disableIceAndSnow = getBoolean("disable-ice-and-snow", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -13,23 +27,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
this.methodProfiler.c("iceandsnow");
|
||||
- if (this.random.nextInt(16) == 0) {
|
||||
+ if (!this.paperSpigotConfig.disableIceAndSnow && this.random.nextInt(16) == 0) { // PaperSpigot - Disable ice and snow
|
||||
this.m = this.m * 3 + 1013904223;
|
||||
i1 = this.m >> 2;
|
||||
blockposition = this.q(new BlockPosition(k + (i1 & 15), 0, l + (i1 >> 8 & 15)));
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
disableThunder = getBoolean( "disable-thunder", false );
|
||||
}
|
||||
+
|
||||
+ public boolean disableIceAndSnow;
|
||||
+ private void disableIceAndSnow()
|
||||
+ {
|
||||
+ disableIceAndSnow = getBoolean( "disable-ice-and-snow", false );
|
||||
+ }
|
||||
}
|
||||
+ if (!this.paperConfig.disableIceAndSnow && this.random.nextInt(16) == 0) { // Paper - Disable ice and snow
|
||||
this.l = this.l * 3 + 1013904223;
|
||||
l = this.l >> 2;
|
||||
blockposition = this.p(new BlockPosition(j + (l & 15), 0, k + (l >> 8 & 15)));
|
||||
--
|
||||
@@ -1,35 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Tue, 14 Jul 2015 09:30:28 -0700
|
||||
Subject: [PATCH] Disable mood sounds
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
protected void a(int i, int j, Chunk chunk) {
|
||||
this.methodProfiler.c("moodSound");
|
||||
- if (this.L == 0 && !this.isClientSide) {
|
||||
+ if (!this.paperSpigotConfig.disableMoodSounds && this.L == 0 && !this.isClientSide) { // PaperSpigot - Disable mood sounds
|
||||
this.m = this.m * 3 + 1013904223;
|
||||
int k = this.m >> 2;
|
||||
int l = k & 15;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
disableIceAndSnow = getBoolean( "disable-ice-and-snow", false );
|
||||
}
|
||||
+
|
||||
+ public boolean disableMoodSounds;
|
||||
+ private void disableMoodSounds()
|
||||
+ {
|
||||
+ disableMoodSounds = getBoolean( "disable-mood-sounds", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 24 Oct 2015 01:16:22 -0500
|
||||
Date: Wed, 2 Mar 2016 23:45:17 -0600
|
||||
Subject: [PATCH] Disable spigot tick limiters
|
||||
|
||||
|
||||
@@ -16,22 +16,22 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- for (entityLimiter.initTick();
|
||||
- entitiesThisCycle < entityList.size() && (entitiesThisCycle % 10 != 0 || entityLimiter.shouldContinue());
|
||||
- tickPosition++, entitiesThisCycle++) {
|
||||
+ // PaperSpigot start - Disable tick limiters
|
||||
+ // Paper start - Disable tick limiters
|
||||
+ //if (tickPosition < 0) tickPosition = 0;
|
||||
+ for (tickPosition = 0; tickPosition < entityList.size(); tickPosition++) {
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
tickPosition = (tickPosition < entityList.size()) ? tickPosition : 0;
|
||||
entity = (Entity) this.entityList.get(this.tickPosition);
|
||||
// CraftBukkit end
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
// Spigot start
|
||||
// Iterator iterator = this.tileEntityListTick.iterator();
|
||||
int tilesThisCycle = 0;
|
||||
- for (tileLimiter.initTick();
|
||||
- tilesThisCycle < tileEntityList.size() && (tilesThisCycle % 10 != 0 || tileLimiter.shouldContinue());
|
||||
- tilesThisCycle < tileEntityListTick.size() && (tilesThisCycle % 10 != 0 || tileLimiter.shouldContinue());
|
||||
- tileTickPosition++, tilesThisCycle++) {
|
||||
+ for (tileTickPosition = 0; tileTickPosition < tileEntityList.size(); tileTickPosition++) { // PaperSpigot - Disable tick limiters
|
||||
tileTickPosition = (tileTickPosition < tileEntityList.size()) ? tileTickPosition : 0;
|
||||
TileEntity tileentity = (TileEntity) this.tileEntityList.get(tileTickPosition);
|
||||
+ for (tileTickPosition = 0; tileTickPosition < tileEntityListTick.size(); tileTickPosition++) { // Paper - Disable tick limiters
|
||||
tileTickPosition = (tileTickPosition < tileEntityListTick.size()) ? tileTickPosition : 0;
|
||||
TileEntity tileentity = (TileEntity) this.tileEntityListTick.get(tileTickPosition);
|
||||
// Spigot start
|
||||
--
|
||||
@@ -1,35 +1,35 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Tue, 14 Jul 2015 09:26:41 -0700
|
||||
Date: Wed, 2 Mar 2016 14:52:43 -0600
|
||||
Subject: [PATCH] Disable thunder
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void disableExplosionKnockback(){
|
||||
disableExplosionKnockback = getBoolean("disable-explosion-knockback", false);
|
||||
}
|
||||
+
|
||||
+ public boolean disableThunder;
|
||||
+ private void disableThunder() {
|
||||
+ disableThunder = getBoolean("disable-thunder", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
int i1;
|
||||
int l;
|
||||
BlockPosition blockposition;
|
||||
|
||||
- if (this.random.nextInt(100000) == 0 && this.S() && this.R()) {
|
||||
+ if (!this.paperSpigotConfig.disableThunder && this.random.nextInt(100000) == 0 && this.S() && this.R()) { // PaperSpigot - Disable thunder
|
||||
this.m = this.m * 3 + 1013904223;
|
||||
i1 = this.m >> 2;
|
||||
blockposition = this.a(new BlockPosition(k + (i1 & 15), 0, l + (i1 >> 8 & 15)));
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
disableExplosionKnockback = getBoolean( "disable-explosion-knockback", false );
|
||||
}
|
||||
+
|
||||
+ public boolean disableThunder;
|
||||
+ private void disableThunder()
|
||||
+ {
|
||||
+ disableThunder = getBoolean( "disable-thunder", false );
|
||||
+ }
|
||||
}
|
||||
- if (flag && flag1 && this.random.nextInt(100000) == 0) {
|
||||
+ // Paper - Disable thunder
|
||||
+ if (!this.paperConfig.disableThunder && flag && flag1 && this.random.nextInt(100000) == 0) {
|
||||
this.l = this.l * 3 + 1013904223;
|
||||
l = this.l >> 2;
|
||||
blockposition = this.a(new BlockPosition(j + (l & 15), 0, k + (l >> 8 & 15)));
|
||||
--
|
||||
@@ -1,9 +1,9 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Tue, 3 Nov 2015 21:05:41 -0500
|
||||
Date: Wed, 2 Mar 2016 23:51:51 -0600
|
||||
Subject: [PATCH] Don't create Region File's when checking if chunk exists
|
||||
|
||||
Plugins like Dynap can end up creating tons of emtpy Region Files
|
||||
Plugins like Dynmap can end up creating tons of emtpy Region Files
|
||||
when using chunkExists.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkRegionLoader.java b/src/main/java/net/minecraft/server/ChunkRegionLoader.java
|
||||
@@ -15,8 +15,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- return RegionFileCache.a(this.d, i, j).chunkExists(i & 31, j & 31);
|
||||
+ final RegionFile region = RegionFileCache.a(this.d, i, j, false); // PaperSpigot
|
||||
+ return region != null && region.chunkExists(i & 31, j & 31); // PaperSpigot
|
||||
+ // Paper start - Don't create region files when checking that they exist
|
||||
+ final RegionFile region = RegionFileCache.a(this.d, i, j, false);
|
||||
+ return region != null && region.chunkExists(i & 31, j & 31);
|
||||
+ // Paper end
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
@@ -28,12 +30,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public static final Map<File, RegionFile> a = Maps.newHashMap(); // Spigot - private -> public
|
||||
|
||||
+ // PaperSpigot start
|
||||
+ // Paper start
|
||||
public static synchronized RegionFile a(File file, int i, int j) {
|
||||
+ return a(file, i, j, true);
|
||||
+ }
|
||||
+
|
||||
+ public static synchronized RegionFile a(File file, int i, int j, boolean create) {
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
File file1 = new File(file, "region");
|
||||
File file2 = new File(file1, "r." + (i >> 5) + "." + (j >> 5) + ".mca");
|
||||
RegionFile regionfile = (RegionFile) RegionFileCache.a.get(file2);
|
||||
@@ -41,7 +44,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
if (regionfile != null) {
|
||||
return regionfile;
|
||||
} else {
|
||||
+ if (!create && !file2.exists()) { return null; } // PaperSpigot
|
||||
+ if (!create && !file2.exists()) { return null; } // Paper
|
||||
if (!file1.exists()) {
|
||||
file1.mkdirs();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 15 Nov 2015 19:46:07 -0600
|
||||
Date: Wed, 2 Mar 2016 23:55:20 -0600
|
||||
Subject: [PATCH] Don't create a chunk just to unload it
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
return false;
|
||||
}
|
||||
|
||||
- net.minecraft.server.Chunk chunk = world.chunkProviderServer.getOrCreateChunk(x, z);
|
||||
+ net.minecraft.server.Chunk chunk = world.chunkProviderServer.getChunkIfLoaded(x, z);
|
||||
+ // PaperSpigot start - Don't create a chunk just to unload it
|
||||
- net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getChunkAt(x, z);
|
||||
+ // Paper start - Don't create a chunk just to unload it
|
||||
+ net.minecraft.server.Chunk chunk = world.getChunkProviderServer().getChunkIfLoaded(x, z);
|
||||
+ if (chunk == null) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
if (chunk.mustSave) { // If chunk had previously been queued to save, must do save to avoid loss of that data
|
||||
save = true;
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 15 Nov 2015 19:35:31 -0600
|
||||
Subject: [PATCH] Don't damage already dead ArmorStands
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityArmorStand.java b/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityArmorStand.java
|
||||
@@ -0,0 +0,0 @@ public class EntityArmorStand extends EntityLiving {
|
||||
return false;
|
||||
}
|
||||
// CraftBukkit end
|
||||
- if (this.world.isClientSide) {
|
||||
+ if (this.world.isClientSide || this.dead) {
|
||||
return false;
|
||||
- } else if (DamageSource.OUT_OF_WORLD.equals(damagesource)) {
|
||||
+ } else if (DamageSource.OUT_OF_WORLD.equals(damagesource)) { // PaperSpigot
|
||||
this.die();
|
||||
return false;
|
||||
} else if (!this.isInvulnerable(damagesource) && !this.h && !this.s()) {
|
||||
--
|
||||
39
Spigot-Server-Patches/Don-t-sleep-between-chunk-saves.patch
Normal file
39
Spigot-Server-Patches/Don-t-sleep-between-chunk-saves.patch
Normal file
@@ -0,0 +1,39 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Wed, 2 Mar 2016 23:58:29 -0600
|
||||
Subject: [PATCH] Don't sleep between chunk saves
|
||||
|
||||
For some unknown reason, Minecraft is sleeping 10ms between every single chunk being saved to disk.
|
||||
Under high chunk load/unload activity (lots of movement / teleporting), this causes the chunk unload queue
|
||||
to build up in size.
|
||||
|
||||
This has multiple impacts:
|
||||
1) Performance of the unload queue itself - The save thread is pretty ineffecient for how it accesses it
|
||||
By letting the queue get larger, checking and popping work off the queue can get less performant.
|
||||
2) Performance of chunk loading - As with #1, chunk loads also have to check this queue when loading
|
||||
chunk data so that it doesn't load stale data if new data is pending write to disk.
|
||||
3) Memory Usage - The entire chunk has been serialized to NBT, and now sits in this queue. This leads to
|
||||
elevated memory usage, and then the objects used in the serialization sit around longer than needed,
|
||||
resulting in promotion to Old Generation instead of dying young.
|
||||
|
||||
If there is work to do, then the thread should be doing its work, and only sleep when it is done.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/FileIOThread.java b/src/main/java/net/minecraft/server/FileIOThread.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/FileIOThread.java
|
||||
+++ b/src/main/java/net/minecraft/server/FileIOThread.java
|
||||
@@ -0,0 +0,0 @@ public class FileIOThread implements Runnable {
|
||||
++this.d;
|
||||
}
|
||||
|
||||
+ /* // Paper start - don't sleep in between chunks so we unload faster.
|
||||
try {
|
||||
Thread.sleep(this.e ? 0L : 10L);
|
||||
} catch (InterruptedException interruptedexception) {
|
||||
interruptedexception.printStackTrace();
|
||||
- }
|
||||
+ } */ // Paper end
|
||||
}
|
||||
|
||||
if (this.b.isEmpty()) {
|
||||
--
|
||||
@@ -1,9 +1,28 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Sat, 7 Mar 2015 22:03:47 -0600
|
||||
Date: Tue, 1 Mar 2016 14:14:15 -0600
|
||||
Subject: [PATCH] Drop falling block and tnt entities at the specified height
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
keepSpawnInMemory = getBoolean("keep-spawn-loaded", true);
|
||||
log("Keep spawn chunk loaded: " + keepSpawnInMemory);
|
||||
}
|
||||
+
|
||||
+ public int fallingBlockHeightNerf;
|
||||
+ public int entityTNTHeightNerf;
|
||||
+ private void heightNerfs() {
|
||||
+ fallingBlockHeightNerf = getInt("falling-block-height-nerf", 0);
|
||||
+ entityTNTHeightNerf = getInt("tnt-entity-height-nerf", 0);
|
||||
+
|
||||
+ if (fallingBlockHeightNerf != 0) log("Falling Block Height Limit set to Y: " + fallingBlockHeightNerf);
|
||||
+ if (entityTNTHeightNerf != 0) log("TNT Entity Height Limit set to Y: " + entityTNTHeightNerf);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -13,15 +32,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.motY -= 0.03999999910593033D;
|
||||
this.move(this.motX, this.motY, this.motZ);
|
||||
+
|
||||
+ // PaperSpigot start - Drop falling blocks above the specified height
|
||||
+ if (this.world.paperSpigotConfig.fallingBlockHeightNerf != 0 && this.locY > this.world.paperSpigotConfig.fallingBlockHeightNerf) {
|
||||
+ // Paper start - Configurable EntityFallingBlock height nerf
|
||||
+ if (this.world.paperConfig.fallingBlockHeightNerf != 0 && this.locY > this.world.paperConfig.fallingBlockHeightNerf) {
|
||||
+ if (this.dropItem) {
|
||||
+ this.a(new ItemStack(block, 1, block.getDropData(this.block)), 0.0F);
|
||||
+ }
|
||||
+
|
||||
+ this.die();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.motX *= 0.9800000190734863D;
|
||||
this.motY *= 0.9800000190734863D;
|
||||
@@ -35,42 +54,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.motY -= 0.03999999910593033D;
|
||||
this.move(this.motX, this.motY, this.motZ);
|
||||
+
|
||||
+ // PaperSpigot start - Drop TNT entities above the specified height
|
||||
+ if (this.world.paperSpigotConfig.tntEntityHeightNerf != 0 && this.locY > this.world.paperSpigotConfig.tntEntityHeightNerf) {
|
||||
+ // Paper start - Configurable TNT entity height nerf
|
||||
+ if (this.world.paperConfig.entityTNTHeightNerf != 0 && this.locY > this.world.paperConfig.entityTNTHeightNerf) {
|
||||
+ this.die();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.motX *= 0.9800000190734863D;
|
||||
this.motY *= 0.9800000190734863D;
|
||||
this.motZ *= 0.9800000190734863D;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
keepSpawnInMemory = getBoolean( "keep-spawn-loaded", true );
|
||||
log( "Keep spawn chunk loaded: " + keepSpawnInMemory );
|
||||
}
|
||||
+
|
||||
+ public int fallingBlockHeightNerf;
|
||||
+ private void fallingBlockheightNerf()
|
||||
+ {
|
||||
+ fallingBlockHeightNerf = getInt( "falling-block-height-nerf", 0 );
|
||||
+ if ( fallingBlockHeightNerf != 0 )
|
||||
+ {
|
||||
+ log( "Falling Block Height Limit set to Y: " + fallingBlockHeightNerf );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ public int tntEntityHeightNerf;
|
||||
+ private void tntEntityHeightNerf()
|
||||
+ {
|
||||
+ tntEntityHeightNerf = getInt( "tnt-entity-height-nerf", 0 );
|
||||
+ if ( tntEntityHeightNerf != 0 )
|
||||
+ {
|
||||
+ log( "TNT Entity Height Limit set to Y: " + tntEntityHeightNerf );
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Tue, 22 Dec 2015 18:16:11 -0600
|
||||
Date: Thu, 3 Mar 2016 00:07:23 -0600
|
||||
Subject: [PATCH] EAR: Fix bug with teleporting entities
|
||||
|
||||
[17:53:15] <Aikar> had a reproduceable issue of losing entities on teleport, now resolved
|
||||
@@ -11,27 +11,37 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
protected DataWatcher datawatcher;
|
||||
private double ar;
|
||||
private double as;
|
||||
- public boolean ad; public boolean isAddedToChunk() { return ad; } // Spigot // PAIL
|
||||
- public int ae;
|
||||
- public int af;
|
||||
- public int ag;
|
||||
+ public boolean ad;
|
||||
+ // PaperSpigot start - EAR: Fix bug with teleporting entities
|
||||
private static final DataWatcherObject<Boolean> aA = DataWatcher.a(Entity.class, DataWatcherRegistry.h);
|
||||
private static final DataWatcherObject<Boolean> aB = DataWatcher.a(Entity.class, DataWatcherRegistry.h);
|
||||
public boolean aa;
|
||||
- public int ab;
|
||||
- public int ac;
|
||||
- public int ad;
|
||||
+ // Paper start - EAR: Fix bug with teleporting entities
|
||||
+ public boolean isAddedToChunk() {
|
||||
+ int chunkX = MathHelper.floor(locX / 16.0D);
|
||||
+ int chunkY = MathHelper.floor(locY / 16.0D);
|
||||
+ int chunkZ = MathHelper.floor(locZ / 16.0D);
|
||||
+
|
||||
+ return ad && getChunkX() == chunkX && getChunkY() == chunkY || getChunkZ() == chunkZ;
|
||||
+ return aa && getChunkX() == chunkX && getChunkY() == chunkY || getChunkZ() == chunkZ;
|
||||
+ }
|
||||
+ public int ae; public int getChunkX() { return ae; } // PAIL
|
||||
+ public int af; public int getChunkY() { return af; } // PAIL
|
||||
+ public int ag; public int getChunkZ() { return ag; } // PAIL
|
||||
+ // PaperSpigot end
|
||||
+ public int ab; public int getChunkX() { return ab; }
|
||||
+ public int ac; public int getChunkY() { return ac; }
|
||||
+ public int ad; public int getChunkZ() { return ad; }
|
||||
+ // Paper end
|
||||
public boolean ah;
|
||||
public boolean ai;
|
||||
public boolean impulse;
|
||||
public int portalCooldown;
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -0,0 +0,0 @@ public class ActivationRange
|
||||
SpigotTimings.checkIfActiveTimer.startTiming();
|
||||
// Never safe to skip fireworks or entities not yet added to chunk
|
||||
// PAIL: inChunk
|
||||
- if ( !entity.aa || entity instanceof EntityFireworks ) {
|
||||
+ if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks ) { // Paper - EAR: Fix bug with teleporting entities
|
||||
SpigotTimings.checkIfActiveTimer.stopTiming();
|
||||
return true;
|
||||
}
|
||||
--
|
||||
@@ -1,25 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Fri, 13 Feb 2015 14:49:30 -0600
|
||||
Subject: [PATCH] Enderman drop the block they're holding when they die
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderman.java b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderman.java
|
||||
@@ -0,0 +0,0 @@ public class EntityEnderman extends EntityMonster {
|
||||
}
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Drop the block the entity is holding when it dies
|
||||
+ Item carriedItem = Item.getItemOf(getCarried().getBlock());
|
||||
+ if (carriedItem != null) {
|
||||
+ this.a(carriedItem, 1);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
}
|
||||
|
||||
public void setCarried(IBlockData iblockdata) {
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Wed, 8 Oct 2014 19:51:28 -0400
|
||||
Date: Thu, 3 Mar 2016 01:17:12 -0600
|
||||
Subject: [PATCH] Ensure commands are not ran async
|
||||
|
||||
Plugins calling Player.chat("/foo") or Server.dispatchCommand() could
|
||||
@@ -17,11 +17,11 @@ diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
||||
}
|
||||
|
||||
if (!async && s.startsWith("/")) {
|
||||
+ // PaperSpigot Start
|
||||
+ // Paper Start
|
||||
+ if (!org.bukkit.Bukkit.isPrimaryThread()) {
|
||||
+ final String fCommandLine = s;
|
||||
+ MinecraftServer.LOGGER.log(org.apache.logging.log4j.Level.ERROR, "Command Dispatched Async: " + fCommandLine);
|
||||
@@ -43,7 +43,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ throw new RuntimeException("Exception processing chat command", e.getCause());
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot End
|
||||
+ // Paper End
|
||||
this.handleCommand(s);
|
||||
} else if (this.player.getChatFlags() == EntityHuman.EnumChatVisibility.SYSTEM) {
|
||||
// Do nothing, this is coming from a plugin
|
||||
@@ -55,7 +55,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
Validate.notNull(sender, "Sender cannot be null");
|
||||
Validate.notNull(commandLine, "CommandLine cannot be null");
|
||||
|
||||
+ // PaperSpigot Start
|
||||
+ // Paper Start
|
||||
+ if (!Bukkit.isPrimaryThread()) {
|
||||
+ final CommandSender fSender = sender;
|
||||
+ final String fCommandLine = commandLine;
|
||||
@@ -76,7 +76,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ throw new RuntimeException("Exception processing dispatch command", e.getCause());
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot End
|
||||
+ // Paper End
|
||||
+
|
||||
if (commandMap.dispatch(sender, commandLine)) {
|
||||
return true;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Joseph Hirschfeld <joe@ibj.io>
|
||||
Date: Sat, 20 Feb 2016 02:19:31 -0500
|
||||
Date: Thu, 3 Mar 2016 02:33:53 -0600
|
||||
Subject: [PATCH] Ensure inv drag is in bounds
|
||||
|
||||
|
||||
@@ -9,12 +9,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/Container.java
|
||||
+++ b/src/main/java/net/minecraft/server/Container.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Container {
|
||||
this.d();
|
||||
}
|
||||
} else if (this.g == 1) {
|
||||
- Slot slot = (Slot) this.c.get(i);
|
||||
+ Slot slot = i < this.c.size() ? this.c.get(i) : null; // Paper - Ensure drag in bounds
|
||||
}
|
||||
|
||||
if (slot != null && a(slot, playerinventory.getCarried(), true) && slot.isAllowed(playerinventory.getCarried()) && playerinventory.getCarried().count > this.h.size() && this.b(slot)) {
|
||||
this.h.add(slot);
|
||||
public ItemStack b(EntityHuman entityhuman, int i) {
|
||||
- Slot slot = (Slot) this.c.get(i);
|
||||
+ Slot slot = i < this.c.size() ? this.c.get(i) : null; // Paper - Ensure drag in bounds
|
||||
|
||||
return slot != null ? slot.getItem() : null;
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Riley Park <rileysebastianpark@gmail.com>
|
||||
Date: Mon, 15 Feb 2016 07:11:28 -0800
|
||||
Date: Thu, 3 Mar 2016 02:15:57 -0600
|
||||
Subject: [PATCH] Expose server CommandMap
|
||||
|
||||
|
||||
@@ -16,6 +16,4 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public SimpleCommandMap getCommandMap() {
|
||||
return commandMap;
|
||||
}
|
||||
--
|
||||
2.7.0.rc0.20.g4b9ab0e
|
||||
|
||||
--
|
||||
@@ -1,43 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Fri, 5 Jun 2015 00:43:17 -0700
|
||||
Subject: [PATCH] FallingBlock and TNT entities collide with specific blocks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
if ( block != null )
|
||||
{
|
||||
- block.getBlock().a(this, blockposition, block, axisalignedbb, arraylist, entity);
|
||||
+ // PaperSpigot start - FallingBlocks and TNT collide with specific non-collidable blocks
|
||||
+ Block b = block.getBlock();
|
||||
+ if (entity.world.paperSpigotConfig.fallingBlocksCollideWithSigns && (entity instanceof EntityTNTPrimed || entity instanceof EntityFallingBlock) && (b instanceof BlockSign || b instanceof BlockFenceGate || b instanceof BlockTorch || b instanceof BlockButtonAbstract || b instanceof BlockLever || b instanceof BlockTripwireHook || b instanceof BlockTripwire || b instanceof BlockChest || b instanceof BlockSlowSand || b instanceof BlockBed || b instanceof BlockEnderChest || b instanceof BlockEnchantmentTable || b instanceof BlockBrewingStand)) {
|
||||
+ AxisAlignedBB aabb = AxisAlignedBB.a(x, y, z, x + 1.0, y + 1.0, z + 1.0);
|
||||
+ if (axisalignedbb.b(aabb)) arraylist.add(aabb);
|
||||
+ } else {
|
||||
+ b.a(this, blockposition, block, axisalignedbb, arraylist, entity);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
fixCannons = getBoolean( "fix-cannons", false );
|
||||
log( "Fix TNT cannons: " + fixCannons );
|
||||
}
|
||||
+
|
||||
+ public boolean fallingBlocksCollideWithSigns;
|
||||
+ private void fallingBlocksCollideWithSigns()
|
||||
+ {
|
||||
+ fallingBlocksCollideWithSigns = getBoolean( "falling-blocks-collide-with-signs", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -0,0 +1,265 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Tue, 1 Mar 2016 23:45:08 -0600
|
||||
Subject: [PATCH] FallingBlock and TNTPrimed source location API
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockDragonEgg.java b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockDragonEgg.java
|
||||
@@ -0,0 +0,0 @@ public class BlockDragonEgg extends Block {
|
||||
byte b0 = 32;
|
||||
|
||||
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
||||
- world.addEntity(new EntityFallingBlock(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
||||
+ world.addEntity(new EntityFallingBlock(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), this.getBlockData()));
|
||||
+ // Paper end
|
||||
} else {
|
||||
world.setAir(blockposition);
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFalling.java b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockFalling.java
|
||||
@@ -0,0 +0,0 @@ public class BlockFalling extends Block {
|
||||
|
||||
if (!BlockFalling.instaFall && world.areChunksLoadedBetween(blockposition.a(-b0, -b0, -b0), blockposition.a(b0, b0, b0))) {
|
||||
if (!world.isClientSide) {
|
||||
- EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
||||
+ // Paper start - Add FallingBlock source location
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F));
|
||||
+ EntityFallingBlock entityfallingblock = new EntityFallingBlock(loc, world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY(), (double) blockposition.getZ() + 0.5D, world.getType(blockposition));
|
||||
+ // Paper end
|
||||
|
||||
this.a(entityfallingblock);
|
||||
world.addEntity(entityfallingblock);
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockTNT.java b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockTNT.java
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
|
||||
public void wasExploded(World world, BlockPosition blockposition, Explosion explosion) {
|
||||
if (!world.isClientSide) {
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource());
|
||||
+ org.bukkit.Location loc = explosion.source instanceof EntityTNTPrimed ? ((EntityTNTPrimed) explosion.source).sourceLoc : new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), explosion.getSource()); // Paper - Add loc
|
||||
|
||||
entitytntprimed.setFuseTicks((short) (world.random.nextInt(entitytntprimed.getFuseTicks() / 4) + entitytntprimed.getFuseTicks() / 8));
|
||||
world.addEntity(entitytntprimed);
|
||||
@@ -0,0 +0,0 @@ public class BlockTNT extends Block {
|
||||
public void a(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving) {
|
||||
if (!world.isClientSide) {
|
||||
if (((Boolean) iblockdata.get(BlockTNT.EXPLODE)).booleanValue()) {
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving);
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), blockposition.getX(), blockposition.getY(), blockposition.getZ()); // Paper
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(loc, world, (double) ((float) blockposition.getX() + 0.5F), (double) blockposition.getY(), (double) ((float) blockposition.getZ() + 0.5F), entityliving); // Paper - Add loc
|
||||
|
||||
world.addEntity(entitytntprimed);
|
||||
world.a((EntityHuman) null, entitytntprimed.locX, entitytntprimed.locY, entitytntprimed.locZ, SoundEffects.gj, SoundCategory.BLOCKS, 1.0F, 1.0F);
|
||||
diff --git a/src/main/java/net/minecraft/server/DispenserRegistry.java b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
+++ b/src/main/java/net/minecraft/server/DispenserRegistry.java
|
||||
@@ -0,0 +0,0 @@ public class DispenserRegistry {
|
||||
}
|
||||
}
|
||||
|
||||
- EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null);
|
||||
+ EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(block.getLocation(), world, event.getVelocity().getX(), event.getVelocity().getY(), event.getVelocity().getZ(), (EntityLiving) null); // Paper - Add source loc
|
||||
// CraftBukkit end
|
||||
|
||||
world.addEntity(entitytntprimed);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
private float fallHurtAmount = 2.0F;
|
||||
public NBTTagCompound tileEntityData;
|
||||
protected static final DataWatcherObject<BlockPosition> d = DataWatcher.a(EntityFallingBlock.class, DataWatcherRegistry.j);
|
||||
+ public org.bukkit.Location sourceLoc; // Paper
|
||||
|
||||
+ // Paper start - FallingBlock source location API
|
||||
public EntityFallingBlock(World world) {
|
||||
+ this(null, world);
|
||||
+ }
|
||||
+
|
||||
+ public EntityFallingBlock(org.bukkit.Location loc, World world) {
|
||||
super(world);
|
||||
}
|
||||
|
||||
public EntityFallingBlock(World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
||||
+ this(null, world, d0, d1, d2, iblockdata);
|
||||
+ }
|
||||
+
|
||||
+ public EntityFallingBlock(org.bukkit.Location loc, World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
||||
super(world);
|
||||
+ sourceLoc = loc;
|
||||
+ // Paper end
|
||||
this.block = iblockdata;
|
||||
this.i = true;
|
||||
this.setSize(0.98F, 0.98F);
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
nbttagcompound.set("TileEntityData", this.tileEntityData);
|
||||
}
|
||||
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ if (sourceLoc != null) {
|
||||
+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX());
|
||||
+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY());
|
||||
+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ());
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
protected void a(NBTTagCompound nbttagcompound) {
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
this.block = Blocks.SAND.getBlockData();
|
||||
}
|
||||
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ if (nbttagcompound.hasKey("SourceLoc_x")) {
|
||||
+ int srcX = nbttagcompound.getInt("SourceLoc_x");
|
||||
+ int srcY = nbttagcompound.getInt("SourceLoc_y");
|
||||
+ int srcZ = nbttagcompound.getInt("SourceLoc_z");
|
||||
+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
public void a(boolean flag) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
private int c;
|
||||
public float yield = 4; // CraftBukkit - add field
|
||||
public boolean isIncendiary = false; // CraftBukkit - add field
|
||||
+ public org.bukkit.Location sourceLoc; // Paper - TNT soure location API
|
||||
|
||||
+ // Paper start - TNT source location API
|
||||
public EntityTNTPrimed(World world) {
|
||||
+ this(null, world);
|
||||
+ }
|
||||
+
|
||||
+ public EntityTNTPrimed(org.bukkit.Location loc, World world) {
|
||||
super(world);
|
||||
+ sourceLoc = loc;
|
||||
+ // Paper end
|
||||
this.c = 80;
|
||||
this.i = true;
|
||||
this.setSize(0.98F, 0.98F);
|
||||
}
|
||||
|
||||
public EntityTNTPrimed(World world, double d0, double d1, double d2, EntityLiving entityliving) {
|
||||
- this(world);
|
||||
+ this(null, world, d0, d1, d2, entityliving);
|
||||
+ }
|
||||
+
|
||||
+ public EntityTNTPrimed(org.bukkit.Location loc, World world, double d0, double d1, double d2, EntityLiving entityliving) {
|
||||
+ this(loc, world);
|
||||
this.setPosition(d0, d1, d2);
|
||||
float f = (float) (Math.random() * 6.2831854820251465D);
|
||||
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
|
||||
protected void b(NBTTagCompound nbttagcompound) {
|
||||
nbttagcompound.setShort("Fuse", (short) this.getFuseTicks());
|
||||
+ // Paper start - TNT source location API
|
||||
+ if (sourceLoc != null) {
|
||||
+ nbttagcompound.setInt("SourceLoc_x", sourceLoc.getBlockX());
|
||||
+ nbttagcompound.setInt("SourceLoc_y", sourceLoc.getBlockY());
|
||||
+ nbttagcompound.setInt("SourceLoc_z", sourceLoc.getBlockZ());
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
protected void a(NBTTagCompound nbttagcompound) {
|
||||
this.setFuseTicks(nbttagcompound.getShort("Fuse"));
|
||||
+ // Paper start - TNT source location API
|
||||
+ if (nbttagcompound.hasKey("SourceLoc_x")) {
|
||||
+ int srcX = nbttagcompound.getInt("SourceLoc_x");
|
||||
+ int srcY = nbttagcompound.getInt("SourceLoc_y");
|
||||
+ int srcZ = nbttagcompound.getInt("SourceLoc_z");
|
||||
+ sourceLoc = new org.bukkit.Location(world.getWorld(), srcX, srcY, srcZ);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
public EntityLiving getSource() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
double y = location.getBlockY() + 0.5;
|
||||
double z = location.getBlockZ() + 0.5;
|
||||
|
||||
- EntityFallingBlock entity = new EntityFallingBlock(world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ location = location.clone();
|
||||
+ EntityFallingBlock entity = new EntityFallingBlock(location, world, x, y, z, net.minecraft.server.Block.getById(material.getId()).fromLegacyData(data));
|
||||
+ // Paper end
|
||||
entity.ticksLived = 1;
|
||||
|
||||
world.addEntity(entity, SpawnReason.CUSTOM);
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
int type = CraftMagicNumbers.getId(blockData.getBlock());
|
||||
int data = blockData.getBlock().toLegacyData(blockData);
|
||||
|
||||
- entity = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ location = location.clone();
|
||||
+ entity = new EntityFallingBlock(location, world, x + 0.5, y + 0.5, z + 0.5, net.minecraft.server.Block.getById(type).fromLegacyData(data));
|
||||
+ // Paper end
|
||||
} else if (Projectile.class.isAssignableFrom(clazz)) {
|
||||
if (Snowball.class.isAssignableFrom(clazz)) {
|
||||
entity = new EntitySnowball(world, x, y, z);
|
||||
@@ -0,0 +0,0 @@ public class CraftWorld implements World {
|
||||
throw new IllegalArgumentException("Cannot spawn hanging entity for " + clazz.getName() + " at " + location);
|
||||
}
|
||||
} else if (TNTPrimed.class.isAssignableFrom(clazz)) {
|
||||
- entity = new EntityTNTPrimed(world, x, y, z, null);
|
||||
+ org.bukkit.Location loc = new org.bukkit.Location(world.getWorld(), x, y, z); // Paper
|
||||
+ entity = new EntityTNTPrimed(loc, world, x, y, z, null);
|
||||
} else if (ExperienceOrb.class.isAssignableFrom(clazz)) {
|
||||
entity = new EntityExperienceOrb(world, x, y, z, 0);
|
||||
} else if (Weather.class.isAssignableFrom(clazz)) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingSand.java
|
||||
@@ -0,0 +0,0 @@ public class CraftFallingSand extends CraftEntity implements FallingSand {
|
||||
public void setHurtEntities(boolean hurtEntities) {
|
||||
getHandle().hurtEntities = hurtEntities;
|
||||
}
|
||||
+
|
||||
+ // Paper start - Add FallingBlock source location API
|
||||
+ @Override
|
||||
+ public org.bukkit.Location getSourceLoc() {
|
||||
+ return getHandle().sourceLoc;
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
||||
|
||||
return null;
|
||||
}
|
||||
+
|
||||
+ // Paper start
|
||||
+ @Override
|
||||
+ public org.bukkit.Location getSourceLoc() {
|
||||
+ return getHandle().sourceLoc;
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
--
|
||||
@@ -1,9 +1,25 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 30 Jun 2015 19:31:02 -0700
|
||||
Date: Wed, 2 Mar 2016 12:20:52 -0600
|
||||
Subject: [PATCH] Fast draining
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
optimizeExplosions = getBoolean("optimize-explosions", false);
|
||||
log("Optimize explosions: " + optimizeExplosions);
|
||||
}
|
||||
+
|
||||
+ public boolean fastDrainLava;
|
||||
+ public boolean fastDrainWater;
|
||||
+ private void fastDrain() {
|
||||
+ fastDrainLava = getBoolean("fast-drain.lava", false);
|
||||
+ fastDrainWater = getBoolean("fast-drain.water", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockFlowing.java b/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockFlowing.java
|
||||
@@ -13,7 +29,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- if (this.material == Material.LAVA && i < 8 && i1 < 8 && i1 > i && random.nextInt(4) != 0) {
|
||||
+ if (!world.paperSpigotConfig.fastDrainLava && this.material == Material.LAVA && i < 8 && i1 < 8 && i1 > i && random.nextInt(4) != 0) { // PaperSpigot
|
||||
+ if (!world.paperConfig.fastDrainLava && this.material == Material.LAVA && i < 8 && i1 < 8 && i1 > i && random.nextInt(4) != 0) { // Paper
|
||||
j *= 4;
|
||||
}
|
||||
|
||||
@@ -22,7 +38,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
} else {
|
||||
i = i1;
|
||||
- if (i1 < 0) {
|
||||
+ if (i1 < 0 || canFastDrain(world, blockposition)) { // PaperSpigot - Fast draining
|
||||
+ if (i1 < 0 || canFastDrain(world, blockposition)) { // Paper - Fast draining
|
||||
world.setAir(blockposition);
|
||||
} else {
|
||||
iblockdata = iblockdata.set(BlockFlowing.LEVEL, Integer.valueOf(i1));
|
||||
@@ -32,68 +48,51 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
+
|
||||
+ /**
|
||||
+ * PaperSpigot - Data check method for fast draining
|
||||
+ * Paper - Data check method for fast draining
|
||||
+ */
|
||||
+ public int getData(World world, BlockPosition position) {
|
||||
+ int data = this.e(world, position);
|
||||
+ int data = this.c((IBlockAccess) world, position);
|
||||
+ return data < 8 ? data : 0;
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
+ * PaperSpigot - Checks surrounding blocks to determine if block can be fast drained
|
||||
+ * Paper - Checks surrounding blocks to determine if block can be fast drained
|
||||
+ */
|
||||
+ public boolean canFastDrain(World world, BlockPosition position) {
|
||||
+ boolean result = false;
|
||||
+ int data = getData(world, position);
|
||||
+ if (this.material == Material.WATER) {
|
||||
+ if (world.paperSpigotConfig.fastDrainWater) {
|
||||
+ if (world.paperConfig.fastDrainWater) {
|
||||
+ result = true;
|
||||
+ if (getData(world, position.down()) < 0) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.north()).getBlock().getMaterial() == Material.WATER && getData(world, position.north()) < data) {
|
||||
+ } else if (world.getType(position.north()).getBlock().getBlockData().getMaterial() == Material.WATER && getData(world, position.north()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.south()).getBlock().getMaterial() == Material.WATER && getData(world, position.south()) < data) {
|
||||
+ } else if (world.getType(position.south()).getBlock().getBlockData().getMaterial() == Material.WATER && getData(world, position.south()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.west()).getBlock().getMaterial() == Material.WATER && getData(world, position.west()) < data) {
|
||||
+ } else if (world.getType(position.west()).getBlock().getBlockData().getMaterial() == Material.WATER && getData(world, position.west()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.east()).getBlock().getMaterial() == Material.WATER && getData(world, position.east()) < data) {
|
||||
+ } else if (world.getType(position.east()).getBlock().getBlockData().getMaterial() == Material.WATER && getData(world, position.east()) < data) {
|
||||
+ result = false;
|
||||
+ }
|
||||
+ }
|
||||
+ } else if (this.material == Material.LAVA) {
|
||||
+ if (world.paperSpigotConfig.fastDrainLava) {
|
||||
+ if (world.paperConfig.fastDrainLava) {
|
||||
+ result = true;
|
||||
+ if (getData(world, position.down()) < 0 || world.getType(position.up()).getBlock().getMaterial() != Material.AIR) {
|
||||
+ if (getData(world, position.down()) < 0 || world.getType(position.up()).getBlock().getBlockData().getMaterial() != Material.AIR) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.north()).getBlock().getMaterial() == Material.LAVA && getData(world, position.north()) < data) {
|
||||
+ } else if (world.getType(position.north()).getBlock().getBlockData().getMaterial() == Material.LAVA && getData(world, position.north()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.south()).getBlock().getMaterial() == Material.LAVA && getData(world, position.south()) < data) {
|
||||
+ } else if (world.getType(position.south()).getBlock().getBlockData().getMaterial() == Material.LAVA && getData(world, position.south()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.west()).getBlock().getMaterial() == Material.LAVA && getData(world, position.west()) < data) {
|
||||
+ } else if (world.getType(position.west()).getBlock().getBlockData().getMaterial() == Material.LAVA && getData(world, position.west()) < data) {
|
||||
+ result = false;
|
||||
+ } else if (world.getType(position.east()).getBlock().getMaterial() == Material.LAVA && getData(world, position.east()) < data) {
|
||||
+ } else if (world.getType(position.east()).getBlock().getBlockData().getMaterial() == Material.LAVA && getData(world, position.east()) < data) {
|
||||
+ result = false;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ return result;
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
optimizeExplosions = getBoolean( "optimize-explosions", false );
|
||||
}
|
||||
+
|
||||
+ public boolean fastDrainLava;
|
||||
+ public boolean fastDrainWater;
|
||||
+ private void fastDraining()
|
||||
+ {
|
||||
+ fastDrainLava = getBoolean( "fast-drain.lava", false );
|
||||
+ fastDrainWater = getBoolean( "fast-drain.water", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,36 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Thinkofdeath <thinkofdeath@spigotmc.org>
|
||||
Date: Mon, 15 Feb 2016 23:16:00 -0600
|
||||
Subject: [PATCH] Fix FurnaceMinecarts losing all of their velocity on certain
|
||||
corners
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityMinecartFurnace.java b/src/main/java/net/minecraft/server/EntityMinecartFurnace.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityMinecartFurnace.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityMinecartFurnace.java
|
||||
@@ -0,0 +0,0 @@ public class EntityMinecartFurnace extends EntityMinecartAbstract {
|
||||
|
||||
if (d0 > 1.0E-4D && this.motX * this.motX + this.motZ * this.motZ > 0.001D) {
|
||||
d0 = (double) MathHelper.sqrt(d0);
|
||||
- this.a /= d0;
|
||||
- this.b /= d0;
|
||||
- if (this.a * this.motX + this.b * this.motZ < 0.0D) {
|
||||
- this.a = 0.0D;
|
||||
- this.b = 0.0D;
|
||||
- } else {
|
||||
- double d1 = d0 / this.m();
|
||||
-
|
||||
- this.a *= d1;
|
||||
- this.b *= d1;
|
||||
- }
|
||||
+ // PaperSpigot - Don't lose all your velocity on corners
|
||||
+ // https://bugs.mojang.com/browse/MC-51053?focusedCommentId=223854
|
||||
+ double d1 = (double) MathHelper.sqrt(this.motX * this.motX + this.motZ * this.motZ);
|
||||
+ this.a = (motX / d1) * d0;
|
||||
+ this.b = (motZ / d1) * d0;
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Sudzzy <originmc@outlook.com>
|
||||
Date: Sun, 28 Feb 2016 18:33:06 +0000
|
||||
Date: Thu, 3 Mar 2016 02:50:31 -0600
|
||||
Subject: [PATCH] Fix inter-world teleportation glitches
|
||||
|
||||
People are able to abuse the way Bukkit handles teleportation across worlds since it provides a built in teleportation safety check.
|
||||
@@ -10,6 +10,20 @@ To abuse the safety check, players are required to get into a location deemed un
|
||||
Example setup to perform the glitch: http://puu.sh/ng3PC/cf072dcbdb.png
|
||||
The wanted destination was on top of the emerald block however the player ended on top of the diamond block. This only is the case if the player is teleporting between worlds.
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
private void portalSearchRadius() {
|
||||
portalSearchRadius = getInt("portal-search-radius", 128);
|
||||
}
|
||||
+
|
||||
+ public boolean disableTeleportationSuffocationCheck;
|
||||
+ private void disableTeleportationSuffocationCheck() {
|
||||
+ disableTeleportationSuffocationCheck = getBoolean("disable-teleportation-suffocation-check", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -19,23 +33,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
entity.playerConnection.teleport(to);
|
||||
} else {
|
||||
- server.getHandle().moveToWorld(entity, toWorld.dimension, true, to, true);
|
||||
+ server.getHandle().moveToWorld(entity, toWorld.dimension, true, to, !toWorld.paperSpigotConfig.disableTeleportationSuffocationCheck);
|
||||
+ // Paper - Configurable suffocation check
|
||||
+ server.getHandle().moveToWorld(entity, toWorld.dimension, true, to, !toWorld.paperConfig.disableTeleportationSuffocationCheck);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
portalSearchRadius = getInt("portal-search-radius", 128);
|
||||
}
|
||||
+
|
||||
+ public boolean disableTeleportationSuffocationCheck;
|
||||
+ private void disableTeleportationSuffocationCheck()
|
||||
+ {
|
||||
+ disableTeleportationSuffocationCheck = getBoolean("disable-teleportation-suffocation-check", false);
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,19 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
||||
Date: Thu, 30 Apr 2015 22:42:34 -0400
|
||||
Subject: [PATCH] Fix jar being shaded multiple times
|
||||
|
||||
|
||||
diff --git a/pom.xml b/pom.xml
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/pom.xml
|
||||
+++ b/pom.xml
|
||||
@@ -0,0 +0,0 @@
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.5</version>
|
||||
<configuration>
|
||||
+ <forceCreation>true</forceCreation> <!-- Required to prevent shading the jar multiple times -->
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Main-Class>org.bukkit.craftbukkit.Main</Main-Class>
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Mon, 1 Jun 2015 22:54:18 -0700
|
||||
Date: Wed, 2 Mar 2016 01:39:52 -0600
|
||||
Subject: [PATCH] Fix lag from explosions processing dead entities
|
||||
|
||||
|
||||
@@ -13,14 +13,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
int j1 = MathHelper.floor(this.posZ - (double) f3 - 1.0D);
|
||||
int k1 = MathHelper.floor(this.posZ + (double) f3 + 1.0D);
|
||||
- List list = this.world.getEntities(this.source, new AxisAlignedBB((double) i, (double) l, (double) j1, (double) j, (double) i1, (double) k1));
|
||||
+ // PaperSpigot start - Fix lag from explosions processing dead entities
|
||||
+ // Paper start - Fix lag from explosions processing dead entities
|
||||
+ List list = this.world.a(this.source, new AxisAlignedBB((double) i, (double) l, (double) j1, (double) j, (double) i1, (double) k1), new com.google.common.base.Predicate<Entity>() {
|
||||
+ @Override
|
||||
+ public boolean apply(Entity entity) {
|
||||
+ return IEntitySelector.d.apply(entity) && !entity.dead;
|
||||
+ }
|
||||
+ });
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
Vec3D vec3d = new Vec3D(this.posX, this.posY, this.posZ);
|
||||
|
||||
for (int l1 = 0; l1 < list.size(); ++l1) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Tue, 4 Aug 2015 18:15:05 -0700
|
||||
Date: Wed, 2 Mar 2016 23:38:52 -0600
|
||||
Subject: [PATCH] Fix lava/water some times creating air instead of cobblestone
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
- if (integer.intValue() <= 4) {
|
||||
+ if (integer.intValue() > 0) { // PaperSpigot
|
||||
+ if (integer.intValue() > 0) { // Paper
|
||||
world.setTypeUpdate(blockposition, Blocks.COBBLESTONE.getBlockData());
|
||||
this.fizz(world, blockposition);
|
||||
return true;
|
||||
|
||||
@@ -1,9 +1,29 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Mon, 13 Apr 2015 15:47:15 -0500
|
||||
Date: Wed, 2 Mar 2016 00:21:24 -0600
|
||||
Subject: [PATCH] Fix redstone lag issues
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
netherVoidTopDamage = getBoolean( "nether-ceiling-void-damage", false );
|
||||
log("Top of the nether void damage: " + netherVoidTopDamage);
|
||||
}
|
||||
+
|
||||
+ public int tickNextTickCap;
|
||||
+ public boolean tickNextTickListCapIgnoresRedstone;
|
||||
+ private void tickNextTickCap() {
|
||||
+ tickNextTickCap = getInt("tick-next-tick-list-cap", 1000); // Higher values will be friendlier to vanilla style mechanics (to a point) but may hurt performance
|
||||
+ tickNextTickListCapIgnoresRedstone = getBoolean("tick-next-tick-list-cap-ignores-redstone", false); // Redstone TickNextTicks will always bypass the preceding cap
|
||||
+ log("WorldServer TickNextTick cap set at " + tickNextTickCap);
|
||||
+ log("WorldServer TickNextTickList cap always processes redstone: " + tickNextTickListCapIgnoresRedstone);
|
||||
+
|
||||
+ }
|
||||
+
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -12,64 +32,46 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
if (false) { // CraftBukkit
|
||||
throw new IllegalStateException("TickNextTick list out of synch");
|
||||
} else {
|
||||
+ // PaperSpigot start - No, stop doing this, it affects things like redstone
|
||||
+ // Paper start - No, stop doing this, it affects things like redstone
|
||||
+ /*
|
||||
if (i > 1000) {
|
||||
// CraftBukkit start - If the server has too much to process over time, try to alleviate that
|
||||
if (i > 20 * 1000) {
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
i = 1000;
|
||||
}
|
||||
// CraftBukkit end
|
||||
+ */
|
||||
+ if (i > paperSpigotConfig.tickNextTickCap) {
|
||||
+ i = paperSpigotConfig.tickNextTickCap;
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
+ */
|
||||
+ if (i > paperConfig.tickNextTickCap) {
|
||||
+ i = paperConfig.tickNextTickCap;
|
||||
+ }
|
||||
+ // Paper end
|
||||
|
||||
this.methodProfiler.a("cleaning");
|
||||
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
this.V.add(nextticklistentry);
|
||||
this.U.add(nextticklistentry);
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Allow redstone ticks to bypass the tickNextTickListCap
|
||||
+ if (paperSpigotConfig.tickNextTickListCapIgnoresRedstone) {
|
||||
+ Iterator<NextTickListEntry> iterator = this.M.iterator();
|
||||
+ // Paper start - Allow redstone ticks to bypass the tickNextTickListCap
|
||||
+ if (paperConfig.tickNextTickListCapIgnoresRedstone) {
|
||||
+ Iterator<NextTickListEntry> iterator = this.nextTickList.iterator();
|
||||
+ while (iterator.hasNext()) {
|
||||
+ NextTickListEntry next = iterator.next();
|
||||
+ if (!flag && next.b > this.worldData.getTime()) {
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (next.a().isPowerSource() || next.a() instanceof IContainer) {
|
||||
+ IBlockData data = next.a().getBlockData();
|
||||
+ if (next.a().isPowerSource(data) || next.a() instanceof IInventory) {
|
||||
+ iterator.remove();
|
||||
+ this.V.add(next);
|
||||
+ this.U.add(next);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.methodProfiler.b();
|
||||
this.methodProfiler.a("ticking");
|
||||
Iterator iterator = this.V.iterator();
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
netherVoidTopDamage = getBoolean( "nether-ceiling-void-damage", false );
|
||||
}
|
||||
+
|
||||
+ public int tickNextTickCap;
|
||||
+ public boolean tickNextTickListCapIgnoresRedstone;
|
||||
+ private void tickNextTickCap()
|
||||
+ {
|
||||
+ tickNextTickCap = getInt( "tick-next-tick-list-cap", 10000 ); // Higher values will be friendlier to vanilla style mechanics (to a point) but may hurt performance
|
||||
+ tickNextTickListCapIgnoresRedstone = getBoolean( "tick-next-tick-list-cap-ignores-redstone", false ); // Redstone TickNextTicks will always bypass the preceding cap.
|
||||
+ log( "WorldServer TickNextTick cap set at " + tickNextTickCap );
|
||||
+ log( "WorldServer TickNextTickList cap always processes redstone: " + tickNextTickListCapIgnoresRedstone );
|
||||
+ }
|
||||
}
|
||||
Iterator iterator = this.U.iterator();
|
||||
--
|
||||
@@ -1,204 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 30 Jun 2015 20:45:24 -0700
|
||||
Subject: [PATCH] Force load chunks for specific entities that fly through
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderServer.java b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderServer.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderServer implements IChunkProvider {
|
||||
return;
|
||||
}
|
||||
// PaperSpigot end
|
||||
+ // PaperSpigot start - Don't unload chunk if it contains an entity that loads chunks
|
||||
+ if (chunk != null) {
|
||||
+ for (List<Entity> entities : chunk.entitySlices) {
|
||||
+ for (Entity entity : entities) {
|
||||
+ if (entity.loadChunks) {
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
if (this.world.worldProvider.e()) {
|
||||
if (!this.world.c(i, j)) {
|
||||
// CraftBukkit start
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only
|
||||
public boolean forceExplosionKnockback; // CraftBukkit - SPIGOT-949
|
||||
public boolean inUnloadedChunk = false; // PaperSpigot - Remove entities in unloaded chunks
|
||||
+ public boolean loadChunks = false; // PaperSpigot - Entities can load chunks they move through and keep them loaded
|
||||
|
||||
// Spigot start
|
||||
public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
return this.world.getCubes(this, axisalignedbb).isEmpty() && !this.world.containsLiquid(axisalignedbb);
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * PaperSpigot - Load surrounding chunks the entity is moving through
|
||||
+ */
|
||||
+ public void loadChunks() {
|
||||
+ for (int cx = (int) locX >> 4; cx <= (int) (locX + motX) >> 4; ++cx) {
|
||||
+ for (int cz = (int) locZ >> 4; cz <= (int) (locZ + motZ) >> 4; ++cz) {
|
||||
+ ((ChunkProviderServer) world.chunkProvider).getChunkAt(cx, cz);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+
|
||||
public void move(double d0, double d1, double d2) {
|
||||
org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.startTiming(); // Spigot
|
||||
+ if (this.loadChunks) loadChunks(); // PaperSpigot - Load chunks
|
||||
if (this.noclip) {
|
||||
this.a(this.getBoundingBox().c(d0, d1, d2));
|
||||
this.recalcPosition();
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
@@ -0,0 +0,0 @@ public class EntityEnderPearl extends EntityProjectile {
|
||||
|
||||
public EntityEnderPearl(World world) {
|
||||
super(world);
|
||||
+ this.loadChunks = world.paperSpigotConfig.loadUnloadedEnderPearls; // PaperSpigot
|
||||
}
|
||||
|
||||
public EntityEnderPearl(World world, EntityLiving entityliving) {
|
||||
super(world, entityliving);
|
||||
this.c = entityliving;
|
||||
+ this.loadChunks = world.paperSpigotConfig.loadUnloadedEnderPearls; // PaperSpigot
|
||||
}
|
||||
|
||||
protected void a(MovingObjectPosition movingobjectposition) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
public EntityFallingBlock(org.bukkit.Location loc, World world) {
|
||||
super(world);
|
||||
sourceLoc = loc;
|
||||
+ this.loadChunks = world.paperSpigotConfig.loadUnloadedFallingBlocks; // PaperSpigot
|
||||
}
|
||||
|
||||
public EntityFallingBlock(World world, double d0, double d1, double d2, IBlockData iblockdata) {
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
this.lastX = d0;
|
||||
this.lastY = d1;
|
||||
this.lastZ = d2;
|
||||
+ this.loadChunks = world.paperSpigotConfig.loadUnloadedFallingBlocks; // PaperSpigot
|
||||
}
|
||||
|
||||
protected boolean s_() {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
// PaperSpigot end
|
||||
this.k = true;
|
||||
this.setSize(0.98F, 0.98F);
|
||||
+ this.loadChunks = world.paperSpigotConfig.loadUnloadedTNTEntities; // PaperSpigot
|
||||
}
|
||||
|
||||
public EntityTNTPrimed(org.bukkit.Location loc, World world, double d0, double d1, double d2, EntityLiving entityliving) {
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
private void explode() {
|
||||
// CraftBukkit start
|
||||
// float f = 4.0F;
|
||||
-
|
||||
+
|
||||
+ // PaperSpigot start - Force load chunks during TNT explosions
|
||||
+ ChunkProviderServer chunkProviderServer = ((ChunkProviderServer) world.chunkProvider);
|
||||
+ boolean forceChunkLoad = chunkProviderServer.forceChunkLoad;
|
||||
+ if (world.paperSpigotConfig.loadUnloadedTNTEntities) {
|
||||
+ chunkProviderServer.forceChunkLoad = true;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
org.bukkit.craftbukkit.CraftServer server = this.world.getServer();
|
||||
|
||||
ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) org.bukkit.craftbukkit.entity.CraftEntity.getEntity(server, this));
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
this.world.createExplosion(this, this.locX, this.locY + (double) (this.length / 2.0F), this.locZ, event.getRadius(), event.getFire(), true);
|
||||
}
|
||||
// CraftBukkit end
|
||||
+
|
||||
+ // PaperSpigot start - Force load chunks during TNT explosions
|
||||
+ if (world.paperSpigotConfig.loadUnloadedTNTEntities) {
|
||||
+ chunkProviderServer.forceChunkLoad = forceChunkLoad;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
|
||||
protected void b(NBTTagCompound nbttagcompound) {
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
{
|
||||
if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
|
||||
{
|
||||
- entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
|
||||
- continue;
|
||||
+ // PaperSpigot start
|
||||
+ if (entity.loadChunks) {
|
||||
+ ((ChunkProviderServer) entity.world.chunkProvider).getChunkAt(chunkx, chunkz);
|
||||
+ } else {
|
||||
+ entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
|
||||
+ continue;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
int cz = chunkz << 4;
|
||||
Chunk chunk = this.getChunkAt( chunkx, chunkz );
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
int i1 = MathHelper.floor(entity.locZ / 16.0D);
|
||||
|
||||
if (!entity.ad || entity.ae != k || entity.af != l || entity.ag != i1) {
|
||||
+ if (entity.loadChunks) entity.loadChunks(); // PaperSpigot - Force load chunks
|
||||
if (entity.ad && this.isChunkLoaded(entity.ae, entity.ag, true)) {
|
||||
this.getChunkAt(entity.ae, entity.ag).a(entity, entity.af);
|
||||
}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
disableEndCredits = getBoolean( "game-mechanics.disable-end-credits", false );
|
||||
}
|
||||
+
|
||||
+ public boolean loadUnloadedEnderPearls;
|
||||
+ public boolean loadUnloadedTNTEntities;
|
||||
+ public boolean loadUnloadedFallingBlocks;
|
||||
+ private void loadUnloaded()
|
||||
+ {
|
||||
+ loadUnloadedEnderPearls = getBoolean( "load-chunks.enderpearls", false );
|
||||
+ loadUnloadedTNTEntities = getBoolean( "load-chunks.tnt-entities", false );
|
||||
+ loadUnloadedFallingBlocks = getBoolean( "load-chunks.falling-blocks", false );
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -0,0 +0,0 @@ public class ActivationRange
|
||||
{
|
||||
SpigotTimings.checkIfActiveTimer.startTiming();
|
||||
// Never safe to skip fireworks or entities not yet added to chunk
|
||||
- if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks ) {
|
||||
+ if ( !entity.isAddedToChunk() || entity instanceof EntityFireworks || entity.loadChunks ) { // PaperSpigot
|
||||
SpigotTimings.checkIfActiveTimer.stopTiming();
|
||||
return true;
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 8 Mar 2015 03:47:32 -0500
|
||||
Date: Tue, 1 Mar 2016 23:09:29 -0600
|
||||
Subject: [PATCH] Further improve server tick loop
|
||||
|
||||
Improves how the catchup buffer is handled, allowing it to roll both ways
|
||||
@@ -20,7 +20,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public org.bukkit.command.RemoteConsoleCommandSender remoteConsole;
|
||||
public ConsoleReader reader;
|
||||
- public static int currentTick = (int) (System.currentTimeMillis() / 50);
|
||||
+ public static int currentTick = 0; // PaperSpigot - Further improve tick loop
|
||||
+ public static int currentTick = 0; // Paper - Further improve tick loop
|
||||
public final Thread primaryThread;
|
||||
public java.util.Queue<Runnable> processQueue = new java.util.concurrent.ConcurrentLinkedQueue<Runnable>();
|
||||
public int autosavePeriod;
|
||||
@@ -32,7 +32,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- public final double[] recentTps = new double[ 3 ];
|
||||
- // Spigot end
|
||||
|
||||
public MinecraftServer(OptionSet options, Proxy proxy, File file1) {
|
||||
public MinecraftServer(OptionSet options, Proxy proxy, DataConverterManager dataconvertermanager, YggdrasilAuthenticationService yggdrasilauthenticationservice, MinecraftSessionService minecraftsessionservice, GameProfileRepository gameprofilerepository, UserCache usercache) {
|
||||
io.netty.util.ResourceLeakDetector.setEnabled( false ); // Spigot - disable
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
this.isRunning = false;
|
||||
@@ -42,7 +42,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- private static double calcTps(double avg, double exp, double tps)
|
||||
- {
|
||||
- return ( avg * exp ) + ( tps * ( 1 - exp ) );
|
||||
+ // PaperSpigot start - Further improve tick loop
|
||||
+ // Paper start - Further improve server tick loop
|
||||
+ private static final int TPS = 20;
|
||||
+ private static final long SEC_IN_NANO = 1000000000;
|
||||
+ private static final long TICK_TIME = SEC_IN_NANO / TPS;
|
||||
@@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ public final RollingAverage tps1 = new RollingAverage(60);
|
||||
+ public final RollingAverage tps5 = new RollingAverage(60 * 5);
|
||||
+ public final RollingAverage tps15 = new RollingAverage(60 * 15);
|
||||
+ public double[] recentTps = new double[ 3 ]; // PaperSpigot - Fine have your darn compat with bad plugins
|
||||
+ public double[] recentTps = new double[3]; // Paper - Fine have your darn compat with bad plugins
|
||||
+
|
||||
+ public static class RollingAverage {
|
||||
+ private final int size;
|
||||
@@ -90,24 +90,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
}
|
||||
- // Spigot End
|
||||
+ // PaperSpigot End
|
||||
+ // Paper End
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
this.a(this.r);
|
||||
|
||||
// Spigot start
|
||||
+ // PaperSpigot start - Further improve tick loop
|
||||
Arrays.fill( recentTps, 20 );
|
||||
- long lastTick = System.nanoTime(), catchupTime = 0, curTime, wait, tickSection = lastTick;
|
||||
+ //long lastTick = System.nanoTime(), catchupTime = 0, curTime, wait, tickSection = lastTick;
|
||||
+ long start = System.nanoTime(), lastTick = start - TICK_TIME, catchupTime = 0, curTime, wait, tickSection = start;
|
||||
+ // PaperSpigot end
|
||||
+ long start = System.nanoTime(), lastTick = start - TICK_TIME, catchupTime = 0, curTime, wait, tickSection = start; // Paper - Further improve server tick loop
|
||||
while (this.isRunning) {
|
||||
curTime = System.nanoTime();
|
||||
- wait = TICK_TIME - (curTime - lastTick) - catchupTime;
|
||||
+ // PaperSpigot start - Further improve tick loop
|
||||
+ // Paper start - Further improve server tick loop
|
||||
+ wait = TICK_TIME - (curTime - lastTick);
|
||||
+ if (wait > 0) {
|
||||
+ if (catchupTime < 2E6) {
|
||||
@@ -132,7 +128,6 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
- if ( MinecraftServer.currentTick++ % SAMPLE_INTERVAL == 0 )
|
||||
+ catchupTime = Math.min(MAX_CATCHUP_BUFFER, catchupTime - wait);
|
||||
+
|
||||
+ if ( ++MinecraftServer.currentTick % SAMPLE_INTERVAL == 0 )
|
||||
{
|
||||
- double currentTps = 1E9 / ( curTime - tickSection ) * SAMPLE_INTERVAL;
|
||||
@@ -148,33 +143,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ recentTps[0] = tps1.getAverage();
|
||||
+ recentTps[1] = tps5.getAverage();
|
||||
+ recentTps[2] = tps15.getAverage();
|
||||
+ // Paper end
|
||||
tickSection = curTime;
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
lastTick = curTime;
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
return CraftMagicNumbers.INSTANCE;
|
||||
}
|
||||
|
||||
+ // Paper - Add getTPS API - Further improve tick loop
|
||||
+ @Override
|
||||
+ public double[] getTPS() {
|
||||
+ return new double[] {
|
||||
+ MinecraftServer.getServer().tps1.getAverage(),
|
||||
+ MinecraftServer.getServer().tps5.getAverage(),
|
||||
+ MinecraftServer.getServer().tps15.getAverage()
|
||||
+ };
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
private final Spigot spigot = new Spigot()
|
||||
{
|
||||
|
||||
+ // PaperSpigot start - Add getTPS (Further improve tick loop)
|
||||
+ @Override
|
||||
+ public double[] getTPS() {
|
||||
+ return new double[] {
|
||||
+ MinecraftServer.getServer().tps1.getAverage(),
|
||||
+ MinecraftServer.getServer().tps5.getAverage(),
|
||||
+ MinecraftServer.getServer().tps15.getAverage()
|
||||
+ };
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
@Override
|
||||
public YamlConfiguration getConfig()
|
||||
{
|
||||
diff --git a/src/main/java/org/spigotmc/TicksPerSecondCommand.java b/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/TicksPerSecondCommand.java
|
||||
@@ -197,21 +191,22 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- {
|
||||
- sb.append( format( tps ) );
|
||||
- sb.append( ", " );
|
||||
+ // PaperSpigot start - Further improve tick handling
|
||||
+ double[] tps = org.bukkit.Bukkit.spigot().getTPS();
|
||||
+ // Paper start - Further improve tick handling
|
||||
+ double[] tps = org.bukkit.Bukkit.getTPS();
|
||||
+ String[] tpsAvg = new String[tps.length];
|
||||
+
|
||||
+ for ( int i = 0; i < tps.length; i++) {
|
||||
+ tpsAvg[i] = format( tps[i] );
|
||||
+ for ( int i = 0; i < tps.length; i++) {
|
||||
+ tpsAvg[i] = format( tps[i] );
|
||||
}
|
||||
- sender.sendMessage( sb.substring( 0, sb.length() - 2 ) );
|
||||
+ sender.sendMessage( ChatColor.GOLD + "TPS from last 1m, 5m, 15m: " + org.apache.commons.lang.StringUtils.join(tpsAvg, ", "));
|
||||
+ // Paper end
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
- private String format(double tps)
|
||||
+ private static String format(double tps) // PaperSpigot - made static
|
||||
+ private static String format(double tps) // Paper - Made static
|
||||
{
|
||||
return ( ( tps > 18.0 ) ? ChatColor.GREEN : ( tps > 16.0 ) ? ChatColor.YELLOW : ChatColor.RED ).toString()
|
||||
+ ( ( tps > 20.0 ) ? "*" : "" ) + Math.min( Math.round( tps * 100.0 ) / 100.0, 20.0 );
|
||||
|
||||
@@ -1,254 +1,16 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 2 Jun 2015 00:41:23 -0700
|
||||
Date: Wed, 2 Mar 2016 02:17:54 -0600
|
||||
Subject: [PATCH] Generator Settings
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
+++ b/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
||||
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
|
||||
|
||||
for (int l1 = 255; l1 >= 0; --l1) {
|
||||
- if (l1 <= random.nextInt(5)) {
|
||||
+ if (l1 <= (world.paperSpigotConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // PaperSpigot - Configurable flat bedrock
|
||||
chunksnapshot.a(k1, l1, j1, Blocks.BEDROCK.getBlockData());
|
||||
} else {
|
||||
IBlockData iblockdata2 = chunksnapshot.a(k1, l1, j1);
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeMesa.java b/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
+++ b/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
@@ -0,0 +0,0 @@ public class BiomeMesa extends BiomeBase {
|
||||
chunksnapshot.a(l, l1, k, Blocks.STONE.getBlockData());
|
||||
}
|
||||
|
||||
- if (l1 <= random.nextInt(5)) {
|
||||
+ if (l1 <= (world.paperSpigotConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // PaperSpigot - Configurable flat bedrock
|
||||
chunksnapshot.a(l, l1, k, Blocks.BEDROCK.getBlockData());
|
||||
} else {
|
||||
IBlockData iblockdata2 = chunksnapshot.a(l, l1, k);
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderFlat.java b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements IChunkProvider {
|
||||
if (flag) {
|
||||
Map map = this.d.b();
|
||||
|
||||
- if (map.containsKey("village")) {
|
||||
+ if (map.containsKey("village") && world.paperSpigotConfig.generateVillage) { // PaperSpigot
|
||||
Map map1 = (Map) map.get("village");
|
||||
|
||||
if (!map1.containsKey("size")) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements IChunkProvider {
|
||||
this.e.add(new WorldGenVillage(map1));
|
||||
}
|
||||
|
||||
- if (map.containsKey("biome_1")) {
|
||||
+ if (map.containsKey("biome_1") && world.paperSpigotConfig.generateTemple) { // PaperSpigot
|
||||
this.e.add(new WorldGenLargeFeature((Map) map.get("biome_1")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("mineshaft")) {
|
||||
+ if (map.containsKey("mineshaft") && world.paperSpigotConfig.generateMineshaft) { // PaperSpigot
|
||||
this.e.add(new WorldGenMineshaft((Map) map.get("mineshaft")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("stronghold")) {
|
||||
+ if (map.containsKey("stronghold") && world.paperSpigotConfig.generateStronghold) { // PaperSpigot
|
||||
this.e.add(new WorldGenStronghold((Map) map.get("stronghold")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("oceanmonument")) {
|
||||
+ if (map.containsKey("oceanmonument") && world.paperSpigotConfig.generateMonument) { // PaperSpigot
|
||||
this.e.add(new WorldGenMonument((Map) map.get("oceanmonument")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements IChunkProvider {
|
||||
this.i = new WorldGenLakes(Blocks.LAVA);
|
||||
}
|
||||
|
||||
- this.g = this.d.b().containsKey("dungeon");
|
||||
+ this.g = world.paperSpigotConfig.generateDungeon && this.d.b().containsKey("dungeon"); // PaperSpigot
|
||||
int j = 0;
|
||||
int k = 0;
|
||||
boolean flag1 = true;
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements IChunkProvider {
|
||||
this.a(i, j, chunksnapshot);
|
||||
this.B = this.m.getWorldChunkManager().getBiomeBlock(this.B, i * 16, j * 16, 16, 16);
|
||||
this.a(i, j, chunksnapshot, this.B);
|
||||
- if (this.r.r) {
|
||||
+ if (this.r.r && this.m.paperSpigotConfig.generateCaves) { // PaperSpigot
|
||||
this.u.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.z) {
|
||||
+ if (this.r.z && this.m.paperSpigotConfig.generateCanyon) { // PaperSpigot
|
||||
this.z.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.w && this.n) {
|
||||
+ if (this.r.w && this.n && this.m.paperSpigotConfig.generateMineshaft) { // PaperSpigot
|
||||
this.x.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.v && this.n) {
|
||||
+ if (this.r.v && this.n && this.m.paperSpigotConfig.generateVillage) { // PaperSpigot
|
||||
this.w.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.u && this.n) {
|
||||
+ if (this.r.u && this.n && this.m.paperSpigotConfig.generateStronghold) { // PaperSpigot
|
||||
this.v.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.x && this.n) {
|
||||
+ if (this.r.x && this.n && this.m.paperSpigotConfig.generateTemple) { // PaperSpigot
|
||||
this.y.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.r.y && this.n) {
|
||||
+ if (this.r.y && this.n && this.m.paperSpigotConfig.generateMonument) { // PaperSpigot
|
||||
this.A.a(this, this.m, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements IChunkProvider {
|
||||
boolean flag = false;
|
||||
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j);
|
||||
|
||||
- if (this.r.w && this.n) {
|
||||
+ if (this.r.w && this.n && this.m.paperSpigotConfig.generateMineshaft) { // PaperSpigot
|
||||
this.x.a(this.m, this.h, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.r.v && this.n) {
|
||||
+ if (this.r.v && this.n && this.m.paperSpigotConfig.generateVillage) { // PaperSpigot
|
||||
flag = this.w.a(this.m, this.h, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.r.u && this.n) {
|
||||
+ if (this.r.u && this.n && this.m.paperSpigotConfig.generateStronghold) { // PaperSpigot
|
||||
this.v.a(this.m, this.h, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.r.x && this.n) {
|
||||
+ if (this.r.x && this.n && this.m.paperSpigotConfig.generateTemple) { // PaperSpigot
|
||||
this.y.a(this.m, this.h, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.r.y && this.n) {
|
||||
+ if (this.r.y && this.n && this.m.paperSpigotConfig.generateMonument) { // PaperSpigot
|
||||
this.A.a(this.m, this.h, chunkcoordintpair);
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements IChunkProvider {
|
||||
}
|
||||
}
|
||||
|
||||
- if (this.r.s) {
|
||||
+ if (this.r.s && this.m.paperSpigotConfig.generateDungeon) { // PaperSpigot
|
||||
for (k1 = 0; k1 < this.r.t; ++k1) {
|
||||
l1 = this.h.nextInt(16) + 8;
|
||||
i2 = this.h.nextInt(256);
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements IChunkProvider {
|
||||
}
|
||||
|
||||
public void recreateStructures(Chunk chunk, int i, int j) {
|
||||
- if (this.r.w && this.n) {
|
||||
+ if (this.r.w && this.n && this.m.paperSpigotConfig.generateMineshaft) { // PaperSpigot
|
||||
this.x.a(this, this.m, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.r.v && this.n) {
|
||||
+ if (this.r.v && this.n && this.m.paperSpigotConfig.generateVillage) { // PaperSpigot
|
||||
this.w.a(this, this.m, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.r.u && this.n) {
|
||||
+ if (this.r.u && this.n && this.m.paperSpigotConfig.generateStronghold) { // PaperSpigot
|
||||
this.v.a(this, this.m, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.r.x && this.n) {
|
||||
+ if (this.r.x && this.n && this.m.paperSpigotConfig.generateTemple) { // PaperSpigot
|
||||
this.y.a(this, this.m, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.r.y && this.n) {
|
||||
+ if (this.r.y && this.n && this.m.paperSpigotConfig.generateMonument) { // PaperSpigot
|
||||
this.A.a(this, this.m, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderHell.java b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderHell implements IChunkProvider {
|
||||
IBlockData iblockdata1 = Blocks.NETHERRACK.getBlockData();
|
||||
|
||||
for (int l1 = 127; l1 >= 0; --l1) {
|
||||
- if (l1 < 127 - this.j.nextInt(5) && l1 > this.j.nextInt(5)) {
|
||||
+ // PaperSpigot start - Configurable flat bedrock worldgen
|
||||
+ if (l1 < 127 - (h.paperSpigotConfig.generateFlatBedrock ? 0 : this.j.nextInt(5)) &&
|
||||
+ l1 > (h.paperSpigotConfig.generateFlatBedrock ? 0 : this.j.nextInt(5))) {
|
||||
+ // PaperSpigot end
|
||||
IBlockData iblockdata2 = chunksnapshot.a(i1, l1, l);
|
||||
|
||||
if (iblockdata2.getBlock() != null && iblockdata2.getBlock().getMaterial() != Material.AIR) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderHell implements IChunkProvider {
|
||||
|
||||
this.a(i, j, chunksnapshot);
|
||||
this.b(i, j, chunksnapshot);
|
||||
- this.C.a(this, this.h, i, j, chunksnapshot);
|
||||
- if (this.i) {
|
||||
+ if (this.h.paperSpigotConfig.generateCaves) this.C.a(this, this.h, i, j, chunksnapshot); // PaperSpigot
|
||||
+ if (this.i && this.h.paperSpigotConfig.generateFortress) { // PaperSpigot
|
||||
this.B.a(this, this.h, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderHell implements IChunkProvider {
|
||||
}
|
||||
|
||||
public void recreateStructures(Chunk chunk, int i, int j) {
|
||||
- this.B.a(this, this.h, i, j, (ChunkSnapshot) null);
|
||||
+ if (this.h.paperSpigotConfig.generateFortress) this.B.a(this, this.h, i, j, (ChunkSnapshot) null); // PaperSpigot
|
||||
}
|
||||
|
||||
public Chunk getChunkAt(BlockPosition blockposition) {
|
||||
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
@@ -0,0 +0,0 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
}
|
||||
|
||||
public boolean b(BlockPosition blockposition) {
|
||||
+ if (this.c == null) return false; // PaperSpigot
|
||||
this.a(this.c);
|
||||
return this.c(blockposition) != null;
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
}
|
||||
|
||||
public boolean a(World world, BlockPosition blockposition) {
|
||||
+ if (this.c == null) return false; // PaperSpigot
|
||||
this.a(world);
|
||||
Iterator iterator = this.e.values().iterator();
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
loadUnloadedTNTEntities = getBoolean( "load-chunks.tnt-entities", false );
|
||||
loadUnloadedFallingBlocks = getBoolean( "load-chunks.falling-blocks", false );
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
disableEndCredits = getBoolean("game-mechanics.disable-end-credits", false);
|
||||
log("End credits disabled: " + disableEndCredits);
|
||||
}
|
||||
+
|
||||
+ public boolean generateCanyon;
|
||||
@@ -261,18 +23,254 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ public boolean generateTemple;
|
||||
+ public boolean generateVillage;
|
||||
+ public boolean generateFlatBedrock;
|
||||
+ private void generatorSettings()
|
||||
+ {
|
||||
+ generateCanyon = getBoolean( "generator-settings.canyon", true );
|
||||
+ generateCaves = getBoolean( "generator-settings.caves", true );
|
||||
+ generateDungeon = getBoolean( "generator-settings.dungeon", true );
|
||||
+ generateFortress = getBoolean( "generator-settings.fortress", true );
|
||||
+ generateMineshaft = getBoolean( "generator-settings.mineshaft", true );
|
||||
+ generateMonument = getBoolean( "generator-settings.monument", true );
|
||||
+ generateStronghold = getBoolean( "generator-settings.stronghold", true );
|
||||
+ generateTemple = getBoolean( "generator-settings.temple", true );
|
||||
+ generateVillage = getBoolean( "generator-settings.village", true );
|
||||
+ generateFlatBedrock = getBoolean( "generator-settings.flat-bedrock", false );
|
||||
+
|
||||
+ private void generatorSettings() {
|
||||
+ generateCanyon = getBoolean("generator-settings.canyon", true);
|
||||
+ generateCaves = getBoolean("generator-settings.caves", true);
|
||||
+ generateDungeon = getBoolean("generator-settings.dungeon", true);
|
||||
+ generateFortress = getBoolean("generator-settings.fortress", true);
|
||||
+ generateMineshaft = getBoolean("generator-settings.mineshaft", true);
|
||||
+ generateMonument = getBoolean("generator-settings.monument", true);
|
||||
+ generateStronghold = getBoolean("generator-settings.stronghold", true);
|
||||
+ generateTemple = getBoolean("generator-settings.temple", true);
|
||||
+ generateVillage = getBoolean("generator-settings.village", true);
|
||||
+ generateFlatBedrock = getBoolean("generator-settings.flat-bedrock", false);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeBase.java b/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
+++ b/src/main/java/net/minecraft/server/BiomeBase.java
|
||||
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
||||
protected List<BiomeBase.BiomeMeta> x;
|
||||
|
||||
public static int a(BiomeBase biomebase) {
|
||||
- return BiomeBase.REGISTRY_ID.a((Object) biomebase);
|
||||
+ return BiomeBase.REGISTRY_ID.a(biomebase); // Paper - Fix compile
|
||||
}
|
||||
|
||||
public static BiomeBase a(int i) {
|
||||
@@ -0,0 +0,0 @@ public abstract class BiomeBase {
|
||||
BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition();
|
||||
|
||||
for (int l1 = 255; l1 >= 0; --l1) {
|
||||
- if (l1 <= random.nextInt(5)) {
|
||||
+ if (l1 <= (world.paperConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // Paper - Configurable flat bedrock
|
||||
chunksnapshot.a(k1, l1, j1, BiomeBase.c);
|
||||
} else {
|
||||
IBlockData iblockdata2 = chunksnapshot.a(k1, l1, j1);
|
||||
diff --git a/src/main/java/net/minecraft/server/BiomeMesa.java b/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
+++ b/src/main/java/net/minecraft/server/BiomeMesa.java
|
||||
@@ -0,0 +0,0 @@ public class BiomeMesa extends BiomeBase {
|
||||
chunksnapshot.a(l, l1, k, BiomeMesa.a);
|
||||
}
|
||||
|
||||
- if (l1 <= random.nextInt(5)) {
|
||||
+ if (l1 <= (world.paperConfig.generateFlatBedrock ? 0 : random.nextInt(5))) { // Paper - Configurable flat bedrock
|
||||
chunksnapshot.a(l, l1, k, BiomeMesa.c);
|
||||
} else {
|
||||
IBlockData iblockdata2 = chunksnapshot.a(l, l1, k);
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderFlat.java b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderFlat.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
||||
if (flag) {
|
||||
Map map = this.d.b();
|
||||
|
||||
- if (map.containsKey("village")) {
|
||||
+ if (map.containsKey("village") && world.paperConfig.generateVillage) { // Paper
|
||||
Map map1 = (Map) map.get("village");
|
||||
|
||||
if (!map1.containsKey("size")) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
||||
this.e.add(new WorldGenVillage(map1));
|
||||
}
|
||||
|
||||
- if (map.containsKey("biome_1")) {
|
||||
+ if (map.containsKey("biome_1") && world.paperConfig.generateTemple) { // Paper
|
||||
this.e.add(new WorldGenLargeFeature((Map) map.get("biome_1")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("mineshaft")) {
|
||||
+ if (map.containsKey("mineshaft") && world.paperConfig.generateMineshaft) { // Paper
|
||||
this.e.add(new WorldGenMineshaft((Map) map.get("mineshaft")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("stronghold")) {
|
||||
+ if (map.containsKey("stronghold") && world.paperConfig.generateStronghold) { // Paper
|
||||
this.e.add(new WorldGenStronghold((Map) map.get("stronghold")));
|
||||
}
|
||||
|
||||
- if (map.containsKey("oceanmonument")) {
|
||||
+ if (map.containsKey("oceanmonument") && world.paperConfig.generateMonument) { // Paper
|
||||
this.e.add(new WorldGenMonument((Map) map.get("oceanmonument")));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderFlat implements ChunkGenerator {
|
||||
this.i = new WorldGenLakes(Blocks.LAVA);
|
||||
}
|
||||
|
||||
- this.g = this.d.b().containsKey("dungeon");
|
||||
+ this.g = world.paperConfig.generateDungeon && this.d.b().containsKey("dungeon"); // Paper
|
||||
int j = 0;
|
||||
int k = 0;
|
||||
boolean flag1 = true;
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderGenerate.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
||||
this.a(i, j, chunksnapshot);
|
||||
this.C = this.n.getWorldChunkManager().getBiomeBlock(this.C, i * 16, j * 16, 16, 16);
|
||||
this.a(i, j, chunksnapshot, this.C);
|
||||
- if (this.s.r) {
|
||||
+ if (this.s.r && this.n.paperConfig.generateCaves) { // Paper
|
||||
this.v.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.s.z) {
|
||||
+ if (this.s.z && this.n.paperConfig.generateCanyon) { // Paper
|
||||
this.A.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
if (this.o) {
|
||||
- if (this.s.w) {
|
||||
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
||||
this.y.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.s.v) {
|
||||
+ if (this.s.v&& this.n.paperConfig.generateVillage) { // Paper
|
||||
this.x.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.s.u) {
|
||||
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
||||
this.w.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.s.x) {
|
||||
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
||||
this.z.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
|
||||
- if (this.s.y) {
|
||||
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
||||
this.B.a(this.n, i, j, chunksnapshot);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
||||
ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(i, j);
|
||||
|
||||
if (this.o) {
|
||||
- if (this.s.w) {
|
||||
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
||||
this.y.a(this.n, this.i, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.s.v) {
|
||||
+ if (this.s.v && this.n.paperConfig.generateVillage) { // Paper
|
||||
flag = this.x.a(this.n, this.i, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.s.u) {
|
||||
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
||||
this.w.a(this.n, this.i, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.s.x) {
|
||||
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
||||
this.z.a(this.n, this.i, chunkcoordintpair);
|
||||
}
|
||||
|
||||
- if (this.s.y) {
|
||||
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
||||
this.B.a(this.n, this.i, chunkcoordintpair);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
- if (this.s.s) {
|
||||
+ if (this.s.s && this.n.paperConfig.generateDungeon) { // Paper
|
||||
for (k1 = 0; k1 < this.s.t; ++k1) {
|
||||
l1 = this.i.nextInt(16) + 8;
|
||||
i2 = this.i.nextInt(256);
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderGenerate implements ChunkGenerator {
|
||||
|
||||
public void recreateStructures(Chunk chunk, int i, int j) {
|
||||
if (this.o) {
|
||||
- if (this.s.w) {
|
||||
+ if (this.s.w && this.n.paperConfig.generateMineshaft) { // Paper
|
||||
this.y.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.s.v) {
|
||||
+ if (this.s.v && this.n.paperConfig.generateVillage) { // Paper
|
||||
this.x.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.s.u) {
|
||||
+ if (this.s.u && this.n.paperConfig.generateStronghold) { // Paper
|
||||
this.w.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.s.x) {
|
||||
+ if (this.s.x && this.n.paperConfig.generateTemple) { // Paper
|
||||
this.z.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
|
||||
- if (this.s.y) {
|
||||
+ if (this.s.y && this.n.paperConfig.generateMonument) { // Paper
|
||||
this.B.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ChunkProviderHell.java b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
+++ b/src/main/java/net/minecraft/server/ChunkProviderHell.java
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderHell implements ChunkGenerator {
|
||||
IBlockData iblockdata1 = ChunkProviderHell.b;
|
||||
|
||||
for (int l1 = 127; l1 >= 0; --l1) {
|
||||
- if (l1 < 127 - this.p.nextInt(5) && l1 > this.p.nextInt(5)) {
|
||||
+ // Paper start - Configurable flat bedrock worldgen
|
||||
+ if (l1 < 127 - (n.paperConfig.generateFlatBedrock ? 0 : this.p.nextInt(5)) &&
|
||||
+ l1 > (n.paperConfig.generateFlatBedrock ? 0 : this.p.nextInt(5))) {
|
||||
+ // Paper end
|
||||
IBlockData iblockdata2 = chunksnapshot.a(i1, l1, l);
|
||||
|
||||
if (iblockdata2.getBlock() != null && iblockdata2.getMaterial() != Material.AIR) {
|
||||
@@ -0,0 +0,0 @@ public class ChunkProviderHell implements ChunkGenerator {
|
||||
}
|
||||
|
||||
public void recreateStructures(Chunk chunk, int i, int j) {
|
||||
- this.H.a(this.n, i, j, (ChunkSnapshot) null);
|
||||
+ if (this.n.paperConfig.generateFortress) this.H.a(this.n, i, j, (ChunkSnapshot) null); // Paper
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/StructureGenerator.java b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
+++ b/src/main/java/net/minecraft/server/StructureGenerator.java
|
||||
@@ -0,0 +0,0 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
}
|
||||
|
||||
public boolean b(BlockPosition blockposition) {
|
||||
+ if (this.g == null) return false; // Paper
|
||||
this.a(this.g);
|
||||
return this.c(blockposition) != null;
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class StructureGenerator extends WorldGenBase {
|
||||
}
|
||||
|
||||
public boolean b(World world, BlockPosition blockposition) {
|
||||
+ if (this.g == null) return false; // Paper
|
||||
this.a(world);
|
||||
Iterator iterator = this.c.values().iterator();
|
||||
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Tue, 16 Feb 2016 19:15:30 -0600
|
||||
Date: Thu, 3 Mar 2016 02:21:58 -0600
|
||||
Subject: [PATCH] Graduate bungeecord chat API from spigot subclasses
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Nik Gil <nikmanG@users.noreply.github.com>
|
||||
Date: Mon, 1 Feb 2016 23:47:24 -0700
|
||||
Date: Thu, 3 Mar 2016 01:50:54 -0600
|
||||
Subject: [PATCH] Made EntityDismountEvent Cancellable
|
||||
|
||||
|
||||
@@ -8,59 +8,25 @@ diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.entity.EntityPortalEvent;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
import org.bukkit.event.entity.EntityCombustEvent;
|
||||
import org.bukkit.event.entity.EntityPortalEvent;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
+import org.spigotmc.event.entity.EntityDismountEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
+// PaperSpigot start
|
||||
+import org.spigotmc.event.entity.EntityDismountEvent;
|
||||
+// PaperSpigot end
|
||||
+
|
||||
public abstract class Entity implements ICommandListener {
|
||||
|
||||
// CraftBukkit start
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
- pluginManager.callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), this.vehicle.getBukkitEntity() ) ); // Spigot
|
||||
+ // PaperSpigot start - make EntityDismountEvent cancellable
|
||||
+ EntityDismountEvent dismountEvent = new EntityDismountEvent(this.getBukkitEntity(), this.vehicle.getBukkitEntity()); // Spigot
|
||||
+ pluginManager.callEvent(dismountEvent);
|
||||
+ if (dismountEvent.isCancelled()) return;
|
||||
+ // PaperSpigot end
|
||||
this.setPositionRotation(this.vehicle.locX, this.vehicle.getBoundingBox().b + (double) this.vehicle.length, this.vehicle.locZ, this.yaw, this.pitch);
|
||||
this.vehicle.passenger = null;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.vehicle.VehicleExitEvent;
|
||||
|
||||
import co.aikar.timings.SpigotTimings; // Spigot
|
||||
|
||||
+// PaperSpigot start
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.spigotmc.event.entity.EntityDismountEvent;
|
||||
+// PaperSpigot end
|
||||
+
|
||||
public abstract class EntityLiving extends Entity {
|
||||
|
||||
private static final UUID a = UUID.fromString("662A6B8D-DA3E-4C1C-8813-96EA6097278D");
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
}
|
||||
// CraftBukkit end
|
||||
- org.bukkit.Bukkit.getPluginManager().callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), this.vehicle.getBukkitEntity() ) ); // Spigot
|
||||
-
|
||||
+ // PaperSpigot start - make dismountEvent cancellable
|
||||
+ EntityDismountEvent dismountEvent = new EntityDismountEvent(this.getBukkitEntity(), this.vehicle.getBukkitEntity()); // Spigot
|
||||
- Bukkit.getPluginManager().callEvent( new org.spigotmc.event.entity.EntityDismountEvent( this.getBukkitEntity(), entity.getBukkitEntity() ) ); // Spigot
|
||||
+ // Paper start - make EntityDismountEvent cancellable
|
||||
+ EntityDismountEvent dismountEvent = new EntityDismountEvent(this.getBukkitEntity(), entity.getBukkitEntity()); // Spigot
|
||||
+ Bukkit.getPluginManager().callEvent(dismountEvent);
|
||||
+ if (dismountEvent.isCancelled()) return;
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
if (!this.world.isClientSide) {
|
||||
this.q(this.vehicle);
|
||||
}
|
||||
+ // Paper end
|
||||
this.passengers.remove(entity);
|
||||
entity.j = 60;
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Wed, 18 Mar 2015 22:55:25 -0600
|
||||
Date: Tue, 1 Mar 2016 14:54:32 -0600
|
||||
Subject: [PATCH] Metrics
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
private void postPlugin(final boolean isPing) throws IOException {
|
||||
// Server software specific section
|
||||
- String pluginName = "Spigot";
|
||||
+ String pluginName = "PaperSpigot"; // PaperSpigot - We need some usage data
|
||||
+ String pluginName = "PaperSpigot"; // Paper - Keep old name for legacy data
|
||||
boolean onlineMode = Bukkit.getServer().getOnlineMode(); // TRUE if online mode is enabled
|
||||
String pluginVersion = (Metrics.class.getPackage().getImplementationVersion() != null) ? Metrics.class.getPackage().getImplementationVersion() : "unknown";
|
||||
String serverVersion = Bukkit.getVersion();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Fri, 28 Nov 2014 13:20:22 -0600
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Tue, 1 Mar 2016 23:12:03 -0600
|
||||
Subject: [PATCH] Only refresh abilities if needed
|
||||
|
||||
|
||||
@@ -12,14 +12,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
@Override
|
||||
public void setFlying(boolean value) {
|
||||
+ boolean needsUpdate = getHandle().abilities.canFly != value; // PaperSpigot - Only refresh abilities if needed
|
||||
+ boolean needsUpdate = getHandle().abilities.canFly != value; // Paper - Only refresh abilities if needed
|
||||
if (!getAllowFlight() && value) {
|
||||
throw new IllegalArgumentException("Cannot make player fly if getAllowFlight() is false");
|
||||
}
|
||||
|
||||
getHandle().abilities.isFlying = value;
|
||||
- getHandle().updateAbilities();
|
||||
+ if (needsUpdate) getHandle().updateAbilities(); // PaperSpigot - Only refresh abilities if needed
|
||||
+ if (needsUpdate) getHandle().updateAbilities(); // Paper - Only refresh abilities if needed
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Mon, 18 Jan 2016 00:18:43 -0500
|
||||
Date: Thu, 3 Mar 2016 02:02:07 -0600
|
||||
Subject: [PATCH] Optimize Pathfinding
|
||||
|
||||
Prevents pathfinding from spamming failures for things such as
|
||||
arrow attacks.
|
||||
|
||||
Also remove a duplicate .getType() call and fix .getType() on others
|
||||
to make them use the chunk cache vs chunk lookups
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/NavigationAbstract.java
|
||||
@@ -17,10 +14,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
public boolean a(Entity entity, double d0) {
|
||||
+ // PaperSpigot start - Pathfinding optimizations
|
||||
+ if (this.pathfindFailures > 10 && this.d == null && MinecraftServer.currentTick < this.lastFailure + 40) {
|
||||
+ // Paper start - Pathfinding optimizations
|
||||
+ if (this.pathfindFailures > 10 && this.c == null && MinecraftServer.currentTick < this.lastFailure + 40) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
PathEntity pathentity = this.a(entity);
|
||||
|
||||
- return pathentity != null ? this.a(pathentity, d0) : false;
|
||||
@@ -36,31 +34,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
+ private int lastFailure = 0;
|
||||
+ private int pathfindFailures = 0;
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
|
||||
public boolean a(PathEntity pathentity, double d0) {
|
||||
if (pathentity == null) {
|
||||
@@ -0,0 +0,0 @@ public abstract class NavigationAbstract {
|
||||
}
|
||||
|
||||
public void n() {
|
||||
+ this.pathfindFailures = 0; this.lastFailure = 0; // PaperSpigot - Pathfinding optimizations
|
||||
this.d = null;
|
||||
public void o() {
|
||||
+ this.pathfindFailures = 0; this.lastFailure = 0; // Paper - Pathfinding optimizations
|
||||
this.c = null;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderNormal.java b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderNormal.java
|
||||
@@ -0,0 +0,0 @@ public class PathfinderNormal extends PathfinderAbstract {
|
||||
flag3 = true;
|
||||
}
|
||||
|
||||
- if (entity.world.getType(blockposition_mutableblockposition).getBlock() instanceof BlockMinecartTrackAbstract) {
|
||||
- if (!(entity.world.getType(blockposition).getBlock() instanceof BlockMinecartTrackAbstract) && !(entity.world.getType(blockposition.down()).getBlock() instanceof BlockMinecartTrackAbstract)) {
|
||||
+ if (block instanceof BlockMinecartTrackAbstract) { // PaperSpigot - Pathfinder optimizations
|
||||
+ if (!(iblockaccess.getType(blockposition).getBlock() instanceof BlockMinecartTrackAbstract) && !(iblockaccess.getType(blockposition.down()).getBlock() instanceof BlockMinecartTrackAbstract)) { // PaperSpigot - Pathfinder optimizations
|
||||
return -3;
|
||||
}
|
||||
} else if (!block.b(iblockaccess, blockposition_mutableblockposition) && (!flag1 || !(block instanceof BlockDoor) || block.getMaterial() != Material.WOOD)) {
|
||||
--
|
||||
@@ -1,86 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Thu, 23 Apr 2015 17:26:21 -0400
|
||||
Subject: [PATCH] Optimize Spigot's Anti X-Ray
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/WorldServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/WorldServer.java
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
timings.doTickTiles.startTiming(); // Spigot
|
||||
this.h();
|
||||
timings.doTickTiles.stopTiming(); // Spigot
|
||||
+ spigotConfig.antiXrayInstance.flushUpdates(this); // PaperSpigot
|
||||
this.methodProfiler.c("chunkMap");
|
||||
timings.doChunkMap.startTiming(); // Spigot
|
||||
this.manager.flush();
|
||||
diff --git a/src/main/java/org/spigotmc/AntiXray.java b/src/main/java/org/spigotmc/AntiXray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/AntiXray.java
|
||||
+++ b/src/main/java/org/spigotmc/AntiXray.java
|
||||
@@ -0,0 +0,0 @@ import net.minecraft.server.Blocks;
|
||||
import net.minecraft.server.World;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
|
||||
+// PaperSpigot start
|
||||
+import java.util.HashSet;
|
||||
+import java.util.Set;
|
||||
+// PaperSpigot end
|
||||
+
|
||||
public class AntiXray
|
||||
{
|
||||
|
||||
@@ -0,0 +0,0 @@ public class AntiXray
|
||||
private final boolean[] obfuscateBlocks = new boolean[ Short.MAX_VALUE ];
|
||||
// Used to select a random replacement ore
|
||||
private final byte[] replacementOres;
|
||||
+ // PaperSpigot start
|
||||
+ public boolean queueUpdates = true;
|
||||
+ public final Set<BlockPosition> pendingUpdates = new HashSet<BlockPosition>();
|
||||
+ // PaperSpigot end
|
||||
|
||||
public AntiXray(SpigotWorldConfig config)
|
||||
{
|
||||
@@ -0,0 +0,0 @@ public class AntiXray
|
||||
}
|
||||
|
||||
/**
|
||||
+ * PaperSpigot - Flush queued block updates for world.
|
||||
+ */
|
||||
+ public void flushUpdates(World world)
|
||||
+ {
|
||||
+ if ( world.spigotConfig.antiXray && !pendingUpdates.isEmpty() )
|
||||
+ {
|
||||
+ queueUpdates = false;
|
||||
+
|
||||
+ for ( BlockPosition position : pendingUpdates )
|
||||
+ {
|
||||
+ updateNearbyBlocks( world, position );
|
||||
+ }
|
||||
+
|
||||
+ pendingUpdates.clear();
|
||||
+ queueUpdates = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /**
|
||||
* Starts the timings handler, then updates all blocks within the set radius
|
||||
* of the given coordinate, revealing them if they are hidden ores.
|
||||
*/
|
||||
@@ -0,0 +0,0 @@ public class AntiXray
|
||||
{
|
||||
if ( world.spigotConfig.antiXray )
|
||||
{
|
||||
+ // PaperSpigot start
|
||||
+ if ( queueUpdates )
|
||||
+ {
|
||||
+ pendingUpdates.add( position );
|
||||
+ return;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
update.startTiming();
|
||||
updateNearbyBlocks( world, position, 2, false ); // 2 is the radius, we shouldn't change it as that would make it exponentially slower
|
||||
update.stopTiming();
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 8 Mar 2015 22:55:25 -0600
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Tue, 1 Mar 2016 22:01:19 -0600
|
||||
Subject: [PATCH] Optimize TileEntity Ticking
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
// CraftBukkit end
|
||||
|
||||
-public class TileEntityChest extends TileEntityContainer implements IUpdatePlayerListBox, IInventory {
|
||||
+public class TileEntityChest extends TileEntityContainer implements IInventory { // PaperSpigot - remove IUpdatePlayerListBox
|
||||
-public class TileEntityChest extends TileEntityLootable implements ITickable, IInventory {
|
||||
+public class TileEntityChest extends TileEntityLootable implements IInventory { // Paper - Remove ITickable
|
||||
|
||||
private ItemStack[] items = new ItemStack[27];
|
||||
public boolean a;
|
||||
@@ -22,42 +22,42 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- public TileEntityChest h;
|
||||
- public TileEntityChest i;
|
||||
- public float j;
|
||||
+ public TileEntityChest f; // PaperSpigot - adjacentChestZNeg
|
||||
+ public TileEntityChest g; // PaperSpigot - adjacentChestXPos
|
||||
+ public TileEntityChest h; // PaperSpigot - adjacentChestXNeg
|
||||
+ public TileEntityChest i; // PaperSpigot - adjacentChestZPos
|
||||
+ public float j; // PaperSpigot - lidAngle
|
||||
+ public TileEntityChest f; // Paper - Adjacent Chest Z Neg
|
||||
+ public TileEntityChest g; // Paper - Adjacent Chest X Pos
|
||||
+ public TileEntityChest h; // Paper - Adjacent Chest X Neg
|
||||
+ public TileEntityChest i; // Paper - Adjacent Chest Z Pos
|
||||
+ public float j; // Paper - lid angle
|
||||
public float k;
|
||||
- public int l;
|
||||
+ public int l; // PaperSpigot - numPlayersUsing
|
||||
private int n;
|
||||
private int o = -1;
|
||||
private String p;
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityContainer implements IUpdatePlaye
|
||||
+ public int l; // Paper - Number of viewers
|
||||
private int p;
|
||||
private BlockChest.Type q;
|
||||
private String r;
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityLootable implements ITickable, II
|
||||
}
|
||||
|
||||
public void c() {
|
||||
+ // PaperSpigot - Move chest sounds out of the tick loop
|
||||
+ // Paper - Disable all of this, just in case this does get ticked
|
||||
+ /*
|
||||
this.m();
|
||||
int i = this.position.getX();
|
||||
int j = this.position.getY();
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityContainer implements IUpdatePlaye
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityLootable implements ITickable, II
|
||||
this.j = 0.0F;
|
||||
}
|
||||
}
|
||||
-
|
||||
+ */
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
public boolean c(int i, int j) {
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityContainer implements IUpdatePlaye
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityLootable implements ITickable, II
|
||||
int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added
|
||||
|
||||
++this.l;
|
||||
if (this.world == null) return; // CraftBukkit
|
||||
+
|
||||
+ // PaperSpigot start - Move chest open sound out of the tick loop
|
||||
+ // Paper start - Move chest open sound out of the tick loop
|
||||
+ this.m();
|
||||
+
|
||||
+ if (this.l > 0 && this.j == 0.0F && this.f == null && this.h == null) {
|
||||
@@ -74,19 +74,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ d1 += 0.5D;
|
||||
+ }
|
||||
+
|
||||
+ this.world.makeSound(d1, (double) this.position.getY() + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.world.a((EntityHuman) null, d1, (double) j + 0.5D, d0, SoundEffects.X, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.world.playBlockAction(this.position, this.w(), 1, this.l);
|
||||
if (this.world == null) return; // CraftBukkit
|
||||
this.world.playBlockAction(this.position, this.getBlock(), 1, this.l);
|
||||
|
||||
// CraftBukkit start - Call redstone event
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityContainer implements IUpdatePlaye
|
||||
@@ -0,0 +0,0 @@ public class TileEntityChest extends TileEntityLootable implements ITickable, II
|
||||
int oldPower = Math.max(0, Math.min(15, this.l)); // CraftBukkit - Get power before new viewer is added
|
||||
--this.l;
|
||||
if (this.world == null) return; // CraftBukkit
|
||||
+
|
||||
+ // PaperSpigot start - Move chest close sound handling out of the tick loop
|
||||
+ // Paper start - Move chest close sound out of the tick loop
|
||||
+ if (this.l == 0 && this.j > 0.0F || this.l > 0 && this.j < 1.0F) {
|
||||
+ float f = 0.1F;
|
||||
+
|
||||
@@ -107,12 +107,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ d0 += 0.5D;
|
||||
+ }
|
||||
+
|
||||
+ this.world.makeSound(d0, (double) this.getPosition().getY() + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.j = 0.0F;
|
||||
+ this.world.a((EntityHuman) null, d0, (double) j + 0.5D, d2, SoundEffects.V, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.j = 0.0F;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.world.playBlockAction(this.position, this.w(), 1, this.l);
|
||||
this.world.playBlockAction(this.position, this.getBlock(), 1, this.l);
|
||||
|
||||
// CraftBukkit start - Call redstone event
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityEnderChest.java b/src/main/java/net/minecraft/server/TileEntityEnderChest.java
|
||||
@@ -122,49 +122,48 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
-public class TileEntityEnderChest extends TileEntity implements IUpdatePlayerListBox {
|
||||
+public class TileEntityEnderChest extends TileEntity { // PaperSpigot - remove IUpdatePlayerListBox
|
||||
-public class TileEntityEnderChest extends TileEntity implements ITickable {
|
||||
+public class TileEntityEnderChest extends TileEntity { // Paper - Remove ITickable
|
||||
|
||||
- public float a;
|
||||
+ public float a; // PaperSpigot - lidAngle
|
||||
+ public float a; // Paper - lid angle
|
||||
public float f;
|
||||
- public int g;
|
||||
+ public int g; // PaperSpigot - numPlayersUsing
|
||||
+ public int g; // Paper - Number of viewers
|
||||
private int h;
|
||||
|
||||
public TileEntityEnderChest() {}
|
||||
|
||||
public void c() {
|
||||
+ // PaperSpigot start - Move enderchest sound handling out of the tick loop
|
||||
+ // Paper start - Disable all of this, just in case this does get ticked
|
||||
+ /*
|
||||
if (++this.h % 20 * 4 == 0) {
|
||||
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity implements IUpdatePlayerLis
|
||||
@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
||||
this.a = 0.0F;
|
||||
}
|
||||
}
|
||||
-
|
||||
+ */
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
|
||||
}
|
||||
|
||||
public boolean c(int i, int j) {
|
||||
@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity implements IUpdatePlayerLis
|
||||
@@ -0,0 +0,0 @@ public class TileEntityEnderChest extends TileEntity implements ITickable {
|
||||
|
||||
public void b() {
|
||||
++this.g;
|
||||
+
|
||||
+ // PaperSpigot start - Move enderchest open sounds out of the tick loop
|
||||
+ // Paper start - Move enderchest open sounds out of the tick loop
|
||||
+ if (this.g > 0 && this.a == 0.0F) {
|
||||
+ this.a = 0.7F;
|
||||
+
|
||||
+ double d1 = (double) this.getPosition().getX() + 0.5D;
|
||||
+ double d0 = (double) this.getPosition().getZ() + 0.5D;
|
||||
+
|
||||
+ this.world.makeSound(d1, (double) this.getPosition().getY() + 0.5D, d0, "random.chestopen", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.world.a((EntityHuman) null, d1, (double) this.getPosition().getY() + 0.5D, d0, SoundEffects.aL, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
||||
}
|
||||
@@ -172,15 +171,15 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public void d() {
|
||||
--this.g;
|
||||
+
|
||||
+ // PaperSpigot start - Move enderchest close sounds out of the tick loop
|
||||
+ // Paper start - Move enderchest close sounds out of the tick loop
|
||||
+ if (this.g == 0 && this.a > 0.0F || this.g > 0 && this.a < 1.0F) {
|
||||
+ double d0 = (double) this.getPosition().getX() + 0.5D;
|
||||
+ double d2 = (double) this.getPosition().getZ() + 0.5D;
|
||||
+
|
||||
+ this.world.makeSound(d0, (double) this.getPosition().getY() + 0.5D, d2, "random.chestclosed", 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.world.a((EntityHuman) null, d0, (double) this.getPosition().getY() + 0.5D, d2, SoundEffects.aK, SoundCategory.BLOCKS, 0.5F, this.world.random.nextFloat() * 0.1F + 0.9F);
|
||||
+ this.a = 0.0F;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
this.world.playBlockAction(this.position, Blocks.ENDER_CHEST, 1, this.g);
|
||||
}
|
||||
@@ -192,55 +191,46 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
};
|
||||
// Spigot end
|
||||
protected final List<Entity> g = Lists.newArrayList();
|
||||
- public final List<TileEntity> h = Lists.newArrayList();
|
||||
+ //public final List<TileEntity> h = Lists.newArrayList(); // PaperSpigot - Remove unused list
|
||||
public final List<TileEntity> tileEntityList = Lists.newArrayList();
|
||||
protected final List<Entity> f = Lists.newArrayList();
|
||||
- public final List<TileEntity> tileEntityList = Lists.newArrayList();
|
||||
+ //public final List<TileEntity> tileEntityList = Lists.newArrayList(); // Paper - Remove unused list
|
||||
public final List<TileEntity> tileEntityListTick = Lists.newArrayList();
|
||||
private final List<TileEntity> b = Lists.newArrayList();
|
||||
private final List<TileEntity> c = Lists.newArrayList();
|
||||
private final List<TileEntity> tileEntityListUnload = Lists.newArrayList();
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
// CraftBukkit start - From below, clean up tile entities before ticking them
|
||||
if (!this.c.isEmpty()) {
|
||||
this.tileEntityList.removeAll(this.c);
|
||||
- this.h.removeAll(this.c);
|
||||
+ //this.h.removeAll(this.c); // PaperSpigot - Remove unused list
|
||||
this.c.clear();
|
||||
if (!this.tileEntityListUnload.isEmpty()) {
|
||||
this.tileEntityListTick.removeAll(this.tileEntityListUnload);
|
||||
- this.tileEntityList.removeAll(this.tileEntityListUnload);
|
||||
+ //this.tileEntityList.removeAll(this.tileEntityListUnload); // Paper - Remove unused list
|
||||
this.tileEntityListUnload.clear();
|
||||
}
|
||||
// CraftBukkit end
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
if (tileentity.x()) {
|
||||
tilesThisCycle--;
|
||||
this.tileEntityList.remove(tileTickPosition--);
|
||||
- this.h.remove(tileentity);
|
||||
+ //this.h.remove(tileentity); // PaperSpigot - Remove unused list
|
||||
this.tileEntityListTick.remove(tileTickPosition--);
|
||||
- this.tileEntityList.remove(tileentity);
|
||||
+ //this.tileEntityList.remove(tileentity); // Paper - Remove unused list
|
||||
if (this.isLoaded(tileentity.getPosition())) {
|
||||
this.getChunkAtWorldCoords(tileentity.getPosition()).e(tileentity.getPosition());
|
||||
this.getChunkAtWorldCoords(tileentity.getPosition()).d(tileentity.getPosition());
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
protected void l() {}
|
||||
|
||||
public boolean a(TileEntity tileentity) {
|
||||
- boolean flag = this.h.add(tileentity);
|
||||
+ boolean flag = true; // PaperSpigot - Remove unused list
|
||||
- boolean flag = this.tileEntityList.add(tileentity);
|
||||
+ boolean flag = true; // Paper - Remove unused list
|
||||
|
||||
if (flag && tileentity instanceof IUpdatePlayerListBox) {
|
||||
this.tileEntityList.add(tileentity);
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
while (iterator.hasNext()) {
|
||||
TileEntity tileentity = (TileEntity) iterator.next();
|
||||
|
||||
- this.h.add(tileentity);
|
||||
+ //this.h.add(tileentity); // PaperSpigot - Remove unused list
|
||||
if (tileentity instanceof IUpdatePlayerListBox) {
|
||||
this.tileEntityList.add(tileentity);
|
||||
}
|
||||
if (flag && tileentity instanceof ITickable) {
|
||||
this.tileEntityListTick.add(tileentity);
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
} else {
|
||||
if (tileentity != null) {
|
||||
this.b.remove(tileentity);
|
||||
- this.h.remove(tileentity);
|
||||
+ //this.h.remove(tileentity); // PaperSpigot - Remove unused list
|
||||
this.tileEntityList.remove(tileentity);
|
||||
- this.tileEntityList.remove(tileentity);
|
||||
+ //this.tileEntityList.remove(tileentity); // Paper - Remove unused list
|
||||
this.tileEntityListTick.remove(tileentity);
|
||||
}
|
||||
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Fri, 10 Apr 2015 02:24:20 -0700
|
||||
Date: Wed, 2 Mar 2016 00:55:24 -0600
|
||||
Subject: [PATCH] Optimize draining
|
||||
|
||||
|
||||
@@ -13,14 +13,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
world.setTypeAndData(blockposition, iblockdata, 2);
|
||||
world.a(blockposition, (Block) this, j);
|
||||
- world.applyPhysics(blockposition, this);
|
||||
+ // PaperSpigot start - Optimize draining
|
||||
+ world.d(blockposition.west(), this);
|
||||
+ world.d(blockposition.east(), this);
|
||||
+ world.d(blockposition.up(), this);
|
||||
+ world.d(blockposition.north(), this);
|
||||
+ world.d(blockposition.south(), this);
|
||||
+ world.spigotConfig.antiXrayInstance.updateNearbyBlocks(world, blockposition); // Spigot
|
||||
+ // PaperSpigot end
|
||||
+ // Paper start - Optimize draining
|
||||
+ world.e(blockposition.west(), this);
|
||||
+ world.e(blockposition.east(), this);
|
||||
+ world.e(blockposition.up(), this);
|
||||
+ world.e(blockposition.north(), this);
|
||||
+ world.e(blockposition.south(), this);
|
||||
+ // Paper end
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 16 Jun 2015 00:43:17 -0700
|
||||
Date: Wed, 2 Mar 2016 11:59:48 -0600
|
||||
Subject: [PATCH] Optimize explosions
|
||||
|
||||
The process of determining an entity's exposure from explosions can be
|
||||
@@ -9,6 +9,21 @@ expensive when there are hundreds or more entities in range.
|
||||
This patch adds a per-tick cache that is used for storing and retrieving
|
||||
an entity's exposure during an explosion.
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
generateVillage = getBoolean("generator-settings.village", true);
|
||||
generateFlatBedrock = getBoolean("generator-settings.flat-bedrock", false);
|
||||
}
|
||||
+
|
||||
+ public boolean optimizeExplosions;
|
||||
+ private void optimizeExplosions() {
|
||||
+ optimizeExplosions = getBoolean("optimize-explosions", false);
|
||||
+ log("Optimize explosions: " + optimizeExplosions);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Explosion.java b/src/main/java/net/minecraft/server/Explosion.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Explosion.java
|
||||
@@ -18,21 +33,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
d9 /= d11;
|
||||
d10 /= d11;
|
||||
- double d12 = (double) this.world.a(vec3d, entity.getBoundingBox());
|
||||
+ double d12 = this.getBlockDensity(vec3d, entity.getBoundingBox()); // PaperSpigot - Optimize explosions
|
||||
+ double d12 = this.getBlockDensity(vec3d, entity.getBoundingBox()); // Paper - Optimize explosions
|
||||
double d13 = (1.0D - d7) * d12;
|
||||
|
||||
// entity.damageEntity(DamageSource.explosion(this), (float) ((int) ((d13 * d13 + d13) / 2.0D * 8.0D * (double) f3 + 1.0D)));+ // CraftBukkit start
|
||||
// CraftBukkit start
|
||||
@@ -0,0 +0,0 @@ public class Explosion {
|
||||
public List<BlockPosition> getBlocks() {
|
||||
return this.blocks;
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Optimize explosions
|
||||
+ // Paper start - Optimize explosions
|
||||
+ private float getBlockDensity(Vec3D vec3d, AxisAlignedBB aabb) {
|
||||
+ if (!this.world.paperSpigotConfig.optimizeExplosions) {
|
||||
+ if (!this.world.paperConfig.optimizeExplosions) {
|
||||
+ return this.world.a(vec3d, aabb);
|
||||
+ }
|
||||
+
|
||||
+ CacheKey key = new CacheKey(this, aabb);
|
||||
+ Float blockDensity = this.world.explosionDensityCache.get(key);
|
||||
+ if (blockDensity == null) {
|
||||
@@ -107,7 +121,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ return result;
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
@@ -117,7 +131,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
worldserver.timings.tracker.stopTiming(); // Spigot
|
||||
this.methodProfiler.b();
|
||||
this.methodProfiler.b();
|
||||
+ worldserver.explosionDensityCache.clear(); // PaperSpigot - Optimize explosions
|
||||
+ worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions
|
||||
// } // CraftBukkit
|
||||
|
||||
// this.i[i][this.ticks % 100] = System.nanoTime() - j; // CraftBukkit
|
||||
@@ -125,27 +139,20 @@ diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/m
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.generator.ChunkGenerator;
|
||||
// Paper start
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
+import java.util.HashMap;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
// Paper end
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
private org.spigotmc.TickLimiter tileLimiter;
|
||||
private int tileTickPosition;
|
||||
public ExecutorService lightingExecutor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("PaperSpigot - Lighting Thread").build()); // PaperSpigot - Asynchronous lighting updates
|
||||
+ public final Map<Explosion.CacheKey, Float> explosionDensityCache = new HashMap<Explosion.CacheKey, Float>(); // PaperSpigot - Optimize explosions
|
||||
public ExecutorService lightingExecutor = Executors.newSingleThreadExecutor(new ThreadFactoryBuilder().setNameFormat("Paper - Lighting Thread").build()); // Paper - Asynchronous lighting updates
|
||||
+ public final Map<Explosion.CacheKey, Float> explosionDensityCache = new HashMap<Explosion.CacheKey, Float>(); // Paper - Optimize explosions
|
||||
|
||||
public static long chunkToKey(int x, int z)
|
||||
{
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
fallingBlocksCollideWithSigns = getBoolean( "falling-blocks-collide-with-signs", false );
|
||||
}
|
||||
+
|
||||
+ public boolean optimizeExplosions;
|
||||
+ private void optimizeExplosions()
|
||||
+ {
|
||||
+ optimizeExplosions = getBoolean( "optimize-explosions", false );
|
||||
+ }
|
||||
}
|
||||
public CraftWorld getWorld() {
|
||||
return this.world;
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sat, 13 Feb 2016 19:28:50 -0600
|
||||
Date: Thu, 3 Mar 2016 02:07:55 -0600
|
||||
Subject: [PATCH] Optimize getBlockData
|
||||
|
||||
Hot method, so reduce # of instructions for the method.
|
||||
@@ -10,11 +10,12 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
}
|
||||
return this.a(i, j, k).c();
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Optimize getBlockData
|
||||
public IBlockData getBlockData(final BlockPosition blockposition) {
|
||||
+ // Paper - Optimize getBlockData
|
||||
public IBlockData getBlockData(BlockPosition blockposition) {
|
||||
- return this.a(blockposition.getX(), blockposition.getY(), blockposition.getZ());
|
||||
+ if (blockposition.getY() >= 0 && blockposition.getY() >> 4 < this.sections.length) {
|
||||
+ ChunkSection chunksection = this.sections[blockposition.getY() >> 4];
|
||||
+ if (chunksection != null) {
|
||||
@@ -22,10 +23,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+ }
|
||||
+ return Blocks.AIR.getBlockData();
|
||||
+ }
|
||||
+ public IBlockData getBlockDataSlow(final BlockPosition blockposition) {
|
||||
+ // PaperSpigot end
|
||||
if (this.world.G() == WorldType.DEBUG_ALL_BLOCK_STATES) {
|
||||
IBlockData iblockdata = null;
|
||||
}
|
||||
|
||||
public IBlockData a(final int i, final int j, final int k) {
|
||||
--
|
||||
@@ -1,43 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Tue, 14 Jul 2015 10:03:45 -0700
|
||||
Subject: [PATCH] Optimize getCubes()
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
int cx = chunkx << 4;
|
||||
for ( int chunkz = ( i1 >> 4 ); chunkz <= ( ( j1 - 1 ) >> 4 ); chunkz++ )
|
||||
{
|
||||
- if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
|
||||
+ Chunk chunk = this.getChunkIfLoaded( chunkx, chunkz );
|
||||
+ if ( chunk == null )
|
||||
{
|
||||
// PaperSpigot start
|
||||
if (entity.loadChunks) {
|
||||
- ((ChunkProviderServer) entity.world.chunkProvider).getChunkAt(chunkx, chunkz);
|
||||
+ chunk = ((ChunkProviderServer) entity.world.chunkProvider).getChunkAt(chunkx, chunkz);
|
||||
} else {
|
||||
entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
|
||||
continue;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
// PaperSpigot end
|
||||
}
|
||||
int cz = chunkz << 4;
|
||||
- Chunk chunk = this.getChunkAt( chunkx, chunkz );
|
||||
// Compute ranges within chunk
|
||||
int xstart = ( i < cx ) ? cx : i;
|
||||
int xend = ( j < ( cx + 16 ) ) ? j : ( cx + 16 );
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
// Spigot end
|
||||
|
||||
+ if (entity instanceof EntityItem) return arraylist; // PaperSpigot - Optimize item movement
|
||||
+
|
||||
double d0 = 0.25D;
|
||||
List list = this.getEntities(entity, axisalignedbb.grow(d0, d0, d0));
|
||||
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Thu, 19 Mar 2015 19:41:15 -0500
|
||||
Date: Mon, 29 Feb 2016 20:40:33 -0600
|
||||
Subject: [PATCH] POM Changes
|
||||
|
||||
|
||||
@@ -14,24 +14,24 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
- <groupId>org.spigotmc</groupId>
|
||||
- <artifactId>spigot</artifactId>
|
||||
+ <groupId>org.github.paperspigot</groupId>
|
||||
+ <artifactId>paperspigot</artifactId>
|
||||
+ <groupId>com.destroystokyo.paper</groupId>
|
||||
+ <artifactId>paper</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.8.8-R0.1-SNAPSHOT</version>
|
||||
<version>1.9-SNAPSHOT</version>
|
||||
- <name>Spigot</name>
|
||||
- <url>http://www.spigotmc.org</url>
|
||||
+ <name>PaperSpigot</name>
|
||||
+ <url>https://hub.spigotmc.org/stash/projects/PAPER/</url>
|
||||
+ <name>Paper</name>
|
||||
+ <url>https://github.com/PaperSpigot/Paper</url>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
@@ -0,0 +0,0 @@
|
||||
<minecraft_version>1_8_R3</minecraft_version>
|
||||
<minecraft_version>1_9_R1</minecraft_version>
|
||||
<buildtag.prefix>git-Bukkit-</buildtag.prefix>
|
||||
<buildtag.suffix></buildtag.suffix>
|
||||
- <maven.compiler.source>1.6</maven.compiler.source>
|
||||
- <maven.compiler.target>1.6</maven.compiler.target>
|
||||
+ <!--PaperSpigot - Bump to 1.8 - This will haunt me -->
|
||||
+ <!--Paper - Bump to 1.8 - This will haunt me -->
|
||||
+ <maven.compiler.source>1.8</maven.compiler.source>
|
||||
+ <maven.compiler.target>1.8</maven.compiler.target>
|
||||
</properties>
|
||||
@@ -39,43 +39,37 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
<parent>
|
||||
- <groupId>org.spigotmc</groupId>
|
||||
- <artifactId>spigot-parent</artifactId>
|
||||
+ <groupId>org.github.paperspigot</groupId>
|
||||
+ <artifactId>paperspigot-parent</artifactId>
|
||||
+ <groupId>com.destroystokyo.paper</groupId>
|
||||
+ <artifactId>paper-parent</artifactId>
|
||||
<version>dev-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
@@ -0,0 +0,0 @@
|
||||
<version>3.0.3</version>
|
||||
</dependency>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
- <groupId>org.spigotmc</groupId>
|
||||
- <artifactId>spigot-api</artifactId>
|
||||
+ <groupId>org.github.paperspigot</groupId>
|
||||
+ <artifactId>paperspigot-api</artifactId>
|
||||
+ <groupId>com.destroystokyo.paper</groupId>
|
||||
+ <artifactId>paper-api</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>jar</type>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
@@ -0,0 +0,0 @@
|
||||
<id>spigotmc-public</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/groups/public/</url>
|
||||
</pluginRepository>
|
||||
+ <!-- PaperSpigot - Repo for gitdescribe -->
|
||||
+ <pluginRepository>
|
||||
+ <id>destroystokyo</id>
|
||||
+ <url>https://ci.destroystokyo.com/plugin/repository/everything/</url>
|
||||
+ </pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
<!-- This builds a completely 'ready to start' jar with all dependencies inside -->
|
||||
@@ -0,0 +0,0 @@
|
||||
<defaultGoal>install</defaultGoal>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
- <groupId>net.md-5</groupId>
|
||||
- <artifactId>scriptus</artifactId>
|
||||
- <version>0.2</version>
|
||||
- <executions>
|
||||
- <execution>
|
||||
+ <groupId>com.lukegb.mojo</groupId>
|
||||
+ <artifactId>gitdescribe-maven-plugin</artifactId>
|
||||
+ <version>1.3</version>
|
||||
+ <configuration>
|
||||
+ <outputPrefix>git-Paper-</outputPrefix>
|
||||
+ <scmDirectory>..</scmDirectory>
|
||||
+ </configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
- <id>ex-spigot</id>
|
||||
- <configuration>
|
||||
- <format>git-Spigot-%s</format>
|
||||
@@ -95,32 +89,19 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- <descriptionProperty>craftbukkit.desc</descriptionProperty>
|
||||
- </configuration>
|
||||
- <phase>initialize</phase>
|
||||
- <goals>
|
||||
+ <phase>compile</phase>
|
||||
<goals>
|
||||
- <goal>describe</goal>
|
||||
- </goals>
|
||||
- </execution>
|
||||
- </executions>
|
||||
- </plugin>
|
||||
+ <groupId>com.lukegb.mojo</groupId>
|
||||
+ <artifactId>gitdescribe-maven-plugin</artifactId>
|
||||
+ <version>1.3</version>
|
||||
+ <configuration>
|
||||
+ <outputPrefix>git-PaperSpigot-</outputPrefix>
|
||||
+ <scmDirectory>..</scmDirectory>
|
||||
+ </configuration>
|
||||
+ <executions>
|
||||
+ <execution>
|
||||
+ <phase>compile</phase>
|
||||
+ <goals>
|
||||
+ <goal>gitdescribe</goal>
|
||||
+ </goals>
|
||||
+ </execution>
|
||||
+ </executions>
|
||||
+ </plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
+ <goal>gitdescribe</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
@@ -0,0 +0,0 @@
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<configuration>
|
||||
+ <forceCreation>true</forceCreation> <!-- Required to prevent shading the jar multiple times -->
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Main-Class>org.bukkit.craftbukkit.Main</Main-Class>
|
||||
<Implementation-Title>CraftBukkit</Implementation-Title>
|
||||
@@ -135,7 +116,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
<plugin>
|
||||
- <groupId>org.codehaus.mojo</groupId>
|
||||
- <artifactId>animal-sniffer-maven-plugin</artifactId>
|
||||
- <version>1.13</version>
|
||||
- <version>1.14</version>
|
||||
- <executions>
|
||||
- <execution>
|
||||
- <phase>process-classes</phase>
|
||||
@@ -155,20 +136,28 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- <plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>2.3</version>
|
||||
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java b/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java
|
||||
+++ b/src/main/java/net/minecraft/server/PathfinderGoalNearestAttackableTarget.java
|
||||
@@ -0,0 +0,0 @@ public class PathfinderGoalNearestAttackableTarget<T extends EntityLiving> exten
|
||||
protected final Class<T> a;
|
||||
private final int g;
|
||||
protected final PathfinderGoalNearestAttackableTarget.DistanceComparator b;
|
||||
- protected Predicate<? super T> c;
|
||||
+ protected Predicate c;
|
||||
protected EntityLiving d;
|
||||
|
||||
public PathfinderGoalNearestAttackableTarget(EntityCreature entitycreature, Class<T> oclass, boolean flag) {
|
||||
<version>2.4.1</version>
|
||||
@@ -0,0 +0,0 @@
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<!-- versions after this appear to be broken -->
|
||||
<version>3.1</version>
|
||||
- <configuration>
|
||||
- <!-- we use the Eclipse compiler as it doesn't need a JDK -->
|
||||
- <compilerId>eclipse</compilerId>
|
||||
- <!-- source and target are ignored if this isn't true -->
|
||||
- <optimize>true</optimize>
|
||||
- </configuration>
|
||||
- <dependencies>
|
||||
- <!-- we need our custom version as it fixes some bugs on case sensitive file systems -->
|
||||
- <dependency>
|
||||
- <groupId>org.codehaus.plexus</groupId>
|
||||
- <artifactId>plexus-compiler-eclipse</artifactId>
|
||||
- <version>2.5.0-spigotmc</version>
|
||||
- </dependency>
|
||||
- </dependencies>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java
|
||||
@@ -178,7 +167,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
String result = "Unknown-Version";
|
||||
|
||||
- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.spigotmc/spigot-api/pom.properties");
|
||||
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.github.paperspigot/paperspigot-api/pom.properties");
|
||||
+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.destroystokyo.paper/paper-api/pom.properties");
|
||||
Properties properties = new Properties();
|
||||
|
||||
if (stream != null) {
|
||||
|
||||
289
Spigot-Server-Patches/Paper-config-files.patch
Normal file
289
Spigot-Server-Patches/Paper-config-files.patch
Normal file
@@ -0,0 +1,289 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Mon, 29 Feb 2016 21:02:09 -0600
|
||||
Subject: [PATCH] Paper config files
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package com.destroystokyo.paper;
|
||||
+
|
||||
+import com.google.common.base.Throwables;
|
||||
+
|
||||
+import java.io.File;
|
||||
+import java.io.IOException;
|
||||
+import java.lang.reflect.InvocationTargetException;
|
||||
+import java.lang.reflect.Method;
|
||||
+import java.lang.reflect.Modifier;
|
||||
+import java.util.HashMap;
|
||||
+import java.util.List;
|
||||
+import java.util.Map;
|
||||
+import java.util.logging.Level;
|
||||
+
|
||||
+import net.minecraft.server.MinecraftServer;
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.command.Command;
|
||||
+import org.bukkit.configuration.InvalidConfigurationException;
|
||||
+import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+
|
||||
+public class PaperConfig {
|
||||
+
|
||||
+ private static File CONFIG_FILE;
|
||||
+ private static final String HEADER = "This is the main configuration file for Paper.\n"
|
||||
+ + "As you can see, there's tons to configure. Some options may impact gameplay, so use\n"
|
||||
+ + "with caution, and make sure you know what each option does before configuring.\n"
|
||||
+ + "\n"
|
||||
+ + "If you need help with the configuration or have any questions related to PaperSpigot,\n"
|
||||
+ + "join us at the IRC.\n"
|
||||
+ + "\n"
|
||||
+ + "IRC: #paperspigot @ irc.spi.gt ( http://irc.spi.gt/iris/?channels=PaperSpigot )\n"
|
||||
+ + "Wiki: https://paper.readthedocs.org/ \n"
|
||||
+ + "Paper Forums: https://aquifermc.org/ \n";
|
||||
+ /*========================================================================*/
|
||||
+ public static YamlConfiguration config;
|
||||
+ static int version;
|
||||
+ static Map<String, Command> commands;
|
||||
+ /*========================================================================*/
|
||||
+
|
||||
+ public static void init(File configFile) {
|
||||
+ CONFIG_FILE = configFile;
|
||||
+ config = new YamlConfiguration();
|
||||
+ try {
|
||||
+ config.load(CONFIG_FILE);
|
||||
+ } catch (IOException ex) {
|
||||
+ } catch (InvalidConfigurationException ex) {
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Could not load paper.yml, please correct your syntax errors", ex);
|
||||
+ throw Throwables.propagate(ex);
|
||||
+ }
|
||||
+ config.options().header(HEADER);
|
||||
+ config.options().copyDefaults(true);
|
||||
+
|
||||
+ commands = new HashMap<String, Command>();
|
||||
+
|
||||
+ version = getInt("config-version", 9);
|
||||
+ set("config-version", 9);
|
||||
+ readConfig(PaperConfig.class, null);
|
||||
+ }
|
||||
+
|
||||
+ public static void registerCommands() {
|
||||
+ for (Map.Entry<String, Command> entry : commands.entrySet()) {
|
||||
+ MinecraftServer.getServer().server.getCommandMap().register(entry.getKey(), "Paper", entry.getValue());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ static void readConfig(Class<?> clazz, Object instance) {
|
||||
+ for (Method method : clazz.getDeclaredMethods()) {
|
||||
+ if (Modifier.isPrivate(method.getModifiers())) {
|
||||
+ if (method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE) {
|
||||
+ try {
|
||||
+ method.setAccessible(true);
|
||||
+ method.invoke(instance);
|
||||
+ } catch (InvocationTargetException ex) {
|
||||
+ throw Throwables.propagate(ex.getCause());
|
||||
+ } catch (Exception ex) {
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Error invoking " + method, ex);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ config.save(CONFIG_FILE);
|
||||
+ } catch (IOException ex) {
|
||||
+ Bukkit.getLogger().log(Level.SEVERE, "Could not save " + CONFIG_FILE, ex);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static void set(String path, Object val) {
|
||||
+ config.set(path, val);
|
||||
+ }
|
||||
+
|
||||
+ private static boolean getBoolean(String path, boolean def) {
|
||||
+ config.addDefault(path, def);
|
||||
+ return config.getBoolean(path, config.getBoolean(path));
|
||||
+ }
|
||||
+
|
||||
+ private static double getDouble(String path, double def) {
|
||||
+ config.addDefault(path, def);
|
||||
+ return config.getDouble(path, config.getDouble(path));
|
||||
+ }
|
||||
+
|
||||
+ private static float getFloat(String path, float def) {
|
||||
+ // TODO: Figure out why getFloat() always returns the default value.
|
||||
+ return (float) getDouble(path, (double) def);
|
||||
+ }
|
||||
+
|
||||
+ private static int getInt(String path, int def) {
|
||||
+ config.addDefault(path, def);
|
||||
+ return config.getInt(path, config.getInt(path));
|
||||
+ }
|
||||
+
|
||||
+ private static <T> List getList(String path, T def) {
|
||||
+ config.addDefault(path, def);
|
||||
+ return (List<T>) config.getList(path, config.getList(path));
|
||||
+ }
|
||||
+
|
||||
+ private static String getString(String path, String def) {
|
||||
+ config.addDefault(path, def);
|
||||
+ return config.getString(path, config.getString(path));
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package com.destroystokyo.paper;
|
||||
+
|
||||
+import java.util.List;
|
||||
+
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+
|
||||
+public class PaperWorldConfig {
|
||||
+
|
||||
+ private final String worldName;
|
||||
+ private final YamlConfiguration config;
|
||||
+ private boolean verbose;
|
||||
+
|
||||
+ public PaperWorldConfig(String worldName) {
|
||||
+ this.worldName = worldName;
|
||||
+ this.config = PaperConfig.config;
|
||||
+ init();
|
||||
+ }
|
||||
+
|
||||
+ public void init() {
|
||||
+ this.verbose = getBoolean("verbose", false);
|
||||
+
|
||||
+ log("-------- World Settings For [" + worldName + "] --------");
|
||||
+ PaperConfig.readConfig(PaperWorldConfig.class, this);
|
||||
+ }
|
||||
+
|
||||
+ private void log(String s) {
|
||||
+ if (verbose) {
|
||||
+ Bukkit.getLogger().info(s);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void set(String path, Object val) {
|
||||
+ config.set("world-settings.default." + path, val);
|
||||
+ }
|
||||
+
|
||||
+ private boolean getBoolean(String path, boolean def) {
|
||||
+ config.addDefault("world-settings.default." + path, def);
|
||||
+ return config.getBoolean("world-settings." + worldName + "." + path, config.getBoolean("world-settings.default." + path));
|
||||
+ }
|
||||
+
|
||||
+ private double getDouble(String path, double def) {
|
||||
+ config.addDefault("world-settings.default." + path, def);
|
||||
+ return config.getDouble("world-settings." + worldName + "." + path, config.getDouble("world-settings.default." + path));
|
||||
+ }
|
||||
+
|
||||
+ private int getInt(String path, int def) {
|
||||
+ config.addDefault("world-settings.default." + path, def);
|
||||
+ return config.getInt("world-settings." + worldName + "." + path, config.getInt("world-settings.default." + path));
|
||||
+ }
|
||||
+
|
||||
+ private float getFloat(String path, float def) {
|
||||
+ // TODO: Figure out why getFloat() always returns the default value.
|
||||
+ return (float) getDouble(path, (double) def);
|
||||
+ }
|
||||
+
|
||||
+ private <T> List getList(String path, T def) {
|
||||
+ config.addDefault("world-settings.default." + path, def);
|
||||
+ return (List<T>) config.getList("world-settings." + worldName + "." + path, config.getList("world-settings.default." + path));
|
||||
+ }
|
||||
+
|
||||
+ private String getString(String path, String def) {
|
||||
+ config.addDefault("world-settings.default." + path, def);
|
||||
+ return config.getString("world-settings." + worldName + "." + path, config.getString("world-settings.default." + path));
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
@@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||
org.spigotmc.SpigotConfig.init((File) options.valueOf("spigot-settings"));
|
||||
org.spigotmc.SpigotConfig.registerCommands();
|
||||
// Spigot end
|
||||
+ // Paper start
|
||||
+ com.destroystokyo.paper.PaperConfig.init((File) options.valueOf("paper-settings"));
|
||||
+ com.destroystokyo.paper.PaperConfig.registerCommands();
|
||||
+ // Paper end
|
||||
|
||||
DedicatedServer.LOGGER.info("Generating keypair");
|
||||
this.a(MinecraftEncryption.b());
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
private int tickPosition;
|
||||
public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot
|
||||
|
||||
+ public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper
|
||||
+
|
||||
public final SpigotTimings.WorldTimingsHandler timings; // Spigot
|
||||
private boolean guardEntityList; // Spigot
|
||||
public static boolean haveWeSilencedAPhysicsCrash;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
protected World(IDataManager idatamanager, WorldData worlddata, WorldProvider worldprovider, MethodProfiler methodprofiler, boolean flag, ChunkGenerator gen, org.bukkit.World.Environment env) {
|
||||
this.spigotConfig = new org.spigotmc.SpigotWorldConfig( worlddata.getName() ); // Spigot
|
||||
+ this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig( worlddata.getName() ); // Paper
|
||||
this.generator = gen;
|
||||
this.world = new CraftWorld((WorldServer) this, gen, env);
|
||||
this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot
|
||||
+ com.destroystokyo.paper.PaperConfig.init((File) console.options.valueOf("paper-settings")); // Paper
|
||||
for (WorldServer world : console.worlds) {
|
||||
world.worldData.setDifficulty(difficulty);
|
||||
world.setSpawnFlags(monsters, animals);
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
world.ticksPerMonsterSpawns = this.getTicksPerMonsterSpawns();
|
||||
}
|
||||
world.spigotConfig.init(); // Spigot
|
||||
+ world.paperConfig.init(); // Paper
|
||||
}
|
||||
|
||||
pluginManager.clearPlugins();
|
||||
commandMap.clearCommands();
|
||||
resetRecipes();
|
||||
org.spigotmc.SpigotConfig.registerCommands(); // Spigot
|
||||
+ com.destroystokyo.paper.PaperConfig.registerCommands(); // Paper
|
||||
|
||||
overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*");
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -0,0 +0,0 @@ public class Main {
|
||||
.defaultsTo(new File("spigot.yml"))
|
||||
.describedAs("Yml file");
|
||||
// Spigot End
|
||||
+
|
||||
+ // Paper Start
|
||||
+ acceptsAll(asList("paper", "paper-settings"), "File for paper settings")
|
||||
+ .withRequiredArg()
|
||||
+ .ofType(File.class)
|
||||
+ .defaultsTo(new File("paper.yml"))
|
||||
+ .describedAs("Yml file");
|
||||
+ // Paper end
|
||||
}
|
||||
};
|
||||
|
||||
--
|
||||
@@ -1,319 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Thu, 28 May 2015 00:08:15 -0500
|
||||
Subject: [PATCH] PaperSpigot config files
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
@@ -0,0 +0,0 @@ public class DedicatedServer extends MinecraftServer implements IMinecraftServer
|
||||
org.spigotmc.SpigotConfig.init((File) options.valueOf("spigot-settings"));
|
||||
org.spigotmc.SpigotConfig.registerCommands();
|
||||
// Spigot end
|
||||
+ // PaperSpigot start
|
||||
+ org.github.paperspigot.PaperSpigotConfig.init((File) options.valueOf("paper-settings"));
|
||||
+ org.github.paperspigot.PaperSpigotConfig.registerCommands();
|
||||
+ // PaperSpigot end
|
||||
|
||||
DedicatedServer.LOGGER.info("Generating keypair");
|
||||
this.a(MinecraftEncryption.b());
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index eca86db8..bb46799 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot
|
||||
|
||||
+ public final org.github.paperspigot.PaperSpigotWorldConfig paperSpigotConfig; // PaperSpigot
|
||||
+
|
||||
public final SpigotTimings.WorldTimingsHandler timings; // Spigot
|
||||
|
||||
public CraftWorld getWorld() {
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
protected World(IDataManager idatamanager, WorldData worlddata, WorldProvider worldprovider, MethodProfiler methodprofiler, boolean flag, ChunkGenerator gen, org.bukkit.World.Environment env) {
|
||||
this.spigotConfig = new org.spigotmc.SpigotWorldConfig( worlddata.getName() ); // Spigot
|
||||
+ this.paperSpigotConfig = new org.github.paperspigot.PaperSpigotWorldConfig( worlddata.getName() ); // PaperSpigot
|
||||
this.generator = gen;
|
||||
this.world = new CraftWorld((WorldServer) this, gen, env);
|
||||
this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot
|
||||
+ org.github.paperspigot.PaperSpigotConfig.init((File) console.options.valueOf("paper-settings")); // PaperSpigot
|
||||
for (WorldServer world : console.worlds) {
|
||||
world.worldData.setDifficulty(difficulty);
|
||||
world.setSpawnFlags(monsters, animals);
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
world.ticksPerMonsterSpawns = this.getTicksPerMonsterSpawns();
|
||||
}
|
||||
world.spigotConfig.init(); // Spigot
|
||||
+ world.paperSpigotConfig.init(); // PaperSpigot
|
||||
}
|
||||
|
||||
pluginManager.clearPlugins();
|
||||
commandMap.clearCommands();
|
||||
resetRecipes();
|
||||
org.spigotmc.SpigotConfig.registerCommands(); // Spigot
|
||||
+ org.github.paperspigot.PaperSpigotConfig.registerCommands(); // PaperSpigot
|
||||
|
||||
overrideAllCommandBlockCommands = commandsConfiguration.getStringList("command-block-overrides").contains("*");
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
|
||||
@@ -0,0 +0,0 @@ public class Main {
|
||||
.defaultsTo(new File("spigot.yml"))
|
||||
.describedAs("Yml file");
|
||||
// Spigot End
|
||||
+
|
||||
+ // PaperSpigot Start
|
||||
+ acceptsAll(asList("paper", "paper-settings"), "File for paperspigot settings")
|
||||
+ .withRequiredArg()
|
||||
+ .ofType(File.class)
|
||||
+ .defaultsTo(new File("paper.yml"))
|
||||
+ .describedAs("Yml file");
|
||||
+ // PaperSpigot End
|
||||
}
|
||||
};
|
||||
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package org.github.paperspigot;
|
||||
+
|
||||
+import com.google.common.base.Throwables;
|
||||
+import java.io.File;
|
||||
+import java.io.IOException;
|
||||
+import java.lang.reflect.InvocationTargetException;
|
||||
+import java.lang.reflect.Method;
|
||||
+import java.lang.reflect.Modifier;
|
||||
+import java.util.HashMap;
|
||||
+import java.util.List;
|
||||
+import java.util.Map;
|
||||
+import java.util.logging.Level;
|
||||
+import net.minecraft.server.MinecraftServer;
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.command.Command;
|
||||
+import org.bukkit.configuration.InvalidConfigurationException;
|
||||
+import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+
|
||||
+public class PaperSpigotConfig
|
||||
+{
|
||||
+
|
||||
+ private static File CONFIG_FILE;
|
||||
+ private static final String HEADER = "This is the main configuration file for PaperSpigot.\n"
|
||||
+ + "As you can see, there's tons to configure. Some options may impact gameplay, so use\n"
|
||||
+ + "with caution, and make sure you know what each option does before configuring.\n"
|
||||
+ + "\n"
|
||||
+ + "If you need help with the configuration or have any questions related to PaperSpigot,\n"
|
||||
+ + "join us at the IRC.\n"
|
||||
+ + "\n"
|
||||
+ + "IRC: #paperspigot @ irc.spi.gt ( http://irc.spi.gt/iris/?channels=PaperSpigot )\n";
|
||||
+ /*========================================================================*/
|
||||
+ public static YamlConfiguration config;
|
||||
+ static int version;
|
||||
+ static Map<String, Command> commands;
|
||||
+ /*========================================================================*/
|
||||
+
|
||||
+ public static void init(File configFile)
|
||||
+ {
|
||||
+ CONFIG_FILE = configFile;
|
||||
+ config = new YamlConfiguration();
|
||||
+ try
|
||||
+ {
|
||||
+ config.load ( CONFIG_FILE );
|
||||
+ } catch ( IOException ex )
|
||||
+ {
|
||||
+ } catch ( InvalidConfigurationException ex )
|
||||
+ {
|
||||
+ Bukkit.getLogger().log( Level.SEVERE, "Could not load paper.yml, please correct your syntax errors", ex );
|
||||
+ throw Throwables.propagate( ex );
|
||||
+ }
|
||||
+ config.options().header( HEADER );
|
||||
+ config.options().copyDefaults( true );
|
||||
+
|
||||
+ commands = new HashMap<String, Command>();
|
||||
+
|
||||
+ version = getInt( "config-version", 9 );
|
||||
+ set( "config-version", 9 );
|
||||
+ readConfig( PaperSpigotConfig.class, null );
|
||||
+ }
|
||||
+
|
||||
+ public static void registerCommands()
|
||||
+ {
|
||||
+ for ( Map.Entry<String, Command> entry : commands.entrySet() )
|
||||
+ {
|
||||
+ MinecraftServer.getServer().server.getCommandMap().register( entry.getKey(), "PaperSpigot", entry.getValue() );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ static void readConfig(Class<?> clazz, Object instance)
|
||||
+ {
|
||||
+ for ( Method method : clazz.getDeclaredMethods() )
|
||||
+ {
|
||||
+ if ( Modifier.isPrivate( method.getModifiers() ) )
|
||||
+ {
|
||||
+ if ( method.getParameterTypes().length == 0 && method.getReturnType() == Void.TYPE )
|
||||
+ {
|
||||
+ try
|
||||
+ {
|
||||
+ method.setAccessible( true );
|
||||
+ method.invoke( instance );
|
||||
+ } catch ( InvocationTargetException ex )
|
||||
+ {
|
||||
+ throw Throwables.propagate( ex.getCause() );
|
||||
+ } catch ( Exception ex )
|
||||
+ {
|
||||
+ Bukkit.getLogger().log( Level.SEVERE, "Error invoking " + method, ex );
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ try
|
||||
+ {
|
||||
+ config.save( CONFIG_FILE );
|
||||
+ } catch ( IOException ex )
|
||||
+ {
|
||||
+ Bukkit.getLogger().log( Level.SEVERE, "Could not save " + CONFIG_FILE, ex );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private static void set(String path, Object val)
|
||||
+ {
|
||||
+ config.set( path, val );
|
||||
+ }
|
||||
+
|
||||
+ private static boolean getBoolean(String path, boolean def)
|
||||
+ {
|
||||
+ config.addDefault( path, def );
|
||||
+ return config.getBoolean( path, config.getBoolean( path ) );
|
||||
+ }
|
||||
+
|
||||
+ private static double getDouble(String path, double def)
|
||||
+ {
|
||||
+ config.addDefault( path, def );
|
||||
+ return config.getDouble( path, config.getDouble( path ) );
|
||||
+ }
|
||||
+
|
||||
+ private static float getFloat(String path, float def)
|
||||
+ {
|
||||
+ // TODO: Figure out why getFloat() always returns the default value.
|
||||
+ return (float) getDouble( path, (double) def );
|
||||
+ }
|
||||
+
|
||||
+ private static int getInt(String path, int def)
|
||||
+ {
|
||||
+ config.addDefault( path, def );
|
||||
+ return config.getInt( path, config.getInt( path ) );
|
||||
+ }
|
||||
+
|
||||
+ private static <T> List getList(String path, T def)
|
||||
+ {
|
||||
+ config.addDefault( path, def );
|
||||
+ return (List<T>) config.getList( path, config.getList( path ) );
|
||||
+ }
|
||||
+
|
||||
+ private static String getString(String path, String def)
|
||||
+ {
|
||||
+ config.addDefault( path, def );
|
||||
+ return config.getString( path, config.getString( path ) );
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@
|
||||
+package org.github.paperspigot;
|
||||
+
|
||||
+import java.util.List;
|
||||
+import org.bukkit.Bukkit;
|
||||
+import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+
|
||||
+public class PaperSpigotWorldConfig
|
||||
+{
|
||||
+
|
||||
+ private final String worldName;
|
||||
+ private final YamlConfiguration config;
|
||||
+ private boolean verbose;
|
||||
+
|
||||
+ public PaperSpigotWorldConfig(String worldName)
|
||||
+ {
|
||||
+ this.worldName = worldName;
|
||||
+ this.config = PaperSpigotConfig.config;
|
||||
+ init();
|
||||
+ }
|
||||
+
|
||||
+ public void init()
|
||||
+ {
|
||||
+ this.verbose = getBoolean( "verbose", true );
|
||||
+
|
||||
+ log( "-------- World Settings For [" + worldName + "] --------" );
|
||||
+ PaperSpigotConfig.readConfig( PaperSpigotWorldConfig.class, this );
|
||||
+ }
|
||||
+
|
||||
+ private void log(String s)
|
||||
+ {
|
||||
+ if ( verbose )
|
||||
+ {
|
||||
+ Bukkit.getLogger().info( s );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ private void set(String path, Object val)
|
||||
+ {
|
||||
+ config.set( "world-settings.default." + path, val );
|
||||
+ }
|
||||
+
|
||||
+ private boolean getBoolean(String path, boolean def)
|
||||
+ {
|
||||
+ config.addDefault( "world-settings.default." + path, def );
|
||||
+ return config.getBoolean( "world-settings." + worldName + "." + path, config.getBoolean( "world-settings.default." + path ) );
|
||||
+ }
|
||||
+
|
||||
+ private double getDouble(String path, double def)
|
||||
+ {
|
||||
+ config.addDefault( "world-settings.default." + path, def );
|
||||
+ return config.getDouble( "world-settings." + worldName + "." + path, config.getDouble( "world-settings.default." + path ) );
|
||||
+ }
|
||||
+
|
||||
+ private int getInt(String path, int def)
|
||||
+ {
|
||||
+ config.addDefault( "world-settings.default." + path, def );
|
||||
+ return config.getInt( "world-settings." + worldName + "." + path, config.getInt( "world-settings.default." + path ) );
|
||||
+ }
|
||||
+
|
||||
+ private float getFloat(String path, float def)
|
||||
+ {
|
||||
+ // TODO: Figure out why getFloat() always returns the default value.
|
||||
+ return (float) getDouble( path, (double) def );
|
||||
+ }
|
||||
+
|
||||
+ private <T> List getList(String path, T def)
|
||||
+ {
|
||||
+ config.addDefault( "world-settings.default." + path, def );
|
||||
+ return (List<T>) config.getList( "world-settings." + worldName + "." + path, config.getList( "world-settings.default." + path ) );
|
||||
+ }
|
||||
+
|
||||
+ private String getString(String path, String def)
|
||||
+ {
|
||||
+ config.addDefault( "world-settings.default." + path, def );
|
||||
+ return config.getString( "world-settings." + worldName + "." + path, config.getString( "world-settings.default." + path ) );
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
@@ -1,21 +1,39 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: gsand <gsandowns@gmail.com>
|
||||
Date: Sat, 7 Mar 2015 21:35:14 -0600
|
||||
Date: Tue, 1 Mar 2016 13:43:16 -0600
|
||||
Subject: [PATCH] Player Exhaustion Multipliers
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperWorldConfig {
|
||||
fishingMaxTicks = getInt("fishing-time-range.MaximumTicks", 900);
|
||||
log("Fishing time ranges are between " + fishingMinTicks +" and " + fishingMaxTicks + " ticks");
|
||||
}
|
||||
+
|
||||
+ public float blockBreakExhaustion;
|
||||
+ public float playerSwimmingExhaustion;
|
||||
+ public void exhaustionValues() {
|
||||
+ blockBreakExhaustion = getFloat("player-exhaustion.block-break", 0.025F);
|
||||
+ playerSwimmingExhaustion = getFloat("player-exhaustion.swimming", 0.015F);
|
||||
+ log("Player exhaustion penalty for breaking blocks is " + blockBreakExhaustion);
|
||||
+ log("Player exhaustion penalty for swimming is " + playerSwimmingExhaustion);
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -0,0 +0,0 @@ public class Block {
|
||||
|
||||
public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity) {
|
||||
entityhuman.b(StatisticList.MINE_BLOCK_COUNT[getId(this)]);
|
||||
public void a(World world, EntityHuman entityhuman, BlockPosition blockposition, IBlockData iblockdata, TileEntity tileentity, ItemStack itemstack) {
|
||||
entityhuman.b(StatisticList.a(this));
|
||||
- entityhuman.applyExhaustion(0.025F);
|
||||
+ entityhuman.applyExhaustion(world.paperSpigotConfig.blockBreakExhaustion); // PaperSpigot - Configurable block break exhaustion
|
||||
if (this.I() && EnchantmentManager.hasSilkTouchEnchantment(entityhuman)) {
|
||||
ItemStack itemstack = this.i(iblockdata);
|
||||
+ entityhuman.applyExhaustion(world.paperConfig.blockBreakExhaustion); // Paper - Configurable block break exhaustion
|
||||
if (this.o() && EnchantmentManager.getEnchantmentLevel(Enchantments.SILK_TOUCH, itemstack) > 0) {
|
||||
ItemStack itemstack1 = this.u(iblockdata);
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
@@ -24,34 +42,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
i = Math.round(MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2) * 100.0F);
|
||||
if (i > 0) {
|
||||
this.a(StatisticList.p, i);
|
||||
this.a(StatisticList.q, i);
|
||||
- this.applyExhaustion(0.015F * (float) i * 0.01F);
|
||||
+ this.applyExhaustion(world.paperSpigotConfig.playerSwimmingExhaustion * (float) i * 0.01F); // PaperSpigot - Configurable swimming exhaustion
|
||||
+ this.applyExhaustion(world.paperConfig.playerSwimmingExhaustion); // Paper - Configurable swimming exhaustion
|
||||
}
|
||||
} else if (this.V()) {
|
||||
} else if (this.isInWater()) {
|
||||
i = Math.round(MathHelper.sqrt(d0 * d0 + d2 * d2) * 100.0F);
|
||||
if (i > 0) {
|
||||
this.a(StatisticList.l, i);
|
||||
this.a(StatisticList.m, i);
|
||||
- this.applyExhaustion(0.015F * (float) i * 0.01F);
|
||||
+ this.applyExhaustion(world.paperSpigotConfig.playerSwimmingExhaustion * (float) i * 0.01F); // PaperSpigot - Configurable swimming (diving) exhaustion
|
||||
+ this.applyExhaustion(world.paperConfig.playerSwimmingExhaustion); // Paper - Configurable swimming exhaustion
|
||||
}
|
||||
} else if (this.k_()) {
|
||||
} else if (this.n_()) {
|
||||
if (d1 > 0.0D) {
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
fishingMinTicks = getInt( "fishing-time-range.MinimumTicks", 100 );
|
||||
fishingMaxTicks = getInt( "fishing-time-range.MaximumTicks", 900 );
|
||||
}
|
||||
+
|
||||
+ public float blockBreakExhaustion;
|
||||
+ public float playerSwimmingExhaustion;
|
||||
+ private void exhaustionValues()
|
||||
+ {
|
||||
+ blockBreakExhaustion = getFloat( "player-exhaustion.block-break", 0.025F );
|
||||
+ playerSwimmingExhaustion = getFloat( "player-exhaustion.swimming", 0.015F );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,121 +1,20 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Techcable <Techcable@outlook.com>
|
||||
Date: Tue, 16 Feb 2016 19:45:55 -0600
|
||||
Date: Thu, 3 Mar 2016 02:32:10 -0600
|
||||
Subject: [PATCH] Player Tab List and Title APIs
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutPlayerListHeaderFooter.java
|
||||
@@ -0,0 +0,0 @@ import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
+ public net.md_5.bungee.api.chat.BaseComponent[] header, footer; // Paper
|
||||
+
|
||||
private IChatBaseComponent a;
|
||||
private IChatBaseComponent b;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListene
|
||||
}
|
||||
|
||||
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
- packetdataserializer.a(this.a);
|
||||
- packetdataserializer.a(this.b);
|
||||
+ // Paper start
|
||||
+ if (this.header != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(this.header));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.a);
|
||||
+ }
|
||||
+
|
||||
+ if (this.footer != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(this.footer));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.b);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
public void a(PacketListenerPlayOut packetlistenerplayout) {
|
||||
packetlistenerplayout.a(this);
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - fix compile error
|
||||
+ /*
|
||||
public void a(PacketListener packetlistener) {
|
||||
this.a((PacketListenerPlayOut) packetlistener);
|
||||
}
|
||||
+ */
|
||||
+ // PaperSpigot end
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||
+++ b/src/main/java/net/minecraft/server/PacketPlayOutTitle.java
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
private int d;
|
||||
private int e;
|
||||
|
||||
+ // Paper start
|
||||
+ public net.md_5.bungee.api.chat.BaseComponent[] components;
|
||||
+
|
||||
+ public PacketPlayOutTitle(EnumTitleAction action, net.md_5.bungee.api.chat.BaseComponent[] components, int fadeIn, int stay, int fadeOut) {
|
||||
+ this.a = action;
|
||||
+ this.components = components;
|
||||
+ this.c = fadeIn;
|
||||
+ this.d = stay;
|
||||
+ this.e = fadeOut;
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
public PacketPlayOutTitle() {}
|
||||
|
||||
public PacketPlayOutTitle(EnumTitleAction packetplayouttitle_enumtitleaction, IChatBaseComponent ichatbasecomponent) {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
packetdataserializer.a((Enum) this.a);
|
||||
if (this.a == EnumTitleAction.TITLE || this.a == EnumTitleAction.SUBTITLE) {
|
||||
- packetdataserializer.a(this.b);
|
||||
+ // Paper start
|
||||
+ if (this.components != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(components));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.b);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
if (this.a == EnumTitleAction.TIMES) {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
packetlistenerplayout.a(this);
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - fix compile error
|
||||
+ /*
|
||||
public void a(PacketListener packetlistener) {
|
||||
this.a((PacketListenerPlayOut) packetlistener);
|
||||
}
|
||||
+ */
|
||||
+ // PaperSpigot end
|
||||
|
||||
public static enum EnumTitleAction {
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.metadata.MetadataValue;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.plugin.messaging.StandardMessenger;
|
||||
import org.bukkit.scoreboard.Scoreboard;
|
||||
+// PaperSpigot start
|
||||
+import org.github.paperspigot.Title;
|
||||
+// PaperSpigot end
|
||||
@@ -0,0 +0,0 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
@DelegateDeserialization(CraftOfflinePlayer.class)
|
||||
public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
+import com.destroystokyo.paper.Title;
|
||||
import com.google.common.base.Preconditions;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
packet.components = components;
|
||||
getHandle().playerConnection.sendPacket(packet);
|
||||
@@ -200,4 +99,210 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
// Paper end
|
||||
|
||||
@Override
|
||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
@Override
|
||||
public void sendTitle(String title, String subtitle) {
|
||||
if (title != null) {
|
||||
- PacketPlayOutTitle packetTitle = new PacketPlayOutTitle(EnumTitleAction.TITLE, CraftChatMessage.fromString(title)[0]);
|
||||
- getHandle().playerConnection.sendPacket(packetTitle);
|
||||
+ this.sendTitle(new Title(title)); // TODO: Paper - Double check these
|
||||
}
|
||||
|
||||
if (subtitle != null) {
|
||||
- PacketPlayOutTitle packetSubtitle = new PacketPlayOutTitle(EnumTitleAction.SUBTITLE, CraftChatMessage.fromString(subtitle)[0]);
|
||||
- getHandle().playerConnection.sendPacket(packetSubtitle);
|
||||
+ this.sendTitle(new Title(null, subtitle)); // TODO: Paper - Double check these
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetTitle() {
|
||||
- PacketPlayOutTitle packetReset = new PacketPlayOutTitle(EnumTitleAction.RESET, null);
|
||||
- getHandle().playerConnection.sendPacket(packetReset);
|
||||
+ this.hideTitle(); // TODO: Paper - Double check these
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutPlayerListHeaderFooter.java b/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutPlayerListHeaderFooter.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutPlayerListHeaderFooter.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutPlayerListHeaderFooter.java
|
||||
@@ -0,0 +0,0 @@ import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
+ public net.md_5.bungee.api.chat.BaseComponent[] header, footer; // Paper
|
||||
+
|
||||
private IChatBaseComponent a;
|
||||
private IChatBaseComponent b;
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListene
|
||||
}
|
||||
|
||||
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
- this.a = packetdataserializer.f();
|
||||
- this.b = packetdataserializer.f();
|
||||
+ // Paper start
|
||||
+ if (this.header != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(this.header));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.a);
|
||||
+ }
|
||||
+
|
||||
+ if (this.footer != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(this.footer));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.b);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutPlayerListHeaderFooter implements Packet<PacketListene
|
||||
packetdataserializer.a(this.b);
|
||||
}
|
||||
|
||||
+ // PaperSpigot - Fix compile error
|
||||
public void a(PacketListenerPlayOut packetlistenerplayout) {
|
||||
- packetlistenerplayout.a(this);
|
||||
+ packetlistenerplayout.a((IChatBaseComponent) this);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutTitle.java b/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutTitle.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutTitle.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/PacketPlayOutTitle.java
|
||||
@@ -0,0 +0,0 @@
|
||||
-package net.minecraft.server;
|
||||
+package org.bukkit.craftbukkit.entity;
|
||||
+
|
||||
+import net.minecraft.server.IChatBaseComponent;
|
||||
+import net.minecraft.server.Packet;
|
||||
+import net.minecraft.server.PacketDataSerializer;
|
||||
+import net.minecraft.server.PacketListenerPlayOut;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
- private PacketPlayOutTitle.EnumTitleAction a;
|
||||
+ private EnumTitleAction a;
|
||||
private IChatBaseComponent b;
|
||||
private int c;
|
||||
private int d;
|
||||
private int e;
|
||||
|
||||
+ // Paper start
|
||||
+ public net.md_5.bungee.api.chat.BaseComponent[] components;
|
||||
+
|
||||
+ public PacketPlayOutTitle(EnumTitleAction action, net.md_5.bungee.api.chat.BaseComponent[] components, int fadeIn, int stay, int fadeOut) {
|
||||
+ this.a = action;
|
||||
+ this.components = components;
|
||||
+ this.c = fadeIn;
|
||||
+ this.d = stay;
|
||||
+ this.e = fadeOut;
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
public PacketPlayOutTitle() {}
|
||||
|
||||
- public PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction packetplayouttitle_enumtitleaction, IChatBaseComponent ichatbasecomponent) {
|
||||
+ public PacketPlayOutTitle(EnumTitleAction packetplayouttitle_enumtitleaction, IChatBaseComponent ichatbasecomponent) {
|
||||
this(packetplayouttitle_enumtitleaction, ichatbasecomponent, -1, -1, -1);
|
||||
}
|
||||
|
||||
public PacketPlayOutTitle(int i, int j, int k) {
|
||||
- this(PacketPlayOutTitle.EnumTitleAction.TIMES, (IChatBaseComponent) null, i, j, k);
|
||||
+ this(EnumTitleAction.TIMES, (IChatBaseComponent) null, i, j, k);
|
||||
}
|
||||
|
||||
- public PacketPlayOutTitle(PacketPlayOutTitle.EnumTitleAction packetplayouttitle_enumtitleaction, IChatBaseComponent ichatbasecomponent, int i, int j, int k) {
|
||||
+ public PacketPlayOutTitle(EnumTitleAction packetplayouttitle_enumtitleaction, IChatBaseComponent ichatbasecomponent, int i, int j, int k) {
|
||||
this.a = packetplayouttitle_enumtitleaction;
|
||||
this.b = ichatbasecomponent;
|
||||
this.c = i;
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
}
|
||||
|
||||
public void a(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
- this.a = (PacketPlayOutTitle.EnumTitleAction) packetdataserializer.a(PacketPlayOutTitle.EnumTitleAction.class);
|
||||
- if (this.a == PacketPlayOutTitle.EnumTitleAction.TITLE || this.a == PacketPlayOutTitle.EnumTitleAction.SUBTITLE) {
|
||||
+ this.a = (EnumTitleAction) packetdataserializer.a(EnumTitleAction.class);
|
||||
+ if (this.a == EnumTitleAction.TITLE || this.a == EnumTitleAction.SUBTITLE) {
|
||||
this.b = packetdataserializer.f();
|
||||
}
|
||||
|
||||
- if (this.a == PacketPlayOutTitle.EnumTitleAction.TIMES) {
|
||||
+ if (this.a == EnumTitleAction.TIMES) {
|
||||
this.c = packetdataserializer.readInt();
|
||||
this.d = packetdataserializer.readInt();
|
||||
this.e = packetdataserializer.readInt();
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
public void b(PacketDataSerializer packetdataserializer) throws IOException {
|
||||
packetdataserializer.a((Enum) this.a);
|
||||
- if (this.a == PacketPlayOutTitle.EnumTitleAction.TITLE || this.a == PacketPlayOutTitle.EnumTitleAction.SUBTITLE) {
|
||||
- packetdataserializer.a(this.b);
|
||||
+ if (this.a == EnumTitleAction.TITLE || this.a == EnumTitleAction.SUBTITLE) {
|
||||
+ // Paper start
|
||||
+ if (this.components != null) {
|
||||
+ packetdataserializer.a(net.md_5.bungee.chat.ComponentSerializer.toString(components));
|
||||
+ } else {
|
||||
+ packetdataserializer.a(this.b);
|
||||
+ }
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
- if (this.a == PacketPlayOutTitle.EnumTitleAction.TIMES) {
|
||||
+ if (this.a == EnumTitleAction.TIMES) {
|
||||
packetdataserializer.writeInt(this.c);
|
||||
packetdataserializer.writeInt(this.d);
|
||||
packetdataserializer.writeInt(this.e);
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
}
|
||||
|
||||
+ // Paper - Fix compile error
|
||||
public void a(PacketListenerPlayOut packetlistenerplayout) {
|
||||
- packetlistenerplayout.a(this);
|
||||
+ packetlistenerplayout.a((IChatBaseComponent) this);
|
||||
}
|
||||
|
||||
public static enum EnumTitleAction {
|
||||
@@ -0,0 +0,0 @@ public class PacketPlayOutTitle implements Packet<PacketListenerPlayOut> {
|
||||
|
||||
private EnumTitleAction() {}
|
||||
|
||||
- public static PacketPlayOutTitle.EnumTitleAction a(String s) {
|
||||
- PacketPlayOutTitle.EnumTitleAction[] apacketplayouttitle_enumtitleaction = values();
|
||||
+ public static EnumTitleAction a(String s) {
|
||||
+ EnumTitleAction[] apacketplayouttitle_enumtitleaction = values();
|
||||
int i = apacketplayouttitle_enumtitleaction.length;
|
||||
|
||||
for (int j = 0; j < i; ++j) {
|
||||
- PacketPlayOutTitle.EnumTitleAction packetplayouttitle_enumtitleaction = apacketplayouttitle_enumtitleaction[j];
|
||||
+ EnumTitleAction packetplayouttitle_enumtitleaction = apacketplayouttitle_enumtitleaction[j];
|
||||
|
||||
if (packetplayouttitle_enumtitleaction.name().equalsIgnoreCase(s)) {
|
||||
return packetplayouttitle_enumtitleaction;
|
||||
}
|
||||
}
|
||||
|
||||
- return PacketPlayOutTitle.EnumTitleAction.TITLE;
|
||||
+ return EnumTitleAction.TITLE;
|
||||
}
|
||||
|
||||
public static String[] a() {
|
||||
String[] astring = new String[values().length];
|
||||
int i = 0;
|
||||
- PacketPlayOutTitle.EnumTitleAction[] apacketplayouttitle_enumtitleaction = values();
|
||||
+ EnumTitleAction[] apacketplayouttitle_enumtitleaction = values();
|
||||
int j = apacketplayouttitle_enumtitleaction.length;
|
||||
|
||||
for (int k = 0; k < j; ++k) {
|
||||
- PacketPlayOutTitle.EnumTitleAction packetplayouttitle_enumtitleaction = apacketplayouttitle_enumtitleaction[k];
|
||||
+ EnumTitleAction packetplayouttitle_enumtitleaction = apacketplayouttitle_enumtitleaction[k];
|
||||
|
||||
astring[i++] = packetplayouttitle_enumtitleaction.name().toLowerCase();
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
||||
Date: Mon, 18 May 2015 17:52:45 -0500
|
||||
Date: Tue, 1 Mar 2016 14:47:52 -0600
|
||||
Subject: [PATCH] Player affects spawning API
|
||||
|
||||
|
||||
@@ -9,10 +9,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
private final GameProfile bH;
|
||||
private boolean bI = false;
|
||||
private ItemStack bT = null;
|
||||
private final ItemCooldown bU = this.l();
|
||||
public EntityFishingHook hookedFish;
|
||||
+ public boolean affectsSpawning = true; // PaperSpigot
|
||||
+ public boolean affectsSpawning = true; // Paper
|
||||
|
||||
// CraftBukkit start
|
||||
public boolean fauxSleeping;
|
||||
@@ -25,7 +25,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.ticksFarFromPlayer = 0;
|
||||
} else {
|
||||
- EntityHuman entityhuman = this.world.findNearbyPlayer(this, -1.0D);
|
||||
+ EntityHuman entityhuman = this.world.findNearbyPlayerWhoAffectsSpawning(this, -1.0D); // PaperSpigot - Affects Spawning API
|
||||
+ EntityHuman entityhuman = this.world.findNearbyPlayerWhoAffectsSpawning(this, -1.0D); // Paper - Affects Spawning API
|
||||
|
||||
if (entityhuman != null) {
|
||||
double d0 = entityhuman.locX - this.locX;
|
||||
@@ -34,11 +34,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
+++ b/src/main/java/net/minecraft/server/MobSpawnerAbstract.java
|
||||
@@ -0,0 +0,0 @@ public abstract class MobSpawnerAbstract {
|
||||
private boolean g() {
|
||||
private boolean h() {
|
||||
BlockPosition blockposition = this.b();
|
||||
|
||||
- return this.a().isPlayerNearby((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, (double) this.requiredPlayerRange);
|
||||
+ return this.a().isPlayerNearbyWhoAffectsSpawning((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, (double) this.requiredPlayerRange); // PaperSpigot - Affects Spawning API
|
||||
+ return this.a().isPlayerNearbyWhoAffectsSpawning((double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, (double) this.requiredPlayerRange); // Paper - Affects spawning API
|
||||
}
|
||||
|
||||
public void c() {
|
||||
@@ -51,7 +51,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
EntityHuman entityhuman = (EntityHuman) iterator.next();
|
||||
|
||||
- if (!entityhuman.isSpectator()) {
|
||||
+ if (!entityhuman.isSpectator() || !entityhuman.affectsSpawning) { // PaperSpigot
|
||||
+ if (!entityhuman.isSpectator() || !entityhuman.affectsSpawning) {
|
||||
int l = MathHelper.floor(entityhuman.locX / 16.0D);
|
||||
|
||||
j = MathHelper.floor(entityhuman.locZ / 16.0D);
|
||||
@@ -59,64 +59,20 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
float f = (float) j3 + 0.5F;
|
||||
float f1 = (float) l3 + 0.5F;
|
||||
|
||||
- if (!worldserver.isPlayerNearby((double) f, (double) k3, (double) f1, 24.0D) && blockposition.c((double) f, (double) k3, (double) f1) >= 576.0D) {
|
||||
+ if (!worldserver.isPlayerNearbyWhoAffectsSpawning((double) f, (double) k3, (double) f1, 24.0D) && blockposition.c((double) f, (double) k3, (double) f1) >= 576.0D) { // PaperSpigot - Affects Spawning API
|
||||
- if (!worldserver.isPlayerNearby((double) f, (double) k3, (double) f1, 24.0D) && blockposition.distanceSquared((double) f, (double) k3, (double) f1) >= 576.0D) {
|
||||
+ if (!worldserver.isPlayerNearbyWhoAffectsSpawning((double) f, (double) k3, (double) f1, 24.0D) && blockposition.distanceSquared((double) f, (double) k3, (double) f1) >= 576.0D) {
|
||||
if (biomebase_biomemeta == null) {
|
||||
biomebase_biomemeta = worldserver.a(enumcreaturetype, blockposition2);
|
||||
biomebase_biomemeta = worldserver.a(enumcreaturetype, (BlockPosition) blockposition_mutableblockposition);
|
||||
if (biomebase_biomemeta == null) {
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ package net.minecraft.server;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.Lists;
|
||||
-import com.google.common.collect.Sets;
|
||||
-import java.util.ArrayList;
|
||||
-import java.util.Calendar;
|
||||
-import java.util.Collection;
|
||||
-import java.util.Iterator;
|
||||
-import java.util.List;
|
||||
-import java.util.Random;
|
||||
-import java.util.Set;
|
||||
-import java.util.UUID;
|
||||
-import java.util.concurrent.Callable;
|
||||
-
|
||||
-// CraftBukkit start
|
||||
import com.google.common.collect.Maps;
|
||||
-import java.util.Map;
|
||||
-
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.BlockState;
|
||||
-import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
-import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
-import org.bukkit.generator.ChunkGenerator;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.CraftWorld;
|
||||
+import org.bukkit.craftbukkit.SpigotTimings;
|
||||
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
import org.bukkit.event.block.BlockCanBuildEvent;
|
||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
-import org.bukkit.event.weather.WeatherChangeEvent;
|
||||
-import org.bukkit.event.weather.ThunderChangeEvent;
|
||||
+import org.bukkit.generator.ChunkGenerator;
|
||||
+
|
||||
+import java.util.*;
|
||||
+import java.util.concurrent.Callable;
|
||||
+
|
||||
+// CraftBukkit start
|
||||
// CraftBukkit end
|
||||
|
||||
public abstract class World implements IBlockAccess {
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
return false;
|
||||
return i;
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Modified methods for affects spawning
|
||||
+ // Paper start - Modified methods for affects spawning
|
||||
+ public EntityHuman findNearbyPlayerWhoAffectsSpawning(Entity entity, double d0) {
|
||||
+ return this.findNearbyPlayerWhoAffectsSpawning(entity.locX, entity.locY, entity.locZ, d0);
|
||||
+ }
|
||||
@@ -161,40 +117,32 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
+
|
||||
public EntityHuman a(String s) {
|
||||
for (int i = 0; i < this.players.size(); ++i) {
|
||||
EntityHuman entityhuman = (EntityHuman) this.players.get(i);
|
||||
public EntityHuman findNearbyPlayer(Entity entity, double d0) {
|
||||
return this.a(entity.locX, entity.locY, entity.locZ, d0, false);
|
||||
}
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -0,0 +0,0 @@ import io.netty.buffer.Unpooled;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
+import java.lang.Override;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.ArrayList;
|
||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
packet.components = components;
|
||||
getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
+
|
||||
+ // PaperSpigot start - Implement affects spawning API
|
||||
+ @Override
|
||||
+ public boolean getAffectsSpawning() {
|
||||
+ return getHandle().affectsSpawning;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setAffectsSpawning(boolean affects) {
|
||||
+ getHandle().affectsSpawning = affects;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
};
|
||||
|
||||
public Player.Spigot spigot()
|
||||
}
|
||||
|
||||
+ // Paper start
|
||||
+ @Override
|
||||
+ public boolean getAffectsSpawning() {
|
||||
+ return getHandle().affectsSpawning;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void setAffectsSpawning(boolean affects) {
|
||||
+ getHandle().affectsSpawning = affects;
|
||||
+ }
|
||||
+ // Paper end
|
||||
+
|
||||
// Spigot start
|
||||
private final Player.Spigot spigot = new Player.Spigot()
|
||||
{
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Sun, 8 Mar 2015 04:37:23 -0500
|
||||
Date: Tue, 1 Mar 2016 23:52:34 -0600
|
||||
Subject: [PATCH] Prevent tile entity and entity crashes
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
});
|
||||
if (this.world != null) {
|
||||
- CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.w(), this.u());
|
||||
+ // PaperSpigot start - Prevent tile entity and entity crashes
|
||||
+ Block block = this.w();
|
||||
- CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.getBlock(), this.u());
|
||||
+ // Paper start - Prevent TileEntity and Entity crashes
|
||||
+ Block block = this.getBlock();
|
||||
+ if (block != null) {
|
||||
+ CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.w(), this.u());
|
||||
+ CrashReportSystemDetails.a(crashreportsystemdetails, this.position, this.getBlock(), this.u());
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
crashreportsystemdetails.a("Actual block type", new Callable() {
|
||||
public String a() throws Exception {
|
||||
int i = Block.getId(TileEntity.this.world.getType(TileEntity.this.position).getBlock());
|
||||
@@ -30,37 +30,36 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.g(entity);
|
||||
SpigotTimings.tickEntityTimer.stopTiming(); // Spigot
|
||||
} catch (Throwable throwable1) {
|
||||
- crashreport = CrashReport.a(throwable1, "Ticking entity");
|
||||
- crashreportsystemdetails = crashreport.a("Entity being ticked");
|
||||
- entity.appendEntityCrashDetails(crashreportsystemdetails);
|
||||
- throw new ReportedException(crashreport);
|
||||
+ // PaperSpigot start - Prevent tile entity and entity crashes
|
||||
- crashreport1 = CrashReport.a(throwable1, "Ticking entity");
|
||||
- crashreportsystemdetails1 = crashreport1.a("Entity being ticked");
|
||||
- entity.appendEntityCrashDetails(crashreportsystemdetails1);
|
||||
- throw new ReportedException(crashreport1);
|
||||
+ // Paper start - Prevent tile entity and entity crashes
|
||||
+ SpigotTimings.tickEntityTimer.stopTiming();
|
||||
+ System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ);
|
||||
+ throwable1.printStackTrace();
|
||||
+ entity.dead = true;
|
||||
+ continue;
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
tileentity.tickTimer.startTiming(); // Spigot
|
||||
((IUpdatePlayerListBox) tileentity).c();
|
||||
((ITickable) tileentity).c();
|
||||
this.methodProfiler.b();
|
||||
} catch (Throwable throwable2) {
|
||||
- CrashReport crashreport1 = CrashReport.a(throwable2, "Ticking block entity");
|
||||
- CrashReportSystemDetails crashreportsystemdetails1 = crashreport1.a("Block entity being ticked");
|
||||
-
|
||||
- crashreport1 = CrashReport.a(throwable2, "Ticking block entity");
|
||||
- crashreportsystemdetails1 = crashreport1.a("Block entity being ticked");
|
||||
- tileentity.a(crashreportsystemdetails1);
|
||||
- throw new ReportedException(crashreport1);
|
||||
+ // PaperSpigot start - Prevent tile entity and entity crashes
|
||||
+ // Paper start - Prevent tile entity and entity crashes
|
||||
+ tileentity.tickTimer.stopTiming();
|
||||
+ System.err.println("TileEntity threw exception at " + tileentity.world.getWorld().getName() + ":" + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ());
|
||||
+ throwable2.printStackTrace();
|
||||
+ tilesThisCycle--;
|
||||
+ this.tileEntityList.remove(tileTickPosition--);
|
||||
+ this.tileEntityListTick.remove(tileTickPosition--);
|
||||
+ continue;
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
// Spigot start
|
||||
finally {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Mon, 4 Jan 2016 00:16:08 -0600
|
||||
Date: Thu, 3 Mar 2016 00:12:23 -0600
|
||||
Subject: [PATCH] Process Entity Chunk Registration on Teleport
|
||||
|
||||
Fixes many issues with entities not being properly "switched" to their new chunk on teleport
|
||||
@@ -13,7 +13,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
// entity.world = ((CraftWorld) location.getWorld()).getHandle();
|
||||
// Spigot end
|
||||
entity.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
|
||||
+ entity.world.entityJoinedWorld(entity, false); // PaperSpigot - Fix issues with entities not being switched to their new chunk
|
||||
+ entity.world.entityJoinedWorld(entity, false); // Paper - Fix issues with entities not being switched to their new chunk
|
||||
// entity.setLocation() throws no event, and so cannot be cancelled
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Thu, 13 Aug 2015 10:33:34 -0700
|
||||
Subject: [PATCH] Re-add Spigot's hopper-check feature
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/TileEntityHopper.java b/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
+++ b/src/main/java/net/minecraft/server/TileEntityHopper.java
|
||||
@@ -0,0 +0,0 @@ public class TileEntityHopper extends TileEntityContainer implements IHopper, IU
|
||||
return true;
|
||||
}
|
||||
}
|
||||
+ // PaperSpigot start
|
||||
+ if (world.paperSpigotConfig.useHopperCheck && !this.n()) {
|
||||
+ this.d(world.spigotConfig.hopperCheck);
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
return false;
|
||||
} else {
|
||||
return false;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
{
|
||||
tntExplosionVolume = getFloat( "tnt-explosion-volume", 4.0F );
|
||||
}
|
||||
+
|
||||
+ public boolean useHopperCheck;
|
||||
+ private void useHopperCheck()
|
||||
+ {
|
||||
+ useHopperCheck = getBoolean( "use-hopper-check", false );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,117 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Sun, 8 Mar 2015 03:34:15 -0500
|
||||
Subject: [PATCH] Remove certain entities that fly through unloaded chunks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
public boolean valid; // CraftBukkit
|
||||
public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only
|
||||
public boolean forceExplosionKnockback; // CraftBukkit - SPIGOT-949
|
||||
+ public boolean inUnloadedChunk = false; // PaperSpigot - Remove entities in unloaded chunks
|
||||
|
||||
// Spigot start
|
||||
public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityEnderPearl.java b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityEnderPearl.java
|
||||
@@ -0,0 +0,0 @@ public class EntityEnderPearl extends EntityProjectile {
|
||||
movingobjectposition.entity.damageEntity(DamageSource.projectile(this, entityliving), 0.0F);
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - Remove entities in unloaded chunks
|
||||
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedEnderPearls) {
|
||||
+ this.die();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
for (int i = 0; i < 32; ++i) {
|
||||
this.world.addParticle(EnumParticle.PORTAL, this.locX, this.locY + this.random.nextDouble() * 2.0D, this.locZ, this.random.nextGaussian(), 0.0D, this.random.nextGaussian(), new int[0]);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityFallingBlock.java b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityFallingBlock.java
|
||||
@@ -0,0 +0,0 @@ public class EntityFallingBlock extends Entity {
|
||||
this.motY -= 0.03999999910593033D;
|
||||
this.move(this.motX, this.motY, this.motZ);
|
||||
|
||||
+ // PaperSpigot start - Remove entities in unloaded chunks
|
||||
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedFallingBlocks) {
|
||||
+ this.die();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
// PaperSpigot start - Drop falling blocks above the specified height
|
||||
if (this.world.paperSpigotConfig.fallingBlockHeightNerf != 0 && this.locY > this.world.paperSpigotConfig.fallingBlockHeightNerf) {
|
||||
if (this.dropItem) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityTNTPrimed.java b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityTNTPrimed.java
|
||||
@@ -0,0 +0,0 @@ public class EntityTNTPrimed extends Entity {
|
||||
}
|
||||
// PaperSpigot end
|
||||
|
||||
+ // PaperSpigot start - Remove entities in unloaded chunks
|
||||
+ if (this.inUnloadedChunk && world.paperSpigotConfig.removeUnloadedTNTEntities) {
|
||||
+ this.die();
|
||||
+ this.fuseTicks = 2;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+
|
||||
this.motX *= 0.9800000190734863D;
|
||||
this.motY *= 0.9800000190734863D;
|
||||
this.motZ *= 0.9800000190734863D;
|
||||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
{
|
||||
if ( !this.isChunkLoaded( chunkx, chunkz, true ) )
|
||||
{
|
||||
+ entity.inUnloadedChunk = true; // PaperSpigot - Remove entities in unloaded chunks
|
||||
continue;
|
||||
}
|
||||
int cz = chunkz << 4;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
if (!org.spigotmc.ActivationRange.checkIfActive(entity)) {
|
||||
entity.ticksLived++;
|
||||
entity.inactiveTick();
|
||||
+ // PaperSpigot start - Remove entities in unloaded chunks
|
||||
+ if (!this.isChunkLoaded(i, j, true) && ((entity instanceof EntityEnderPearl && this.paperSpigotConfig.removeUnloadedEnderPearls) ||
|
||||
+ (entity instanceof EntityFallingBlock && this.paperSpigotConfig.removeUnloadedFallingBlocks) ||
|
||||
+ (entity instanceof EntityTNTPrimed && this.paperSpigotConfig.removeUnloadedTNTEntities))) {
|
||||
+ entity.inUnloadedChunk = true;
|
||||
+ entity.die();
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
} else {
|
||||
entity.tickTimer.startTiming(); // Spigot
|
||||
// CraftBukkit end
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
removeInvalidMobSpawnerTEs = getBoolean( "remove-invalid-mob-spawner-tile-entities", true );
|
||||
log( "Remove invalid mob spawner tile entities: " + removeInvalidMobSpawnerTEs );
|
||||
}
|
||||
+
|
||||
+ public boolean removeUnloadedEnderPearls;
|
||||
+ public boolean removeUnloadedTNTEntities;
|
||||
+ public boolean removeUnloadedFallingBlocks;
|
||||
+ private void removeUnloaded()
|
||||
+ {
|
||||
+ removeUnloadedEnderPearls = getBoolean( "remove-unloaded.enderpearls", true );
|
||||
+ removeUnloadedTNTEntities = getBoolean( "remove-unloaded.tnt-entities", true );
|
||||
+ removeUnloadedFallingBlocks = getBoolean( "remove-unloaded.falling-blocks", true );
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,25 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Fri, 29 Jan 2016 03:39:09 -0600
|
||||
Subject: [PATCH] Remove completely invalid Redstone event for Netherrack
|
||||
|
||||
Was added years ago to special case 1 specific plugins needs
|
||||
at that time, and is now causing heavy redstone lag in the
|
||||
nether.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockBloodStone.java b/src/main/java/net/minecraft/server/BlockBloodStone.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockBloodStone.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockBloodStone.java
|
||||
@@ -0,0 +0,0 @@ public class BlockBloodStone extends Block {
|
||||
}
|
||||
|
||||
// CraftBukkit start
|
||||
- @Override
|
||||
- public void doPhysics(World world, BlockPosition position, IBlockData iblockdata, Block block) {
|
||||
+ //@Override // PaperSpigot - Remove completely invalid Redstone event for Netherrack
|
||||
+ public void doPhysics_nvmplsdont(World world, BlockPosition position, IBlockData iblockdata, Block block) {
|
||||
if (block != null && block.isPowerSource()) {
|
||||
org.bukkit.block.Block bl = world.getWorld().getBlockAt(position.getX(), position.getY(), position.getZ());
|
||||
int power = bl.getBlockPower();
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Sun, 8 Mar 2015 22:55:25 -0600
|
||||
Date: Tue, 1 Mar 2016 15:08:03 -0600
|
||||
Subject: [PATCH] Remove invalid mob spawner tile entities
|
||||
|
||||
|
||||
@@ -9,31 +9,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
--- a/src/main/java/net/minecraft/server/Chunk.java
|
||||
+++ b/src/main/java/net/minecraft/server/Chunk.java
|
||||
@@ -0,0 +0,0 @@ public class Chunk {
|
||||
tileentity.D();
|
||||
tileentity.z();
|
||||
this.tileEntities.put(blockposition, tileentity);
|
||||
// CraftBukkit start
|
||||
+ // PaperSpigot start - Remove invalid mob spawner tile entities
|
||||
+ } else if (this.world.paperSpigotConfig.removeInvalidMobSpawnerTEs && tileentity instanceof TileEntityMobSpawner &&
|
||||
+ org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getType(blockposition)) != org.bukkit.Material.MOB_SPAWNER) {
|
||||
+ // Paper start - Remove invalid mob spawner tile entities
|
||||
+ } else if (tileentity instanceof TileEntityMobSpawner && org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getBlockData(blockposition).getBlock()) != org.bukkit.Material.MOB_SPAWNER) {
|
||||
+ this.tileEntities.remove(blockposition);
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
} else {
|
||||
System.out.println("Attempted to place a tile entity (" + tileentity + ") at " + tileentity.position.getX() + "," + tileentity.position.getY() + "," + tileentity.position.getZ()
|
||||
+ " (" + org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getType(blockposition)) + ") where there was no entity tile!");
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
waterOverLavaFlowSpeed = getInt( "water-over-lava-flow-speed", 5 );
|
||||
log( "Water over lava flow speed: " + waterOverLavaFlowSpeed );
|
||||
}
|
||||
+
|
||||
+ public boolean removeInvalidMobSpawnerTEs;
|
||||
+ private void removeInvalidMobSpawnerTEs()
|
||||
+ {
|
||||
+ removeInvalidMobSpawnerTEs = getBoolean( "remove-invalid-mob-spawner-tile-entities", true );
|
||||
+ log( "Remove invalid mob spawner tile entities: " + removeInvalidMobSpawnerTEs );
|
||||
+ }
|
||||
}
|
||||
+ " (" + org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(getBlockData(blockposition).getBlock()) + ") where there was no entity tile!");
|
||||
--
|
||||
@@ -1,29 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: chickeneer <emcchickeneer@gmail.com>
|
||||
Date: Mon, 4 Jan 2016 00:19:32 -0600
|
||||
Subject: [PATCH] SPIGOT-1387: Resolve bed issues on unloaded chunks
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
return this.world.getType(this.bx).getBlock() == Blocks.BED;
|
||||
}
|
||||
|
||||
+ // PaperSpigot start - SPIGOT-1387: Resolve bed issues on unloaded chunks
|
||||
public static BlockPosition getBed(World world, BlockPosition blockposition, boolean flag) {
|
||||
+ boolean before = ((WorldServer) world).chunkProviderServer.forceChunkLoad;
|
||||
+ ((WorldServer) world).chunkProviderServer.forceChunkLoad = true;
|
||||
+ final BlockPosition result = getBed0(world, blockposition, flag);
|
||||
+ ((WorldServer) world).chunkProviderServer.forceChunkLoad = before;
|
||||
+ return result;
|
||||
+ }
|
||||
+
|
||||
+ private static BlockPosition getBed0(World world, BlockPosition blockposition, boolean flag) {
|
||||
+ // PaperSpigot end
|
||||
((ChunkProviderServer) world.chunkProvider).getChunkAt(blockposition.getX() >> 4, blockposition.getZ() >> 4); // CraftBukkit
|
||||
Block block = world.getType(blockposition).getBlock();
|
||||
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Jedediah Smith <jedediah@silencegreys.com>
|
||||
Date: Fri, 3 Apr 2015 17:26:21 -0400
|
||||
Date: Wed, 2 Mar 2016 23:13:07 -0600
|
||||
Subject: [PATCH] Send absolute position the first time an entity is seen
|
||||
|
||||
|
||||
@@ -11,48 +11,48 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
@@ -0,0 +0,0 @@ public class EntityTrackerEntry {
|
||||
private boolean x;
|
||||
private boolean y;
|
||||
public boolean n;
|
||||
public boolean b;
|
||||
- public Set<EntityPlayer> trackedPlayers = Sets.newHashSet();
|
||||
+ // PaperSpigot start
|
||||
+ // Paper start
|
||||
+ // Replace trackedPlayers Set with a Map. The value is true until the player receives
|
||||
+ // their first update (which is forced to have absolute coordinates), false afterward.
|
||||
+ public java.util.Map<EntityPlayer, Boolean> trackedPlayerMap = new java.util.HashMap<EntityPlayer, Boolean>();
|
||||
+ public Set<EntityPlayer> trackedPlayers = trackedPlayerMap.keySet();
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
|
||||
public EntityTrackerEntry(Entity entity, int i, int j, boolean flag) {
|
||||
public EntityTrackerEntry(Entity entity, int i, int j, int k, boolean flag) {
|
||||
this.tracker = entity;
|
||||
@@ -0,0 +0,0 @@ public class EntityTrackerEntry {
|
||||
boolean flag = Math.abs(j1) >= 4 || Math.abs(k1) >= 4 || Math.abs(l1) >= 4 || this.m % 60 == 0;
|
||||
boolean flag1 = Math.abs(l - this.yRot) >= 4 || Math.abs(i1 - this.xRot) >= 4;
|
||||
boolean flag = k1 * k1 + l1 * l1 + i2 * i2 >= 128L || this.a % 60 == 0;
|
||||
boolean flag1 = Math.abs(i1 - this.yRot) >= 1 || Math.abs(j1 - this.xRot) >= 1;
|
||||
|
||||
- // CraftBukkit start - Code moved from below
|
||||
- if (flag) {
|
||||
- this.xLoc = i;
|
||||
- this.yLoc = j;
|
||||
- this.zLoc = k;
|
||||
- this.xLoc = j;
|
||||
- this.yLoc = k;
|
||||
- this.zLoc = l;
|
||||
- }
|
||||
+ if (this.m > 0 || this.tracker instanceof EntityArrow) { // PaperSpigot - Moved up
|
||||
+ if (this.a > 0 || this.tracker instanceof EntityArrow) { // Paper - Moved up
|
||||
+ // CraftBukkit start - Code moved from below
|
||||
+ if (flag) {
|
||||
+ this.xLoc = i;
|
||||
+ this.yLoc = j;
|
||||
+ this.zLoc = k;
|
||||
+ this.xLoc = j;
|
||||
+ this.yLoc = k;
|
||||
+ this.zLoc = l;
|
||||
+ }
|
||||
|
||||
- if (flag1) {
|
||||
- this.yRot = l;
|
||||
- this.xRot = i1;
|
||||
- }
|
||||
- // CraftBukkit end
|
||||
+ if (flag1) {
|
||||
+ this.yRot = l;
|
||||
+ this.xRot = i1;
|
||||
+ this.yRot = i1;
|
||||
+ this.xRot = j1;
|
||||
+ }
|
||||
+ // CraftBukkit end
|
||||
|
||||
- if (this.m > 0 || this.tracker instanceof EntityArrow) {
|
||||
if (j1 >= -128 && j1 < 128 && k1 >= -128 && k1 < 128 && l1 >= -128 && l1 < 128 && this.v <= 400 && !this.x && this.y == this.tracker.onGround) {
|
||||
this.yRot = i1;
|
||||
this.xRot = j1;
|
||||
- }
|
||||
// CraftBukkit end
|
||||
-
|
||||
- if (this.a > 0 || this.tracker instanceof EntityArrow) {
|
||||
if (k1 >= -32768L && k1 < 32768L && l1 >= -32768L && l1 < 32768L && i2 >= -32768L && i2 < 32768L && this.v <= 400 && !this.x && this.y == this.tracker.onGround) {
|
||||
if ((!flag || !flag1) && !(this.tracker instanceof EntityArrow)) {
|
||||
if (flag) {
|
||||
@@ -0,0 +0,0 @@ public class EntityTrackerEntry {
|
||||
@@ -60,7 +60,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
if (object != null) {
|
||||
- this.broadcast((Packet) object);
|
||||
+ // PaperSpigot start - ensure fresh viewers get an absolute position on their first update,
|
||||
+ // Paper start - ensure fresh viewers get an absolute position on their first update,
|
||||
+ // since we can't be certain what position they received in the spawn packet.
|
||||
+ if (object instanceof PacketPlayOutEntityTeleport) {
|
||||
+ this.broadcast((Packet) object);
|
||||
@@ -71,7 +71,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ if (viewer.getValue()) {
|
||||
+ viewer.setValue(false);
|
||||
+ if (teleportPacket == null) {
|
||||
+ teleportPacket = new PacketPlayOutEntityTeleport(this.tracker.getId(), i, j, k, (byte) l, (byte) i1, this.tracker.onGround);
|
||||
+ teleportPacket = new PacketPlayOutEntityTeleport(this.tracker);
|
||||
+ }
|
||||
+ viewer.getKey().playerConnection.sendPacket(teleportPacket);
|
||||
+ } else {
|
||||
@@ -79,17 +79,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
+ // Paper end
|
||||
}
|
||||
|
||||
this.b();
|
||||
this.d();
|
||||
@@ -0,0 +0,0 @@ public class EntityTrackerEntry {
|
||||
|
||||
entityplayer.removeQueue.remove(Integer.valueOf(this.tracker.getId()));
|
||||
// CraftBukkit end
|
||||
- this.trackedPlayers.add(entityplayer);
|
||||
+ this.trackedPlayerMap.put(entityplayer, true); // PaperBukkit
|
||||
Packet packet = this.c();
|
||||
+ this.trackedPlayerMap.put(entityplayer, true); // Paper
|
||||
Packet packet = this.e();
|
||||
|
||||
entityplayer.playerConnection.sendPacket(packet);
|
||||
--
|
||||
@@ -1,8 +1,8 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 22:55:25 -0600
|
||||
Subject: [PATCH] Show 'PaperSpigot' in client crashes, server lists, and
|
||||
Mojang stats
|
||||
Date: Tue, 1 Mar 2016 14:32:43 -0600
|
||||
Subject: [PATCH] Show 'Paper' in client crashes, server lists, and Mojang
|
||||
stats
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -14,10 +14,23 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
public String getServerModName() {
|
||||
- return "Spigot"; // Spigot - Spigot > // CraftBukkit - cb > vanilla!
|
||||
+ return "PaperSpigot"; // PaperSpigot - PaperSpigot > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
|
||||
+ return "Paper"; //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla!
|
||||
}
|
||||
|
||||
public CrashReport b(CrashReport crashreport) {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ import net.md_5.bungee.api.chat.BaseComponent;
|
||||
|
||||
public final class CraftServer implements Server {
|
||||
private static final Player[] EMPTY_PLAYER_ARRAY = new Player[0];
|
||||
- private final String serverName = "CraftBukkit";
|
||||
+ private final String serverName = "Paper";
|
||||
private final String serverVersion;
|
||||
private final String bukkitVersion = Versioning.getBukkitVersion();
|
||||
private final Logger logger = Logger.getLogger("Minecraft");
|
||||
diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/WatchdogThread.java
|
||||
@@ -27,7 +40,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
private WatchdogThread(long timeoutTime, boolean restart)
|
||||
{
|
||||
- super( "Spigot Watchdog Thread" );
|
||||
+ super( "PaperSpigot Watchdog Thread" );
|
||||
+ super( "Paper Watchdog Thread" );
|
||||
this.timeoutTime = timeoutTime;
|
||||
this.restart = restart;
|
||||
}
|
||||
@@ -36,10 +49,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
Logger log = Bukkit.getServer().getLogger();
|
||||
log.log( Level.SEVERE, "The server has stopped responding!" );
|
||||
- log.log( Level.SEVERE, "Please report this to http://www.spigotmc.org/" );
|
||||
+ log.log( Level.SEVERE, "Please report this to PaperSpigot directly!" );
|
||||
+ log.log( Level.SEVERE, "Please report this to https://aquifermc.org/" );
|
||||
log.log( Level.SEVERE, "Be sure to include ALL relevant console errors and Minecraft crash reports" );
|
||||
- log.log( Level.SEVERE, "Spigot version: " + Bukkit.getServer().getVersion() );
|
||||
+ log.log( Level.SEVERE, "PaperSpigot version: " + Bukkit.getServer().getVersion() );
|
||||
+ log.log( Level.SEVERE, "Paper version: " + Bukkit.getServer().getVersion() );
|
||||
//
|
||||
if(net.minecraft.server.World.haveWeSilencedAPhysicsCrash)
|
||||
{
|
||||
@@ -48,7 +61,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
//
|
||||
log.log( Level.SEVERE, "------------------------------" );
|
||||
- log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Spigot!):" );
|
||||
+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to PaperSpigot!):" );
|
||||
+ log.log( Level.SEVERE, "Server thread dump (Look for plugins here before reporting to Paper!):" );
|
||||
dumpThread( ManagementFactory.getThreadMXBean().getThreadInfo( MinecraftServer.getServer().primaryThread.getId(), Integer.MAX_VALUE ), log );
|
||||
log.log( Level.SEVERE, "------------------------------" );
|
||||
//
|
||||
@@ -1,154 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Techcable <Techcable@outlook.com>
|
||||
Date: Fri, 29 Jan 2016 03:24:21 -0600
|
||||
Subject: [PATCH] Speedup BlockPos by fixing inlining
|
||||
|
||||
Normally the JVM can inline virtual getters by having two sets of code, one is the 'optimized' code and the other is the 'deoptimized' code.
|
||||
If a single type is used 99% of the time, then its worth it to inline, and to revert to 'deoptimized' the 1% of the time we encounter other types.
|
||||
But if two types are encountered commonly, then the JVM can't inline them both, and the call overhead remains.
|
||||
|
||||
This scenario also occurs with BlockPos and MutableBlockPos.
|
||||
The variables in BlockPos are final, so MutableBlockPos can't modify them.
|
||||
MutableBlockPos fixes this by adding custom mutable variables, and overriding the getters to access them.
|
||||
|
||||
This approach with utility methods that operate on MutableBlockPos and BlockPos.
|
||||
Specific examples are BlockPosition.up(), and World.isValidLocation().
|
||||
It makes these simple methods much slower than they need to be.
|
||||
|
||||
This should result in an across the board speedup in anything that accesses blocks or does logic with positions.
|
||||
|
||||
This is based upon conclusions drawn from inspecting the assenmbly generated bythe JIT compiler on my mircorbenchmarks.
|
||||
They had 'callq' (invoke) instead of 'mov' (get from memory) instructions.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/BaseBlockPosition.java b/src/main/java/net/minecraft/server/BaseBlockPosition.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BaseBlockPosition.java
|
||||
+++ b/src/main/java/net/minecraft/server/BaseBlockPosition.java
|
||||
@@ -0,0 +0,0 @@ import com.google.common.base.Objects;
|
||||
public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
|
||||
|
||||
public static final BaseBlockPosition ZERO = new BaseBlockPosition(0, 0, 0);
|
||||
- private final int a;
|
||||
- private final int c;
|
||||
- private final int d;
|
||||
+ // PaperSpigot start - Make mutable and protected for MutableBlockPos
|
||||
+ protected int a;
|
||||
+ protected int c;
|
||||
+ protected int d;
|
||||
+ // PaperSpigot end
|
||||
|
||||
public BaseBlockPosition(int i, int j, int k) {
|
||||
this.a = i;
|
||||
@@ -0,0 +0,0 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
|
||||
return this.getY() == baseblockposition.getY() ? (this.getZ() == baseblockposition.getZ() ? this.getX() - baseblockposition.getX() : this.getZ() - baseblockposition.getZ()) : this.getY() - baseblockposition.getY();
|
||||
}
|
||||
|
||||
- public int getX() {
|
||||
+ // PaperSpigot start - Only allow one implementation of these methods (make final)
|
||||
+ public final int getX() {
|
||||
return this.a;
|
||||
}
|
||||
|
||||
- public int getY() {
|
||||
+ public final int getY() {
|
||||
return this.c;
|
||||
}
|
||||
|
||||
- public int getZ() {
|
||||
+ public final int getZ() {
|
||||
return this.d;
|
||||
}
|
||||
+ // PaperSpigot end
|
||||
|
||||
public BaseBlockPosition d(BaseBlockPosition baseblockposition) {
|
||||
return new BaseBlockPosition(this.getY() * baseblockposition.getZ() - this.getZ() * baseblockposition.getY(), this.getZ() * baseblockposition.getX() - this.getX() * baseblockposition.getZ(), this.getX() * baseblockposition.getY() - this.getY() * baseblockposition.getX());
|
||||
@@ -0,0 +0,0 @@ public class BaseBlockPosition implements Comparable<BaseBlockPosition> {
|
||||
return Objects.toStringHelper(this).add("x", this.getX()).add("y", this.getY()).add("z", this.getZ()).toString();
|
||||
}
|
||||
|
||||
- public int compareTo(Object object) {
|
||||
+ // Paperspigot - Signature change, Object -> BaseBlockPosition
|
||||
+ public int compareTo(BaseBlockPosition object) {
|
||||
return this.g((BaseBlockPosition) object);
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/BlockPosition.java b/src/main/java/net/minecraft/server/BlockPosition.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/BlockPosition.java
|
||||
+++ b/src/main/java/net/minecraft/server/BlockPosition.java
|
||||
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition {
|
||||
++k;
|
||||
}
|
||||
|
||||
- this.b.c = i;
|
||||
- this.b.d = j;
|
||||
- this.b.e = k;
|
||||
+ // PaperSpigot start
|
||||
+ this.b.setX(i);
|
||||
+ this.b.setY(j);
|
||||
+ this.b.setZ(k);
|
||||
+ // PaperSpigot stop
|
||||
return this.b;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition {
|
||||
|
||||
public static final class MutableBlockPosition extends BlockPosition {
|
||||
|
||||
+ // PaperSpigot start - remove our overriding variables
|
||||
+ /*
|
||||
private int c;
|
||||
private int d;
|
||||
private int e;
|
||||
+ */
|
||||
+
|
||||
+ public void setX(int x) {
|
||||
+ ((BaseBlockPosition) this).a = x;
|
||||
+ }
|
||||
+
|
||||
+ public void setY(int y) {
|
||||
+ ((BaseBlockPosition) this).c = y;
|
||||
+ }
|
||||
+
|
||||
+ public void setZ(int z) {
|
||||
+ ((BaseBlockPosition) this).d = z;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
|
||||
public MutableBlockPosition() {
|
||||
this(0, 0, 0);
|
||||
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition {
|
||||
|
||||
public MutableBlockPosition(int i, int j, int k) {
|
||||
super(0, 0, 0);
|
||||
- this.c = i;
|
||||
- this.d = j;
|
||||
- this.e = k;
|
||||
+ // PaperSpigot start - modify base x,y,z
|
||||
+ this.setX(i);
|
||||
+ this.setY(j);
|
||||
+ this.setZ(k);
|
||||
}
|
||||
|
||||
+ /*
|
||||
public int getX() {
|
||||
return this.c;
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class BlockPosition extends BaseBlockPosition {
|
||||
public int getZ() {
|
||||
return this.e;
|
||||
}
|
||||
+ */
|
||||
|
||||
public BlockPosition.MutableBlockPosition c(int i, int j, int k) {
|
||||
- this.c = i;
|
||||
- this.d = j;
|
||||
- this.e = k;
|
||||
+ setX(i);
|
||||
+ setY(j);
|
||||
+ setZ(k);
|
||||
+ // PaperSpigot end
|
||||
return this;
|
||||
}
|
||||
|
||||
--
|
||||
@@ -1,172 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Byteflux <byte@byteflux.net>
|
||||
Date: Mon, 1 Jun 2015 20:45:24 -0700
|
||||
Subject: [PATCH] Stackable Buckets
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemBucket.java b/src/main/java/net/minecraft/server/ItemBucket.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemBucket.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemBucket.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.player.PlayerBucketEmptyEvent;
|
||||
import org.bukkit.event.player.PlayerBucketFillEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
+import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot
|
||||
+
|
||||
public class ItemBucket extends Item {
|
||||
|
||||
private Block a;
|
||||
@@ -0,0 +0,0 @@ public class ItemBucket extends Item {
|
||||
|
||||
if (this.a(world, blockposition1) && !entityhuman.abilities.canInstantlyBuild) {
|
||||
entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]);
|
||||
+ // PaperSpigot start - Stackable Buckets
|
||||
+ if ((this == Items.LAVA_BUCKET && PaperSpigotConfig.stackableLavaBuckets) ||
|
||||
+ (this == Items.WATER_BUCKET && PaperSpigotConfig.stackableWaterBuckets)) {
|
||||
+ if (--itemstack.count <= 0) {
|
||||
+ return CraftItemStack.asNMSCopy(event.getItemStack());
|
||||
+ }
|
||||
+ if (!entityhuman.inventory.pickup(CraftItemStack.asNMSCopy(event.getItemStack()))) {
|
||||
+ entityhuman.drop(CraftItemStack.asNMSCopy(event.getItemStack()), false);
|
||||
+ }
|
||||
+ return itemstack;
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
return CraftItemStack.asNMSCopy(event.getItemStack()); // CraftBukkit
|
||||
}
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemMilkBucket.java b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemMilkBucket.java
|
||||
@@ -0,0 +0,0 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
+import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot
|
||||
+
|
||||
public class ItemMilkBucket extends Item {
|
||||
|
||||
public ItemMilkBucket() {
|
||||
@@ -0,0 +0,0 @@ public class ItemMilkBucket extends Item {
|
||||
}
|
||||
|
||||
entityhuman.b(StatisticList.USE_ITEM_COUNT[Item.getId(this)]);
|
||||
+ // PaperSpigot start - Stackable Buckets
|
||||
+ if (PaperSpigotConfig.stackableMilkBuckets) {
|
||||
+ if (itemstack.count <= 0) {
|
||||
+ return new ItemStack(Items.BUCKET);
|
||||
+ } else if (!entityhuman.inventory.pickup(new ItemStack(Items.BUCKET))) {
|
||||
+ entityhuman.drop(new ItemStack(Items.BUCKET), false);
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
return itemstack.count <= 0 ? new ItemStack(Items.BUCKET) : itemstack;
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.util.NumberConversions;
|
||||
// CraftBukkit end
|
||||
|
||||
+import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot
|
||||
+
|
||||
public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerListBox {
|
||||
|
||||
private static final Logger c = LogManager.getLogger();
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
|
||||
case ALLOW:
|
||||
case DEFAULT:
|
||||
itemstack = this.player.activeContainer.clickItem(packetplayinwindowclick.b(), packetplayinwindowclick.c(), packetplayinwindowclick.f(), this.player);
|
||||
+ // PaperSpigot start - Stackable Buckets
|
||||
+ if (itemstack != null &&
|
||||
+ ((itemstack.getItem() == Items.LAVA_BUCKET && PaperSpigotConfig.stackableLavaBuckets) ||
|
||||
+ (itemstack.getItem() == Items.WATER_BUCKET && PaperSpigotConfig.stackableWaterBuckets) ||
|
||||
+ (itemstack.getItem() == Items.MILK_BUCKET && PaperSpigotConfig.stackableMilkBuckets))) {
|
||||
+ if (action == InventoryAction.MOVE_TO_OTHER_INVENTORY) {
|
||||
+ this.player.updateInventory(this.player.activeContainer);
|
||||
+ } else {
|
||||
+ this.player.playerConnection.sendPacket(new PacketPlayOutSetSlot(-1, -1, this.player.inventory.getCarried()));
|
||||
+ this.player.playerConnection.sendPacket(new PacketPlayOutSetSlot(this.player.activeContainer.windowId, packetplayinwindowclick.b(), this.player.activeContainer.getSlot(packetplayinwindowclick.b()).getItem()));
|
||||
+ }
|
||||
+ }
|
||||
+ // PaperSpigot end
|
||||
break;
|
||||
case DENY:
|
||||
/* Needs enum constructor in InventoryAction
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ package org.github.paperspigot;
|
||||
import com.google.common.base.Throwables;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
+import java.lang.reflect.Field;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
+
|
||||
+import net.minecraft.server.Item;
|
||||
+import net.minecraft.server.Items;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
+import org.bukkit.Material;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
dataValueAllowedItems = new HashSet<Integer>( getList( "data-value-allowed-items", Collections.emptyList() ) );
|
||||
Bukkit.getLogger().info( "Data value allowed items: " + StringUtils.join(dataValueAllowedItems, ", ") );
|
||||
}
|
||||
+
|
||||
+ public static boolean stackableLavaBuckets;
|
||||
+ public static boolean stackableWaterBuckets;
|
||||
+ public static boolean stackableMilkBuckets;
|
||||
+ private static void stackableBuckets()
|
||||
+ {
|
||||
+ stackableLavaBuckets = getBoolean( "stackable-buckets.lava", false );
|
||||
+ stackableWaterBuckets = getBoolean( "stackable-buckets.water", false );
|
||||
+ stackableMilkBuckets = getBoolean( "stackable-buckets.milk", false );
|
||||
+
|
||||
+ Field maxStack;
|
||||
+
|
||||
+ try {
|
||||
+ maxStack = Material.class.getDeclaredField("maxStack");
|
||||
+ maxStack.setAccessible(true);
|
||||
+
|
||||
+ Field modifiers = Field.class.getDeclaredField("modifiers");
|
||||
+ modifiers.setAccessible(true);
|
||||
+ modifiers.setInt(maxStack, maxStack.getModifiers() & ~Modifier.FINAL);
|
||||
+ } catch (Exception e) {
|
||||
+ e.printStackTrace();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ if (stackableLavaBuckets) {
|
||||
+ maxStack.set(Material.LAVA_BUCKET, Material.BUCKET.getMaxStackSize());
|
||||
+ Items.LAVA_BUCKET.c(Material.BUCKET.getMaxStackSize());
|
||||
+ }
|
||||
+
|
||||
+ if (stackableWaterBuckets) {
|
||||
+ maxStack.set(Material.WATER_BUCKET, Material.BUCKET.getMaxStackSize());
|
||||
+ Items.WATER_BUCKET.c(Material.BUCKET.getMaxStackSize());
|
||||
+ }
|
||||
+
|
||||
+ if (stackableMilkBuckets) {
|
||||
+ maxStack.set(Material.MILK_BUCKET, Material.BUCKET.getMaxStackSize());
|
||||
+ Items.MILK_BUCKET.c(Material.BUCKET.getMaxStackSize());
|
||||
+ }
|
||||
+ } catch (Exception e) {
|
||||
+ e.printStackTrace();
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Iceee <andrew@opticgaming.tv>
|
||||
Date: Tue, 30 Jun 2015 19:31:02 -0700
|
||||
Date: Wed, 2 Mar 2016 12:03:23 -0600
|
||||
Subject: [PATCH] Stop updating flowing block if material has changed
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.f(world, blockposition, iblockdata);
|
||||
}
|
||||
|
||||
+ if (world.getType(blockposition).getBlock().getMaterial() != material) return; // PaperSpigot - Stop updating flowing block if material has changed
|
||||
+ if (world.getType(blockposition).getBlock().getBlockData().getMaterial() != material) return; // Paper - Stop updating flowing block if material has changed
|
||||
IBlockData iblockdata2 = world.getType(blockposition.down());
|
||||
|
||||
if (this.h(world, blockposition.down(), iblockdata2)) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
Date: Fri, 8 Jan 2016 23:36:39 -0600
|
||||
Date: Thu, 3 Mar 2016 01:03:42 -0600
|
||||
Subject: [PATCH] Timings v2
|
||||
|
||||
|
||||
@@ -196,15 +196,75 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ tickEntities = Timings.ofSafe(name + "tickEntities");
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
@@ -0,0 +0,0 @@ import java.lang.reflect.Modifier;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
+import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
|
||||
+import com.google.common.collect.Lists;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+import co.aikar.timings.Timings;
|
||||
+import co.aikar.timings.TimingsManager;
|
||||
|
||||
public class PaperConfig {
|
||||
|
||||
@@ -0,0 +0,0 @@ public class PaperConfig {
|
||||
Bukkit.getLogger().log(Level.INFO, "Disabling player interaction limiter, your server may be more vulnerable to malicious users");
|
||||
}
|
||||
}
|
||||
+
|
||||
+ private static void timings() {
|
||||
+ boolean timings = getBoolean("timings.enabled", true);
|
||||
+ boolean verboseTimings = getBoolean("timings.verbose", true);
|
||||
+ TimingsManager.privacy = getBoolean("timings.server-name-privacy", false);
|
||||
+ TimingsManager.hiddenConfigs = getList("timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses"));
|
||||
+ int timingHistoryInterval = getInt("timings.history-interval", 300);
|
||||
+ int timingHistoryLength = getInt("timings.history-length", 3600);
|
||||
+
|
||||
+
|
||||
+ Timings.setVerboseTimingsEnabled(verboseTimings);
|
||||
+ Timings.setTimingsEnabled(timings);
|
||||
+ Timings.setHistoryInterval(timingHistoryInterval * 20);
|
||||
+ Timings.setHistoryLength(timingHistoryLength * 20);
|
||||
+
|
||||
+ Bukkit.getLogger().log(Level.INFO, "Spigot Timings: " + timings +
|
||||
+ " - Verbose: " + verboseTimings +
|
||||
+ " - Interval: " + timeSummary(Timings.getHistoryInterval() / 20) +
|
||||
+ " - Length: " + timeSummary(Timings.getHistoryLength() / 20));
|
||||
+ }
|
||||
+
|
||||
+ protected static String timeSummary(int seconds) {
|
||||
+ String time = "";
|
||||
+ if (seconds > 60 * 60) {
|
||||
+ time += TimeUnit.SECONDS.toHours(seconds) + "h";
|
||||
+ seconds /= 60;
|
||||
+ }
|
||||
+
|
||||
+ if (seconds > 0) {
|
||||
+ time += TimeUnit.SECONDS.toMinutes(seconds) + "m";
|
||||
+ }
|
||||
+ return time;
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/Block.java b/src/main/java/net/minecraft/server/Block.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Block.java
|
||||
+++ b/src/main/java/net/minecraft/server/Block.java
|
||||
@@ -0,0 +0,0 @@ public class Block {
|
||||
protected boolean y;
|
||||
protected boolean z;
|
||||
protected boolean isTileEntity;
|
||||
+ // Spigot start
|
||||
protected final BlockStateList blockStateList;
|
||||
private IBlockData blockData;
|
||||
private String name;
|
||||
+ // Paper start
|
||||
+ public co.aikar.timings.Timing timing;
|
||||
+ public co.aikar.timings.Timing getTiming() {
|
||||
+ if (timing == null) {
|
||||
@@ -212,11 +272,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ }
|
||||
+ return timing;
|
||||
+ }
|
||||
+ // Spigot end
|
||||
+
|
||||
protected double minX;
|
||||
protected double minY;
|
||||
protected double minZ;
|
||||
+ // Paper end
|
||||
|
||||
public static int getId(Block block) {
|
||||
return Block.REGISTRY.a(block); // CraftBukkit - decompile error
|
||||
diff --git a/src/main/java/net/minecraft/server/DedicatedServer.java b/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/DedicatedServer.java
|
||||
@@ -226,7 +285,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
import org.bukkit.craftbukkit.LoggerOutputStream;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
import org.bukkit.event.server.ServerCommandEvent;
|
||||
import org.bukkit.craftbukkit.util.Waitable;
|
||||
import org.bukkit.event.server.RemoteServerCommandEvent;
|
||||
@@ -234,33 +293,33 @@ diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/Entity.java
|
||||
+++ b/src/main/java/net/minecraft/server/Entity.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.entity.Hanging;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.entity.Hanging;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Painting;
|
||||
import org.bukkit.entity.Vehicle;
|
||||
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.Timing; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
+import co.aikar.timings.Timing; // Paper
|
||||
import org.bukkit.event.entity.EntityCombustByEntityEvent;
|
||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||
import org.bukkit.event.painting.PaintingBreakByEntityEvent;
|
||||
import org.bukkit.event.vehicle.VehicleBlockCollisionEvent;
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
public boolean loadChunks = false; // PaperSpigot - Entities can load chunks they move through and keep them loaded
|
||||
|
||||
// Spigot start
|
||||
public boolean valid; // CraftBukkit
|
||||
public org.bukkit.projectiles.ProjectileSource projectileSource; // CraftBukkit - For projectiles only
|
||||
public boolean forceExplosionKnockback; // CraftBukkit - SPIGOT-949
|
||||
- public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getEntityTimings(this); // Spigot
|
||||
+ public Timing tickTimer = SpigotTimings.getEntityTimings(this); // Spigot
|
||||
+ public Timing tickTimer = SpigotTimings.getEntityTimings(this); // Paper
|
||||
// Spigot start
|
||||
public final byte activationType = org.spigotmc.ActivationRange.initializeEntityActivationType(this);
|
||||
public final boolean defaultActivationState;
|
||||
public long activatedTick = Integer.MIN_VALUE;
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
|
||||
}
|
||||
|
||||
public void move(double d0, double d1, double d2) {
|
||||
- org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.startTiming(); // Spigot
|
||||
if (this.loadChunks) loadChunks(); // PaperSpigot - Load chunks
|
||||
if (this.noclip) {
|
||||
this.a(this.getBoundingBox().c(d0, d1, d2));
|
||||
this.recalcPosition();
|
||||
@@ -0,0 +0,0 @@ public abstract class Entity implements ICommandListener {
|
||||
|
||||
this.world.methodProfiler.b();
|
||||
@@ -268,42 +327,43 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- org.bukkit.craftbukkit.SpigotTimings.entityMoveTimer.stopTiming(); // Spigot
|
||||
}
|
||||
|
||||
private void recalcPosition() {
|
||||
public void recalcPosition() {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.event.entity.EntityRegainHealthEvent;
|
||||
import org.bukkit.event.vehicle.VehicleExitEvent;
|
||||
import org.bukkit.event.player.PlayerItemConsumeEvent;
|
||||
// CraftBukkit end
|
||||
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
|
||||
public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
|
||||
public void t_() {
|
||||
public void m() {
|
||||
- SpigotTimings.timerEntityBaseTick.startTiming(); // Spigot
|
||||
super.t_();
|
||||
super.m();
|
||||
this.cu();
|
||||
if (!this.world.isClientSide) {
|
||||
int i = this.bv();
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
}
|
||||
}
|
||||
|
||||
- SpigotTimings.timerEntityBaseTick.stopTiming(); // Spigot
|
||||
this.m();
|
||||
this.n();
|
||||
- SpigotTimings.timerEntityTickRest.startTiming(); // Spigot
|
||||
double d0 = this.locX - this.lastX;
|
||||
double d1 = this.locZ - this.lastZ;
|
||||
float f = (float) (d0 * d0 + d1 * d1);
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
this.world.methodProfiler.b();
|
||||
this.aT += f2;
|
||||
} else {
|
||||
this.bo = 0;
|
||||
}
|
||||
-
|
||||
- SpigotTimings.timerEntityTickRest.stopTiming(); // Spigot
|
||||
}
|
||||
|
||||
@@ -313,9 +373,9 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
|
||||
this.world.methodProfiler.a("ai");
|
||||
- SpigotTimings.timerEntityAI.startTiming(); // Spigot
|
||||
if (this.bD()) {
|
||||
this.aY = false;
|
||||
this.aZ = 0.0F;
|
||||
if (this.cf()) {
|
||||
this.bc = false;
|
||||
this.bd = 0.0F;
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
this.doTick();
|
||||
this.world.methodProfiler.b();
|
||||
@@ -325,49 +385,47 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this.world.methodProfiler.b();
|
||||
this.world.methodProfiler.a("jump");
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityLiving extends Entity {
|
||||
this.aZ *= 0.98F;
|
||||
this.ba *= 0.98F;
|
||||
this.bb *= 0.9F;
|
||||
this.be *= 0.98F;
|
||||
this.bf *= 0.9F;
|
||||
this.r();
|
||||
- SpigotTimings.timerEntityAIMove.startTiming(); // Spigot
|
||||
this.g(this.aZ, this.ba);
|
||||
this.g(this.bd, this.be);
|
||||
- SpigotTimings.timerEntityAIMove.stopTiming(); // Spigot
|
||||
this.world.methodProfiler.b();
|
||||
this.world.methodProfiler.a("push");
|
||||
if (!this.world.isClientSide) {
|
||||
- SpigotTimings.timerEntityAICollision.startTiming(); // Spigot
|
||||
this.bL();
|
||||
- SpigotTimings.timerEntityAICollision.stopTiming(); // Spigot
|
||||
}
|
||||
|
||||
- SpigotTimings.timerEntityAICollision.startTiming(); // Spigot
|
||||
this.cn();
|
||||
- SpigotTimings.timerEntityAICollision.stopTiming(); // Spigot
|
||||
this.world.methodProfiler.b();
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
||||
@@ -0,0 +0,0 @@ import jline.console.ConsoleReader;
|
||||
import joptsimple.OptionSet;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.craftbukkit.CraftServer;
|
||||
|
||||
import org.bukkit.craftbukkit.Main;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
// CraftBukkit start
|
||||
// CraftBukkit end
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
|
||||
public abstract class MinecraftServer implements Runnable, ICommandListener, IAsyncTaskHandler, IMojangStatistics {
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
// CraftBukkit end
|
||||
if (!this.N) {
|
||||
MinecraftServer.LOGGER.info("Stopping server");
|
||||
+ SpigotTimings.stopServer(); // Spigot
|
||||
+
|
||||
// CraftBukkit start
|
||||
if (this.server != null) {
|
||||
this.server.disablePlugins();
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
protected void z() {}
|
||||
|
||||
protected void A() throws ExceptionWorldConflict { // CraftBukkit - added throws
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
}
|
||||
// CraftBukkit end
|
||||
MinecraftServer.LOGGER.info("Stopping server");
|
||||
+ SpigotTimings.stopServer(); // Paper
|
||||
if (this.am() != null) {
|
||||
this.am().b();
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class MinecraftServer implements Runnable, ICommandListener, IAs
|
||||
protected void B() {}
|
||||
|
||||
protected void C() throws ExceptionWorldConflict { // CraftBukkit - added throws
|
||||
- SpigotTimings.serverTickTimer.startTiming(); // Spigot
|
||||
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.startTiming(); // Spigot
|
||||
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.startTiming(); // Paper
|
||||
long i = System.nanoTime();
|
||||
|
||||
++this.ticks;
|
||||
@@ -377,11 +435,11 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
org.spigotmc.WatchdogThread.tick(); // Spigot
|
||||
- SpigotTimings.serverTickTimer.stopTiming(); // Spigot
|
||||
- org.spigotmc.CustomTimingsHandler.tick(); // Spigot
|
||||
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Spigot
|
||||
+ co.aikar.timings.TimingsManager.FULL_SERVER_TICK.stopTiming(); // Paper
|
||||
}
|
||||
|
||||
public void B() {
|
||||
+ SpigotTimings.minecraftSchedulerTimer.startTiming(); // Spigot
|
||||
public void D() {
|
||||
+ SpigotTimings.minecraftSchedulerTimer.startTiming(); // Paper
|
||||
this.methodProfiler.a("jobs");
|
||||
Queue queue = this.j;
|
||||
|
||||
@@ -389,16 +447,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
SystemUtils.a(entry, MinecraftServer.LOGGER);
|
||||
}
|
||||
// Spigot end
|
||||
+ SpigotTimings.minecraftSchedulerTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.minecraftSchedulerTimer.stopTiming(); // Paper
|
||||
|
||||
this.methodProfiler.c("levels");
|
||||
|
||||
- SpigotTimings.schedulerTimer.startTiming(); // Spigot
|
||||
+ SpigotTimings.bukkitSchedulerTimer.startTiming(); // Spigot
|
||||
+ SpigotTimings.bukkitSchedulerTimer.startTiming(); // Paper
|
||||
// CraftBukkit start
|
||||
this.server.getScheduler().mainThreadHeartbeat(this.ticks);
|
||||
- SpigotTimings.schedulerTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.bukkitSchedulerTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.bukkitSchedulerTimer.stopTiming(); // Paper
|
||||
|
||||
// Run tasks that are waiting on processing
|
||||
SpigotTimings.processQueueTimer.startTiming(); // Spigot
|
||||
@@ -410,43 +468,43 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import org.bukkit.inventory.CraftingInventory;
|
||||
import org.bukkit.inventory.InventoryView;
|
||||
import org.bukkit.util.NumberConversions;
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
// CraftBukkit end
|
||||
|
||||
import org.github.paperspigot.PaperSpigotConfig; // PaperSpigot
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
|
||||
public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
||||
// CraftBukkit end
|
||||
|
||||
private void handleCommand(String s) {
|
||||
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.startTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.startTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.startTiming(); // Paper
|
||||
// CraftBukkit start - whole method
|
||||
if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot
|
||||
this.c.info(this.player.getName() + " issued server command: " + s);
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
|
||||
this.LOGGER.info(this.player.getName() + " issued server command: " + s);
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
||||
this.server.getPluginManager().callEvent(event);
|
||||
|
||||
if (event.isCancelled()) {
|
||||
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Paper
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (this.server.dispatchCommand(event.getPlayer(), event.getMessage().substring(1))) {
|
||||
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Paper
|
||||
return;
|
||||
}
|
||||
} catch (org.bukkit.command.CommandException ex) {
|
||||
player.sendMessage(org.bukkit.ChatColor.RED + "An internal error occurred while attempting to perform this command");
|
||||
java.util.logging.Logger.getLogger(PlayerConnection.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
|
||||
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Paper
|
||||
return;
|
||||
}
|
||||
- org.bukkit.craftbukkit.SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Spigot
|
||||
+ SpigotTimings.playerCommandTimer.stopTiming(); // Paper
|
||||
// this.minecraftServer.getCommandHandler().a(this.player, s);
|
||||
// CraftBukkit end
|
||||
}
|
||||
@@ -459,14 +517,14 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.Timing; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
+import co.aikar.timings.Timing; // Paper
|
||||
import org.bukkit.inventory.InventoryHolder; // CraftBukkit
|
||||
|
||||
public abstract class TileEntity {
|
||||
|
||||
- public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getTileEntityTimings(this); // Spigot
|
||||
+ public Timing tickTimer = SpigotTimings.getTileEntityTimings(this); // Spigot
|
||||
+ public Timing tickTimer = SpigotTimings.getTileEntityTimings(this); // Paper
|
||||
private static final Logger a = LogManager.getLogger();
|
||||
private static Map<String, Class<? extends TileEntity>> f = Maps.newHashMap();
|
||||
private static Map<Class<? extends TileEntity>, String> g = Maps.newHashMap();
|
||||
@@ -474,74 +532,72 @@ diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/m
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/World.java
|
||||
+++ b/src/main/java/net/minecraft/server/World.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.Bukkit;
|
||||
@@ -0,0 +0,0 @@ import com.google.common.collect.Maps;
|
||||
import java.util.Map;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.BlockState;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.craftbukkit.CraftWorld;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings;
|
||||
import org.bukkit.craftbukkit.event.CraftEventFactory;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
+import org.bukkit.craftbukkit.util.LongHashSet;
|
||||
+import org.bukkit.craftbukkit.util.LongHashSet; // Paper
|
||||
import org.bukkit.event.block.BlockCanBuildEvent;
|
||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
||||
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
|
||||
import org.bukkit.generator.ChunkGenerator;
|
||||
+import co.aikar.timings.SpigotTimings;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.Callable;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
|
||||
public final org.github.paperspigot.PaperSpigotWorldConfig paperSpigotConfig; // PaperSpigot
|
||||
public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper
|
||||
|
||||
- public final SpigotTimings.WorldTimingsHandler timings; // Spigot
|
||||
+ public final co.aikar.timings.WorldTimingsHandler timings; // Spigot
|
||||
|
||||
public CraftWorld getWorld() {
|
||||
return this.world;
|
||||
+ public final co.aikar.timings.WorldTimingsHandler timings; // Paper
|
||||
private boolean guardEntityList; // Spigot
|
||||
public static boolean haveWeSilencedAPhysicsCrash;
|
||||
public static String blockLocation;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
this.getServer().addWorld(this.world);
|
||||
// CraftBukkit end
|
||||
this.keepSpawnInMemory = this.paperSpigotConfig.keepSpawnInMemory; // PaperSpigot
|
||||
- timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
||||
+ timings = new co.aikar.timings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
||||
this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
|
||||
this.N = worldprovider.getWorldBorder();
|
||||
this.getServer().addWorld(this.world); // CraftBukkit
|
||||
this.keepSpawnInMemory = this.paperConfig.keepSpawnInMemory; // Paper
|
||||
- timings = new SpigotTimings.WorldTimingsHandler(this); // Spigot - code below can generate new world and access timings
|
||||
+ timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings
|
||||
this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime);
|
||||
this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime);
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
|
||||
this.methodProfiler.c("remove");
|
||||
+ timings.entityRemoval.startTiming(); // Spigot
|
||||
this.entityList.removeAll(this.g);
|
||||
+ timings.entityRemoval.startTiming(); // Paper
|
||||
this.entityList.removeAll(this.f);
|
||||
|
||||
int j;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
|
||||
this.g.clear();
|
||||
+ timings.entityRemoval.stopTiming(); // Spigot
|
||||
this.f.clear();
|
||||
this.l();
|
||||
+ timings.entityRemoval.stopTiming(); // Paper
|
||||
this.methodProfiler.c("regular");
|
||||
|
||||
org.spigotmc.ActivationRange.activateEntities(this); // Spigot
|
||||
CrashReportSystemDetails crashreportsystemdetails1;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
timings.entityTick.startTiming(); // Spigot
|
||||
guardEntityList = true; // Spigot
|
||||
// CraftBukkit start - Use field for loop variable
|
||||
+ co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Spigot
|
||||
+ co.aikar.timings.TimingHistory.entityTicks += this.entityList.size(); // Paper
|
||||
int entitiesThisCycle = 0;
|
||||
// PaperSpigot start - Disable tick limiters
|
||||
// Paper start - Disable tick limiters
|
||||
//if (tickPosition < 0) tickPosition = 0;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
this.methodProfiler.a("tick");
|
||||
if (!entity.dead) {
|
||||
if (!entity.dead && !(entity instanceof EntityPlayer)) {
|
||||
try {
|
||||
- SpigotTimings.tickEntityTimer.startTiming(); // Spigot
|
||||
+ entity.tickTimer.startTiming(); // Spigot
|
||||
+ entity.tickTimer.startTiming(); // Paper
|
||||
this.g(entity);
|
||||
- SpigotTimings.tickEntityTimer.stopTiming(); // Spigot
|
||||
+ entity.tickTimer.stopTiming(); // Spigot
|
||||
+ entity.tickTimer.stopTiming(); // Paper
|
||||
} catch (Throwable throwable1) {
|
||||
// PaperSpigot start - Prevent tile entity and entity crashes
|
||||
// Paper start - Prevent tile entity and entity crashes
|
||||
- SpigotTimings.tickEntityTimer.stopTiming();
|
||||
+ entity.tickTimer.stopTiming();
|
||||
System.err.println("Entity threw exception at " + entity.world.getWorld().getName() + ":" + entity.locX + "," + entity.locY + "," + entity.locZ);
|
||||
@@ -551,31 +607,31 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
timings.tileEntityPending.stopTiming(); // Spigot
|
||||
+ co.aikar.timings.TimingHistory.tileEntityTicks += this.tileEntityList.size(); // Spigot
|
||||
+
|
||||
+ co.aikar.timings.TimingHistory.tileEntityTicks += this.tileEntityListTick.size(); // Paper
|
||||
this.methodProfiler.b();
|
||||
this.methodProfiler.b();
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
// PaperSpigot end
|
||||
entity.ticksLived++;
|
||||
entity.inactiveTick();
|
||||
} else {
|
||||
- entity.tickTimer.startTiming(); // Spigot
|
||||
// CraftBukkit end
|
||||
entity.P = entity.locX;
|
||||
entity.Q = entity.locY;
|
||||
entity.M = entity.locX;
|
||||
entity.N = entity.locY;
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
entity.lastPitch = entity.pitch;
|
||||
if (flag && entity.ad) {
|
||||
if (flag && entity.aa) {
|
||||
++entity.ticksLived;
|
||||
+ ++co.aikar.timings.TimingHistory.activatedEntityTicks; // Spigot
|
||||
if (entity.vehicle != null) {
|
||||
entity.ak();
|
||||
+ ++co.aikar.timings.TimingHistory.activatedEntityTicks; // Paper
|
||||
if (entity.isPassenger()) {
|
||||
entity.aw();
|
||||
} else {
|
||||
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
-
|
||||
- entity.tickTimer.stopTiming(); // Spigot
|
||||
}
|
||||
}
|
||||
@@ -589,105 +645,98 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
timings.doChunkUnload.stopTiming(); // Spigot
|
||||
this.methodProfiler.c("tickPending");
|
||||
- timings.doTickPending.startTiming(); // Spigot
|
||||
+ timings.scheduledBlocks.startTiming(); // Spigot
|
||||
+ timings.scheduledBlocks.startTiming(); // Paper
|
||||
this.a(false);
|
||||
- timings.doTickPending.stopTiming(); // Spigot
|
||||
+ timings.scheduledBlocks.stopTiming(); // Spigot
|
||||
+ timings.scheduledBlocks.stopTiming(); // Paper
|
||||
this.methodProfiler.c("tickBlocks");
|
||||
- timings.doTickTiles.startTiming(); // Spigot
|
||||
+ timings.chunkTicks.startTiming(); // Spigot
|
||||
this.h();
|
||||
+ timings.chunkTicks.startTiming(); // Paper
|
||||
this.j();
|
||||
- timings.doTickTiles.stopTiming(); // Spigot
|
||||
+ timings.chunkTicks.stopTiming(); // Spigot
|
||||
spigotConfig.antiXrayInstance.flushUpdates(this); // PaperSpigot
|
||||
+ timings.chunkTicks.stopTiming(); // Paper
|
||||
this.methodProfiler.c("chunkMap");
|
||||
timings.doChunkMap.startTiming(); // Spigot
|
||||
this.manager.flush();
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
}
|
||||
}
|
||||
|
||||
this.methodProfiler.c("tickBlocks");
|
||||
+ timings.chunkTicksBlocks.startTiming(); // Spigot
|
||||
i1 = this.getGameRules().c("randomTickSpeed");
|
||||
if (i1 > 0) {
|
||||
- this.methodProfiler.c("tickBlocks");
|
||||
+ timings.chunkTicksBlocks.startTiming(); // Paper
|
||||
if (i > 0) {
|
||||
ChunkSection[] achunksection = chunk.getSections();
|
||||
int i1 = achunksection.length;
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
+ timings.chunkTicksBlocks.stopTiming(); // Spigot
|
||||
+ timings.chunkTicksBlocks.stopTiming(); // Paper
|
||||
}
|
||||
|
||||
}
|
||||
this.methodProfiler.b();
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
|
||||
this.methodProfiler.a("cleaning");
|
||||
|
||||
+ timings.scheduledBlocksCleanup.startTiming(); // Spigot
|
||||
+ timings.scheduledBlocksCleanup.startTiming(); // Paper
|
||||
NextTickListEntry nextticklistentry;
|
||||
|
||||
for (int j = 0; j < i; ++j) {
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
this.M.remove(nextticklistentry);
|
||||
this.V.add(nextticklistentry);
|
||||
// this.nextTickListHash.remove(nextticklistentry);
|
||||
this.U.add(nextticklistentry);
|
||||
}
|
||||
+ timings.scheduledBlocksCleanup.stopTiming(); // Spigot
|
||||
+ timings.scheduledBlocksCleanup.stopTiming(); // Paper
|
||||
|
||||
// PaperSpigot start - Allow redstone ticks to bypass the tickNextTickListCap
|
||||
if (paperSpigotConfig.tickNextTickListCapIgnoresRedstone) {
|
||||
// Paper start - Allow redstone ticks to bypass the tickNextTickListCap
|
||||
if (paperConfig.tickNextTickListCapIgnoresRedstone) {
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
|
||||
this.methodProfiler.b();
|
||||
this.methodProfiler.a("ticking");
|
||||
+ timings.scheduledBlocksTicking.startTiming(); // Spigot
|
||||
Iterator iterator = this.V.iterator();
|
||||
+ timings.scheduledBlocksTicking.startTiming(); // Paper
|
||||
Iterator iterator = this.U.iterator();
|
||||
|
||||
while (iterator.hasNext()) {
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
|
||||
if (this.areChunksLoadedBetween(nextticklistentry.a.a(-b0, -b0, -b0), nextticklistentry.a.a(b0, b0, b0))) {
|
||||
IBlockData iblockdata = this.getType(nextticklistentry.a);
|
||||
+ co.aikar.timings.Timing timing = iblockdata.getBlock().getTiming(); // Spigot
|
||||
+ timing.startTiming(); // Spigot
|
||||
+ co.aikar.timings.Timing timing = iblockdata.getBlock().getTiming(); // Paper
|
||||
+ timing.startTiming(); // Paper
|
||||
|
||||
if (iblockdata.getBlock().getMaterial() != Material.AIR && Block.a(iblockdata.getBlock(), nextticklistentry.a())) {
|
||||
if (iblockdata.getMaterial() != Material.AIR && Block.a(iblockdata.getBlock(), nextticklistentry.a())) {
|
||||
try {
|
||||
@@ -0,0 +0,0 @@ public class WorldServer extends World implements IAsyncTaskHandler {
|
||||
throw new ReportedException(crashreport);
|
||||
}
|
||||
}
|
||||
+ timing.stopTiming(); // Spigot
|
||||
+ timing.stopTiming(); // Paper
|
||||
} else {
|
||||
this.a(nextticklistentry.a, nextticklistentry.a(), 0);
|
||||
}
|
||||
}
|
||||
+ timings.scheduledBlocksTicking.stopTiming(); // Spigot
|
||||
+ timings.scheduledBlocksTicking.stopTiming(); // Paper
|
||||
|
||||
this.methodProfiler.b();
|
||||
this.V.clear();
|
||||
this.U.clear();
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
DefaultPermissions.registerCorePermissions();
|
||||
CraftDefaultPermissions.registerCorePermissions();
|
||||
helpMap.initializeCommands();
|
||||
+ co.aikar.timings.Timings.reset(); // Spigot
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
// PaperSpigot end
|
||||
private final Spigot spigot = new Spigot()
|
||||
{
|
||||
|
||||
+ @Deprecated
|
||||
@Override
|
||||
public YamlConfiguration getConfig()
|
||||
{
|
||||
+ return getBukkitConfig();
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -0,0 +0,0 @@ public final class CraftServer implements Server {
|
||||
}
|
||||
|
||||
@Override
|
||||
+ public YamlConfiguration getBukkitConfig()
|
||||
+ {
|
||||
+ return configuration;
|
||||
@@ -696,13 +745,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
+ @Override
|
||||
+ public YamlConfiguration getSpigotConfig()
|
||||
+ {
|
||||
return org.spigotmc.SpigotConfig.config;
|
||||
}
|
||||
|
||||
@Override
|
||||
+ public YamlConfiguration getPaperSpigotConfig()
|
||||
+ return org.spigotmc.SpigotConfig.config;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public YamlConfiguration getPaperConfig()
|
||||
+ {
|
||||
+ return org.github.paperspigot.PaperSpigotConfig.config;
|
||||
+ return com.destroystokyo.paper.PaperConfig.config;
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
@@ -892,10 +941,27 @@ diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.configuration.serialization.DelegateDeserialization;
|
||||
import org.bukkit.conversations.Conversation;
|
||||
import org.bukkit.conversations.ConversationAbandonedEvent;
|
||||
import org.bukkit.conversations.ManuallyAbandonedConversationCanceller;
|
||||
-import org.bukkit.craftbukkit.CraftParticle;
|
||||
+import org.bukkit.craftbukkit.*;
|
||||
import org.bukkit.craftbukkit.block.CraftSign;
|
||||
import org.bukkit.craftbukkit.conversations.ConversationTracker;
|
||||
-import org.bukkit.craftbukkit.CraftEffect;
|
||||
-import org.bukkit.craftbukkit.CraftOfflinePlayer;
|
||||
-import org.bukkit.craftbukkit.CraftServer;
|
||||
-import org.bukkit.craftbukkit.CraftSound;
|
||||
-import org.bukkit.craftbukkit.CraftStatistic;
|
||||
-import org.bukkit.craftbukkit.CraftWorld;
|
||||
import org.bukkit.craftbukkit.map.CraftMapView;
|
||||
import org.bukkit.craftbukkit.map.RenderData;
|
||||
import org.bukkit.craftbukkit.scoreboard.CraftScoreboard;
|
||||
@@ -0,0 +0,0 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
((WorldServer) getHandle().world).getPlayerChunkMap().updateViewDistance(getHandle(), viewDistance);
|
||||
packet.components = components;
|
||||
getHandle().playerConnection.sendPacket(packet);
|
||||
}
|
||||
// PaperSpigot end
|
||||
+
|
||||
+ @Override
|
||||
+ public int getPing()
|
||||
@@ -914,7 +980,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
return false;
|
||||
- }});
|
||||
+ }}){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer();}}; // Spigot
|
||||
+ }}){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer();}}; // Paper
|
||||
handle(task, 0l);
|
||||
for (CraftTask taskPending = head.getNext(); taskPending != null; taskPending = taskPending.getNext()) {
|
||||
if (taskPending == task) {
|
||||
@@ -923,7 +989,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
}
|
||||
- });
|
||||
+ }){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer(plugin);}}; // Spigot
|
||||
+ }){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer(plugin);}}; // Paper
|
||||
handle(task, 0l);
|
||||
for (CraftTask taskPending = head.getNext(); taskPending != null; taskPending = taskPending.getNext()) {
|
||||
if (taskPending == task) {
|
||||
@@ -932,7 +998,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
CraftScheduler.this.temp.clear();
|
||||
}
|
||||
- });
|
||||
+ }){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer();}}; // Spigot
|
||||
+ }){{this.timings=co.aikar.timings.SpigotTimings.getCancelTasksTimer();}}; // Paper
|
||||
handle(task, 0l);
|
||||
for (CraftTask taskPending = head.getNext(); taskPending != null; taskPending = taskPending.getNext()) {
|
||||
if (taskPending == task) {
|
||||
@@ -956,8 +1022,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
import org.bukkit.Bukkit;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings; // Spigot
|
||||
-import org.spigotmc.CustomTimingsHandler; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Spigot
|
||||
+import co.aikar.timings.Timing; // Spigot
|
||||
+import co.aikar.timings.SpigotTimings; // Paper
|
||||
+import co.aikar.timings.Timing; // Paper
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
@@ -966,8 +1032,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
private volatile long period;
|
||||
private long nextRun;
|
||||
- private final Runnable task;
|
||||
+ public final Runnable task; //Spigot
|
||||
+ public Timing timings; // Spigot
|
||||
+ public final Runnable task; // Paper
|
||||
+ public Timing timings; // Paper
|
||||
private final Plugin plugin;
|
||||
private final int id;
|
||||
|
||||
@@ -976,9 +1042,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
this(null, null, -1, -1);
|
||||
}
|
||||
@@ -0,0 +0,0 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
||||
this(null, task, -1, -1);
|
||||
}
|
||||
|
||||
// Spigot start
|
||||
- // Spigot start
|
||||
- public String timingName = null;
|
||||
- CraftTask(String timingName) {
|
||||
- this(timingName, null, null, -1, -1);
|
||||
@@ -987,7 +1054,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- this(timingName, null, task, -1, -1);
|
||||
- }
|
||||
- CraftTask(String timingName, final Plugin plugin, final Runnable task, final int id, final long period) {
|
||||
+ CraftTask(final Plugin plugin, final Runnable task, final int id, final long period) {
|
||||
+ CraftTask(final Plugin plugin, final Runnable task, final int id, final long period) { // Paper
|
||||
this.plugin = plugin;
|
||||
this.task = task;
|
||||
this.id = id;
|
||||
@@ -999,7 +1066,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
- CraftTask(final Plugin plugin, final Runnable task, final int id, final long period) {
|
||||
- this(null, plugin, task, id, period);
|
||||
- // Spigot end
|
||||
+ timings = task != null ? SpigotTimings.getPluginTaskTimings(this, period) : null; // Spigot
|
||||
+ timings = task != null ? SpigotTimings.getPluginTaskTimings(this, period) : null; // Paper
|
||||
}
|
||||
|
||||
public final int getTaskId() {
|
||||
@@ -1007,16 +1074,17 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
}
|
||||
|
||||
public void run() {
|
||||
+ if (timings != null && isSync()) timings.startTiming(); // Spigot
|
||||
+ if (timings != null && isSync()) timings.startTiming(); // Paper
|
||||
task.run();
|
||||
+ if (timings != null && isSync()) timings.stopTiming(); // Spigot
|
||||
+ if (timings != null && isSync()) timings.stopTiming(); // Paper
|
||||
}
|
||||
|
||||
long getPeriod() {
|
||||
@@ -0,0 +0,0 @@ public class CraftTask implements BukkitTask, Runnable { // Spigot
|
||||
setPeriod(-2l);
|
||||
return true;
|
||||
}
|
||||
|
||||
-
|
||||
- // Spigot start
|
||||
- public String getTaskName() {
|
||||
- if (timingName != null) {
|
||||
@@ -1034,7 +1102,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
|
||||
public class CraftIconCache implements CachedServerIcon {
|
||||
public final String value;
|
||||
|
||||
+ public String getData() { return value; } // Spigot
|
||||
+ public String getData() { return value; } // Paper
|
||||
public CraftIconCache(final String value) {
|
||||
this.value = value;
|
||||
}
|
||||
@@ -1042,125 +1110,13 @@ diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/ActivationRange.java
|
||||
+++ b/src/main/java/org/spigotmc/ActivationRange.java
|
||||
@@ -0,0 +0,0 @@ import net.minecraft.server.EntityWither;
|
||||
import net.minecraft.server.MathHelper;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.World;
|
||||
@@ -0,0 +0,0 @@ import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import net.minecraft.server.*;
|
||||
-import org.bukkit.craftbukkit.SpigotTimings;
|
||||
-import org.bukkit.entity.Creeper;
|
||||
+import co.aikar.timings.SpigotTimings;
|
||||
+
|
||||
|
||||
public class ActivationRange
|
||||
{
|
||||
diff --git a/src/main/java/org/spigotmc/AntiXray.java b/src/main/java/org/spigotmc/AntiXray.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/AntiXray.java
|
||||
+++ b/src/main/java/org/spigotmc/AntiXray.java
|
||||
@@ -0,0 +0,0 @@ import net.minecraft.server.BlockPosition;
|
||||
import net.minecraft.server.Blocks;
|
||||
import net.minecraft.server.World;
|
||||
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
|
||||
+import co.aikar.timings.SpigotTimings;
|
||||
|
||||
// PaperSpigot start
|
||||
import java.util.HashSet;
|
||||
@@ -0,0 +0,0 @@ import java.util.Set;
|
||||
public class AntiXray
|
||||
{
|
||||
|
||||
- private static final CustomTimingsHandler update = new CustomTimingsHandler( "xray - update" );
|
||||
- private static final CustomTimingsHandler obfuscate = new CustomTimingsHandler( "xray - obfuscate" );
|
||||
- /*========================================================================*/
|
||||
// Used to keep track of which blocks to obfuscate
|
||||
private final boolean[] obfuscateBlocks = new boolean[ Short.MAX_VALUE ];
|
||||
// Used to select a random replacement ore
|
||||
@@ -0,0 +0,0 @@ public class AntiXray
|
||||
return;
|
||||
}
|
||||
// PaperSpigot end
|
||||
- update.startTiming();
|
||||
+ SpigotTimings.antiXrayUpdateTimer.startTiming();
|
||||
updateNearbyBlocks( world, position, 2, false ); // 2 is the radius, we shouldn't change it as that would make it exponentially slower
|
||||
- update.stopTiming();
|
||||
+ SpigotTimings.antiXrayUpdateTimer.stopTiming();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +0,0 @@ public class AntiXray
|
||||
{
|
||||
if ( world.spigotConfig.antiXray )
|
||||
{
|
||||
- obfuscate.startTiming();
|
||||
+ SpigotTimings.antiXrayObfuscateTimer.startTiming();
|
||||
obfuscate( chunkX, chunkY, bitmask, buffer, world );
|
||||
- obfuscate.stopTiming();
|
||||
+ SpigotTimings.antiXrayObfuscateTimer.stopTiming();
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
+import java.util.concurrent.TimeUnit;
|
||||
import java.util.logging.Level;
|
||||
import gnu.trove.map.hash.TObjectIntHashMap;
|
||||
+import com.google.common.collect.Lists;
|
||||
import net.minecraft.server.AttributeRanged;
|
||||
import net.minecraft.server.GenericAttributes;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
@@ -0,0 +0,0 @@ import org.bukkit.command.Command;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.InvalidConfigurationException;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
+import co.aikar.timings.Timings;
|
||||
+import co.aikar.timings.TimingsManager;
|
||||
|
||||
public class SpigotConfig
|
||||
{
|
||||
@@ -0,0 +0,0 @@ public class SpigotConfig
|
||||
bungee = getBoolean( "settings.bungeecord", false );
|
||||
}
|
||||
|
||||
+ private static void timings()
|
||||
+ {
|
||||
+ boolean timings = getBoolean( "timings.enabled", true );
|
||||
+ boolean verboseTimings = getBoolean( "timings.verbose", true );
|
||||
+ TimingsManager.privacy = getBoolean( "timings.server-name-privacy", false );
|
||||
+ TimingsManager.hiddenConfigs = getList( "timings.hidden-config-entries", Lists.newArrayList("database", "settings.bungeecord-addresses"));
|
||||
+ int timingHistoryInterval = getInt( "timings.history-interval", 300 );
|
||||
+ int timingHistoryLength = getInt( "timings.history-length", 3600 );
|
||||
+
|
||||
+
|
||||
+ Timings.setVerboseTimingsEnabled( verboseTimings );
|
||||
+ Timings.setTimingsEnabled( timings );
|
||||
+ Timings.setHistoryInterval( timingHistoryInterval * 20 );
|
||||
+ Timings.setHistoryLength( timingHistoryLength * 20 );
|
||||
+
|
||||
+ Bukkit.getLogger().log( Level.INFO, "Spigot Timings: " + timings +
|
||||
+ " - Verbose: " + verboseTimings +
|
||||
+ " - Interval: " + timeSummary(Timings.getHistoryInterval() / 20) +
|
||||
+ " - Length: " + timeSummary(Timings.getHistoryLength() / 20));
|
||||
+ }
|
||||
+ protected static String timeSummary(int seconds) {
|
||||
+ String time = "";
|
||||
+ if (seconds > 60*60) {
|
||||
+ time += TimeUnit.SECONDS.toHours(seconds) + "h";
|
||||
+ seconds /= 60;
|
||||
+ }
|
||||
+
|
||||
+ if (seconds > 0) {
|
||||
+ time += TimeUnit.SECONDS.toMinutes(seconds) + "m";
|
||||
+ }
|
||||
+ return time;
|
||||
+ }
|
||||
+
|
||||
private static void nettyThreads()
|
||||
{
|
||||
int count = getInt( "settings.netty-threads", 4 );
|
||||
--
|
||||
@@ -1,40 +1,38 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Zach Brown <1254957+zachbr@users.noreply.github.com>
|
||||
Date: Sat, 7 Mar 2015 21:07:10 -0600
|
||||
Date: Tue, 1 Mar 2016 13:31:05 -0600
|
||||
Subject: [PATCH] Toggle for player interact limiter
|
||||
|
||||
|
||||
diff --git a/src/main/java/com/destroystokyo/paper/PaperConfig.java b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
+++ b/src/main/java/com/destroystokyo/paper/PaperConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperConfig {
|
||||
config.addDefault(path, def);
|
||||
return config.getString(path, config.getString(path));
|
||||
}
|
||||
+
|
||||
+ public static boolean useInteractLimiter;
|
||||
+ private static void useInteractLimiter() {
|
||||
+ useInteractLimiter = getBoolean("settings.limit-player-interactions", true);
|
||||
+ if (!useInteractLimiter) {
|
||||
+ Bukkit.getLogger().log(Level.INFO, "Disabling player interaction limiter, your server may be more vulnerable to malicious users");
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, IUpdatePlayerList
|
||||
PlayerConnectionUtils.ensureMainThread(packetplayinblockplace, this, this.player.u());
|
||||
WorldServer worldserver = this.minecraftServer.getWorldServer(this.player.dimension);
|
||||
@@ -0,0 +0,0 @@ public class PlayerConnection implements PacketListenerPlayIn, ITickable {
|
||||
this.player.resetIdleTimer();
|
||||
// Spigot start
|
||||
boolean throttled = false;
|
||||
- if (lastPlace != -1 && packetplayinblockplace.timestamp - lastPlace < 30 && packets++ >= 4) {
|
||||
+ // PaperSpigot - Allow disabling the player interaction limiter
|
||||
+ if (org.github.paperspigot.PaperSpigotConfig.interactLimitEnabled && lastPlace != -1 && packetplayinblockplace.timestamp - lastPlace < 30 && packets++ >= 4) {
|
||||
+ // Paper - Allow disabling interact limiter
|
||||
+ if (com.destroystokyo.paper.PaperConfig.useInteractLimiter && lastPlace != -1 && packetplayinblockplace.timestamp - lastPlace < 30 && packets++ >= 4) {
|
||||
throttled = true;
|
||||
} else if ( packetplayinblockplace.timestamp - lastPlace >= 30 || lastPlace == -1 )
|
||||
{
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotConfig
|
||||
{
|
||||
babyZombieMovementSpeed = getDouble( "settings.baby-zombie-movement-speed", 0.5D ); // Player moves at 0.1F, for reference
|
||||
}
|
||||
+
|
||||
+ public static boolean interactLimitEnabled;
|
||||
+ private static void interactLimitEnabled()
|
||||
+ {
|
||||
+ interactLimitEnabled = getBoolean( "settings.limit-player-interactions", true );
|
||||
+ if ( !interactLimitEnabled )
|
||||
+ {
|
||||
+ Bukkit.getLogger().log( Level.INFO, "Disabling player interaction limiter, your server may be more vulnerable to malicious users" );
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
--
|
||||
@@ -1,36 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Roman Alexander <romanalexander@users.noreply.github.com>
|
||||
Date: Fri, 27 Mar 2015 00:52:24 -0400
|
||||
Subject: [PATCH] Toggleable player crits, helps mitigate hacked clients.
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityHuman.java b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityHuman.java
|
||||
@@ -0,0 +0,0 @@ public abstract class EntityHuman extends EntityLiving {
|
||||
}
|
||||
|
||||
if (f > 0.0F || f1 > 0.0F) {
|
||||
- boolean flag = this.fallDistance > 0.0F && !this.onGround && !this.k_() && !this.V() && !this.hasEffect(MobEffectList.BLINDNESS) && this.vehicle == null && entity instanceof EntityLiving;
|
||||
+ boolean flag = !world.paperSpigotConfig.disablePlayerCrits && this.fallDistance > 0.0F && !this.onGround && !this.k_() && !this.V() && !this.hasEffect(MobEffectList.BLINDNESS) && this.vehicle == null && entity instanceof EntityLiving; // PaperSpigot
|
||||
|
||||
if (flag && f > 0.0F) {
|
||||
f *= 1.5F;
|
||||
diff --git a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
||||
--- a/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
+++ b/src/main/java/org/github/paperspigot/PaperSpigotWorldConfig.java
|
||||
@@ -0,0 +0,0 @@ public class PaperSpigotWorldConfig
|
||||
}
|
||||
|
||||
public boolean boatsDropBoats;
|
||||
+ public boolean disablePlayerCrits;
|
||||
private void mechanicsChanges()
|
||||
{
|
||||
boatsDropBoats = getBoolean( "game-mechanics.boats-drop-boats", false );
|
||||
+ disablePlayerCrits = getBoolean( "game-mechanics.disable-player-crits", false );
|
||||
}
|
||||
|
||||
public boolean netherVoidTopDamage;
|
||||
--
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user