3
0
Fork 1

Rollback to the state of .152 build with some critical fixes and updates

kcx-1614
Sergey Shatunov 2016-01-04 12:38:37 +07:00
parent 40c95e49c0
commit f722fccdce
38 changed files with 406 additions and 1452 deletions

View File

@ -80,7 +80,7 @@
private static final String __OBFID = "CL_00001533";
/** Forge: Used to store custom data for each entity. */
private NBTTagCompound customEntityData;
@@ -135,7 +175,17 @@
@@ -135,7 +175,16 @@
public ArrayList<EntityItem> capturedDrops = new ArrayList<EntityItem>();
private UUID persistentID;
@ -94,11 +94,10 @@
+ // Spigot end
protected HashMap<String, IExtendedEntityProperties> extendedProperties;
+ public String spawnReason; // Cauldron - used to handle CraftBukkit's SpawnReason with CustomSpawners
+ public boolean markedForRemoval = false;
public int getEntityId()
{
@@ -159,7 +209,7 @@
@@ -159,7 +208,7 @@
this.rand = new Random();
this.fireResistance = 1;
this.firstUpdate = true;
@ -107,7 +106,7 @@
this.myEntitySize = Entity.EnumEntitySize.SIZE_2;
this.worldObj = p_i1582_1_;
this.setPosition(0.0D, 0.0D, 0.0D);
@@ -167,8 +217,15 @@
@@ -167,8 +216,15 @@
if (p_i1582_1_ != null)
{
this.dimension = p_i1582_1_.provider.dimensionId;
@ -123,7 +122,7 @@
this.dataWatcher = new DataWatcher(this);
this.dataWatcher.addObject(0, Byte.valueOf((byte)0));
this.dataWatcher.addObject(1, Short.valueOf((short)300));
@@ -277,6 +334,41 @@
@@ -277,6 +333,41 @@
protected void setRotation(float p_70101_1_, float p_70101_2_)
{
@ -165,7 +164,7 @@
this.rotationYaw = p_70101_1_ % 360.0F;
this.rotationPitch = p_70101_2_ % 360.0F;
}
@@ -343,7 +435,7 @@
@@ -343,7 +434,7 @@
if (this.inPortal)
{
@ -174,7 +173,7 @@
{
if (this.ridingEntity == null && this.portalCounter++ >= i)
{
@@ -457,7 +549,35 @@
@@ -457,7 +548,35 @@
{
if (!this.isImmuneToFire)
{
@ -211,7 +210,7 @@
this.setFire(15);
}
}
@@ -492,6 +612,30 @@
@@ -492,6 +611,30 @@
public void moveEntity(double p_70091_1_, double p_70091_3_, double p_70091_5_)
{
@ -242,7 +241,7 @@
if (this.noClip)
{
this.boundingBox.offset(p_70091_1_, p_70091_3_, p_70091_5_);
@@ -756,6 +900,34 @@
@@ -756,6 +899,34 @@
d10 = this.posY - d4;
d11 = this.posZ - d5;
@ -277,7 +276,7 @@
if (this.canTriggerWalking() && !flag && this.ridingEntity == null)
{
int j1 = MathHelper.floor_double(this.posX);
@@ -798,6 +970,8 @@
@@ -798,6 +969,8 @@
}
}
@ -286,7 +285,7 @@
try
{
this.func_145775_I();
@@ -809,7 +983,8 @@
@@ -809,7 +982,8 @@
this.addEntityCrashInfo(crashreportcategory);
throw new ReportedException(crashreport);
}
@ -296,7 +295,7 @@
boolean flag2 = this.isWet();
if (this.worldObj.func_147470_e(this.boundingBox.contract(0.001D, 0.001D, 0.001D)))
@@ -820,8 +995,20 @@
@@ -820,8 +994,20 @@
{
++this.fire;
@ -318,7 +317,7 @@
this.setFire(8);
}
}
@@ -839,6 +1026,8 @@
@@ -839,6 +1025,8 @@
this.worldObj.theProfiler.endSection();
}
@ -327,7 +326,7 @@
}
protected String getSwimSound()
@@ -867,7 +1056,18 @@
@@ -867,7 +1055,18 @@
try
{
@ -347,7 +346,7 @@
}
catch (Throwable throwable)
{
@@ -928,6 +1128,7 @@
@@ -928,6 +1127,7 @@
return null;
}
@ -355,7 +354,7 @@
protected void dealFireDamage(int p_70081_1_)
{
if (!this.isImmuneToFire)
@@ -935,7 +1136,16 @@
@@ -935,7 +1135,16 @@
this.attackEntityFrom(DamageSource.inFire, (float)p_70081_1_);
}
}
@ -372,7 +371,7 @@
public final boolean isImmuneToFire()
{
return this.isImmuneToFire;
@@ -1184,6 +1394,8 @@
@@ -1184,6 +1393,8 @@
public void onCollideWithPlayer(EntityPlayer p_70100_1_) {}
@ -381,7 +380,7 @@
public void applyEntityCollision(Entity p_70108_1_)
{
if (p_70108_1_.riddenByEntity != this && p_70108_1_.ridingEntity != this)
@@ -1310,6 +1522,20 @@
@@ -1310,6 +1521,20 @@
{
p_70109_1_.setTag("Pos", this.newDoubleNBTList(new double[] {this.posX, this.posY + (double)this.ySize, this.posZ}));
p_70109_1_.setTag("Motion", this.newDoubleNBTList(new double[] {this.motionX, this.motionY, this.motionZ}));
@ -402,7 +401,7 @@
p_70109_1_.setTag("Rotation", this.newFloatNBTList(new float[] {this.rotationYaw, this.rotationPitch}));
p_70109_1_.setFloat("FallDistance", this.fallDistance);
p_70109_1_.setShort("Fire", (short)this.fire);
@@ -1320,6 +1546,12 @@
@@ -1320,6 +1545,12 @@
p_70109_1_.setInteger("PortalCooldown", this.timeUntilPortal);
p_70109_1_.setLong("UUIDMost", this.getUniqueID().getMostSignificantBits());
p_70109_1_.setLong("UUIDLeast", this.getUniqueID().getLeastSignificantBits());
@ -415,7 +414,7 @@
if (customEntityData != null)
{
p_70109_1_.setTag("ForgeData", customEntityData);
@@ -1370,7 +1602,7 @@
@@ -1370,7 +1601,7 @@
this.motionX = nbttaglist1.func_150309_d(0);
this.motionY = nbttaglist1.func_150309_d(1);
this.motionZ = nbttaglist1.func_150309_d(2);
@ -424,7 +423,7 @@
if (Math.abs(this.motionX) > 10.0D)
{
this.motionX = 0.0D;
@@ -1385,7 +1617,7 @@
@@ -1385,7 +1616,7 @@
{
this.motionZ = 0.0D;
}
@ -433,7 +432,7 @@
this.prevPosX = this.lastTickPosX = this.posX = nbttaglist.func_150309_d(0);
this.prevPosY = this.lastTickPosY = this.posY = nbttaglist.func_150309_d(1);
this.prevPosZ = this.lastTickPosZ = this.posZ = nbttaglist.func_150309_d(2);
@@ -1436,6 +1668,76 @@
@@ -1436,6 +1667,76 @@
{
this.setPosition(this.posX, this.posY, this.posZ);
}
@ -510,7 +509,7 @@
}
catch (Throwable throwable)
{
@@ -1653,6 +1955,31 @@
@@ -1653,6 +1954,31 @@
public void mountEntity(Entity p_70078_1_)
{
@ -542,7 +541,7 @@
this.entityRiderPitchDelta = 0.0D;
this.entityRiderYawDelta = 0.0D;
@@ -1660,6 +1987,20 @@
@@ -1660,6 +1986,20 @@
{
if (this.ridingEntity != null)
{
@ -563,7 +562,7 @@
this.setLocationAndAngles(this.ridingEntity.posX, this.ridingEntity.boundingBox.minY + (double)this.ridingEntity.height, this.ridingEntity.posZ, this.rotationYaw, this.rotationPitch);
this.ridingEntity.riddenByEntity = null;
}
@@ -1668,22 +2009,61 @@
@@ -1668,22 +2008,61 @@
}
else
{
@ -632,7 +631,7 @@
this.ridingEntity = p_70078_1_;
p_70078_1_.riddenByEntity = this;
}
@@ -1860,12 +2240,59 @@
@@ -1860,12 +2239,59 @@
public void onStruckByLightning(EntityLightningBolt p_70077_1_)
{
@ -694,7 +693,7 @@
}
}
@@ -2038,36 +2465,62 @@
@@ -2038,36 +2464,62 @@
{
this.worldObj.theProfiler.startSection("changeDimension");
MinecraftServer minecraftserver = MinecraftServer.getServer();
@ -773,7 +772,7 @@
}
this.isDead = true;
@@ -2077,7 +2530,6 @@
@@ -2077,7 +2529,6 @@
this.worldObj.theProfiler.endSection();
}
}
@ -781,7 +780,7 @@
public float func_145772_a(Explosion p_145772_1_, World p_145772_2_, int p_145772_3_, int p_145772_4_, int p_145772_5_, Block p_145772_6_)
{
return p_145772_6_.getExplosionResistance(this, p_145772_2_, p_145772_3_, p_145772_4_, p_145772_5_, posX, posY + getEyeHeight(), posZ);
@@ -2474,4 +2926,14 @@
@@ -2474,4 +2925,14 @@
}
}
}

View File

@ -1,9 +1,7 @@
--- ../src-base/minecraft/net/minecraft/entity/EntityLivingBase.java
+++ ../src-work/minecraft/net/minecraft/entity/EntityLivingBase.java
@@ -1,13 +1,16 @@
package net.minecraft.entity;
@@ -2,12 +2,14 @@
+import cpw.mods.fml.common.FMLLog;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
+
@ -17,7 +15,7 @@
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.enchantment.EnchantmentHelper;
@@ -50,14 +53,30 @@
@@ -50,14 +52,30 @@
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.ForgeHooks;
@ -50,7 +48,7 @@
private final ItemStack[] previousEquipment = new ItemStack[5];
public boolean isSwingInProgress;
public int swingProgressInt;
@@ -83,7 +102,7 @@
@@ -83,7 +101,7 @@
public float rotationYawHead;
public float prevRotationYawHead;
public float jumpMovementFactor = 0.02F;
@ -59,7 +57,7 @@
protected int recentlyHit;
protected boolean dead;
protected int entityAge;
@@ -93,7 +112,7 @@
@@ -93,7 +111,7 @@
protected float field_70763_ax;
protected float field_70741_aB;
protected int scoreValue;
@ -68,7 +66,7 @@
protected boolean isJumping;
public float moveStrafing;
public float moveForward;
@@ -104,21 +123,26 @@
@@ -104,21 +122,26 @@
protected double newPosZ;
protected double newRotationYaw;
protected double newRotationPitch;
@ -98,7 +96,7 @@
this.preventEntitySpawning = true;
this.field_70770_ap = (float)(Math.random() + 1.0D) * 0.01F;
this.setPosition(this.posX, this.posY, this.posZ);
@@ -173,7 +197,18 @@
@@ -173,7 +196,18 @@
}
else if (!this.worldObj.isRemote && this.fallDistance > 3.0F)
{
@ -118,7 +116,7 @@
}
block.onFallenUpon(this.worldObj, i, j, k, this, this.fallDistance);
@@ -234,7 +269,12 @@
@@ -234,7 +268,12 @@
}
else
{
@ -132,7 +130,7 @@
}
if (this.isEntityAlive() && this.isWet())
@@ -299,6 +339,22 @@
@@ -299,6 +338,22 @@
this.worldObj.theProfiler.endSection();
}
@ -155,7 +153,7 @@
public boolean isChild()
{
return false;
@@ -308,22 +364,21 @@
@@ -308,22 +363,21 @@
{
++this.deathTime;
@ -187,7 +185,7 @@
this.setDead();
for (i = 0; i < 20; ++i)
@@ -485,6 +540,22 @@
@@ -485,6 +539,22 @@
}
}
@ -210,7 +208,7 @@
if (p_70037_1_.hasKey("HealF", 99))
{
this.setHealth(p_70037_1_.getFloat("HealF"));
@@ -614,12 +685,14 @@
@@ -614,12 +684,14 @@
public boolean isPotionActive(int p_82165_1_)
{
@ -227,7 +225,7 @@
}
public PotionEffect getActivePotionEffect(Potion p_70660_1_)
@@ -710,25 +783,66 @@
@@ -710,25 +782,66 @@
}
}
@ -295,7 +293,7 @@
this.dataWatcher.updateObject(6, Float.valueOf(MathHelper.clamp_float(p_70606_1_, 0.0F, this.getMaxHealth())));
}
@@ -757,7 +871,8 @@
@@ -757,7 +870,8 @@
}
else
{
@ -305,7 +303,7 @@
{
this.getEquipmentInSlot(4).damageItem((int)(p_70097_2_ * 4.0F + this.rand.nextFloat() * p_70097_2_ * 2.0F), this);
p_70097_2_ *= 0.75F;
@@ -773,16 +888,27 @@
@@ -773,16 +887,27 @@
return false;
}
@ -336,7 +334,7 @@
this.hurtTime = this.maxHurtTime = 10;
}
@@ -938,6 +1064,22 @@
@@ -938,6 +1063,22 @@
if (!ForgeHooks.onLivingDrops(this, p_70645_1_, capturedDrops, i, recentlyHit > 0, j))
{
@ -359,7 +357,7 @@
for (EntityItem item : capturedDrops)
{
worldObj.spawnEntityInWorld(item);
@@ -1010,8 +1152,17 @@
@@ -1010,8 +1151,17 @@
if (i > 0)
{
@ -378,7 +376,7 @@
int j = MathHelper.floor_double(this.posX);
int k = MathHelper.floor_double(this.posY - 0.20000000298023224D - (double)this.yOffset);
int l = MathHelper.floor_double(this.posZ);
@@ -1065,7 +1216,7 @@
@@ -1065,7 +1215,7 @@
{
int i = 25 - this.getTotalArmorValue();
float f1 = p_70655_2_ * (float)i;
@ -387,7 +385,7 @@
p_70655_2_ = f1 / 25.0F;
}
@@ -1089,7 +1240,8 @@
@@ -1089,7 +1239,8 @@
int j;
float f1;
@ -397,7 +395,7 @@
{
i = (this.getActivePotionEffect(Potion.resistance).getAmplifier() + 1) * 5;
j = 25 - i;
@@ -1122,26 +1274,160 @@
@@ -1122,26 +1273,161 @@
}
}
@ -422,6 +420,7 @@
- p_70665_2_ = Math.max(p_70665_2_ - this.getAbsorptionAmount(), 0.0F);
- this.setAbsorptionAmount(this.getAbsorptionAmount() - (f1 - p_70665_2_));
+ final boolean human = this instanceof EntityPlayer;
+ float originalDamage = f;
+ // Cauldron start - apply forge damage hook
+ f = ForgeHooks.onLivingHurt(this, damagesource, f);
+ if (f <= 0) return true;
@ -513,7 +512,7 @@
+ };
+ float absorptionModifier = absorption.apply((double) f).floatValue();
+
+ EntityDamageEvent event = CraftEventFactory.handleLivingEntityDamageEvent(this, damagesource, f, hardHatModifier, blockingModifier,
+ EntityDamageEvent event = CraftEventFactory.handleLivingEntityDamageEvent(this, damagesource, originalDamage, hardHatModifier, blockingModifier,
+ armorModifier, resistanceModifier, magicModifier, absorptionModifier, hardHat, blocking, armor, resistance, magic, absorption);
+ if (event.isCancelled())
{

View File

@ -14,15 +14,6 @@
this.func_146065_b(p_70097_1_.getEntity(), false);
this.setDisplayedItem((ItemStack)null);
}
@@ -115,7 +122,7 @@
if (p_110131_1_.getItem() == Items.filled_map)
{
MapData mapdata = ((ItemMap)p_110131_1_.getItem()).getMapData(p_110131_1_, this.worldObj);
- mapdata.playersVisibleOnMap.remove("frame-" + this.getEntityId());
+ mapdata.playersVisibleOnMap.remove(java.util.UUID.nameUUIDFromBytes(("frame-" + this.getEntityId()).getBytes(org.apache.commons.codec.Charsets.US_ASCII)));
}
p_110131_1_.setItemFrame((EntityItemFrame)null);
@@ -203,4 +210,11 @@
return true;

View File

@ -62,24 +62,6 @@
public int experienceLevel;
public int experienceTotal;
public float experience;
@@ -254,7 +281,7 @@
--this.xpCooldown;
}
- if (this.isPlayerSleeping())
+ /*if (this.isPlayerSleeping()) KCauldron - moved into EntityPlayerMP
{
++this.sleepTimer;
@@ -283,7 +310,7 @@
{
this.sleepTimer = 0;
}
- }
+ }*/
super.onUpdate();
@@ -416,6 +443,42 @@
{
this.updateItemUse(this.itemInUse, 16);
@ -503,15 +485,6 @@
if (p_70999_1_)
{
this.sleepTimer = 0;
@@ -1491,7 +1712,7 @@
}
}
- private boolean isInBed()
+ protected boolean isInBed() // KCauldron - private -> protected
{
return this.worldObj.getBlock(this.playerLocation.posX, this.playerLocation.posY, this.playerLocation.posZ).isBed(worldObj, playerLocation.posX, playerLocation.posY, playerLocation.posZ, this);
}
@@ -1606,11 +1827,13 @@
{
this.spawnChunk = new ChunkCoordinates(p_71063_1_);

View File

@ -190,46 +190,7 @@
iterator1.remove();
}
}
@@ -286,6 +384,38 @@
}
}
}
+ // KCauldron start
+ if (this.isPlayerSleeping())
+ {
+ ++this.sleepTimer;
+
+ if (this.sleepTimer > 100)
+ {
+ this.sleepTimer = 100;
+ }
+
+ if (!this.worldObj.isRemote)
+ {
+ if (!this.isInBed())
+ {
+ this.wakeUpPlayer(true, true, false);
+ }
+ else if (this.worldObj.isDaytime())
+ {
+ this.wakeUpPlayer(false, true, true);
+ }
+ }
+ }
+ else if (this.sleepTimer > 0)
+ {
+ ++this.sleepTimer;
+
+ if (this.sleepTimer >= 110)
+ {
+ this.sleepTimer = 0;
+ }
+ }
+ // KCauldron end
}
public void onUpdateEntity()
@@ -309,9 +439,10 @@
@@ -309,9 +407,10 @@
}
}
@ -241,7 +202,7 @@
this.lastHealth = this.getHealth();
this.lastFoodLevel = this.foodStats.getFoodLevel();
this.wasHungry = this.foodStats.getSaturationLevel() == 0.0F;
@@ -320,16 +451,18 @@
@@ -320,16 +419,18 @@
if (this.getHealth() + this.getAbsorptionAmount() != this.field_130068_bO)
{
this.field_130068_bO = this.getHealth() + this.getAbsorptionAmount();
@ -267,7 +228,7 @@
if (this.experienceTotal != this.lastExperience)
{
this.lastExperience = this.experienceTotal;
@@ -340,6 +473,20 @@
@@ -340,6 +441,20 @@
{
this.func_147098_j();
}
@ -288,7 +249,7 @@
}
catch (Throwable throwable)
{
@@ -402,34 +549,74 @@
@@ -402,34 +517,74 @@
public void onDeath(DamageSource p_70645_1_)
{
@ -372,7 +333,7 @@
score.func_96648_a();
}
@@ -495,7 +682,8 @@
@@ -495,7 +650,8 @@
public boolean canAttackPlayer(EntityPlayer p_96122_1_)
{
@ -382,7 +343,7 @@
}
public void travelToDimension(int p_71027_1_)
@@ -526,7 +714,10 @@
@@ -526,7 +682,10 @@
this.triggerAchievement(AchievementList.portal);
}
@ -394,7 +355,7 @@
this.lastExperience = -1;
this.lastHealth = -1.0F;
this.lastFoodLevel = -1;
@@ -569,6 +760,11 @@
@@ -569,6 +728,11 @@
public void wakeUpPlayer(boolean p_70999_1_, boolean p_70999_2_, boolean p_70999_3_)
{
@ -406,7 +367,7 @@
if (this.isPlayerSleeping())
{
this.getServerForPlayer().getEntityTracker().func_151248_b(this, new S0BPacketAnimation(this, 2));
@@ -584,11 +780,27 @@
@@ -584,11 +748,27 @@
public void mountEntity(Entity p_70078_1_)
{
@ -437,7 +398,7 @@
protected void updateFallState(double p_70064_1_, boolean p_70064_3_) {}
public void handleFalling(double p_71122_1_, boolean p_71122_3_)
@@ -610,29 +822,64 @@
@@ -610,29 +790,64 @@
this.currentWindowId = this.currentWindowId % 100 + 1;
}
@ -505,7 +466,7 @@
this.openContainer.windowId = this.currentWindowId;
this.openContainer.addCraftingToCrafters(this);
}
@@ -644,71 +891,150 @@
@@ -644,71 +859,150 @@
this.closeScreen();
}
@ -664,7 +625,7 @@
this.openContainer.windowId = this.currentWindowId;
this.openContainer.addCraftingToCrafters(this);
InventoryMerchant inventorymerchant = ((ContainerMerchant)this.openContainer).getMerchantInventory();
@@ -725,7 +1051,7 @@
@@ -725,7 +1019,7 @@
merchantrecipelist.func_151391_a(packetbuffer);
this.playerNetServerHandler.sendPacket(new S3FPacketCustomPayload("MC|TrList", packetbuffer));
}
@ -673,7 +634,7 @@
{
logger.error("Couldn\'t send trade list", ioexception);
}
@@ -738,6 +1064,17 @@
@@ -738,6 +1032,17 @@
public void displayGUIHorse(EntityHorse p_110298_1_, IInventory p_110298_2_)
{
@ -691,7 +652,7 @@
if (this.openContainer != this.inventoryContainer)
{
this.closeScreen();
@@ -745,7 +1082,7 @@
@@ -745,7 +1050,7 @@
this.getNextWindowId();
this.playerNetServerHandler.sendPacket(new S2DPacketOpenWindow(this.currentWindowId, 11, p_110298_2_.getInventoryName(), p_110298_2_.getSizeInventory(), p_110298_2_.hasCustomInventoryName(), p_110298_1_.getEntityId()));
@ -700,7 +661,7 @@
this.openContainer.windowId = this.currentWindowId;
this.openContainer.addCraftingToCrafters(this);
}
@@ -770,6 +1107,15 @@
@@ -770,6 +1075,15 @@
{
this.playerNetServerHandler.sendPacket(new S30PacketWindowItems(p_71110_1_.windowId, p_71110_2_));
this.playerNetServerHandler.sendPacket(new S2FPacketSetSlot(-1, -1, this.inventory.getItemStack()));
@ -716,7 +677,7 @@
}
public void sendProgressBarUpdate(Container p_71112_1_, int p_71112_2_, int p_71112_3_)
@@ -779,6 +1125,7 @@
@@ -779,6 +1093,7 @@
public void closeScreen()
{
@ -724,7 +685,7 @@
this.playerNetServerHandler.sendPacket(new S2EPacketCloseWindow(this.openContainer.windowId));
this.closeContainer();
}
@@ -853,8 +1200,19 @@
@@ -853,8 +1168,19 @@
public void setPlayerHealthUpdated()
{
this.lastHealth = -1.0E8F;
@ -744,7 +705,7 @@
public void addChatComponentMessage(IChatComponent p_146105_1_)
{
this.playerNetServerHandler.sendPacket(new S02PacketChat(p_146105_1_));
@@ -1037,6 +1395,114 @@
@@ -1037,6 +1363,114 @@
return this.field_143005_bX;
}

View File

@ -24,7 +24,7 @@
import net.minecraft.network.play.server.S23PacketBlockChange;
import net.minecraft.network.play.server.S2FPacketSetSlot;
import net.minecraft.network.play.server.S32PacketConfirmTransaction;
@@ -81,19 +84,77 @@
@@ -81,19 +84,75 @@
import net.minecraft.util.IChatComponent;
import net.minecraft.util.IntHashMap;
import net.minecraft.util.ReportedException;
@ -53,8 +53,6 @@
+import net.minecraft.init.Blocks;
+import net.minecraft.network.play.server.S05PacketSpawnPosition;
+import net.minecraft.network.play.server.S09PacketHeldItemChange;
+import net.minecraft.network.play.server.S0APacketUseBed;
+import net.minecraft.network.play.server.S12PacketEntityVelocity;
+import net.minecraft.network.play.server.S1BPacketEntityAttach;
+import net.minecraft.network.play.server.S33PacketUpdateSign;
+import net.minecraft.util.MathHelper;
@ -104,7 +102,7 @@
public class NetHandlerPlayServer implements INetHandlerPlayServer
{
private static final Logger logger = LogManager.getLogger();
@@ -107,13 +168,12 @@
@@ -107,13 +166,12 @@
private long field_147379_i;
private static Random field_147376_j = new Random();
private long field_147377_k;
@ -122,7 +120,7 @@
private static final String __OBFID = "CL_00001452";
public NetHandlerPlayServer(MinecraftServer p_i1530_1_, NetworkManager p_i1530_2_, EntityPlayerMP p_i1530_3_)
@@ -123,8 +183,41 @@
@@ -123,8 +181,41 @@
p_i1530_2_.setNetHandler(this);
this.playerEntity = p_i1530_3_;
p_i1530_3_.playerNetServerHandler = this;
@ -164,7 +162,7 @@
public void onNetworkTick()
{
this.field_147366_g = false;
@@ -139,10 +232,16 @@
@@ -139,10 +230,16 @@
this.sendPacket(new S00PacketKeepAlive(this.field_147378_h));
}
@ -181,7 +179,7 @@
if (this.field_147375_m > 0)
{
@@ -162,6 +261,24 @@
@@ -162,6 +259,24 @@
public void kickPlayerFromServer(String p_147360_1_)
{
@ -206,7 +204,7 @@
final ChatComponentText chatcomponenttext = new ChatComponentText(p_147360_1_);
this.netManager.scheduleOutboundPacket(new S40PacketDisconnect(chatcomponenttext), new GenericFutureListener[] {new GenericFutureListener()
{
@@ -170,8 +287,8 @@
@@ -170,8 +285,8 @@
{
NetHandlerPlayServer.this.netManager.closeChannel(chatcomponenttext);
}
@ -217,7 +215,7 @@
this.netManager.disableAutoRead();
}
@@ -182,6 +299,15 @@
@@ -182,6 +297,15 @@
public void processPlayer(C03PacketPlayer p_147347_1_)
{
@ -233,7 +231,7 @@
WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension);
this.field_147366_g = true;
@@ -199,8 +325,79 @@
@@ -199,8 +323,70 @@
}
}
@ -242,19 +240,10 @@
+ Player player = this.getPlayerB();
+ Location from = new Location(player.getWorld(), lastPosX, lastPosY, lastPosZ, lastYaw, lastPitch); // Get the Players previous Event location.
+ Location to = player.getLocation().clone(); // Start off the To location as the Players current location.
+
+ // KCauldron start
+ if (this.playerEntity.isPlayerSleeping())
{
+ this.playerEntity.playerNetServerHandler.sendPacket(new S08PacketPlayerPosLook(playerEntity.posX, playerEntity.posY, playerEntity.posZ, playerEntity.rotationYaw, playerEntity.rotationPitch, false));
+ this.playerEntity.playerNetServerHandler.sendPacket(new S12PacketEntityVelocity(player.getEntityId(), 0, 0, 0));
+ return;
+ }
+ // KCauldron end
+
+ // If the packet contains movement information then we update the To location with the correct XYZ.
+ if (p_147347_1_.field_149480_h && !(p_147347_1_.field_149480_h && p_147347_1_.field_149477_b == -999.0D && p_147347_1_.field_149475_d == -999.0D))
+ {
{
+ to.setX(p_147347_1_.field_149479_a);
+ to.setY(p_147347_1_.field_149477_b);
+ to.setZ(p_147347_1_.field_149478_c);
@ -314,23 +303,7 @@
double d1;
double d2;
double d3;
@@ -248,13 +445,13 @@
return;
}
- if (this.playerEntity.isPlayerSleeping())
+ /*if (this.playerEntity.isPlayerSleeping()) // KCauldron - moved up
{
this.playerEntity.onUpdateEntity();
this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch);
worldserver.updateEntity(this.playerEntity);
return;
- }
+ }*/
d0 = this.playerEntity.posY;
this.lastPosX = this.playerEntity.posX;
@@ -280,13 +477,6 @@
@@ -280,13 +466,6 @@
d3 = p_147347_1_.func_149472_e();
d4 = p_147347_1_.func_149471_f() - p_147347_1_.func_149467_d();
@ -344,7 +317,7 @@
if (Math.abs(p_147347_1_.func_149464_c()) > 3.2E7D || Math.abs(p_147347_1_.func_149472_e()) > 3.2E7D)
{
this.kickPlayerFromServer("Illegal position");
@@ -318,7 +508,7 @@
@@ -318,7 +497,7 @@
double d9 = Math.max(Math.abs(d6), Math.abs(this.playerEntity.motionZ));
double d10 = d7 * d7 + d8 * d8 + d9 * d9;
@ -353,7 +326,7 @@
{
logger.warn(this.playerEntity.getCommandSenderName() + " moved too quickly! " + d4 + "," + d5 + "," + d6 + " (" + d7 + ", " + d8 + ", " + d9 + ")");
this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch);
@@ -413,21 +603,85 @@
@@ -413,21 +592,85 @@
public void setPlayerLocation(double p_147364_1_, double p_147364_3_, double p_147364_5_, float p_147364_7_, float p_147364_8_)
{
@ -444,7 +417,7 @@
this.playerEntity.dropOneItem(false);
}
else if (p_147345_1_.func_149506_g() == 3)
@@ -490,7 +744,17 @@
@@ -490,7 +733,17 @@
}
else
{
@ -462,7 +435,7 @@
}
}
else if (p_147345_1_.func_149506_g() == 2)
@@ -517,6 +781,34 @@
@@ -517,6 +770,34 @@
public void processPlayerBlockPlacement(C08PacketPlayerBlockPlacement p_147346_1_)
{
WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension);
@ -497,7 +470,7 @@
ItemStack itemstack = this.playerEntity.inventory.getCurrentItem();
boolean flag = false;
boolean placeResult = true;
@@ -533,11 +825,21 @@
@@ -533,11 +814,21 @@
return;
}
@ -521,7 +494,7 @@
}
else if (p_147346_1_.func_149571_d() >= this.serverController.getBuildLimit() - 1 && (p_147346_1_.func_149568_f() == 1 || p_147346_1_.func_149571_d() >= this.serverController.getBuildLimit()))
{
@@ -548,17 +850,24 @@
@@ -548,17 +839,24 @@
}
else
{
@ -554,7 +527,7 @@
flag = true;
}
@@ -615,7 +924,7 @@
@@ -615,7 +913,7 @@
this.playerEntity.openContainer.detectAndSendChanges();
this.playerEntity.isChangingQuantityOnly = false;
@ -563,7 +536,7 @@
{
this.sendPacket(new S2FPacketSetSlot(this.playerEntity.openContainer.windowId, slot.slotNumber, this.playerEntity.inventory.getCurrentItem()));
}
@@ -624,14 +933,34 @@
@@ -624,14 +922,34 @@
public void onDisconnect(IChatComponent p_147231_1_)
{
@ -603,12 +576,12 @@
if (this.serverController.isSinglePlayer() && this.playerEntity.getCommandSenderName().equals(this.serverController.getServerOwner()))
{
logger.info("Stopping singleplayer server as player logged out");
@@ -657,6 +986,18 @@
@@ -657,6 +975,18 @@
}
}
+ // CraftBukkit start
+ if (p_147359_1_ == null || this.processedDisconnect) // KCauldron
+ if (p_147359_1_ == null)
+ {
+ return;
+ }
@ -622,7 +595,7 @@
try
{
this.netManager.scheduleOutboundPacket(p_147359_1_, new GenericFutureListener[0]);
@@ -679,20 +1020,37 @@
@@ -679,20 +1009,37 @@
public void processHeldItemChange(C09PacketHeldItemChange p_147355_1_)
{
@ -661,7 +634,7 @@
{
ChatComponentTranslation chatcomponenttranslation = new ChatComponentTranslation("chat.cannotSend", new Object[0]);
chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.RED);
@@ -708,51 +1066,385 @@
@@ -708,51 +1055,385 @@
{
if (!ChatAllowedCharacters.isAllowedCharacter(s.charAt(i)))
{
@ -1059,7 +1032,7 @@
if (p_147357_1_.func_149513_d() == 1)
{
this.playerEntity.setSneaking(true);
@@ -772,7 +1464,7 @@
@@ -772,7 +1453,7 @@
else if (p_147357_1_.func_149513_d() == 3)
{
this.playerEntity.wakeUpPlayer(false, true, true);
@ -1068,7 +1041,7 @@
}
else if (p_147357_1_.func_149513_d() == 6)
{
@@ -789,8 +1481,20 @@
@@ -789,8 +1470,20 @@
public void processUseEntity(C02PacketUseEntity p_147340_1_)
{
@ -1090,7 +1063,7 @@
this.playerEntity.func_143004_u();
if (entity != null)
@@ -805,9 +1509,53 @@
@@ -805,9 +1498,53 @@
if (this.playerEntity.getDistanceSqToEntity(entity) < d0)
{
@ -1144,7 +1117,7 @@
}
else if (p_147340_1_.func_149565_c() == C02PacketUseEntity.Action.ATTACK)
{
@@ -819,6 +1567,13 @@
@@ -819,6 +1556,13 @@
}
this.playerEntity.attackTargetEntityWithCurrentItem(entity);
@ -1158,7 +1131,7 @@
}
}
}
@@ -834,8 +1589,19 @@
@@ -834,8 +1578,19 @@
case 1:
if (this.playerEntity.playerConqueredTheEnd)
{
@ -1179,7 +1152,7 @@
else if (this.playerEntity.getServerForPlayer().getWorldInfo().isHardcoreModeEnabled())
{
if (this.serverController.isSinglePlayer() && this.playerEntity.getCommandSenderName().equals(this.serverController.getServerOwner()))
@@ -871,17 +1637,461 @@
@@ -871,17 +1626,461 @@
public void processCloseWindow(C0DPacketCloseWindow p_147356_1_)
{
@ -1642,7 +1615,7 @@
if (ItemStack.areItemStacksEqual(p_147351_1_.func_149546_g(), itemstack))
{
this.playerEntity.playerNetServerHandler.sendPacket(new S32PacketConfirmTransaction(p_147351_1_.func_149548_c(), p_147351_1_.func_149547_f(), true));
@@ -903,6 +2113,12 @@
@@ -903,6 +2102,12 @@
}
this.playerEntity.sendContainerAndContentsToPlayer(this.playerEntity.openContainer, arraylist);
@ -1655,7 +1628,7 @@
}
}
}
@@ -925,9 +2141,61 @@
@@ -925,9 +2130,61 @@
boolean flag = p_147344_1_.func_149627_c() < 0;
ItemStack itemstack = p_147344_1_.func_149625_d();
boolean flag1 = p_147344_1_.func_149627_c() >= 1 && p_147344_1_.func_149627_c() < 36 + InventoryPlayer.getHotbarSize();
@ -1718,7 +1691,7 @@
if (flag1 && flag2 && flag3)
{
if (itemstack == null)
@@ -956,6 +2224,11 @@
@@ -956,6 +2213,11 @@
public void processConfirmTransaction(C0FPacketConfirmTransaction p_147339_1_)
{
@ -1730,7 +1703,7 @@
Short oshort = (Short)this.field_147372_n.lookup(this.playerEntity.openContainer.windowId);
if (oshort != null && p_147339_1_.func_149533_d() == oshort.shortValue() && this.playerEntity.openContainer.windowId == p_147339_1_.func_149532_c() && !this.playerEntity.openContainer.isPlayerNotUsingContainer(this.playerEntity))
@@ -966,6 +2239,11 @@
@@ -966,6 +2228,11 @@
public void processUpdateSign(C12PacketUpdateSign p_147343_1_)
{
@ -1742,7 +1715,7 @@
this.playerEntity.func_143004_u();
WorldServer worldserver = this.serverController.worldServerForDimension(this.playerEntity.dimension);
@@ -980,6 +2258,7 @@
@@ -980,6 +2247,7 @@
if (!tileentitysign.func_145914_a() || tileentitysign.func_145911_b() != this.playerEntity)
{
this.serverController.logWarning("Player " + this.playerEntity.getCommandSenderName() + " just tried to change non-editable sign");
@ -1750,7 +1723,7 @@
return;
}
}
@@ -990,6 +2269,7 @@
@@ -990,6 +2258,7 @@
for (j = 0; j < 4; ++j)
{
boolean flag = true;
@ -1758,7 +1731,7 @@
if (p_147343_1_.func_149589_f()[j].length() > 15)
{
@@ -1018,7 +2298,29 @@
@@ -1018,7 +2287,29 @@
int k = p_147343_1_.func_149586_d();
i = p_147343_1_.func_149585_e();
TileEntitySign tileentitysign1 = (TileEntitySign)tileentity;
@ -1789,7 +1762,7 @@
tileentitysign1.markDirty();
worldserver.markBlockForUpdate(j, k, i);
}
@@ -1041,7 +2343,22 @@
@@ -1041,7 +2332,22 @@
public void processPlayerAbilities(C13PacketPlayerAbilities p_147348_1_)
{
@ -1813,7 +1786,7 @@
}
public void processTabComplete(C14PacketTabComplete p_147341_1_)
@@ -1068,7 +2385,6 @@
@@ -1068,7 +2374,6 @@
PacketBuffer packetbuffer;
ItemStack itemstack;
ItemStack itemstack1;
@ -1821,7 +1794,7 @@
if ("MC|BEdit".equals(p_147349_1_.func_149559_c()))
{
packetbuffer = new PacketBuffer(Unpooled.wrappedBuffer(p_147349_1_.func_149558_e()));
@@ -1093,16 +2409,18 @@
@@ -1093,16 +2398,18 @@
{
if (itemstack.getItem() == Items.writable_book && itemstack.getItem() == itemstack1.getItem())
{
@ -1844,7 +1817,7 @@
}
finally
{
@@ -1135,19 +2453,18 @@
@@ -1135,19 +2442,18 @@
if (itemstack.getItem() == Items.written_book && itemstack1.getItem() == Items.writable_book)
{
@ -1870,7 +1843,7 @@
}
finally
{
@@ -1174,9 +2491,12 @@
@@ -1174,9 +2480,12 @@
((ContainerMerchant)container).setCurrentRecipeIndex(i);
}
}
@ -1884,7 +1857,7 @@
}
}
else if ("MC|AdvCdm".equals(p_147349_1_.func_149559_c()))
@@ -1222,9 +2542,12 @@
@@ -1222,9 +2531,12 @@
this.playerEntity.addChatMessage(new ChatComponentTranslation("advMode.setCommand.success", new Object[] {s1}));
}
}
@ -1899,7 +1872,7 @@
}
finally
{
@@ -1257,9 +2580,12 @@
@@ -1257,9 +2569,12 @@
tileentitybeacon.markDirty();
}
}
@ -1914,7 +1887,7 @@
}
}
}
@@ -1281,6 +2607,13 @@
@@ -1281,6 +2596,13 @@
containerrepair.updateItemName("");
}
}
@ -1928,7 +1901,7 @@
}
}
@@ -1292,6 +2625,21 @@
@@ -1292,6 +2614,21 @@
}
}

View File

@ -77,7 +77,7 @@
packet.processPacket(this.netHandler);
}
@@ -225,8 +257,11 @@
@@ -225,6 +257,8 @@
public void closeChannel(IChatComponent p_150718_1_)
{
@ -85,11 +85,8 @@
+
if (this.channel.isOpen())
{
+ this.outboundPacketsQueue.clear(); // KCauldron
this.channel.close();
this.terminationReason = p_150718_1_;
}
@@ -254,7 +289,7 @@
@@ -254,7 +288,7 @@
{
;
}
@ -98,7 +95,7 @@
try
{
p_initChannel_1_.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(false));
@@ -322,6 +357,13 @@
@@ -322,6 +356,13 @@
return channel;
}

View File

@ -35,7 +35,7 @@
import org.apache.commons.lang3.Validate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -80,28 +86,64 @@
@@ -80,18 +86,54 @@
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.world.WorldEvent;
@ -93,19 +93,7 @@
private final ServerStatusResponse field_147147_p = new ServerStatusResponse();
private final Random field_147146_q = new Random();
@SideOnly(Side.SERVER)
private String hostname;
private int serverPort = -1;
public WorldServer[] worldServers = new WorldServer[0];
- private ServerConfigurationManager serverConfigManager;
+ public ServerConfigurationManager serverConfigManager;
private boolean serverRunning = true;
private boolean serverStopped;
- private int tickCounter;
+ public int tickCounter;
protected final Proxy serverProxy;
public String currentTask;
public int percentDone;
@@ -135,8 +177,41 @@
@@ -135,8 +177,40 @@
private long field_147142_T = 0L;
private final GameProfileRepository field_152365_W;
private final PlayerProfileCache field_152366_X;
@ -127,7 +115,6 @@
+ public final double[] recentTps = new double[ 3 ];
+ // Spigot end
+ // Cauldron start
+ public kcauldron.KCauldronWorldSaveThread saveThread;
+ public static CauldronConfig cauldronConfig;
+ public static KCauldronConfig kcauldronConfig;
+ public static TileEntityConfig tileEntityConfig;
@ -147,7 +134,7 @@
public MinecraftServer(File p_i45281_1_, Proxy p_i45281_2_)
{
this.field_152366_X = new PlayerProfileCache(this, field_152367_a);
@@ -149,10 +224,70 @@
@@ -149,10 +223,70 @@
this.field_152364_T = new YggdrasilAuthenticationService(p_i45281_2_, UUID.randomUUID().toString());
this.field_147143_S = this.field_152364_T.createMinecraftSessionService();
this.field_152365_W = this.field_152364_T.createProfileRepository();
@ -219,7 +206,7 @@
protected void convertMapIfNeeded(String p_71237_1_)
{
if (this.getActiveAnvilConverter().isOldMapFormat(p_71237_1_))
@@ -172,6 +307,7 @@
@@ -172,6 +306,7 @@
MinecraftServer.logger.info("Converting... " + p_73718_1_ + "%");
}
}
@ -227,7 +214,7 @@
@SideOnly(Side.CLIENT)
public void resetProgressAndMessage(String p_73721_1_) {}
@SideOnly(Side.CLIENT)
@@ -195,10 +331,17 @@
@@ -195,10 +330,17 @@
protected void loadAllWorlds(String p_71247_1_, String p_71247_2_, long p_71247_3_, WorldType p_71247_5_, String p_71247_6_)
{
@ -247,7 +234,7 @@
WorldSettings worldsettings;
if (worldinfo == null)
@@ -215,11 +358,79 @@
@@ -215,11 +357,79 @@
{
worldsettings.enableBonusChest();
}
@ -330,7 +317,7 @@
world.addWorldAccess(new WorldManager(this, world));
if (!this.isSinglePlayer())
@@ -227,12 +438,14 @@
@@ -227,12 +437,14 @@
world.getWorldInfo().setGameType(this.getGameType());
}
@ -348,7 +335,7 @@
}
protected void initialWorldChunkLoad()
@@ -244,9 +457,12 @@
@@ -244,9 +456,12 @@
int i = 0;
this.setUserMessage("menu.generatingTerrain");
byte b0 = 0;
@ -361,7 +348,7 @@
long j = getSystemTimeMillis();
for (int k = -192; k <= 192 && this.isServerRunning(); k += 16)
@@ -265,7 +481,8 @@
@@ -265,7 +480,8 @@
worldserver.theChunkProviderServer.loadChunk(chunkcoordinates.posX + k >> 4, chunkcoordinates.posZ + l >> 4);
}
}
@ -371,7 +358,7 @@
this.clearCurrentTask();
}
@@ -292,19 +509,17 @@
@@ -292,19 +508,17 @@
{
this.currentTask = null;
this.percentDone = 0;
@ -379,7 +366,7 @@
}
- protected void saveAllWorlds(boolean p_71267_1_)
+ public void saveAllWorlds(boolean p_71267_1_) throws MinecraftException // CraftBukkit - added throws
+ protected void saveAllWorlds(boolean p_71267_1_) throws MinecraftException // CraftBukkit - added throws
{
if (!this.worldIsBeingDeleted)
{
@ -396,7 +383,7 @@
if (worldserver != null)
{
@@ -313,25 +528,42 @@
@@ -313,25 +527,41 @@
logger.info("Saving chunks for level \'" + worldserver.getWorldInfo().getWorldName() + "\'/" + worldserver.provider.getDimensionName());
}
@ -428,7 +415,6 @@
- public void stopServer()
+ public void stopServer() throws MinecraftException // CraftBukkit - added throws
{
+ if (saveThread != null) saveThread.stopServer();
if (!this.worldIsBeingDeleted && Loader.instance().hasReachedState(LoaderState.SERVER_STARTED) && !serverStopped) // make sure the save is valid and we don't save twice
{
logger.info("Stopping server");
@ -444,7 +430,7 @@
if (this.func_147137_ag() != null)
{
this.func_147137_ag().terminateEndpoints();
@@ -347,7 +579,14 @@
@@ -347,7 +577,14 @@
if (this.worldServers != null)
{
logger.info("Saving worlds");
@ -460,7 +446,7 @@
for (int i = 0; i < this.worldServers.length; ++i)
{
@@ -380,6 +619,13 @@
@@ -380,6 +617,13 @@
this.serverRunning = false;
}
@ -474,7 +460,7 @@
public void run()
{
try
@@ -392,45 +638,41 @@
@@ -392,45 +636,41 @@
this.field_147147_p.func_151315_a(new ChatComponentText(this.motd));
this.field_147147_p.func_151321_a(new ServerStatusResponse.MinecraftProtocolVersionIdentifier("1.7.10", 5));
this.func_147138_a(this.field_147147_p);
@ -541,7 +527,7 @@
FMLCommonHandler.instance().handleServerStopping();
FMLCommonHandler.instance().expectServerStopped(); // has to come before finalTick to avoid race conditions
}
@@ -448,6 +690,14 @@
@@ -448,6 +688,14 @@
catch (Throwable throwable1)
{
logger.error("Encountered an unexpected exception", throwable1);
@ -556,7 +542,7 @@
CrashReport crashreport = null;
if (throwable1 instanceof ReportedException)
@@ -477,6 +727,7 @@
@@ -477,6 +725,7 @@
{
try
{
@ -564,7 +550,7 @@
this.stopServer();
this.serverStopped = true;
}
@@ -486,6 +737,16 @@
@@ -486,6 +735,16 @@
}
finally
{
@ -581,7 +567,7 @@
FMLCommonHandler.instance().handleServerStopped();
this.serverStopped = true;
this.systemExitNow();
@@ -532,8 +793,11 @@
@@ -532,8 +791,11 @@
public void tick()
{
@ -593,20 +579,31 @@
++this.tickCounter;
if (this.startProfiling)
@@ -562,38 +826,62 @@
@@ -562,12 +824,21 @@
this.field_147147_p.func_151318_b().func_151330_a(agameprofile);
}
- if (this.tickCounter % 900 == 0)
- {
- this.theProfiler.startSection("save");
- this.serverConfigManager.saveAllPlayerData();
+ if ((this.autosavePeriod > 0) && ((this.tickCounter % this.autosavePeriod) == 0)) // CraftBukkit
{
+ SpigotTimings.worldSaveTimer.startTiming(); // Spigot
this.theProfiler.startSection("save");
this.serverConfigManager.saveAllPlayerData();
- this.saveAllWorlds(true);
- this.theProfiler.endSection();
- }
-
+ try
+ {
+ this.saveAllWorlds(true);
+ }
+ catch (MinecraftException e)
+ {
+ e.printStackTrace();
+ }
this.theProfiler.endSection();
+ SpigotTimings.worldSaveTimer.stopTiming(); // Spigot
}
this.theProfiler.startSection("tallying");
this.tickTimeArray[this.tickCounter % 100] = System.nanoTime() - i;
@@ -575,25 +846,57 @@
this.theProfiler.endSection();
this.theProfiler.startSection("snooper");
@ -666,7 +663,7 @@
int i;
Integer[] ids = DimensionManager.getIDs(this.tickCounter % 200 == 0);
@@ -602,19 +890,21 @@
@@ -602,19 +905,21 @@
int id = ids[x];
long j = System.nanoTime();
@ -691,7 +688,7 @@
this.theProfiler.startSection("tick");
FMLCommonHandler.instance().onPreWorldTick(worldserver);
@@ -622,22 +912,46 @@
@@ -622,22 +927,46 @@
try
{
@ -740,7 +737,7 @@
worldserver.addWorldInfoToCrashReport(crashreport);
throw new ReportedException(crashreport);
}
@@ -645,10 +959,12 @@
@@ -645,10 +974,12 @@
FMLCommonHandler.instance().onPostWorldTick(worldserver);
this.theProfiler.endSection();
this.theProfiler.startSection("tracker");
@ -754,7 +751,7 @@
worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - j;
}
@@ -656,15 +972,21 @@
@@ -656,15 +987,21 @@
this.theProfiler.endStartSection("dim_unloading");
DimensionManager.unloadWorlds(worldTickTimes);
this.theProfiler.endStartSection("connection");
@ -776,7 +773,7 @@
this.theProfiler.endSection();
}
@@ -699,6 +1021,13 @@
@@ -699,6 +1036,13 @@
public WorldServer worldServerForDimension(int p_71218_1_)
{
@ -790,7 +787,7 @@
WorldServer ret = DimensionManager.getWorld(p_71218_1_);
if (ret == null)
{
@@ -784,13 +1113,14 @@
@@ -784,13 +1128,14 @@
public List getPossibleCompletions(ICommandSender p_71248_1_, String p_71248_2_)
{
@ -809,7 +806,7 @@
if (list != null)
{
@@ -798,40 +1128,25 @@
@@ -798,40 +1143,25 @@
while (iterator.hasNext())
{
@ -858,7 +855,7 @@
}
public static MinecraftServer getServer()
@@ -1034,7 +1349,7 @@
@@ -1034,7 +1364,7 @@
public boolean isServerInOnlineMode()
{
@ -867,7 +864,7 @@
}
public void setOnlineMode(boolean p_71229_1_)
@@ -1124,7 +1439,7 @@
@@ -1124,7 +1454,7 @@
public NetworkSystem func_147137_ag()
{
@ -876,7 +873,7 @@
}
@SideOnly(Side.CLIENT)
@@ -1259,8 +1574,11 @@
@@ -1259,8 +1589,11 @@
{
Bootstrap.func_151354_b();
@ -888,7 +885,7 @@
boolean flag = true;
String s = null;
String s1 = ".";
@@ -1356,16 +1674,34 @@
@@ -1356,16 +1689,34 @@
{
dedicatedserver.setGuiEnabled();
}
@ -929,7 +926,7 @@
}
catch (Exception exception)
{
@@ -1400,15 +1736,70 @@
@@ -1400,15 +1751,70 @@
@SideOnly(Side.SERVER)
public String getPlugins()
{
@ -1005,7 +1002,7 @@
}
@SideOnly(Side.SERVER)
@@ -1455,9 +1846,226 @@
@@ -1455,9 +1861,213 @@
return this.serverStopped;
}
@ -1218,17 +1215,4 @@
+ return logger;
+ }
+ // CraftBukkit end
+
+ public void invalidateWorldSaver() {
+ if (saveThread != null) {
+ saveThread.interrupt();
+ saveThread = null;
+ }
+ if (autosavePeriod > 0) {
+ saveThread = new kcauldron.KCauldronWorldSaveThread(this);
+ saveThread.start();
+ } else {
+ kcauldron.KLog.get().info("No valid autosave period is setted, assumed plugin-induved world saving!");
+ }
+ }
}

View File

@ -73,7 +73,7 @@
if (this.players.isEmpty())
{
+ if (this.theWorldServer.loadedEntityList_KC.size() == 0 || this.theWorldServer.theChunkProviderServer.loadedChunkHashMap_KC.size() == 0)
+ if (this.theWorldServer.loadedEntityList.size() == 0 || this.theWorldServer.theChunkProviderServer.loadedChunkHashMap_KC.size() == 0)
+ {
+ return; // CraftBukkit - Only do unload when we go from non-empty to empty
+ }

View File

@ -58,13 +58,12 @@
protected int maxPlayers;
private int viewDistance;
private WorldSettings.GameType gameType;
@@ -91,8 +115,18 @@
@@ -91,8 +115,17 @@
private int playerPingIndex;
private static final String __OBFID = "CL_00001423";
+ // CraftBukkit start
+ private CraftServer cserver;
+ private final Map<String,EntityPlayerMP> playersByName = new org.spigotmc.CaseInsensitiveMap<EntityPlayerMP>(); // KCauldron
+
public ServerConfigurationManager(MinecraftServer p_i1500_1_)
{
@ -77,7 +76,7 @@
this.bannedPlayers = new UserListBans(field_152613_a);
this.bannedIPs = new BanList(field_152614_b);
this.ops = new UserListOps(field_152615_c);
@@ -131,12 +165,32 @@
@@ -131,12 +164,32 @@
s1 = p_72355_1_.getSocketAddress().toString();
}
@ -112,7 +111,7 @@
nethandlerplayserver.sendPacket(new S3FPacketCustomPayload("MC|Brand", this.getServerInstance().getServerModName().getBytes(Charsets.UTF_8)));
nethandlerplayserver.sendPacket(new S05PacketSpawnPosition(chunkcoordinates.posX, chunkcoordinates.posY, chunkcoordinates.posZ));
nethandlerplayserver.sendPacket(new S39PacketPlayerAbilities(p_72355_2_.capabilities));
@@ -145,6 +199,7 @@
@@ -145,6 +198,7 @@
p_72355_2_.func_147099_x().func_150884_b(p_72355_2_);
this.func_96456_a((ServerScoreboard)worldserver.getScoreboard(), p_72355_2_);
this.mcServer.func_147132_au();
@ -120,7 +119,7 @@
ChatComponentTranslation chatcomponenttranslation;
if (!p_72355_2_.getCommandSenderName().equalsIgnoreCase(s))
@@ -158,6 +213,7 @@
@@ -158,6 +212,7 @@
chatcomponenttranslation.getChatStyle().setColor(EnumChatFormatting.YELLOW);
this.sendChatMsg(chatcomponenttranslation);
@ -128,7 +127,7 @@
this.playerLoggedIn(p_72355_2_);
nethandlerplayserver.setPlayerLocation(p_72355_2_.posX, p_72355_2_.posY, p_72355_2_.posZ, p_72355_2_.rotationYaw, p_72355_2_.rotationPitch);
this.updateTimeAndWeatherForPlayer(p_72355_2_, worldserver);
@@ -192,7 +248,7 @@
@@ -192,7 +247,7 @@
}
}
@ -137,7 +136,7 @@
{
HashSet hashset = new HashSet();
Iterator iterator = p_96456_1_.getTeams().iterator();
@@ -225,6 +281,7 @@
@@ -225,6 +280,7 @@
public void setPlayerManager(WorldServer[] p_72364_1_)
{
@ -145,7 +144,7 @@
this.playerNBTManagerObj = p_72364_1_[0].getSaveHandler().getSaveHandler();
}
@@ -248,7 +305,7 @@
@@ -248,7 +304,7 @@
public NBTTagCompound readPlayerDataFromFile(EntityPlayerMP p_72380_1_)
{
@ -154,7 +153,7 @@
NBTTagCompound nbttagcompound1;
if (p_72380_1_.getCommandSenderName().equals(this.mcServer.getServerOwner()) && nbttagcompound != null)
@@ -294,18 +351,62 @@
@@ -294,18 +350,61 @@
public void playerLoggedIn(EntityPlayerMP p_72377_1_)
{
@ -162,7 +161,6 @@
+ cserver.detectListNameConflict(p_72377_1_); // CraftBukkit
+ // this.sendPacketToAllPlayers(new S38PacketPlayerListItem(p_72377_1_.getCommandSenderName(), true, 1000)); // CraftBukkit - replaced with loop below
this.playerEntityList.add(p_72377_1_);
+ this.playersByName.put(p_72377_1_.getCommandSenderName(), p_72377_1_);
WorldServer worldserver = this.mcServer.worldServerForDimension(p_72377_1_.dimension);
+ // CraftBukkit start
+ PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(this.cserver.getPlayer(p_72377_1_), "\u00A7e" + p_72377_1_.getCommandSenderName()
@ -221,7 +219,7 @@
}
public void updatePlayerPertinentChunks(EntityPlayerMP p_72358_1_)
@@ -313,14 +414,33 @@
@@ -313,14 +412,33 @@
p_72358_1_.getServerForPlayer().getPlayerManager().updatePlayerPertinentChunks(p_72358_1_);
}
@ -257,14 +255,13 @@
{
worldserver.removePlayerEntityDangerously(p_72367_1_.ridingEntity);
logger.debug("removing player mount");
@@ -329,9 +449,36 @@
@@ -329,9 +447,35 @@
worldserver.removeEntity(p_72367_1_);
worldserver.getPlayerManager().removePlayer(p_72367_1_);
this.playerEntityList.remove(p_72367_1_);
- this.field_148547_k.remove(p_72367_1_.getUniqueID());
- net.minecraftforge.common.chunkio.ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount());
- this.sendPacketToAllPlayers(new S38PacketPlayerListItem(p_72367_1_.getCommandSenderName(), false, 9999));
+ this.playersByName.remove(p_72367_1_.getCommandSenderName());
+ this.field_148547_k.remove(p_72367_1_.getCommandSenderName());
+ ChunkIOExecutor.adjustPoolSize(this.getCurrentPlayerCount()); // CraftBukkit
+ // CraftBukkit start - .name -> .listName, replace sendAll with loop
@ -297,7 +294,7 @@
}
public String allowUserToConnect(SocketAddress p_148542_1_, GameProfile p_148542_2_)
@@ -372,6 +519,71 @@
@@ -372,6 +516,71 @@
}
}
@ -369,7 +366,7 @@
public EntityPlayerMP createPlayerForUser(GameProfile p_148545_1_)
{
UUID uuid = EntityPlayer.func_146094_a(p_148545_1_);
@@ -410,80 +622,201 @@
@@ -410,80 +619,199 @@
return new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(0), p_148545_1_, (ItemInWorldManager)object);
}
@ -485,7 +482,6 @@
+ // par1EntityPlayerMP.getServerForPlayer().getEntityTracker().removeEntityFromAllTrackingPlayers(par1EntityPlayerMP); // CraftBukkit
+ par1EntityPlayerMP.getServerForPlayer().getPlayerManager().removePlayer(par1EntityPlayerMP);
+ this.playerEntityList.remove(par1EntityPlayerMP);
+ this.playersByName.remove(par1EntityPlayerMP.getCommandSenderName());
+ this.mcServer.worldServerForDimension(par1EntityPlayerMP.dimension).removePlayerEntityDangerously(par1EntityPlayerMP);
+
+ // Phase 4 - handle bed spawn
@ -598,7 +594,6 @@
+ targetWorld.getPlayerManager().addPlayer(entityplayermp1);
+ targetWorld.spawnEntityInWorld(entityplayermp1);
this.playerEntityList.add(entityplayermp1);
+ this.playersByName.put(entityplayermp1.getCommandSenderName(), entityplayermp1);
entityplayermp1.addSelfToInternalCraftingInventory();
entityplayermp1.setHealth(entityplayermp1.getHealth());
- FMLCommonHandler.instance().firePlayerRespawnEvent(entityplayermp1);
@ -611,7 +606,7 @@
return entityplayermp1;
}
@@ -492,34 +825,112 @@
@@ -492,34 +820,112 @@
transferPlayerToDimension(p_72356_1_, p_72356_2_, mcServer.worldServerForDimension(p_72356_2_).getDefaultTeleporter());
}
@ -743,7 +738,7 @@
}
public void transferEntityToWorld(Entity p_82448_1_, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_, Teleporter teleporter)
@@ -605,6 +1016,109 @@
@@ -605,6 +1011,109 @@
p_82448_1_.setWorld(p_82448_4_);
}
@ -853,7 +848,7 @@
public void sendPlayerInfoToAllPlayers()
{
if (++this.playerPingIndex > 600)
@@ -612,11 +1126,13 @@
@@ -612,11 +1121,13 @@
this.playerPingIndex = 0;
}
@ -867,26 +862,7 @@
}
public void sendPacketToAllPlayers(Packet p_148540_1_)
@@ -719,7 +1235,7 @@
public EntityPlayerMP func_152612_a(String p_152612_1_)
{
- Iterator iterator = this.playerEntityList.iterator();
+ /*Iterator iterator = this.playerEntityList.iterator(); // KCauldron
EntityPlayerMP entityplayermp;
do
@@ -733,7 +1249,8 @@
}
while (!entityplayermp.getCommandSenderName().equalsIgnoreCase(p_152612_1_));
- return entityplayermp;
+ return entityplayermp;*/ // KCauldron
+ return playersByName.get(p_152612_1_);
}
public List findPlayers(ChunkCoordinates p_82449_1_, int p_82449_2_, int p_82449_3_, int p_82449_4_, int p_82449_5_, int p_82449_6_, int p_82449_7_, Map p_82449_8_, String p_82449_9_, String p_82449_10_, World p_82449_11_)
@@ -877,13 +1394,24 @@
@@ -877,13 +1388,24 @@
for (int j = 0; j < this.playerEntityList.size(); ++j)
{
EntityPlayerMP entityplayermp = (EntityPlayerMP)this.playerEntityList.get(j);
@ -913,7 +889,7 @@
if (d4 * d4 + d5 * d5 + d6 * d6 < p_148543_8_ * p_148543_8_)
{
entityplayermp.playerNetServerHandler.sendPacket(p_148543_11_);
@@ -941,13 +1469,16 @@
@@ -941,13 +1463,16 @@
p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(1, 0.0F));
p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(7, p_72354_2_.getRainStrength(1.0F)));
p_72354_1_.playerNetServerHandler.sendPacket(new S2BPacketChangeGameState(8, p_72354_2_.getWeightedThunderStrength(1.0F)));
@ -931,7 +907,7 @@
p_72385_1_.playerNetServerHandler.sendPacket(new S09PacketHeldItemChange(p_72385_1_.inventory.currentItem));
}
@@ -961,9 +1492,17 @@
@@ -961,9 +1486,17 @@
return this.maxPlayers;
}
@ -950,7 +926,7 @@
}
public void setWhiteListEnabled(boolean p_72371_1_)
@@ -1032,12 +1571,30 @@
@@ -1032,12 +1565,30 @@
public void removeAllPlayers()
{

View File

@ -1,6 +1,6 @@
--- ../src-base/minecraft/net/minecraft/tileentity/TileEntity.java
+++ ../src-work/minecraft/net/minecraft/tileentity/TileEntity.java
@@ -22,18 +22,23 @@
@@ -22,18 +22,22 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -22,11 +22,10 @@
public int blockMetadata = -1;
public Block blockType;
+ public CustomTimingsHandler tickTimer = org.bukkit.craftbukkit.SpigotTimings.getTileEntityTimings(this); // Spigot
+ public boolean markedForRemoval = false;
private static final String __OBFID = "CL_00000340";
public static void addMapping(Class p_145826_0_, String p_145826_1_)
@@ -106,7 +111,11 @@
@@ -106,7 +110,11 @@
}
catch (Exception exception)
{
@ -39,7 +38,7 @@
}
if (tileentity != null)
@@ -282,6 +291,20 @@
@@ -282,6 +290,20 @@
addMapping(TileEntityFlowerPot.class, "FlowerPot");
}

View File

@ -1,6 +1,6 @@
--- ../src-base/minecraft/net/minecraft/world/World.java
+++ ../src-work/minecraft/net/minecraft/world/World.java
@@ -2,16 +2,21 @@
@@ -2,6 +2,7 @@
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -8,21 +8,15 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedList;
import java.util.List;
+import java.util.Queue;
import java.util.Random;
@@ -12,6 +13,7 @@
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
import net.minecraft.block.Block;
import net.minecraft.block.BlockHopper;
import net.minecraft.block.BlockLiquid;
@@ -23,9 +28,11 @@
@@ -23,9 +25,11 @@
import net.minecraft.crash.CrashReport;
import net.minecraft.crash.CrashReportCategory;
import net.minecraft.entity.Entity;
@ -34,7 +28,7 @@
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.pathfinding.PathEntity;
@@ -51,7 +58,6 @@
@@ -51,7 +55,6 @@
import net.minecraft.world.storage.ISaveHandler;
import net.minecraft.world.storage.MapStorage;
import net.minecraft.world.storage.WorldInfo;
@ -42,7 +36,7 @@
import cpw.mods.fml.common.FMLLog;
import com.google.common.collect.ImmutableSetMultimap;
@@ -70,6 +76,55 @@
@@ -70,6 +73,55 @@
import net.minecraftforge.event.entity.PlaySoundAtEntityEvent;
import net.minecraft.entity.EnumCreatureType;
@ -98,22 +92,16 @@
public abstract class World implements IBlockAccess
{
/**
@@ -82,16 +137,17 @@
public final MapStorage perWorldStorage;
@@ -83,15 +135,14 @@
public boolean scheduledUpdatesAreImmediate;
- public List loadedEntityList = new ArrayList();
public List loadedEntityList = new ArrayList();
- protected List unloadedEntityList = new ArrayList();
- public List loadedTileEntityList = new ArrayList();
- private List addedTileEntityList = new ArrayList();
+ public List unloadedEntityList = new ArrayList(); // Cauldron
public List loadedTileEntityList = new ArrayList();
private List addedTileEntityList = new ArrayList();
- private List field_147483_b = new ArrayList();
+ public Queue<Entity> loadedEntityList_KC = new kcauldron.wrapper.ProcessingQueue<Entity>(new ConcurrentLinkedQueue<Entity>()); // KCauldron
+ public List<Entity> loadedEntityList = new kcauldron.wrapper.QueueToList<Entity>(((kcauldron.wrapper.ProcessingQueue<Entity>)loadedEntityList_KC).unwrap()); // KCauldron
+ public List<Entity> unloadedEntityList = com.google.common.collect.ImmutableList.of(); // KCauldron
+ public Queue<TileEntity> loadedTileEntityList_KC = new kcauldron.wrapper.ProcessingQueue<TileEntity>(new ConcurrentLinkedQueue<TileEntity>()); // KCauldron
+ public List<TileEntity> loadedTileEntityList = new kcauldron.wrapper.QueueToList<TileEntity>(((kcauldron.wrapper.ProcessingQueue<TileEntity>)loadedTileEntityList_KC).unwrap()); // KCauldron
+ private List<TileEntity> addedTileEntityList = new ArrayList<TileEntity>(); // KCauldron
+ public List<TileEntity> field_147483_b = com.google.common.collect.ImmutableList.of(); // KCauldron
+ public List field_147483_b = new ArrayList(); // Cauldron
public List playerEntities = new ArrayList();
public List weatherEffects = new ArrayList();
private long cloudColour = 16777215L;
@ -122,7 +110,7 @@
protected final int DIST_HASH_MAGIC = 1013904223;
public float prevRainingStrength;
public float rainingStrength;
@@ -100,26 +156,87 @@
@@ -100,26 +151,88 @@
public int lastLightningBolt;
public EnumDifficulty difficultySetting;
public Random rand = new Random();
@ -152,6 +140,7 @@
+ public long ticksPerAnimalSpawns;
+ public long ticksPerMonsterSpawns;
+ public boolean populating;
+ private int tickPosition;
+ // CraftBukkit end
+ public Set activeChunkSet = new HashSet(); // Cauldron - protected -> public
private int ambientTickCountdown;
@ -193,7 +182,7 @@
+ // Spigot start
+
+ /** Positions to update */
+ public final gnu.trove.map.hash.TLongShortHashMap activeChunkSet_CB;
+ protected final gnu.trove.map.hash.TLongShortHashMap activeChunkSet_CB;
+ public float growthOdds = 100;
+ protected float modifiedOdds = 100;
+
@ -217,7 +206,7 @@
private static final String __OBFID = "CL_00000140";
public boolean restoringBlockSnapshots = false;
public boolean captureBlockSnapshots = false;
@@ -166,6 +283,26 @@
@@ -166,6 +279,27 @@
return this.provider.worldChunkMgr;
}
@ -230,6 +219,7 @@
+ public final SpigotTimings.WorldTimingsHandler timings; // Spigot
+ private org.spigotmc.TickLimiter entityLimiter; // Spigot
+ private org.spigotmc.TickLimiter tileLimiter; // Spigot
+ private int tileTickPosition; // Spigot
+
+ public CraftWorld getWorld()
+ {
@ -244,7 +234,7 @@
@SideOnly(Side.CLIENT)
public World(ISaveHandler p_i45368_1_, String p_i45368_2_, WorldProvider p_i45368_3_, WorldSettings p_i45368_4_, Profiler p_i45368_5_)
{
@@ -179,6 +316,12 @@
@@ -179,6 +313,12 @@
this.worldInfo = new WorldInfo(p_i45368_4_, p_i45368_2_);
this.provider = p_i45368_3_;
perWorldStorage = new MapStorage((ISaveHandler)null);
@ -257,7 +247,7 @@
}
// Broken up so that the WorldClient gets the chance to set the mapstorage object before the dimension initializes
@@ -207,8 +350,175 @@
@@ -207,8 +347,175 @@
this.calculateInitialWeather();
}
@ -433,7 +423,7 @@
this.ambientTickCountdown = this.rand.nextInt(12000);
this.spawnHostileMobs = true;
this.spawnPeacefulMobs = true;
@@ -216,7 +526,6 @@
@@ -216,7 +523,6 @@
this.lightUpdateBlockList = new int[32768];
this.saveHandler = p_i45369_1_;
this.theProfiler = p_i45369_5_;
@ -441,7 +431,7 @@
this.worldInfo = p_i45369_1_.loadWorldInfo();
if (p_i45369_4_ != null)
@@ -235,13 +544,26 @@
@@ -235,13 +541,26 @@
if (this.worldInfo == null)
{
this.worldInfo = new WorldInfo(p_i45369_3_, p_i45369_2_);
@ -468,17 +458,15 @@
this.chunkProvider = this.createChunkProvider();
if (this instanceof WorldServer)
@@ -293,7 +615,9 @@
@@ -294,6 +613,7 @@
this.calculateInitialSkylight();
this.calculateInitialWeather();
+ if (getServer() != null && world != null) getServer().addWorld(world); // CraftBukkit
}
+ // Cauldron end
private static MapStorage s_mapStorage;
private static ISaveHandler s_savehandler;
@@ -336,6 +660,18 @@
@@ -336,6 +656,18 @@
public Block getBlock(int p_147439_1_, int p_147439_2_, int p_147439_3_)
{
@ -497,7 +485,7 @@
if (p_147439_1_ >= -30000000 && p_147439_3_ >= -30000000 && p_147439_1_ < 30000000 && p_147439_3_ < 30000000 && p_147439_2_ >= 0 && p_147439_2_ < 256)
{
Chunk chunk = null;
@@ -404,7 +740,7 @@
@@ -404,7 +736,7 @@
}
}
@ -506,7 +494,7 @@
{
return this.chunkProvider.chunkExists(p_72916_1_, p_72916_2_);
}
@@ -421,6 +757,27 @@
@@ -421,6 +753,27 @@
public boolean setBlock(int p_147465_1_, int p_147465_2_, int p_147465_3_, Block p_147465_4_, int p_147465_5_, int p_147465_6_)
{
@ -534,7 +522,7 @@
if (p_147465_1_ >= -30000000 && p_147465_3_ >= -30000000 && p_147465_1_ < 30000000 && p_147465_3_ < 30000000)
{
if (p_147465_2_ < 0)
@@ -448,8 +805,22 @@
@@ -448,8 +801,22 @@
this.capturedBlockSnapshots.add(blockSnapshot);
}
@ -557,7 +545,7 @@
if (!flag && blockSnapshot != null)
{
this.capturedBlockSnapshots.remove(blockSnapshot);
@@ -460,6 +831,7 @@
@@ -460,6 +827,7 @@
this.func_147451_t(p_147465_1_, p_147465_2_, p_147465_3_);
this.theProfiler.endSection();
@ -565,7 +553,7 @@
if (flag && blockSnapshot == null) // Don't notify clients or update physics while capturing blockstates
{
// Modularize client and physic updates
@@ -496,6 +868,19 @@
@@ -496,6 +864,19 @@
public int getBlockMetadata(int p_72805_1_, int p_72805_2_, int p_72805_3_)
{
@ -585,7 +573,7 @@
if (p_72805_1_ >= -30000000 && p_72805_3_ >= -30000000 && p_72805_1_ < 30000000 && p_72805_3_ < 30000000)
{
if (p_72805_2_ < 0)
@@ -511,7 +896,7 @@
@@ -511,7 +892,7 @@
Chunk chunk = this.getChunkFromChunkCoords(p_72805_1_ >> 4, p_72805_3_ >> 4);
p_72805_1_ &= 15;
p_72805_3_ &= 15;
@ -594,7 +582,7 @@
}
}
else
@@ -610,6 +995,12 @@
@@ -610,6 +991,12 @@
public void notifyBlockChange(int p_147444_1_, int p_147444_2_, int p_147444_3_, Block p_147444_4_)
{
@ -607,7 +595,7 @@
this.notifyBlocksOfNeighborChange(p_147444_1_, p_147444_2_, p_147444_3_, p_147444_4_);
}
@@ -694,6 +1085,21 @@
@@ -694,6 +1081,21 @@
try
{
@ -629,7 +617,7 @@
block.onNeighborBlockChange(this, p_147460_1_, p_147460_2_, p_147460_3_, p_147460_4_);
}
catch (Throwable throwable1)
@@ -1307,6 +1713,13 @@
@@ -1307,6 +1709,13 @@
public boolean spawnEntityInWorld(Entity p_72838_1_)
{
@ -643,7 +631,7 @@
// do not drop any items while restoring blocksnapshots. Prevents dupes
if (!this.isRemote && (p_72838_1_ == null || (p_72838_1_ instanceof net.minecraft.entity.item.EntityItem && this.restoringBlockSnapshots))) return false;
@@ -1319,23 +1732,99 @@
@@ -1319,23 +1728,99 @@
flag = true;
}
@ -739,14 +727,13 @@
- if (MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(p_72838_1_, this)) && !flag) return false;
-
this.getChunkFromChunkCoords(i, j).addEntity(p_72838_1_);
- this.loadedEntityList.add(p_72838_1_);
+ this.loadedEntityList_KC.add(p_72838_1_);
this.loadedEntityList.add(p_72838_1_);
this.onEntityAdded(p_72838_1_);
+ net.minecraftforge.cauldron.CauldronHooks.logEntitySpawn(this, p_72838_1_, spawnReason);
return true;
}
}
@@ -1346,6 +1835,8 @@
@@ -1346,6 +1831,8 @@
{
((IWorldAccess)this.worldAccesses.get(i)).onEntityCreate(p_72923_1_);
}
@ -755,7 +742,7 @@
}
public void onEntityRemoved(Entity p_72847_1_)
@@ -1354,6 +1845,8 @@
@@ -1354,6 +1841,8 @@
{
((IWorldAccess)this.worldAccesses.get(i)).onEntityDestroy(p_72847_1_);
}
@ -764,16 +751,27 @@
}
public void removeEntity(Entity p_72900_1_)
@@ -1396,7 +1889,7 @@
this.getChunkFromChunkCoords(i, j).removeEntity(p_72973_1_);
@@ -1397,6 +1886,19 @@
}
- this.loadedEntityList.remove(p_72973_1_);
+ this.loadedEntityList_KC.remove(p_72973_1_);
this.loadedEntityList.remove(p_72973_1_);
+ // CraftBukkit start - Decrement loop variable field if we've already ticked this entity
+ int index = this.loadedEntityList.indexOf(p_72973_1_);
+
+ if (index != -1)
+ {
+ if (index <= this.tickPosition)
+ {
+ this.tickPosition--;
+ }
+
+ this.loadedEntityList.remove(index);
+ }
+ // CraftBukkit end
this.onEntityRemoved(p_72973_1_);
}
@@ -1408,40 +1901,58 @@
@@ -1408,40 +1910,58 @@
public List getCollidingBoundingBoxes(Entity p_72945_1_, AxisAlignedBB p_72945_2_)
{
this.collidingBoundingBoxes.clear();
@ -846,7 +844,7 @@
for (int j2 = 0; j2 < list.size(); ++j2)
{
@@ -1797,11 +2308,22 @@
@@ -1797,11 +2317,22 @@
Entity entity;
CrashReport crashreport;
CrashReportCategory crashreportcategory;
@ -869,60 +867,25 @@
try
{
++entity.ticksExisted;
@@ -1838,35 +2360,26 @@
}
}
@@ -1862,10 +2393,14 @@
- this.theProfiler.endStartSection("remove");
- this.loadedEntityList.removeAll(this.unloadedEntityList);
- int j;
- int l;
+ this.theProfiler.endStartSection("regular");
this.unloadedEntityList.clear();
this.theProfiler.endStartSection("regular");
+ org.spigotmc.ActivationRange.activateEntities(this); // Spigot
+ timings.entityTick.startTiming(); // Spigot
- for (i = 0; i < this.unloadedEntityList.size(); ++i)
- {
- entity = (Entity)this.unloadedEntityList.get(i);
- j = entity.chunkCoordX;
- l = entity.chunkCoordZ;
-
- if (entity.addedToChunk && this.chunkExists(j, l))
- {
- this.getChunkFromChunkCoords(j, l).removeEntity(entity);
+ Iterator<Entity> entityIterator = loadedEntityList_KC.iterator();
+ for (entityLimiter.initTick(); entityIterator.hasNext() && entityLimiter.shouldContinue();) {
+ entity = entityIterator.next();
+
+ if (entity.markedForRemoval || entity.isDead) {
+ theProfiler.startSection("remove");
+ int x = entity.chunkCoordX;
+ int y = entity.chunkCoordZ;
+ if (entity.addedToChunk && chunkExists(x, y))
+ getChunkFromChunkCoords(x, y).removeEntity(entity);
+ onEntityRemoved(entity);
+ entityIterator.remove();
+ theProfiler.endSection();
+ continue;
}
- }
- for (i = 0; i < this.unloadedEntityList.size(); ++i)
- {
- this.onEntityRemoved((Entity)this.unloadedEntityList.get(i));
- }
-
- this.unloadedEntityList.clear();
- this.theProfiler.endStartSection("regular");
-
- for (i = 0; i < this.loadedEntityList.size(); ++i)
- {
- entity = (Entity)this.loadedEntityList.get(i);
-
+ int entitiesThisCycle = 0;
+ if (tickPosition < 0) tickPosition = 0;
+ for (entityLimiter.initTick(); entitiesThisCycle < loadedEntityList.size() && (entitiesThisCycle % 10 == 0 || entityLimiter.shouldContinue()); tickPosition++, entitiesThisCycle++) {
+ tickPosition = (tickPosition < loadedEntityList.size()) ? tickPosition : 0;
+ entity = (Entity)this.loadedEntityList.get(this.tickPosition);
if (entity.ridingEntity != null)
{
if (!entity.ridingEntity.isDead && entity.ridingEntity.riddenByEntity == entity)
@@ -1884,7 +2397,9 @@
@@ -1884,7 +2419,9 @@
{
try
{
@ -932,27 +895,19 @@
}
catch (Throwable throwable1)
{
@@ -1905,41 +2420,56 @@
@@ -1916,30 +2453,69 @@
{
this.getChunkFromChunkCoords(j, l).removeEntity(entity);
}
-
- this.loadedEntityList.remove(i--);
+ if (this.tickPosition < this.loadedEntityList.size()) // KCauldron
+ this.loadedEntityList.remove(this.tickPosition--); // CraftBukkit - Use field for loop variable
+ else kcauldron.KLog.get().warning("Entity removal desync! " + entity); // KCauldron
this.onEntityRemoved(entity);
}
this.theProfiler.endSection();
- this.theProfiler.startSection("remove");
-
- if (entity.isDead)
- {
- j = entity.chunkCoordX;
- l = entity.chunkCoordZ;
-
- if (entity.addedToChunk && this.chunkExists(j, l))
- {
- this.getChunkFromChunkCoords(j, l).removeEntity(entity);
- }
-
- this.loadedEntityList.remove(i--);
- this.onEntityRemoved(entity);
- }
-
- this.theProfiler.endSection();
}
+ timings.entityTick.stopTiming(); // Spigot
@ -960,44 +915,50 @@
+ timings.tileEntityTick.startTiming(); // Spigot
this.field_147481_N = true;
- Iterator iterator = this.loadedTileEntityList.iterator();
-
- while (iterator.hasNext())
- {
+ // CraftBukkit start - From below, clean up tile entities before ticking them
+ if (!this.field_147483_b.isEmpty())
{
- TileEntity tileentity = (TileEntity)iterator.next();
+ Iterator<TileEntity> tileEntityIterator = loadedTileEntityList_KC.iterator();
+ for (tileLimiter.initTick(); tileEntityIterator.hasNext() && tileLimiter.shouldContinue();) {
+ TileEntity tileentity = tileEntityIterator.next();
+ for (Object tile : field_147483_b)
+ {
+ ((TileEntity) tile).onChunkUnload();
+ }
+ this.loadedTileEntityList.removeAll(this.field_147483_b);
+ this.field_147483_b.clear();
+ }
+ // CraftBukkit end
- if (!tileentity.isInvalid() && tileentity.hasWorldObj() && this.blockExists(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord))
+ int tilesThisCycle = 0;
+ for (tileLimiter.initTick(); tilesThisCycle < loadedTileEntityList.size() && (tilesThisCycle % 10 == 0 || tileLimiter.shouldContinue()); tileTickPosition++, tilesThisCycle++) {
+ tileTickPosition = (tileTickPosition < loadedTileEntityList.size()) ? tileTickPosition : 0;
+ TileEntity tileentity = (TileEntity) this.loadedTileEntityList.get(tileTickPosition);
+
+ // Spigot start
+ if (tileentity == null)
+ {
{
+ getServer().getLogger().severe("Cauldron has detected a null entity and has removed it, preventing a crash");
+ tileEntityIterator.remove();
+ tilesThisCycle--;
+ this.loadedTileEntityList.remove(tileTickPosition--);
+ continue;
+ }
+ // Spigot end
+
+ // KCauldron start
+ if (tileentity.markedForRemoval) {
+ tileentity.onChunkUnload();
+ tileEntityIterator.remove();
+ continue;
+ }
+ // KCauldron end
+
+ if (tileentity.isInvalid()) {
+ tileEntityIterator.remove();
+ tilesThisCycle--;
+ this.loadedTileEntityList.remove(tileTickPosition--);
+ if (this.chunkExists(tileentity.xCoord >> 4, tileentity.zCoord >> 4)) {
+ Chunk chunk = this.getChunkFromChunkCoords(tileentity.xCoord >> 4, tileentity.zCoord >> 4);
+ if (chunk != null) chunk.removeInvalidTileEntity(tileentity.xCoord & 15, tileentity.yCoord, tileentity.zCoord & 15);
+ }
+ continue;
+ }
- if (!tileentity.isInvalid() && tileentity.hasWorldObj() && this.blockExists(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord))
+
+ if (tileentity.hasWorldObj() && CauldronHooks.canTileEntityTick(tileentity, this)
+ && this.blockExists(tileentity.xCoord, tileentity.yCoord, tileentity.zCoord))
{
+ {
try
{
+ tileentity.tickTimer.startTiming(); // Spigot
@ -1011,7 +972,7 @@
crashreport = CrashReport.makeCrashReport(throwable, "Ticking block entity");
crashreportcategory = crashreport.makeCategory("Block entity being ticked");
tileentity.func_145828_a(crashreportcategory);
@@ -1955,23 +2485,13 @@
@@ -1955,23 +2531,13 @@
}
}
}
@ -1031,16 +992,16 @@
- }
- }
}
+ this.field_147481_N = false;
+ timings.tileEntityTick.stopTiming(); // Spigot
+ timings.tileEntityPending.startTiming(); // Spigot
+ this.field_147481_N = false;
+
+ /* CraftBukkit start - Moved up
if (!this.field_147483_b.isEmpty())
{
for (Object tile : field_147483_b)
@@ -1981,6 +2501,7 @@
@@ -1981,6 +2547,7 @@
this.loadedTileEntityList.removeAll(this.field_147483_b);
this.field_147483_b.clear();
}
@ -1048,19 +1009,7 @@
this.field_147481_N = false;
@@ -1994,9 +2515,9 @@
if (!tileentity1.isInvalid())
{
- if (!this.loadedTileEntityList.contains(tileentity1))
+ if (!this.loadedTileEntityList_KC.contains(tileentity1))
{
- this.loadedTileEntityList.add(tileentity1);
+ this.loadedTileEntityList_KC.add(tileentity1);
}
}
else
@@ -2016,17 +2537,23 @@
@@ -2016,17 +2583,23 @@
this.addedTileEntityList.clear();
}
@ -1074,7 +1023,7 @@
- List dest = field_147481_N ? addedTileEntityList : loadedTileEntityList;
- for(TileEntity entity : (Collection<TileEntity>)p_147448_1_)
+ // Cauldron start
+ Collection dest = field_147481_N ? addedTileEntityList : loadedTileEntityList_KC; // List -> Collection for CB loadedTileEntityList type change
+ Collection dest = field_147481_N ? addedTileEntityList : loadedTileEntityList; // List -> Collection for CB loadedTileEntityList type change
+ for(Object entity : p_147448_1_)
{
- if(entity.canUpdate()) dest.add(entity);
@ -1087,7 +1036,7 @@
}
public void updateEntity(Entity p_72870_1_)
@@ -2036,21 +2563,33 @@
@@ -2036,21 +2609,33 @@
public void updateEntityWithOptionalForce(Entity p_72866_1_, boolean p_72866_2_)
{
@ -1122,7 +1071,7 @@
p_72866_1_.lastTickPosX = p_72866_1_.posX;
p_72866_1_.lastTickPosY = p_72866_1_.posY;
p_72866_1_.lastTickPosZ = p_72866_1_.posZ;
@@ -2134,6 +2673,7 @@
@@ -2134,6 +2719,7 @@
p_72866_1_.riddenByEntity = null;
}
}
@ -1130,16 +1079,7 @@
}
}
@@ -2500,7 +3040,7 @@
@SideOnly(Side.CLIENT)
public String getDebugLoadedEntities()
{
- return "All: " + this.loadedEntityList.size();
+ return "All: " + this.loadedEntityList_KC.size();
}
@SideOnly(Side.CLIENT)
@@ -2570,7 +3110,7 @@
@@ -2570,7 +3156,7 @@
return;
}
@ -1148,35 +1088,7 @@
{
if (this.field_147481_N)
{
@@ -2591,7 +3131,7 @@
}
else
{
- this.loadedTileEntityList.add(p_147455_4_);
+ this.loadedTileEntityList_KC.add(p_147455_4_);
}
}
Chunk chunk = this.getChunkFromChunkCoords(p_147455_1_ >> 4, p_147455_3_ >> 4);
@@ -2612,7 +3152,7 @@
public void func_147457_a(TileEntity p_147457_1_)
{
- this.field_147483_b.add(p_147457_1_);
+ p_147457_1_.markedForRemoval = true;
}
public boolean func_147469_q(int p_147469_1_, int p_147469_2_, int p_147469_3_)
@@ -2666,7 +3206,9 @@
public void tick()
{
+ timings.weatherUpdate.startTiming(); // KCauldron
this.updateWeather();
+ timings.weatherUpdate.stopTiming(); // KCauldron
}
private void calculateInitialWeather()
@@ -2718,7 +3260,15 @@
@@ -2718,7 +3304,15 @@
if (i <= 0)
{
@ -1193,7 +1105,7 @@
}
}
@@ -2754,7 +3304,15 @@
@@ -2754,7 +3348,15 @@
if (j <= 0)
{
@ -1210,7 +1122,7 @@
}
}
@@ -2777,8 +3335,41 @@
@@ -2777,8 +3379,41 @@
protected void setActivePlayerChunksAndCheckLight()
{
this.activeChunkSet.clear();
@ -1253,7 +1165,7 @@
int i;
EntityPlayer entityplayer;
int j;
@@ -2788,17 +3379,28 @@
@@ -2788,17 +3423,28 @@
for (i = 0; i < this.playerEntities.size(); ++i)
{
entityplayer = (EntityPlayer)this.playerEntities.get(i);
@ -1288,7 +1200,7 @@
}
this.theProfiler.endSection();
@@ -2810,7 +3412,7 @@
@@ -2810,7 +3456,7 @@
this.theProfiler.startSection("playerCheckLight");
@ -1297,20 +1209,16 @@
{
i = this.rand.nextInt(this.playerEntities.size());
entityplayer = (EntityPlayer)this.playerEntities.get(i);
@@ -3280,12 +3882,23 @@
{
int i = 0;
- for (int j = 0; j < this.loadedEntityList.size(); ++j)
+ for (Entity entity : loadedEntityList_KC)
@@ -3284,8 +3930,21 @@
{
- Entity entity = (Entity)this.loadedEntityList.get(j);
+ // CraftBukkit start - Split out persistent check, don't apply it to special persistent mobs
+ if (entity instanceof EntityLiving)
+ {
+ EntityLiving entityliving = (EntityLiving) entity;
Entity entity = (Entity)this.loadedEntityList.get(j);
- if ((!(entity instanceof EntityLiving) || !((EntityLiving)entity).isNoDespawnRequired()) && p_72907_1_.isAssignableFrom(entity.getClass()))
+ // CraftBukkit start - Split out persistent check, don't apply it to special persistent mobs
+ if (entity instanceof EntityLiving)
{
+ EntityLiving entityliving = (EntityLiving) entity;
+
+ if (entityliving.canDespawn_CB() && entityliving.isNoDespawnRequired())
+ {
+ continue;
@ -1318,34 +1226,21 @@
+ }
+
+ if (p_72907_1_.isAssignableFrom(entity.getClass()))
{
+ {
+ // if ((!(entity instanceof EntityLiving) || !((EntityLiving)entity).isNoDespawnRequired()) && p_72907_1_.isAssignableFrom(entity.getClass()))
+ // CraftBukkit end
++i;
}
}
@@ -3298,9 +3911,10 @@
@@ -3298,6 +3957,7 @@
for (int i = 0; i < p_72868_1_.size(); ++i)
{
Entity entity = (Entity)p_72868_1_.get(i);
+ if (!entity.entityAllowedToSpawn()) continue;
if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(entity, this)))
{
- loadedEntityList.add(entity);
+ loadedEntityList_KC.add(entity);
this.onEntityAdded(entity);
}
}
@@ -3308,14 +3922,25 @@
public void unloadEntities(List p_72828_1_)
{
- this.unloadedEntityList.addAll(p_72828_1_);
+ for (Object o : p_72828_1_) {
+ ((Entity)o).markedForRemoval = true;
+ }
}
loadedEntityList.add(entity);
@@ -3314,8 +3974,17 @@
public boolean canPlaceEntityOnSide(Block p_147472_1_, int p_147472_2_, int p_147472_3_, int p_147472_4_, boolean p_147472_5_, int p_147472_6_, Entity p_147472_7_, ItemStack p_147472_8_)
{
Block block1 = this.getBlock(p_147472_2_, p_147472_3_, p_147472_4_);
@ -1364,7 +1259,7 @@
}
public PathEntity getPathEntityToEntity(Entity p_72865_1_, Entity p_72865_2_, float p_72865_3_, boolean p_72865_4_, boolean p_72865_5_, boolean p_72865_6_, boolean p_72865_7_)
@@ -3464,6 +4089,12 @@
@@ -3464,6 +4133,12 @@
for (int i = 0; i < this.playerEntities.size(); ++i)
{
EntityPlayer entityplayer1 = (EntityPlayer)this.playerEntities.get(i);
@ -1377,7 +1272,7 @@
double d5 = entityplayer1.getDistanceSq(p_72977_1_, p_72977_3_, p_72977_5_);
if ((p_72977_7_ < 0.0D || d5 < p_72977_7_ * p_72977_7_) && (d4 == -1.0D || d5 < d4))
@@ -3489,7 +4120,12 @@
@@ -3489,7 +4164,12 @@
for (int i = 0; i < this.playerEntities.size(); ++i)
{
EntityPlayer entityplayer1 = (EntityPlayer)this.playerEntities.get(i);
@ -1391,21 +1286,7 @@
if (!entityplayer1.capabilities.disableDamage && entityplayer1.isEntityAlive())
{
double d5 = entityplayer1.getDistanceSq(p_72846_1_, p_72846_3_, p_72846_5_);
@@ -3612,11 +4248,11 @@
}
}
- if (!this.loadedEntityList.contains(p_72897_1_))
+ if (!this.loadedEntityList_KC.contains(p_72897_1_))
{
if (!MinecraftForge.EVENT_BUS.post(new EntityJoinWorldEvent(p_72897_1_, this)))
{
- this.loadedEntityList.add(p_72897_1_);
+ this.loadedEntityList_KC.add(p_72897_1_);
}
}
}
@@ -3660,6 +4296,18 @@
@@ -3660,6 +4340,18 @@
public void updateAllPlayersSleepingFlag() {}
@ -1424,29 +1305,18 @@
public float getWeightedThunderStrength(float p_72819_1_)
{
return (this.prevThunderingStrength + (this.thunderingStrength - this.prevThunderingStrength) * p_72819_1_) * this.getRainStrength(p_72819_1_);
@@ -3932,8 +4580,8 @@
@@ -3932,8 +4624,8 @@
*/
public void addTileEntity(TileEntity entity)
{
- List dest = field_147481_N ? addedTileEntityList : loadedTileEntityList;
- if(entity.canUpdate())
+ Collection dest = field_147481_N ? addedTileEntityList : loadedTileEntityList_KC; // Cauldron - List -> Collection for CB loadedTileEntityList type change
+ Collection dest = field_147481_N ? addedTileEntityList : loadedTileEntityList; // Cauldron - List -> Collection for CB loadedTileEntityList type change
+ if (CauldronHooks.canUpdate(entity))
{
dest.add(entity);
}
@@ -4020,13 +4668,82 @@
public int countEntities(EnumCreatureType type, boolean forSpawnCount)
{
int count = 0;
- for (int x = 0; x < loadedEntityList.size(); x++)
+ for (Entity entity : loadedEntityList_KC)
{
- if (((Entity)loadedEntityList.get(x)).isCreatureType(type, forSpawnCount))
+ if (entity.isCreatureType(type, forSpawnCount))
{
count++;
}
@@ -4029,4 +4721,73 @@
}
return count;
}
@ -1464,7 +1334,7 @@
+
+ public boolean isActiveChunk(int x, int z)
+ {
+ return activeChunkSet_CB.containsKey(chunkToKey(x, z)) || getPersistentChunks().containsKey(new ChunkCoordIntPair(x, z));
+ return getPersistentChunks().containsKey(new ChunkCoordIntPair(x, z)) || activeChunkSet_CB.containsKey(chunkToKey(x, z));
+ }
+
+ public boolean isActiveChunk(long key)

View File

@ -69,22 +69,12 @@
this.mcServer = p_i45284_1_;
this.theEntityTracker = new EntityTracker(this);
this.thePlayerManager = new PlayerManager(this);
@@ -106,7 +129,7 @@
if (this.pendingTickListEntriesHashSet == null)
{
- this.pendingTickListEntriesHashSet = new HashSet();
+ this.pendingTickListEntriesHashSet = com.google.common.collect.Sets.newConcurrentHashSet();
}
if (this.pendingTickListEntriesTreeSet == null)
@@ -124,6 +147,48 @@
@@ -124,6 +147,47 @@
this.mapStorage.setData("scoreboard", scoreboardsavedata);
}
+ scoreboardsavedata.func_96499_a(this.worldScoreboard);
+ ((ServerScoreboard) this.worldScoreboard).func_96547_a(scoreboardsavedata);
+ DimensionManager.setWorld(p_i45284_4_, this);
+ }
+
+ // Add env and gen to constructor
@ -106,7 +96,7 @@
+
+ if (this.pendingTickListEntriesHashSet == null)
+ {
+ this.pendingTickListEntriesHashSet = com.google.common.collect.Sets.newConcurrentHashSet();
+ this.pendingTickListEntriesHashSet = new HashSet();
+ }
+
+ if (this.pendingTickListEntriesTreeSet == null)
@ -127,7 +117,7 @@
if (!(this instanceof WorldServerMulti)) //Forge: We fix the global mapStorage, which causes us to share scoreboards early. So don't associate the save data with the temporary scoreboard
{
scoreboardsavedata.func_96499_a(this.worldScoreboard);
@@ -132,6 +197,31 @@
@@ -132,6 +196,31 @@
DimensionManager.setWorld(p_i45284_4_, this);
}
@ -159,17 +149,7 @@
public void tick()
{
super.tick();
@@ -141,7 +231,9 @@
this.difficultySetting = EnumDifficulty.HARD;
}
+ timings.cleanupCache.startTiming(); // KCauldron
this.provider.worldChunkMgr.cleanupCache();
+ timings.cleanupCache.stopTiming(); // KCauldron
if (this.areAllPlayersAsleep())
{
@@ -155,12 +247,19 @@
@@ -155,12 +244,19 @@
}
this.theProfiler.startSection("mobSpawner");
@ -192,7 +172,7 @@
this.theProfiler.endStartSection("chunkSource");
this.chunkProvider.unloadQueuedChunks();
int j = this.calculateSkylightSubtracted(1.0F);
@@ -170,30 +269,47 @@
@@ -170,30 +266,47 @@
this.skylightSubtracted = j;
}
@ -241,7 +221,7 @@
}
public BiomeGenBase.SpawnListEntry spawnRandomCreature(EnumCreatureType p_73057_1_, int p_73057_2_, int p_73057_3_, int p_73057_4_)
@@ -212,7 +328,7 @@
@@ -212,7 +325,7 @@
{
EntityPlayer entityplayer = (EntityPlayer)iterator.next();
@ -250,7 +230,7 @@
{
this.allPlayersSleeping = false;
break;
@@ -240,7 +356,25 @@
@@ -240,7 +353,25 @@
private void resetRainAndThunder()
{
@ -277,7 +257,7 @@
}
public boolean areAllPlayersAsleep()
@@ -248,19 +382,26 @@
@@ -248,19 +379,26 @@
if (this.allPlayersSleeping && !this.isRemote)
{
Iterator iterator = this.playerEntities.iterator();
@ -307,7 +287,7 @@
return false;
}
else
@@ -302,15 +443,29 @@
@@ -302,15 +440,29 @@
super.func_147456_g();
int i = 0;
int j = 0;
@ -343,7 +323,7 @@
this.func_147467_a(k, l, chunk);
this.theProfiler.endStartSection("tickChunk");
chunk.func_150804_b(false);
@@ -346,12 +501,32 @@
@@ -346,12 +498,32 @@
if (this.isBlockFreezableNaturally(j1 + k, l1 - 1, k1 + l))
{
@ -378,7 +358,7 @@
}
if (this.isRaining())
@@ -388,6 +563,7 @@
@@ -388,6 +560,7 @@
if (block.getTickRandomly())
{
++i;
@ -386,7 +366,7 @@
block.updateTick(this, j2 + k, l2 + extendedblockstorage.getYLocation(), k2 + l, this.rand);
}
}
@@ -396,6 +572,13 @@
@@ -396,6 +569,13 @@
this.theProfiler.endSection();
}
@ -400,23 +380,7 @@
}
public boolean isBlockTickScheduledThisTick(int p_147477_1_, int p_147477_2_, int p_147477_3_, Block p_147477_4_)
@@ -450,7 +633,7 @@
if (!this.pendingTickListEntriesHashSet.contains(nextticklistentry))
{
this.pendingTickListEntriesHashSet.add(nextticklistentry);
- this.pendingTickListEntriesTreeSet.add(nextticklistentry);
+ //this.pendingTickListEntriesTreeSet.add(nextticklistentry); // KCauldron
}
}
}
@@ -468,13 +651,13 @@
if (!this.pendingTickListEntriesHashSet.contains(nextticklistentry))
{
this.pendingTickListEntriesHashSet.add(nextticklistentry);
- this.pendingTickListEntriesTreeSet.add(nextticklistentry);
+ //this.pendingTickListEntriesTreeSet.add(nextticklistentry); // KCauldron
}
}
@@ -474,7 +654,7 @@
public void updateEntities()
{
@ -425,19 +389,7 @@
{
if (this.updateEntityTick++ >= 1200)
{
@@ -496,9 +679,9 @@
public boolean tickUpdates(boolean p_72955_1_)
{
- int i = this.pendingTickListEntriesTreeSet.size();
+ int i = this.pendingTickListEntriesHashSet.size();
- if (i != this.pendingTickListEntriesHashSet.size())
+ if (false) // KCauldron
{
throw new IllegalStateException("TickNextTick list out of synch");
}
@@ -506,22 +689,31 @@
@@ -506,7 +686,16 @@
{
if (i > 1000)
{
@ -455,43 +407,7 @@
}
this.theProfiler.startSection("cleaning");
NextTickListEntry nextticklistentry;
- for (int j = 0; j < i; ++j)
+ for (Iterator iter = pendingTickListEntriesHashSet.iterator(); i >= 0 && iter.hasNext(); i--)
{
- nextticklistentry = (NextTickListEntry)this.pendingTickListEntriesTreeSet.first();
+ nextticklistentry = (NextTickListEntry) iter.next();
if (!p_72955_1_ && nextticklistentry.scheduledTime > this.worldInfo.getWorldTotalTime())
{
break;
}
- this.pendingTickListEntriesTreeSet.remove(nextticklistentry);
+ //this.pendingTickListEntriesTreeSet.remove(nextticklistentry); // KCauldron
this.pendingTickListEntriesHashSet.remove(nextticklistentry);
this.pendingTickListEntriesThisTick.add(nextticklistentry);
}
@@ -577,7 +769,7 @@
this.theProfiler.endSection();
this.pendingTickListEntriesThisTick.clear();
- return !this.pendingTickListEntriesTreeSet.isEmpty();
+ return !this.pendingTickListEntriesHashSet.isEmpty();
}
}
@@ -596,7 +788,7 @@
if (i1 == 0)
{
- iterator = this.pendingTickListEntriesTreeSet.iterator();
+ iterator = this.pendingTickListEntriesHashSet.iterator();
}
else
{
@@ -651,7 +843,37 @@
@@ -651,7 +840,37 @@
protected IChunkProvider createChunkProvider()
{
IChunkLoader ichunkloader = this.saveHandler.getChunkLoader(this.provider);
@ -530,7 +446,7 @@
return this.theChunkProviderServer;
}
@@ -659,29 +881,31 @@
@@ -659,29 +878,31 @@
{
ArrayList arraylist = new ArrayList();
@ -577,16 +493,7 @@
return arraylist;
}
@@ -704,7 +928,7 @@
if (this.pendingTickListEntriesHashSet == null)
{
- this.pendingTickListEntriesHashSet = new HashSet();
+ this.pendingTickListEntriesHashSet = com.google.common.collect.Sets.newConcurrentHashSet();
}
if (this.pendingTickListEntriesTreeSet == null)
@@ -733,7 +957,28 @@
@@ -733,7 +954,28 @@
int i = 0;
int j = this.provider.getAverageGroundLevel();
int k = 0;
@ -615,7 +522,7 @@
if (chunkposition != null)
{
i = chunkposition.chunkPosX;
@@ -876,6 +1121,20 @@
@@ -876,6 +1118,20 @@
public boolean addWeatherEffect(Entity p_72942_1_)
{
@ -636,7 +543,7 @@
if (super.addWeatherEffect(p_72942_1_))
{
this.mcServer.getConfigurationManager().sendToAllNear(p_72942_1_.posX, p_72942_1_.posY, p_72942_1_.posZ, 512.0D, this.provider.dimensionId, new S2CPacketSpawnGlobalEntity(p_72942_1_));
@@ -894,13 +1153,23 @@
@@ -894,13 +1150,23 @@
public Explosion newExplosion(Entity p_72885_1_, double p_72885_2_, double p_72885_4_, double p_72885_6_, float p_72885_8_, boolean p_72885_9_, boolean p_72885_10_)
{
@ -661,7 +568,7 @@
if (!p_72885_10_)
{
explosion.affectedBlockPositions.clear();
@@ -977,7 +1246,7 @@
@@ -977,7 +1243,7 @@
{
boolean flag = this.isRaining();
super.updateWeather();
@ -670,7 +577,7 @@
if (this.prevRainingStrength != this.rainingStrength)
{
this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(7, this.rainingStrength), this.provider.dimensionId);
@@ -988,10 +1257,6 @@
@@ -988,10 +1254,6 @@
this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(8, this.thunderingStrength), this.provider.dimensionId);
}
@ -681,7 +588,7 @@
if (flag != this.isRaining())
{
if (flag)
@@ -1006,6 +1271,33 @@
@@ -1006,6 +1268,33 @@
this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(7, this.rainingStrength), this.provider.dimensionId);
this.mcServer.getConfigurationManager().sendPacketToAllPlayersInDimension(new S2BPacketChangeGameState(8, this.thunderingStrength), this.provider.dimensionId);
}
@ -715,7 +622,7 @@
}
protected int func_152379_p()
@@ -1069,4 +1361,51 @@
@@ -1069,4 +1358,51 @@
this();
}
}

View File

@ -1,33 +0,0 @@
--- ../src-base/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
+++ ../src-work/minecraft/net/minecraft/world/chunk/storage/RegionFile.java
@@ -43,7 +43,8 @@
if (this.dataFile.length() < 4096L)
{
- for (i = 0; i < 1024; ++i)
+ // KCauldron start
+ /*for (i = 0; i < 1024; ++i)
{
this.dataFile.writeInt(0);
}
@@ -51,7 +52,10 @@
for (i = 0; i < 1024; ++i)
{
this.dataFile.writeInt(0);
- }
+ }*/
+ dataFile.write(emptySector);
+ dataFile.write(emptySector);
+ // KCauldron end
this.sizeDelta += 8192;
}
@@ -209,7 +213,7 @@
public DataOutputStream getChunkDataOutputStream(int p_76710_1_, int p_76710_2_)
{
- return this.outOfBounds(p_76710_1_, p_76710_2_) ? null : new DataOutputStream(new DeflaterOutputStream(new RegionFile.ChunkBuffer(p_76710_1_, p_76710_2_)));
+ return this.outOfBounds(p_76710_1_, p_76710_2_) ? null : new DataOutputStream(new java.io.BufferedOutputStream(new DeflaterOutputStream(new RegionFile.ChunkBuffer(p_76710_1_, p_76710_2_)))); // KCauldron
}
protected synchronized void write(int p_76706_1_, int p_76706_2_, byte[] p_76706_3_, int p_76706_4_)

View File

@ -250,9 +250,9 @@
+ Chunk chunk = (Chunk) this.loadedChunkHashMap_KC.get(LongHash.toLong(p_73154_1_, p_73154_2_));
+ chunk = chunk == null ? (shouldLoadChunk() ? this.loadChunk(p_73154_1_, p_73154_2_) : this.defaultEmptyChunk) : chunk; // Cauldron handle forge server tick events and load the chunk within 5 seconds of the world being loaded (for chunk loaders)
+
+ if (chunk == defaultEmptyChunk || chunk == null)
+ if (chunk == this.defaultEmptyChunk)
+ {
+ return defaultEmptyChunk;
+ return chunk;
+ }
+
+ if ((p_73154_1_ != chunk.xPosition || p_73154_2_ != chunk.zPosition) && !worldObj.isProfilingWorld())

View File

@ -15,12 +15,10 @@
public class MapData extends WorldSavedData
{
public int xCenter;
@@ -23,12 +31,22 @@
public byte[] colors = new byte[16384];
@@ -24,11 +32,21 @@
public List playersArrayList = new ArrayList();
private Map playersHashMap = new HashMap();
- public Map playersVisibleOnMap = new LinkedHashMap();
+ public Map<UUID, MapData.MapCoord> playersVisibleOnMap = new LinkedHashMap();
public Map playersVisibleOnMap = new LinkedHashMap();
+
+ // CraftBukkit start
+ public final CraftMapView mapView;
@ -39,7 +37,7 @@
}
public void readFromNBT(NBTTagCompound p_76184_1_)
@@ -107,14 +125,14 @@
@@ -107,7 +125,7 @@
{
if (!this.playersHashMap.containsKey(p_76191_1_))
{
@ -48,41 +46,6 @@
this.playersHashMap.put(p_76191_1_, mapinfo);
this.playersArrayList.add(mapinfo);
}
if (!p_76191_1_.inventory.hasItemStack(p_76191_2_))
{
- this.playersVisibleOnMap.remove(p_76191_1_.getCommandSenderName());
+ this.playersVisibleOnMap.remove(p_76191_1_.getUniqueID());
}
for (int i = 0; i < this.playersArrayList.size(); ++i)
@@ -166,7 +184,7 @@
{
if (Math.abs(f) >= 320.0F || Math.abs(f1) >= 320.0F)
{
- this.playersVisibleOnMap.remove(p_82567_3_);
+ this.playersVisibleOnMap.remove(java.util.UUID.nameUUIDFromBytes(p_82567_3_.getBytes(org.apache.commons.codec.Charsets.US_ASCII)));
return;
}
@@ -194,7 +212,7 @@
}
}
- this.playersVisibleOnMap.put(p_82567_3_, new MapData.MapCoord((byte)p_82567_1_, b0, b1, b2));
+ this.playersVisibleOnMap.put(java.util.UUID.nameUUIDFromBytes(p_82567_3_.getBytes(org.apache.commons.codec.Charsets.US_ASCII)), new MapData.MapCoord((byte)p_82567_1_, b0, b1, b2));
}
public byte[] getUpdatePacketData(ItemStack p_76193_1_, World p_76193_2_, EntityPlayer p_76193_3_)
@@ -250,7 +268,7 @@
byte b3 = p_76192_1_[i * 3 + 2];
byte b0 = p_76192_1_[i * 3 + 3];
byte b1 = (byte)(p_76192_1_[i * 3 + 1] & 15);
- this.playersVisibleOnMap.put("icon-" + i, new MapData.MapCoord(b2, b3, b0, b1));
+ this.playersVisibleOnMap.put(java.util.UUID.nameUUIDFromBytes(("icon-" + i).getBytes(org.apache.commons.codec.Charsets.US_ASCII)), new MapData.MapCoord(b2, b3, b0, b1));
}
}
else if (p_76192_1_[0] == 2)
@@ -265,7 +283,7 @@
if (mapinfo == null)

View File

@ -1,19 +0,0 @@
--- ../src-base/minecraft/net/minecraft/world/storage/ThreadedFileIOBase.java
+++ ../src-work/minecraft/net/minecraft/world/storage/ThreadedFileIOBase.java
@@ -39,14 +39,14 @@
++this.savedIOCounter;
}
- try
+ /*try // KCauldron start
{
Thread.sleep(this.isThreadWaiting ? 0L : 10L);
}
catch (InterruptedException interruptedexception1)
{
interruptedexception1.printStackTrace();
- }
+ }*/ // KCauldron end
}
if (this.threadedIOQueue.isEmpty())

View File

@ -1,33 +0,0 @@
--- ../src-base/minecraft/org/bukkit/command/defaults/StopCommand.java
+++ ../src-work/minecraft/org/bukkit/command/defaults/StopCommand.java
@@ -12,6 +12,8 @@
import com.google.common.collect.ImmutableList;
+import net.minecraft.server.dedicated.DedicatedServer;
+
public class StopCommand extends VanillaCommand {
public StopCommand() {
super("stop");
@@ -23,16 +25,19 @@
@Override
public boolean execute(CommandSender sender, String currentAlias, String[] args) {
if (!testPermission(sender)) return true;
+
+ DedicatedServer.allowPlayerLogins = false; // KCauldron - immediately disable logins
Command.broadcastCommandMessage(sender, "Stopping the server..");
- Bukkit.shutdown();
String reason = this.createString(args, 0);
if (StringUtils.isNotEmpty(reason)) {
- for (Player player : Bukkit.getOnlinePlayers()) {
+ for (Player player : ImmutableList.copyOf(Bukkit.getOnlinePlayers())) {
player.kickPlayer(reason);
}
}
+
+ Bukkit.shutdown(); // KCauldron - shutdown server after all players kicked
return true;
}

4
reformat.sh Executable file
View File

@ -0,0 +1,4 @@
#!/bin/sh
find patches -type f -name '*.java.patch' -exec sed -i "s/\t/ /g" {} \;
find src/main/java -type f -name '*.java' -exec sed -i "s/\t/ /g" {} \;

View File

@ -105,13 +105,13 @@ public class KCauldron {
private static boolean sLegacy, sOfficial;
public static boolean isLegacy() {
parseManifest();
return sLegacy;
parseManifest();
return sLegacy;
}
public static boolean isOfficial() {
parseManifest();
return sOfficial;
parseManifest();
return sOfficial;
}
public static File sNewServerLocation;

View File

@ -20,6 +20,7 @@ import kcauldron.updater.KVersionRetriever;
import net.minecraft.entity.Entity;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.ChunkCoordIntPair;
import net.minecraft.world.NextTickListEntry;
import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.Chunk;
@ -129,22 +130,22 @@ public class KCauldronCommand extends Command {
world.provider.getDimensionName(), world.dimension));
writer.write("Current tick: " + world.worldInfo.getWorldTotalTime() + "\n");
writer.write("\nEntities: ");
writer.write("count - " + world.loadedEntityList_KC.size() + "\n");
for (Entity entity : world.loadedEntityList_KC) {
writer.write("count - " + world.loadedEntityList.size() + "\n");
for (Entity entity : (Iterable<Entity>) world.loadedEntityList) {
writer.write(String.format(" %s at (%.4f;%.4f;%.4f)\n", entity.getClass().getName(),
entity.posX, entity.posY, entity.posZ));
}
writer.write("\nTileEntities: ");
writer.write("count - " + world.loadedTileEntityList_KC.size() + "\n");
for (TileEntity entity : world.loadedTileEntityList_KC) {
writer.write("count - " + world.loadedTileEntityList.size() + "\n");
for (TileEntity entity : (Iterable<TileEntity>) world.loadedTileEntityList) {
writer.write(String.format(" %s at (%d;%d;%d)\n", entity.getClass().getName(), entity.xCoord,
entity.yCoord, entity.zCoord));
}
writer.write("\nLoaded chunks: ");
writer.write("count - " + world.activeChunkSet_CB.size() + "\n");
for (long chunkKey : world.activeChunkSet_CB.keys()) {
final int x = WorldServer.keyToX(chunkKey);
final int z = WorldServer.keyToZ(chunkKey);
writer.write("count - " + world.activeChunkSet.size() + "\n");
for (ChunkCoordIntPair chunkCoords : (Iterable<ChunkCoordIntPair>) world.activeChunkSet) {
final int x = chunkCoords.chunkXPos;
final int z = chunkCoords.chunkZPos;
Chunk chunk = world.chunkProvider.provideChunk(x, z);
if (chunk == null)
continue;

View File

@ -1,57 +0,0 @@
package kcauldron;
import org.bukkit.craftbukkit.SpigotTimings;
import net.minecraft.server.MinecraftServer;
import net.minecraft.world.MinecraftException;
public class KCauldronWorldSaveThread extends Thread {
private final MinecraftServer mServer;
private int mLastSaveTick = -1;
private int mNextSaveTick = -1;
public KCauldronWorldSaveThread(MinecraftServer server) {
super(KCauldron.sKCauldronThreadGroup, "KCauldron World Save");
mServer = server;
setPriority(Thread.MIN_PRIORITY);
setDaemon(true);
}
@Override
public void run() {
KLog.get().info("Starting KCauldron World Saver thread...");
try {
while (!isInterrupted()) {
if (mLastSaveTick < 0) {
mLastSaveTick = mServer.tickCounter;
}
mNextSaveTick = mLastSaveTick + mServer.autosavePeriod;
while (mNextSaveTick > mServer.tickCounter) {
try {
sleep((mNextSaveTick - mServer.tickCounter) * 50);
} catch (InterruptedException e) {
return;
}
}
SpigotTimings.worldSaveTimer.startTiming();
try {
mServer.serverConfigManager.saveAllPlayerData();
mServer.saveAllWorlds(true);
} catch (MinecraftException e) {
new RuntimeException("Error occurred during save world", e).printStackTrace();
}
SpigotTimings.worldSaveTimer.stopTiming();
mLastSaveTick = mServer.tickCounter;
}
} finally {
KLog.get().info("Stopping KCauldron World Saver thread...");
}
}
public void stopServer() {
interrupt();
while(isAlive()) {
Thread.yield();
}
}
}

View File

@ -21,12 +21,12 @@ public class DefaultUpdateCallback implements IVersionCheckCallback {
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
if (hasPermission(player)) {
if (KCauldron.isLegacy()) {
player.sendMessage(ChatColor.YELLOW + "We're running on legacy version on KCauldron, please update your version");
}
if (!KCauldron.isOfficial()) {
player.sendMessage(ChatColor.YELLOW + "We're running on non-official version on KCauldron, please update your version");
}
if (KCauldron.isLegacy()) {
player.sendMessage(ChatColor.YELLOW + "We're running on legacy version on KCauldron, please update your version");
}
if (!KCauldron.isOfficial()) {
player.sendMessage(ChatColor.YELLOW + "We're running on non-official version on KCauldron, please update your version");
}
if (mHasUpdate) {
sendUpdate(player);
}

View File

@ -1,81 +0,0 @@
package kcauldron.wrapper;
import java.util.Collection;
import java.util.Iterator;
public class CollectionWrapper<T, C extends Collection<T>> implements Collection<T> {
protected C mCollection;
public CollectionWrapper(C collection) {
mCollection = collection;
}
@Override
public boolean add(T e) {
return mCollection.add(e);
}
@Override
public boolean addAll(Collection<? extends T> c) {
return mCollection.addAll(c);
}
@Override
public void clear() {
mCollection.clear();
}
@Override
public boolean contains(Object o) {
return mCollection.contains(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return mCollection.containsAll(c);
}
@Override
public boolean isEmpty() {
return mCollection.isEmpty();
}
@Override
public Iterator<T> iterator() {
return mCollection.iterator();
}
@Override
public boolean remove(Object o) {
return mCollection.remove(o);
}
@Override
public boolean removeAll(Collection<?> c) {
return mCollection.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return mCollection.retainAll(c);
}
@Override
public int size() {
return mCollection.size();
}
@Override
public Object[] toArray() {
return mCollection.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return mCollection.toArray(a);
}
public C unwrap() {
return mCollection;
}
}

View File

@ -1,153 +0,0 @@
package kcauldron.wrapper;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import cpw.mods.fml.common.FMLLog;
public class LinkedHelper<T> {
private final Iterable<T> mIterable;
private volatile Iterator<T> mIndexIterator;
private volatile int mIndex;
private volatile T mIndexValue;
public LinkedHelper(Iterable<T> iterable) {
mIterable = iterable;
}
public synchronized T get(int index) {
if (mIndexIterator == null || mIndex > index) {
mIndexIterator = mIterable.iterator();
mIndex = -1;
}
if (mIndex == index) return mIndexValue;
T value = null;
while (mIndex < index && mIndexIterator.hasNext()) {
value = mIndexIterator.next();
mIndex++;
}
if (mIndex < index) {
mIndexIterator = mIterable.iterator();
mIndex = -1;
while (mIndex < index && mIndexIterator.hasNext()) {
value = mIndexIterator.next();
mIndex++;
}
}
if (mIndex < index) {
FMLLog.bigWarning("LinkedHelper desync, report this to KCauldron tracker!");
}
return mIndexValue = value;
}
public int indexOf(Object o) {
int i = 0;
for (T value : mIterable) {
if (o == null ? value == null : o.equals(value))
return i;
i++;
}
return -1;
}
public int lastIndexOf(Object o) {
if (!(mIterable instanceof List)) {
throw new UnsupportedOperationException();
}
ListIterator<T> iterator = ((List<T>) mIterable).listIterator();
int i = 0;
while (iterator.hasPrevious()) {
T value = iterator.previous();
if (o == null ? value == null : o.equals(value))
return i;
i++;
}
return -1;
}
public ListIterator<T> listIterator() {
if (mIterable instanceof List) {
return ((List<T>) mIterable).listIterator();
}
return new LinkedListIterator<T>(mIterable.iterator(), 0);
}
public ListIterator<T> listIterator(int index) {
if (mIterable instanceof List) {
return ((List<T>) mIterable).listIterator(index);
}
Iterator<T> iterator = mIterable.iterator();
for (int i = 0; i < index; i++)
iterator.next();
return new LinkedListIterator<T>(iterator, index);
}
private static final class LinkedListIterator<T> implements ListIterator<T> {
private final Iterator<T> mIterator;
private final ListIterator<T> mListIterator;
private int mNextIndex;
public LinkedListIterator(Iterator<T> iterator, int index) {
mIterator = iterator;
mListIterator = iterator instanceof ListIterator ? (ListIterator<T>) iterator : null;
mNextIndex = index;
}
private void ensureListIterator() {
if (mListIterator == null)
throw new UnsupportedOperationException();
}
@Override
public void add(T e) {
ensureListIterator();
mListIterator.add(e);
}
@Override
public boolean hasNext() {
return mIterator.hasNext();
}
@Override
public boolean hasPrevious() {
ensureListIterator();
return mListIterator.hasPrevious();
}
@Override
public T next() {
mNextIndex++;
return mIterator.next();
}
@Override
public int nextIndex() {
return mListIterator != null ? mListIterator.nextIndex() : mNextIndex;
}
@Override
public T previous() {
ensureListIterator();
return mListIterator.previous();
}
@Override
public int previousIndex() {
ensureListIterator();
return mListIterator.previousIndex();
}
@Override
public void remove() {
mIterator.remove();
}
@Override
public void set(T e) {
ensureListIterator();
mListIterator.set(e);
}
}
}

View File

@ -1,124 +0,0 @@
package kcauldron.wrapper;
import java.util.Collection;
import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.atomic.AtomicInteger;
public class ProcessingQueue<T> extends QueueWrapper<T> {
public class ProcessingIterator implements Iterator<T> {
private Iterator<T> mRealIterator = mCollection.iterator();
@Override
public boolean hasNext() {
return mRealIterator.hasNext();
}
@Override
public T next() {
return mRealIterator.next();
}
@Override
public void remove() {
mRealIterator.remove();
mSize.decrementAndGet();
}
}
private final AtomicInteger mSize;
@Override
public boolean add(T e) {
boolean result = super.add(e);
if (result) {
mSize.incrementAndGet();
}
return result;
};
@Override
public boolean offer(T e) {
boolean result = super.offer(e);
if (result) {
mSize.incrementAndGet();
}
return result;
}
@Override
public boolean addAll(Collection<? extends T> c) {
boolean result = false;
for (T t : c) {
result |= add(t);
}
return result;
}
@Override
public T remove() {
T result = super.remove();
mSize.decrementAndGet();
return result;
}
@Override
public boolean remove(Object o) {
boolean result = super.remove(o);
if (result) {
mSize.decrementAndGet();
}
return result;
}
@Override
public boolean removeAll(Collection<?> c) {
boolean result = false;
for (Object t : c) {
result |= remove(t);
}
return result;
}
@Override
public boolean retainAll(Collection<?> c) {
boolean result = super.retainAll(c);
if (result) {
mSize.set(mCollection.size());
}
return result;
}
@Override
public T poll() {
T result = super.remove();
if (result != null) {
mSize.decrementAndGet();
}
return result;
}
public ProcessingQueue(Queue<T> collection) {
super(collection);
mSize = new AtomicInteger(collection.size());
}
@Override
public ProcessingIterator iterator() {
return new ProcessingIterator();
}
@Override
public String toString() {
if (size() == 0)
return "[]";
StringBuilder builder = new StringBuilder();
for (T t : this) {
builder.append(',');
builder.append(t == null ? "null" : t.getClass().getSimpleName());
}
builder.setCharAt(0, '[');
builder.append(']');
return builder.toString();
}
}

View File

@ -1,68 +0,0 @@
package kcauldron.wrapper;
import java.util.Collection;
import java.util.List;
import java.util.ListIterator;
import java.util.Queue;
public class QueueToList<T> extends CollectionWrapper<T, Queue<T>> implements List<T> {
private final Queue<T> mQueue;
private final LinkedHelper<T> mHelper;
public QueueToList(Queue<T> queue) {
super(queue);
mQueue = queue;
mHelper = new LinkedHelper<T>(mQueue);
}
@Override
public void add(int index, T element) {
throw new UnsupportedOperationException();
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
throw new UnsupportedOperationException();
}
@Override
public T get(int index) {
return mHelper.get(index);
}
@Override
public int indexOf(Object o) {
return mHelper.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return mHelper.lastIndexOf(o);
}
@Override
public ListIterator<T> listIterator() {
return mHelper.listIterator();
}
@Override
public ListIterator<T> listIterator(int index) {
return mHelper.listIterator(index);
}
@Override
public T remove(int index) {
T object = mHelper.get(index);
return mQueue.remove(object) ? object : null;
}
@Override
public T set(int index, T element) {
throw new UnsupportedOperationException();
}
@Override
public List<T> subList(int fromIndex, int toIndex) {
throw new UnsupportedOperationException();
}
}

View File

@ -1,34 +0,0 @@
package kcauldron.wrapper;
import java.util.Queue;
public class QueueWrapper<T> extends CollectionWrapper<T, Queue<T>> implements Queue<T>{
public QueueWrapper(Queue<T> collection) {
super(collection);
}
@Override
public T element() {
return mCollection.element();
}
@Override
public boolean offer(T e) {
return mCollection.offer(e);
}
@Override
public T peek() {
return mCollection.peek();
}
@Override
public T poll() {
return mCollection.poll();
}
@Override
public T remove() {
return mCollection.remove();
}
}

View File

@ -334,15 +334,16 @@ public class CauldronHooks
writer.name("players").value(world.playerEntities.size());
writer.name("loadedChunks").value(world.theChunkProviderServer.loadedChunkHashMap_KC.size());
writer.name("activeChunks").value(world.activeChunkSet.size());
writer.name("entities").value(world.loadedEntityList_KC.size());
writer.name("tiles").value(world.loadedTileEntityList_KC.size());
writer.name("entities").value(world.loadedEntityList.size());
writer.name("tiles").value(world.loadedTileEntityList.size());
TObjectIntHashMap<ChunkCoordIntPair> chunkEntityCounts = new TObjectIntHashMap<ChunkCoordIntPair>();
TObjectIntHashMap<Class> classEntityCounts = new TObjectIntHashMap<Class>();
TObjectIntHashMap<Entity> entityCollisionCounts = new TObjectIntHashMap<Entity>();
Set<ChunkCoordinates> collidingCoords = new HashSet<ChunkCoordinates>();
for (Entity entity : world.loadedEntityList_KC)
for (int i = 0; i < world.loadedEntityList.size(); i++)
{
Entity entity = (Entity) world.loadedEntityList.get(i);
ChunkCoordIntPair chunkCoords = new ChunkCoordIntPair((int) entity.posX >> 4, (int) entity.posZ >> 4);
chunkEntityCounts.adjustOrPutValue(chunkCoords, 1, 1);
classEntityCounts.adjustOrPutValue(entity.getClass(), 1, 1);
@ -365,8 +366,9 @@ public class CauldronHooks
TObjectIntHashMap<ChunkCoordIntPair> chunkTileCounts = new TObjectIntHashMap<ChunkCoordIntPair>();
TObjectIntHashMap<Class> classTileCounts = new TObjectIntHashMap<Class>();
writer.name("tiles").beginArray();
for (TileEntity tile : world.loadedTileEntityList_KC)
for (int i = 0; i < world.loadedTileEntityList.size(); i++)
{
TileEntity tile = (TileEntity) world.loadedTileEntityList.get(i);
if (logAll)
{
writer.beginObject();

View File

@ -7,8 +7,6 @@ import java.util.Date;
import java.util.List;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.WorldServer;
import net.minecraftforge.cauldron.CauldronHooks;
import net.minecraftforge.cauldron.configuration.BoolSetting;
import net.minecraftforge.cauldron.configuration.IntSetting;
@ -114,11 +112,13 @@ public class CauldronCommand extends Command
sender.sendMessage(ChatColor.GOLD + "Dimension: " + ChatColor.GRAY + world.provider.dimensionId +
ChatColor.GOLD + " Loaded Chunks: " + ChatColor.GRAY + world.theChunkProviderServer.loadedChunkHashMap_KC.size() +
ChatColor.GOLD + " Active Chunks: " + ChatColor.GRAY + world.activeChunkSet.size() +
ChatColor.GOLD + " Entities: " + ChatColor.GRAY + world.loadedEntityList_KC.size() +
ChatColor.GOLD + " Tile Entities: " + ChatColor.GRAY + world.loadedTileEntityList_KC.size()
ChatColor.GOLD + " Entities: " + ChatColor.GRAY + world.loadedEntityList.size() +
ChatColor.GOLD + " Tile Entities: " + ChatColor.GRAY + world.loadedTileEntityList.size()
);
sender.sendMessage(ChatColor.GOLD + " Entities Last Tick: " + ChatColor.GRAY + world.entitiesTicked +
ChatColor.GOLD + " Tiles Last Tick: " + ChatColor.GRAY + world.tilesTicked
ChatColor.GOLD + " Tiles Last Tick: " + ChatColor.GRAY + world.tilesTicked +
ChatColor.GOLD + " Removed Entities: " + ChatColor.GRAY + world.unloadedEntityList.size() +
ChatColor.GOLD + " Removed Tile Entities: " + ChatColor.GRAY + world.field_147483_b.size()
);
}

View File

@ -263,7 +263,6 @@ public final class CraftServer implements Server {
waterAnimalSpawn = configuration.getInt("spawn-limits.water-animals");
ambientSpawn = configuration.getInt("spawn-limits.ambient");
console.autosavePeriod = configuration.getInt("ticks-per.autosave");
console.invalidateWorldSaver();
warningState = WarningState.value(configuration.getString("settings.deprecated-verbose"));
loadIcon();
chunkGCEnabled = configuration.getBoolean("chunk-gc.enabled"); // Cauldron
@ -671,7 +670,7 @@ public final class CraftServer implements Server {
@Override
public List<World> getWorlds() {
return ImmutableList.copyOf(worlds.values());
return new ArrayList<World>(worlds.values());
}
public DedicatedPlayerList getHandle() {
@ -765,7 +764,6 @@ public final class CraftServer implements Server {
warningState = WarningState.value(configuration.getString("settings.deprecated-verbose"));
printSaveWarning = false;
console.autosavePeriod = configuration.getInt("ticks-per.autosave");
console.invalidateWorldSaver();
chunkGCPeriod = configuration.getInt("chunk-gc.period-in-ticks");
chunkGCLoadThresh = configuration.getInt("chunk-gc.load-threshold");
loadIcon();
@ -1152,7 +1150,7 @@ public final class CraftServer implements Server {
@Override
public Map<String, String[]> getCommandAliases() {
ConfigurationSection section = commandsConfiguration.getConfigurationSection("aliases");
ConfigurationSection section = configuration.getConfigurationSection("aliases");
Map<String, String[]> result = new LinkedHashMap<String, String[]>();
if (section != null) {

View File

@ -683,16 +683,16 @@ public class CraftWorld implements World {
public List<Entity> getEntities() {
List<Entity> list = new ArrayList<Entity>();
for (net.minecraft.entity.Entity mcEnt : world.loadedEntityList_KC) {
//if (o instanceof net.minecraft.entity.Entity) {
//net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
for (Object o : world.loadedEntityList) {
if (o instanceof net.minecraft.entity.Entity) {
net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
Entity bukkitEntity = mcEnt.getBukkitEntity();
// Assuming that bukkitEntity isn't null
if (bukkitEntity != null) {
list.add(bukkitEntity);
}
//}
}
}
return list;
@ -701,16 +701,16 @@ public class CraftWorld implements World {
public List<LivingEntity> getLivingEntities() {
List<LivingEntity> list = new ArrayList<LivingEntity>();
for (net.minecraft.entity.Entity mcEnt : world.loadedEntityList_KC) {
//if (o instanceof net.minecraft.entity.Entity) {
//net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
for (Object o : world.loadedEntityList) {
if (o instanceof net.minecraft.entity.Entity) {
net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
Entity bukkitEntity = mcEnt.getBukkitEntity();
// Assuming that bukkitEntity isn't null
if (bukkitEntity != null && bukkitEntity instanceof LivingEntity) {
list.add((LivingEntity) bukkitEntity);
}
//}
}
}
return list;
@ -726,9 +726,9 @@ public class CraftWorld implements World {
public <T extends Entity> Collection<T> getEntitiesByClass(Class<T> clazz) {
Collection<T> list = new ArrayList<T>();
for (net.minecraft.entity.Entity entity : world.loadedEntityList_KC) {
//if (entity instanceof net.minecraft.entity.Entity) {
Entity bukkitEntity = entity.getBukkitEntity();
for (Object entity: world.loadedEntityList) {
if (entity instanceof net.minecraft.entity.Entity) {
Entity bukkitEntity = ((net.minecraft.entity.Entity) entity).getBukkitEntity();
if (bukkitEntity == null) {
continue;
@ -739,7 +739,7 @@ public class CraftWorld implements World {
if (clazz.isAssignableFrom(bukkitClass)) {
list.add((T) bukkitEntity);
}
//}
}
}
return list;
@ -748,9 +748,9 @@ public class CraftWorld implements World {
public Collection<Entity> getEntitiesByClasses(Class<?>... classes) {
Collection<Entity> list = new ArrayList<Entity>();
for (net.minecraft.entity.Entity entity: world.loadedEntityList_KC) {
//if (entity instanceof net.minecraft.entity.Entity) {
Entity bukkitEntity = entity.getBukkitEntity();
for (Object entity: world.loadedEntityList) {
if (entity instanceof net.minecraft.entity.Entity) {
Entity bukkitEntity = ((net.minecraft.entity.Entity) entity).getBukkitEntity();
if (bukkitEntity == null) {
continue;
@ -764,7 +764,7 @@ public class CraftWorld implements World {
break;
}
}
//}
}
}
return list;
@ -773,15 +773,15 @@ public class CraftWorld implements World {
public List<Player> getPlayers() {
List<Player> list = new ArrayList<Player>();
for (net.minecraft.entity.Entity mcEnt : world.loadedEntityList_KC) {
//if (o instanceof net.minecraft.entity.Entity) {
//net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
for (Object o : world.loadedEntityList) {
if (o instanceof net.minecraft.entity.Entity) {
net.minecraft.entity.Entity mcEnt = (net.minecraft.entity.Entity) o;
Entity bukkitEntity = mcEnt.getBukkitEntity();
if ((bukkitEntity != null) && (bukkitEntity instanceof Player)) {
list.add((Player) bukkitEntity);
}
//}
}
}
return list;

View File

@ -136,8 +136,6 @@ public class SpigotTimings {
public final CustomTimingsHandler tracker;
public final CustomTimingsHandler doTick;
public final CustomTimingsHandler tickEntities;
public final CustomTimingsHandler weatherUpdate;
public final CustomTimingsHandler cleanupCache;
public final CustomTimingsHandler syncChunkLoadTimer;
public final CustomTimingsHandler syncChunkLoadDataTimer;
@ -175,8 +173,6 @@ public class SpigotTimings {
tracker = new CustomTimingsHandler(name + "tracker");
doTick = new CustomTimingsHandler(name + "doTick");
tickEntities = new CustomTimingsHandler(name + "tickEntities");
weatherUpdate = new CustomTimingsHandler(name + "weatherUpdate");
cleanupCache = new CustomTimingsHandler(name + "cleanupCache");
}
}
}

View File

@ -1,6 +1,7 @@
package org.bukkit.craftbukkit.entity;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.MapMaker;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

View File

@ -1,9 +1,6 @@
package org.bukkit.craftbukkit.map;
import java.util.Map;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.map.MapCanvas;
@ -11,8 +8,6 @@ import org.bukkit.map.MapCursorCollection;
import org.bukkit.map.MapRenderer;
import org.bukkit.map.MapView;
import net.minecraft.world.storage.MapData;
public class CraftMapRenderer extends MapRenderer {
private final net.minecraft.world.storage.MapData worldMap;
@ -37,14 +32,14 @@ public class CraftMapRenderer extends MapRenderer {
cursors.removeCursor(cursors.getCursor(0));
}
for (Map.Entry<UUID, MapData.MapCoord> key : worldMap.playersVisibleOnMap.entrySet()) {
for (Object key : worldMap.playersVisibleOnMap.keySet()) {
// If this cursor is for a player check visibility with vanish system
Player other = Bukkit.getPlayer(key.getKey());
Player other = Bukkit.getPlayerExact((String) key);
if (other != null && !player.canSee(other)) {
continue;
}
MapData.MapCoord decoration = key.getValue();
net.minecraft.world.storage.MapData.MapCoord decoration = (net.minecraft.world.storage.MapData.MapCoord) worldMap.playersVisibleOnMap.get(key);
cursors.addCursor(decoration.centerX, decoration.centerZ, (byte) (decoration.iconRotation & 15), decoration.iconSize);
}
}

View File

@ -1,18 +0,0 @@
package org.spigotmc;
import gnu.trove.strategy.HashingStrategy;
class CaseInsensitiveHashingStrategy implements HashingStrategy<String> {
private static final long serialVersionUID = -9212222772914758878L;
static final CaseInsensitiveHashingStrategy INSTANCE = new CaseInsensitiveHashingStrategy();
@Override
public int computeHashCode(String object) {
return object.toLowerCase().hashCode();
}
@Override
public boolean equals(String o1, String o2) {
return o1.equalsIgnoreCase(o2);
}
}

View File

@ -1,15 +0,0 @@
package org.spigotmc;
import gnu.trove.map.hash.TCustomHashMap;
import java.util.Map;
public class CaseInsensitiveMap<V> extends TCustomHashMap<String, V> {
public CaseInsensitiveMap() {
super(CaseInsensitiveHashingStrategy.INSTANCE);
}
public CaseInsensitiveMap(Map<? extends String, ? extends V> map) {
super(CaseInsensitiveHashingStrategy.INSTANCE, map);
}
}

View File

@ -90,7 +90,7 @@ public class WatchdogThread extends Thread
log.log(Level.SEVERE, " Dimension:" + world.provider.dimensionId);
log.log(Level.SEVERE,
" Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.size() + " Active Chunks: " + world.activeChunkSet.size()
+ " Entities: " + world.loadedEntityList_KC.size() + " Tile Entities: " + world.loadedTileEntityList_KC.size());
+ " Entities: " + world.loadedEntityList.size() + " Tile Entities: " + world.loadedTileEntityList.size());
log.log(Level.SEVERE, " Entities Last Tick: " + world.entitiesTicked);
log.log(Level.SEVERE, " Tiles Last Tick: " + world.tilesTicked);
}
@ -155,8 +155,8 @@ public class WatchdogThread extends Thread
log.log(Level.WARNING, " Dimension:" + world.provider.dimensionId);
log.log(Level.WARNING, " Loaded Chunks: " + world.theChunkProviderServer.loadedChunkHashMap_KC.size() +
" Active Chunks: " + world.activeChunkSet.size() +
" Entities: " + world.loadedEntityList_KC.size() +
" Tile Entities: " + world.loadedTileEntityList_KC.size());
" Entities: " + world.loadedEntityList.size() +
" Tile Entities: " + world.loadedTileEntityList.size());
log.log(Level.WARNING, " Entities Last Tick: " + world.entitiesTicked);
log.log(Level.WARNING, " Tiles Last Tick: " + world.tilesTicked);
}