mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Updated Upstream (Paper)
Upstream has released updates that appear to apply and compile correctly Paper Changes: 98a702c7d [CI-SKIP] [Auto] Rebuild Patches cab361600 Expose LivingEntity hurt direction 7ef05fbd8 Do not perform neighbour updates when using debug stick (Fixes #2134)
This commit is contained in:
2
Paper
2
Paper
Submodule Paper updated: a70924789b...98a702c7d5
@@ -0,0 +1,731 @@
|
||||
package net.minecraft.server;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
// CraftBukkit start
|
||||
import org.bukkit.craftbukkit.entity.CraftHumanEntity;
|
||||
import org.bukkit.craftbukkit.inventory.CraftItemStack;
|
||||
import org.bukkit.entity.HumanEntity;
|
||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
// CraftBukkit end
|
||||
|
||||
public class TileEntityHopper extends TileEntityLootable implements IHopper, ITickable {
|
||||
|
||||
private NonNullList<ItemStack> items;
|
||||
private int j;
|
||||
private long k;
|
||||
|
||||
// CraftBukkit start - add fields and methods
|
||||
public List<HumanEntity> transaction = new java.util.ArrayList<HumanEntity>();
|
||||
private int maxStack = MAX_STACK;
|
||||
|
||||
public List<ItemStack> getContents() {
|
||||
return this.items;
|
||||
}
|
||||
|
||||
public void onOpen(CraftHumanEntity who) {
|
||||
transaction.add(who);
|
||||
}
|
||||
|
||||
public void onClose(CraftHumanEntity who) {
|
||||
transaction.remove(who);
|
||||
}
|
||||
|
||||
public List<HumanEntity> getViewers() {
|
||||
return transaction;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxStackSize() {
|
||||
return maxStack;
|
||||
}
|
||||
|
||||
public void setMaxStackSize(int size) {
|
||||
maxStack = size;
|
||||
}
|
||||
// CraftBukkit end
|
||||
|
||||
public TileEntityHopper() {
|
||||
super(TileEntityTypes.HOPPER);
|
||||
this.items = NonNullList.a(5, ItemStack.b);
|
||||
this.j = -1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(IBlockData iblockdata, NBTTagCompound nbttagcompound) {
|
||||
super.load(iblockdata, nbttagcompound);
|
||||
this.items = NonNullList.a(this.getSize(), ItemStack.b);
|
||||
if (!this.b(nbttagcompound)) {
|
||||
ContainerUtil.b(nbttagcompound, this.items);
|
||||
}
|
||||
|
||||
this.j = nbttagcompound.getInt("TransferCooldown");
|
||||
}
|
||||
|
||||
@Override
|
||||
public NBTTagCompound save(NBTTagCompound nbttagcompound) {
|
||||
super.save(nbttagcompound);
|
||||
if (!this.c(nbttagcompound)) {
|
||||
ContainerUtil.a(nbttagcompound, this.items);
|
||||
}
|
||||
|
||||
nbttagcompound.setInt("TransferCooldown", this.j);
|
||||
return nbttagcompound;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSize() {
|
||||
return this.items.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack splitStack(int i, int j) {
|
||||
this.d((EntityHuman) null);
|
||||
return ContainerUtil.a(this.f(), i, j);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setItem(int i, ItemStack itemstack) {
|
||||
this.d((EntityHuman) null);
|
||||
this.f().set(i, itemstack);
|
||||
if (itemstack.getCount() > this.getMaxStackSize()) {
|
||||
itemstack.setCount(this.getMaxStackSize());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected IChatBaseComponent getContainerName() {
|
||||
return new ChatMessage("container.hopper");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
if (this.world != null && !this.world.isClientSide) {
|
||||
--this.j;
|
||||
this.k = this.world.getTime();
|
||||
if (!this.m()) {
|
||||
this.setCooldown(0);
|
||||
// Spigot start
|
||||
boolean result = this.a(() -> {
|
||||
return a((IHopper) this);
|
||||
});
|
||||
if (!result && this.world.spigotConfig.hopperCheck > 1) {
|
||||
this.setCooldown(this.world.spigotConfig.hopperCheck);
|
||||
}
|
||||
// Spigot end
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private boolean a(Supplier<Boolean> supplier) {
|
||||
if (this.world != null && !this.world.isClientSide) {
|
||||
if (!this.m() && (Boolean) this.getBlock().get(BlockHopper.ENABLED)) {
|
||||
boolean flag = false;
|
||||
|
||||
if (!this.isEmpty()) {
|
||||
flag = this.k();
|
||||
}
|
||||
|
||||
if (!this.j()) {
|
||||
flag |= (Boolean) supplier.get();
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
this.setCooldown(world.spigotConfig.hopperTransfer); // Spigot
|
||||
this.update();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private boolean j() {
|
||||
Iterator iterator = this.items.iterator();
|
||||
|
||||
ItemStack itemstack;
|
||||
|
||||
do {
|
||||
if (!iterator.hasNext()) {
|
||||
return true;
|
||||
}
|
||||
|
||||
itemstack = (ItemStack) iterator.next();
|
||||
} while (!itemstack.isEmpty() && itemstack.getCount() == itemstack.getMaxStackSize());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Paper start - Optimize Hoppers
|
||||
private static boolean skipPullModeEventFire = false;
|
||||
private static boolean skipPushModeEventFire = false;
|
||||
static boolean skipHopperEvents = false;
|
||||
|
||||
private boolean hopperPush(IInventory iinventory, EnumDirection enumdirection) {
|
||||
skipPushModeEventFire = skipHopperEvents;
|
||||
boolean foundItem = false;
|
||||
for (int i = 0; i < this.getSize(); ++i) {
|
||||
ItemStack item = this.getItem(i);
|
||||
if (!item.isEmpty()) {
|
||||
foundItem = true;
|
||||
ItemStack origItemStack = item;
|
||||
ItemStack itemstack = origItemStack;
|
||||
|
||||
final int origCount = origItemStack.getCount();
|
||||
final int moved = Math.min(world.spigotConfig.hopperAmount, origCount);
|
||||
origItemStack.setCount(moved);
|
||||
|
||||
// We only need to fire the event once to give protection plugins a chance to cancel this event
|
||||
// Because nothing uses getItem, every event call should end up the same result.
|
||||
if (!skipPushModeEventFire) {
|
||||
itemstack = callPushMoveEvent(iinventory, itemstack);
|
||||
if (itemstack == null) { // cancelled
|
||||
origItemStack.setCount(origCount);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
final ItemStack itemstack2 = addItem(this, iinventory, itemstack, enumdirection);
|
||||
final int remaining = itemstack2.getCount();
|
||||
if (remaining != moved) {
|
||||
origItemStack = origItemStack.cloneItemStack(true);
|
||||
origItemStack.setCount(origCount);
|
||||
if (!origItemStack.isEmpty()) {
|
||||
origItemStack.setCount(origCount - moved + remaining);
|
||||
}
|
||||
this.setItem(i, origItemStack);
|
||||
iinventory.update();
|
||||
return true;
|
||||
}
|
||||
origItemStack.setCount(origCount);
|
||||
}
|
||||
}
|
||||
if (foundItem && world.paperConfig.cooldownHopperWhenFull) { // Inventory was full - cooldown
|
||||
this.setCooldown(world.spigotConfig.hopperTransfer);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean hopperPull(IHopper ihopper, IInventory iinventory, ItemStack origItemStack, int i) {
|
||||
ItemStack itemstack = origItemStack;
|
||||
final int origCount = origItemStack.getCount();
|
||||
final World world = ihopper.getWorld();
|
||||
final int moved = Math.min(world.spigotConfig.hopperAmount, origCount);
|
||||
itemstack.setCount(moved);
|
||||
|
||||
if (!skipPullModeEventFire) {
|
||||
itemstack = callPullMoveEvent(ihopper, iinventory, itemstack);
|
||||
if (itemstack == null) { // cancelled
|
||||
origItemStack.setCount(origCount);
|
||||
// Drastically improve performance by returning true.
|
||||
// No plugin could of relied on the behavior of false as the other call
|
||||
// site for IMIE did not exhibit the same behavior
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
final ItemStack itemstack2 = addItem(iinventory, ihopper, itemstack, null);
|
||||
final int remaining = itemstack2.getCount();
|
||||
if (remaining != moved) {
|
||||
origItemStack = origItemStack.cloneItemStack(true);
|
||||
origItemStack.setCount(origCount);
|
||||
if (!origItemStack.isEmpty()) {
|
||||
origItemStack.setCount(origCount - moved + remaining);
|
||||
}
|
||||
IGNORE_TILE_UPDATES = true;
|
||||
iinventory.setItem(i, origItemStack);
|
||||
IGNORE_TILE_UPDATES = false;
|
||||
iinventory.update();
|
||||
return true;
|
||||
}
|
||||
origItemStack.setCount(origCount);
|
||||
|
||||
if (world.paperConfig.cooldownHopperWhenFull) {
|
||||
cooldownHopper(ihopper);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private ItemStack callPushMoveEvent(IInventory iinventory, ItemStack itemstack) {
|
||||
Inventory destinationInventory = getInventory(iinventory);
|
||||
InventoryMoveItemEvent event = new InventoryMoveItemEvent(this.getOwner(false).getInventory(),
|
||||
CraftItemStack.asCraftMirror(itemstack), destinationInventory, true);
|
||||
boolean result = event.callEvent();
|
||||
if (!event.calledGetItem && !event.calledSetItem) {
|
||||
skipPushModeEventFire = true;
|
||||
}
|
||||
if (!result) {
|
||||
cooldownHopper(this);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (event.calledSetItem) {
|
||||
return CraftItemStack.asNMSCopy(event.getItem());
|
||||
} else {
|
||||
return itemstack;
|
||||
}
|
||||
}
|
||||
|
||||
private static ItemStack callPullMoveEvent(IHopper hopper, IInventory iinventory, ItemStack itemstack) {
|
||||
Inventory sourceInventory = getInventory(iinventory);
|
||||
Inventory destination = getInventory(hopper);
|
||||
|
||||
InventoryMoveItemEvent event = new InventoryMoveItemEvent(sourceInventory,
|
||||
// Mirror is safe as we no plugins ever use this item
|
||||
CraftItemStack.asCraftMirror(itemstack), destination, false);
|
||||
boolean result = event.callEvent();
|
||||
if (!event.calledGetItem && !event.calledSetItem) {
|
||||
skipPullModeEventFire = true;
|
||||
}
|
||||
if (!result) {
|
||||
cooldownHopper(hopper);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (event.calledSetItem) {
|
||||
return CraftItemStack.asNMSCopy(event.getItem());
|
||||
} else {
|
||||
return itemstack;
|
||||
}
|
||||
}
|
||||
|
||||
private static Inventory getInventory(IInventory iinventory) {
|
||||
Inventory sourceInventory;// Have to special case large chests as they work oddly
|
||||
if (iinventory instanceof InventoryLargeChest) {
|
||||
sourceInventory = new org.bukkit.craftbukkit.inventory.CraftInventoryDoubleChest((InventoryLargeChest) iinventory);
|
||||
} else if (iinventory instanceof TileEntity) {
|
||||
sourceInventory = ((TileEntity) iinventory).getOwner(false).getInventory();
|
||||
} else {
|
||||
sourceInventory = iinventory.getOwner().getInventory();
|
||||
}
|
||||
return sourceInventory;
|
||||
}
|
||||
|
||||
private static void cooldownHopper(IHopper hopper) {
|
||||
if (hopper instanceof TileEntityHopper) {
|
||||
((TileEntityHopper) hopper).setCooldown(hopper.getWorld().spigotConfig.hopperTransfer);
|
||||
} else if (hopper instanceof EntityMinecartHopper) {
|
||||
((EntityMinecartHopper) hopper).setCooldown(hopper.getWorld().spigotConfig.hopperTransfer / 2);
|
||||
}
|
||||
}
|
||||
// Paper end
|
||||
|
||||
private boolean k() {
|
||||
IInventory iinventory = this.l();
|
||||
|
||||
if (iinventory == null) {
|
||||
return false;
|
||||
} else {
|
||||
EnumDirection enumdirection = ((EnumDirection) this.getBlock().get(BlockHopper.FACING)).opposite();
|
||||
|
||||
if (this.b(iinventory, enumdirection)) {
|
||||
return false;
|
||||
} else {
|
||||
return hopperPush(iinventory, enumdirection); /* // Paper - disable rest
|
||||
for (int i = 0; i < this.getSize(); ++i) {
|
||||
if (!this.getItem(i).isEmpty()) {
|
||||
ItemStack itemstack = this.getItem(i).cloneItemStack();
|
||||
// ItemStack itemstack1 = addItem(this, iinventory, this.splitStack(i, 1), enumdirection);
|
||||
|
||||
// CraftBukkit start - Call event when pushing items into other inventories
|
||||
CraftItemStack oitemstack = CraftItemStack.asCraftMirror(this.splitStack(i, world.spigotConfig.hopperAmount)); // Spigot
|
||||
|
||||
Inventory destinationInventory;
|
||||
// Have to special case large chests as they work oddly
|
||||
if (iinventory instanceof InventoryLargeChest) {
|
||||
destinationInventory = new org.bukkit.craftbukkit.inventory.CraftInventoryDoubleChest((InventoryLargeChest) iinventory);
|
||||
} else {
|
||||
destinationInventory = iinventory.getOwner().getInventory();
|
||||
}
|
||||
|
||||
InventoryMoveItemEvent event = new InventoryMoveItemEvent(this.getOwner().getInventory(), oitemstack.clone(), destinationInventory, true);
|
||||
this.getWorld().getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
this.setItem(i, itemstack);
|
||||
this.setCooldown(world.spigotConfig.hopperTransfer); // Spigot
|
||||
return false;
|
||||
}
|
||||
int origCount = event.getItem().getAmount(); // Spigot
|
||||
ItemStack itemstack1 = addItem(this, iinventory, CraftItemStack.asNMSCopy(event.getItem()), enumdirection);
|
||||
// CraftBukkit end
|
||||
|
||||
if (itemstack1.isEmpty()) {
|
||||
iinventory.update();
|
||||
return true;
|
||||
}
|
||||
|
||||
itemstack.subtract(origCount - itemstack1.getCount()); // Spigot
|
||||
this.setItem(i, itemstack);
|
||||
}
|
||||
}
|
||||
|
||||
return false;*/ // Paper - end commenting out replaced block for Hopper Optimizations
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IntStream a(IInventory iinventory, EnumDirection enumdirection) {
|
||||
return iinventory instanceof IWorldInventory ? IntStream.of(((IWorldInventory) iinventory).getSlotsForFace(enumdirection)) : IntStream.range(0, iinventory.getSize());
|
||||
}
|
||||
|
||||
private static boolean allMatch(IInventory iinventory, EnumDirection enumdirection, java.util.function.BiPredicate<ItemStack, Integer> test) {
|
||||
if (iinventory instanceof IWorldInventory) {
|
||||
for (int i : ((IWorldInventory) iinventory).getSlotsForFace(enumdirection)) {
|
||||
if (!test.test(iinventory.getItem(i), i)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int size = iinventory.getSize();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (!test.test(iinventory.getItem(i), i)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean anyMatch(IInventory iinventory, EnumDirection enumdirection, java.util.function.BiPredicate<ItemStack, Integer> test) {
|
||||
if (iinventory instanceof IWorldInventory) {
|
||||
for (int i : ((IWorldInventory) iinventory).getSlotsForFace(enumdirection)) {
|
||||
if (test.test(iinventory.getItem(i), i)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int size = iinventory.getSize();
|
||||
for (int i = 0; i < size; i++) {
|
||||
if (test.test(iinventory.getItem(i), i)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private static final java.util.function.BiPredicate<ItemStack, Integer> STACK_SIZE_TEST = (itemstack, i) -> itemstack.getCount() >= itemstack.getMaxStackSize();
|
||||
private static final java.util.function.BiPredicate<ItemStack, Integer> IS_EMPTY_TEST = (itemstack, i) -> itemstack.isEmpty();
|
||||
|
||||
// Paper end
|
||||
|
||||
private boolean b(IInventory iinventory, EnumDirection enumdirection) {
|
||||
// Paper start - no streams
|
||||
return allMatch(iinventory, enumdirection, STACK_SIZE_TEST);
|
||||
// Paper end
|
||||
}
|
||||
|
||||
private static boolean c(IInventory iinventory, EnumDirection enumdirection) {
|
||||
return allMatch(iinventory, enumdirection, IS_EMPTY_TEST);
|
||||
}
|
||||
|
||||
public static boolean a(IHopper ihopper) {
|
||||
IInventory iinventory = b(ihopper);
|
||||
|
||||
if (iinventory != null) {
|
||||
EnumDirection enumdirection = EnumDirection.DOWN;
|
||||
|
||||
// Paper start - optimize hoppers and remove streams
|
||||
skipPullModeEventFire = skipHopperEvents;
|
||||
return !c(iinventory, enumdirection) && anyMatch(iinventory, enumdirection, (item, i) -> {
|
||||
// Logic copied from below to avoid extra getItem calls
|
||||
if (!item.isEmpty() && canTakeItem(iinventory, item, i, enumdirection)) {
|
||||
return hopperPull(ihopper, iinventory, item, i);
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
// Paper end
|
||||
} else {
|
||||
Iterator iterator = c(ihopper).iterator();
|
||||
|
||||
EntityItem entityitem;
|
||||
|
||||
do {
|
||||
if (!iterator.hasNext()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
entityitem = (EntityItem) iterator.next();
|
||||
} while (!a((IInventory) ihopper, entityitem));
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean a(IHopper ihopper, IInventory iinventory, int i, EnumDirection enumdirection) {// Paper - method unused as logic is inlined above
|
||||
ItemStack itemstack = iinventory.getItem(i);
|
||||
|
||||
if (!itemstack.isEmpty() && b(iinventory, itemstack, i, enumdirection)) { // If this logic changes, update above. this is left inused incase reflective plugins
|
||||
return hopperPull(ihopper, iinventory, itemstack, i); /* // Paper - disable rest
|
||||
ItemStack itemstack1 = itemstack.cloneItemStack();
|
||||
// ItemStack itemstack2 = addItem(iinventory, ihopper, iinventory.splitStack(i, 1), (EnumDirection) null);
|
||||
// CraftBukkit start - Call event on collection of items from inventories into the hopper
|
||||
CraftItemStack oitemstack = CraftItemStack.asCraftMirror(iinventory.splitStack(i, ihopper.getWorld().spigotConfig.hopperAmount)); // Spigot
|
||||
|
||||
Inventory sourceInventory;
|
||||
// Have to special case large chests as they work oddly
|
||||
if (iinventory instanceof InventoryLargeChest) {
|
||||
sourceInventory = new org.bukkit.craftbukkit.inventory.CraftInventoryDoubleChest((InventoryLargeChest) iinventory);
|
||||
} else {
|
||||
sourceInventory = iinventory.getOwner().getInventory();
|
||||
}
|
||||
|
||||
InventoryMoveItemEvent event = new InventoryMoveItemEvent(sourceInventory, oitemstack.clone(), ihopper.getOwner().getInventory(), false);
|
||||
|
||||
ihopper.getWorld().getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
iinventory.setItem(i, itemstack1);
|
||||
|
||||
if (ihopper instanceof TileEntityHopper) {
|
||||
((TileEntityHopper) ihopper).setCooldown(ihopper.getWorld().spigotConfig.hopperTransfer); // Spigot
|
||||
} else if (ihopper instanceof EntityMinecartHopper) {
|
||||
((EntityMinecartHopper) ihopper).setCooldown(ihopper.getWorld().spigotConfig.hopperTransfer / 2); // Spigot
|
||||
}
|
||||
return false;
|
||||
}
|
||||
int origCount = event.getItem().getAmount(); // Spigot
|
||||
ItemStack itemstack2 = addItem(iinventory, ihopper, CraftItemStack.asNMSCopy(event.getItem()), null);
|
||||
// CraftBukkit end
|
||||
|
||||
if (itemstack2.isEmpty()) {
|
||||
iinventory.update();
|
||||
return true;
|
||||
}
|
||||
|
||||
itemstack1.subtract(origCount - itemstack2.getCount()); // Spigot
|
||||
iinventory.setItem(i, itemstack1);*/ // Paper - end commenting out replaced block for Hopper Optimizations
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean a(IInventory iinventory, EntityItem entityitem) {
|
||||
boolean flag = false;
|
||||
// CraftBukkit start
|
||||
InventoryPickupItemEvent event = new InventoryPickupItemEvent(getInventory(iinventory), (org.bukkit.entity.Item) entityitem.getBukkitEntity()); // Paper - use getInventory() to avoid snapshot creation
|
||||
entityitem.world.getServer().getPluginManager().callEvent(event);
|
||||
if (event.isCancelled()) {
|
||||
return false;
|
||||
}
|
||||
// CraftBukkit end
|
||||
ItemStack itemstack = entityitem.getItemStack().cloneItemStack();
|
||||
ItemStack itemstack1 = addItem((IInventory) null, iinventory, itemstack, (EnumDirection) null);
|
||||
|
||||
if (itemstack1.isEmpty()) {
|
||||
flag = true;
|
||||
entityitem.die();
|
||||
} else {
|
||||
entityitem.setItemStack(itemstack1);
|
||||
}
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
public static ItemStack addItem(@Nullable IInventory iinventory, IInventory iinventory1, ItemStack itemstack, @Nullable EnumDirection enumdirection) {
|
||||
if (iinventory1 instanceof IWorldInventory && enumdirection != null) {
|
||||
IWorldInventory iworldinventory = (IWorldInventory) iinventory1;
|
||||
int[] aint = iworldinventory.getSlotsForFace(enumdirection);
|
||||
|
||||
for (int i = 0; i < aint.length && !itemstack.isEmpty(); ++i) {
|
||||
itemstack = a(iinventory, iinventory1, itemstack, aint[i], enumdirection);
|
||||
}
|
||||
} else {
|
||||
int j = iinventory1.getSize();
|
||||
|
||||
for (int k = 0; k < j && !itemstack.isEmpty(); ++k) {
|
||||
itemstack = a(iinventory, iinventory1, itemstack, k, enumdirection);
|
||||
}
|
||||
}
|
||||
|
||||
return itemstack;
|
||||
}
|
||||
|
||||
private static boolean a(IInventory iinventory, ItemStack itemstack, int i, @Nullable EnumDirection enumdirection) {
|
||||
return !iinventory.b(i, itemstack) ? false : !(iinventory instanceof IWorldInventory) || ((IWorldInventory) iinventory).canPlaceItemThroughFace(i, itemstack, enumdirection);
|
||||
}
|
||||
|
||||
private static boolean canTakeItem(IInventory iinventory, ItemStack itemstack, int i, EnumDirection enumdirection) { return b(iinventory, itemstack, i, enumdirection); } // Paper - OBFHELPER
|
||||
private static boolean b(IInventory iinventory, ItemStack itemstack, int i, EnumDirection enumdirection) {
|
||||
return !(iinventory instanceof IWorldInventory) || ((IWorldInventory) iinventory).canTakeItemThroughFace(i, itemstack, enumdirection);
|
||||
}
|
||||
|
||||
private static ItemStack a(@Nullable IInventory iinventory, IInventory iinventory1, ItemStack itemstack, int i, @Nullable EnumDirection enumdirection) {
|
||||
ItemStack itemstack1 = iinventory1.getItem(i);
|
||||
|
||||
if (a(iinventory1, itemstack, i, enumdirection)) {
|
||||
boolean flag = false;
|
||||
boolean flag1 = iinventory1.isEmpty();
|
||||
|
||||
if (itemstack1.isEmpty()) {
|
||||
IGNORE_TILE_UPDATES = true; // Paper
|
||||
iinventory1.setItem(i, itemstack);
|
||||
IGNORE_TILE_UPDATES = false; // Paper
|
||||
itemstack = ItemStack.b;
|
||||
flag = true;
|
||||
} else if (a(itemstack1, itemstack)) {
|
||||
int j = itemstack.getMaxStackSize() - itemstack1.getCount();
|
||||
int k = Math.min(itemstack.getCount(), j);
|
||||
|
||||
itemstack.subtract(k);
|
||||
itemstack1.add(k);
|
||||
flag = k > 0;
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
if (flag1 && iinventory1 instanceof TileEntityHopper) {
|
||||
TileEntityHopper tileentityhopper = (TileEntityHopper) iinventory1;
|
||||
|
||||
if (!tileentityhopper.y()) {
|
||||
byte b0 = 0;
|
||||
|
||||
if (iinventory instanceof TileEntityHopper) {
|
||||
TileEntityHopper tileentityhopper1 = (TileEntityHopper) iinventory;
|
||||
|
||||
if (tileentityhopper.k >= tileentityhopper1.k) {
|
||||
b0 = 1;
|
||||
}
|
||||
}
|
||||
|
||||
tileentityhopper.setCooldown(tileentityhopper.world.spigotConfig.hopperTransfer - b0); // Spigot
|
||||
}
|
||||
}
|
||||
|
||||
iinventory1.update();
|
||||
}
|
||||
}
|
||||
|
||||
return itemstack;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private IInventory l() {
|
||||
EnumDirection enumdirection = (EnumDirection) this.getBlock().get(BlockHopper.FACING);
|
||||
|
||||
return b(this.getWorld(), this.position.shift(enumdirection));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static IInventory b(IHopper ihopper) {
|
||||
return a(ihopper.getWorld(), ihopper.x(), ihopper.z() + 1.0D, ihopper.A());
|
||||
}
|
||||
|
||||
public static List<EntityItem> c(IHopper ihopper) {
|
||||
// Paper start - Optimize item suck in. remove streams, restore 1.12 checks. Seriously checking the bowl?!
|
||||
World world = ihopper.getWorld();
|
||||
double d0 = ihopper.getX();
|
||||
double d1 = ihopper.getY();
|
||||
double d2 = ihopper.getZ();
|
||||
AxisAlignedBB bb = new AxisAlignedBB(d0 - 0.5D, d1, d2 - 0.5D, d0 + 0.5D, d1 + 1.5D, d2 + 0.5D);
|
||||
return world.getEntities(EntityItem.class, bb, Entity::isAlive);
|
||||
// Paper end
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static IInventory b(World world, BlockPosition blockposition) {
|
||||
return a(world, (double) blockposition.getX() + 0.5D, (double) blockposition.getY() + 0.5D, (double) blockposition.getZ() + 0.5D, true); // Paper
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static IInventory a(World world, double d0, double d1, double d2) { return a(world, d0, d1, d2, false); } // Paper - overload to default false
|
||||
public static IInventory a(World world, double d0, double d1, double d2, boolean optimizeEntities) { // Paper
|
||||
Object object = null;
|
||||
BlockPosition blockposition = new BlockPosition(d0, d1, d2);
|
||||
if ( !world.isLoaded( blockposition ) ) return null; // Spigot
|
||||
IBlockData iblockdata = world.getType(blockposition);
|
||||
Block block = iblockdata.getBlock();
|
||||
|
||||
if (block instanceof IInventoryHolder) {
|
||||
object = ((IInventoryHolder) block).a(iblockdata, world, blockposition);
|
||||
} else if (block.isTileEntity()) {
|
||||
TileEntity tileentity = world.getTileEntity(blockposition);
|
||||
|
||||
if (tileentity instanceof IInventory) {
|
||||
object = (IInventory) tileentity;
|
||||
if (object instanceof TileEntityChest && block instanceof BlockChest) {
|
||||
object = BlockChest.getInventory((BlockChest) block, iblockdata, world, blockposition, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (object == null && (!optimizeEntities || !org.bukkit.craftbukkit.util.CraftMagicNumbers.getMaterial(block).isOccluding())) { // Paper
|
||||
List<Entity> list = world.getEntities((Entity) null, new AxisAlignedBB(d0 - 0.5D, d1 - 0.5D, d2 - 0.5D, d0 + 0.5D, d1 + 0.5D, d2 + 0.5D), IEntitySelector.d);
|
||||
|
||||
if (!list.isEmpty()) {
|
||||
object = (IInventory) list.get(world.random.nextInt(list.size()));
|
||||
}
|
||||
}
|
||||
|
||||
return (IInventory) object;
|
||||
}
|
||||
|
||||
private static boolean a(ItemStack itemstack, ItemStack itemstack1) {
|
||||
return itemstack.getItem() != itemstack1.getItem() ? false : (itemstack.getDamage() != itemstack1.getDamage() ? false : (itemstack.getCount() > itemstack.getMaxStackSize() ? false : ItemStack.equals(itemstack, itemstack1)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public double x() {
|
||||
return (double) this.position.getX() + 0.5D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double z() {
|
||||
return (double) this.position.getY() + 0.5D;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double A() {
|
||||
return (double) this.position.getZ() + 0.5D;
|
||||
}
|
||||
|
||||
private void setCooldown(int i) {
|
||||
this.j = i;
|
||||
}
|
||||
|
||||
private boolean m() {
|
||||
return this.j > 0;
|
||||
}
|
||||
|
||||
private boolean y() {
|
||||
return this.j > 8;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NonNullList<ItemStack> f() {
|
||||
return this.items;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(NonNullList<ItemStack> nonnulllist) {
|
||||
this.items = nonnulllist;
|
||||
}
|
||||
|
||||
public void a(Entity entity) {
|
||||
if (entity instanceof EntityItem) {
|
||||
BlockPosition blockposition = this.getPosition();
|
||||
|
||||
if (VoxelShapes.c(VoxelShapes.a(entity.getBoundingBox().d((double) (-blockposition.getX()), (double) (-blockposition.getY()), (double) (-blockposition.getZ()))), this.aa_(), OperatorBoolean.AND)) {
|
||||
this.a(() -> {
|
||||
return a((IInventory) this, (EntityItem) entity);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Container createContainer(int i, PlayerInventory playerinventory) {
|
||||
return new ContainerHopper(i, playerinventory, this);
|
||||
}
|
||||
}
|
||||
@@ -5,12 +5,12 @@ Subject: [PATCH] LivingEntity safeFallDistance
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
index e535750d01a6c1bf4b1fe94df518166213da9b08..156df8cf25d1ee07988623fe0a8d87b652390b3b 100644
|
||||
index 9f0645dc5f76ee9ef73d88f768025429e5a9edf7..4ccbb3ef3c597ef9da2c6744f410283a1dc2538c 100644
|
||||
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
@@ -836,4 +836,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
@@ -850,4 +850,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
*/
|
||||
void playPickupItemAnimation(@NotNull Item item, int quantity);
|
||||
void setHurtDirection(float hurtDirection);
|
||||
// Paper end
|
||||
+
|
||||
+ // Purpur start
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
index 156df8cf25d1ee07988623fe0a8d87b652390b3b..d3adc23bb34d108d2afa9903988606d2d53f6513 100644
|
||||
index 4ccbb3ef3c597ef9da2c6744f410283a1dc2538c..50c26609aadf8d4a51cd81cc0c8952e4cfeee738 100644
|
||||
--- a/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/entity/LivingEntity.java
|
||||
@@ -851,5 +851,12 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
@@ -865,5 +865,12 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource
|
||||
* @param safeFallDistance Safe fall distance
|
||||
*/
|
||||
void setSafeFallDistance(float safeFallDistance);
|
||||
|
||||
@@ -362,15 +362,6 @@ Copy passenger list in enderTeleportTo
|
||||
|
||||
Fixes https://github.com/Spottedleaf/Tuinity/issues/208
|
||||
|
||||
Apply more strict limitations to books
|
||||
|
||||
For reference is the vanilla limits, this must be checked
|
||||
on update
|
||||
- Max book pages: 50
|
||||
- Max Length: 256
|
||||
|
||||
Currently, patch limits to 50 pages and 512 characters.
|
||||
|
||||
Rewrite the light engine
|
||||
|
||||
The standard vanilla light engine is plagued by
|
||||
@@ -8406,7 +8397,7 @@ index dcc5b098bfe36ef7ee8536b3da65c4ce1748c9d8..7b32a1fb79dcae355a8d95f3a8aa4284
|
||||
if (entityhuman != null) {
|
||||
double d0 = entityhuman.h((Entity) this); // CraftBukkit - decompile error
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index dd3287f953a1a24d2406816b3c0ae176476b6452..43a4b474273a58ac3995407e72e5b830696b9ba0 100644
|
||||
index 0294ff10dc8edb24aabfbe1589048a405c356ef0..9737c8b31482de140e14e58aa9baa8618d1c3fb4 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2858,7 +2858,11 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -11213,7 +11204,7 @@ index 6c399bcea03e839bf2f21e92b5d76d46b7088667..d3bf356ea768a32a5684eb851a2a0add
|
||||
}
|
||||
// Paper end - optimised tracker
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 3e1f88bce8e0ba95f73bca204549db0c65b1465e..df01083f826463cce714eccd5317791c781f04ed 100644
|
||||
index 4d3a427b16e1e0d6889faf4b913b212f8a6e938d..acaaf78c13f379f9b076d615c8a77ebc4bc8d2be 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -419,7 +419,9 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -11227,44 +11218,7 @@ index 3e1f88bce8e0ba95f73bca204549db0c65b1465e..df01083f826463cce714eccd5317791c
|
||||
this.networkManager.sendPacket(new PacketPlayOutVehicleMove(entity));
|
||||
return;
|
||||
}
|
||||
@@ -898,6 +900,36 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
|
||||
@Override
|
||||
public void a(PacketPlayInBEdit packetplayinbedit) {
|
||||
+ // Tuinity start - apply strict vanilla limits to books
|
||||
+ ItemStack bookStack = packetplayinbedit.b();
|
||||
+ if (!bookStack.isEmpty() && bookStack.getTag() != null) {
|
||||
+ NBTTagList pages = bookStack.getTag().getList("pages", 8);
|
||||
+ if (pages != null && !pages.isEmpty()) {
|
||||
+ if (pages.size() > 50) {
|
||||
+ this.minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!"));
|
||||
+ return;
|
||||
+ }
|
||||
+ for (int i = 0, len = pages.size(); i < len; ++i) {
|
||||
+ NBTBase base = pages.get(i);
|
||||
+ if (!(base instanceof NBTTagString)) {
|
||||
+ this.minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!"));
|
||||
+ return;
|
||||
+ }
|
||||
+ String string = ((NBTTagString)base).asString();
|
||||
+ if (string.length() <= 256) {
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (string.length() > (256*2)) {
|
||||
+ this.minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!"));
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // Don't check the full length of the string, it's too expensive, could be exploited.
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ // Tuinity end - apply strict vanilla limits to books
|
||||
// Paper start
|
||||
ItemStack testStack = packetplayinbedit.b(); // TODO(Proximyst): Add obfhelper here
|
||||
if (!server.isPrimaryThread() && !testStack.isEmpty() && testStack.getTag() != null) {
|
||||
@@ -1058,7 +1090,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1068,7 +1070,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
|
||||
if (this.teleportPos != null) {
|
||||
@@ -11273,7 +11227,7 @@ index 3e1f88bce8e0ba95f73bca204549db0c65b1465e..df01083f826463cce714eccd5317791c
|
||||
this.A = this.e;
|
||||
this.a(this.teleportPos.x, this.teleportPos.y, this.teleportPos.z, this.player.yaw, this.player.pitch);
|
||||
}
|
||||
@@ -1128,7 +1160,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1138,7 +1140,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
speed = player.abilities.walkSpeed * 10f;
|
||||
}
|
||||
// Paper start - Prevent moving into unloaded chunks
|
||||
@@ -11282,7 +11236,7 @@ index 3e1f88bce8e0ba95f73bca204549db0c65b1465e..df01083f826463cce714eccd5317791c
|
||||
this.internalTeleport(this.player.locX(), this.player.locY(), this.player.locZ(), this.player.yaw, this.player.pitch, Collections.emptySet());
|
||||
return;
|
||||
}
|
||||
@@ -1184,6 +1216,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1194,6 +1196,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
|
||||
this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9));
|
||||
@@ -11290,7 +11244,7 @@ index 3e1f88bce8e0ba95f73bca204549db0c65b1465e..df01083f826463cce714eccd5317791c
|
||||
this.player.setOnGround(packetplayinflying.b()); // CraftBukkit - SPIGOT-5810, SPIGOT-5835: reset by this.player.move
|
||||
// Paper start - prevent position desync
|
||||
if (this.teleportPos != null) {
|
||||
@@ -1208,7 +1241,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1218,7 +1221,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
|
||||
this.player.setLocation(d4, d5, d6, f, f1);
|
||||
|
||||
@@ -149,7 +149,7 @@ index b5e1a860a2569d7668330827614d221b60f3fc78..5f85a1d513f4fdc21b64e1a2b6882e33
|
||||
// Paper start
|
||||
public static final Predicate<Entity> affectsSpawning = (entity) -> {
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index df01083f826463cce714eccd5317791c781f04ed..d27124959e4527cc7bfa1b38b8d9f5c56894a617 100644
|
||||
index acaaf78c13f379f9b076d615c8a77ebc4bc8d2be..c709ff1b228008a45c789903a535a0c95f26948f 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -250,6 +250,12 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -174,7 +174,7 @@ index df01083f826463cce714eccd5317791c781f04ed..d27124959e4527cc7bfa1b38b8d9f5c5
|
||||
// Skip the first time we do this
|
||||
if (true) { // Spigot - don't skip any move events
|
||||
Location oldTo = to.clone();
|
||||
@@ -1237,7 +1245,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1217,7 +1225,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
|
||||
if (!this.player.H() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.playerInteractManager.isCreative() && this.player.playerInteractManager.getGameMode() != EnumGamemode.SPECTATOR) { // Spigot
|
||||
flag1 = true;
|
||||
@@ -183,7 +183,7 @@ index df01083f826463cce714eccd5317791c781f04ed..d27124959e4527cc7bfa1b38b8d9f5c5
|
||||
}
|
||||
|
||||
this.player.setLocation(d4, d5, d6, f, f1);
|
||||
@@ -1276,6 +1284,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1256,6 +1264,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
this.lastYaw = to.getYaw();
|
||||
this.lastPitch = to.getPitch();
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ index fcb31147622b4b81934be05ffc8de5e821ce69b7..ce26e65aaf25a41663ecd8c935967c33
|
||||
|
||||
protected int getChestSlots() {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 43a4b474273a58ac3995407e72e5b830696b9ba0..876288defab03457555709fabaa0bc07ba58707b 100644
|
||||
index 9737c8b31482de140e14e58aa9baa8618d1c3fb4..e98e0ca17dbb683fad97be6b9f226e1ce579431f 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -132,6 +132,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -62,11 +62,11 @@ index 43a4b474273a58ac3995407e72e5b830696b9ba0..876288defab03457555709fabaa0bc07
|
||||
|
||||
protected void playBlockStepSound() {
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index 1fc356d0b74c1cbb19bf7527088f1f61b6da5422..66447231244dbe3d6fadaa0d00710f9ec7f72445 100644
|
||||
index 16e69cfd4994fd6850ee3635ea819379412351c9..0292cae6225ae2ee156f436c8827a018e8ffa723 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -816,4 +816,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
getHandle().receive(((CraftItem) item).getHandle(), quantity);
|
||||
@@ -826,4 +826,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
getHandle().setHurtDirection(hurtDirection);
|
||||
}
|
||||
// Paper end
|
||||
+
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] EntityMoveEvent
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 876288defab03457555709fabaa0bc07ba58707b..1af01a6b8a2ea0912d552880f69e7f0dfd5ec991 100644
|
||||
index e98e0ca17dbb683fad97be6b9f226e1ce579431f..4bbfb21d13c7e2f3ffcaaa31bd9ceee3755aa7cc 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2813,6 +2813,20 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -67,10 +67,10 @@ index 08a3875d7a6b8a003ba133a835dcdd75849383ae..5c4d9b1f4e926909439b9c290d7cc572
|
||||
public Scoreboard getScoreboard() {
|
||||
return getBukkitEntity().getScoreboard().getHandle();
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index d27124959e4527cc7bfa1b38b8d9f5c56894a617..ed86e0b82682ae445c2430115e39588c0a77028d 100644
|
||||
index c709ff1b228008a45c789903a535a0c95f26948f..69feeaf08a37f30707aee19c955cd8ab0b3c3112 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1686,6 +1686,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1666,6 +1666,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer());
|
||||
// Paper start
|
||||
PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()];
|
||||
|
||||
@@ -17,7 +17,7 @@ index 8e93f1540ba5f995489c1fbcec70d10b011cd9c3..470f92c4fb0919d052b19acff8dff533
|
||||
return this.a;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index ed86e0b82682ae445c2430115e39588c0a77028d..529aa684e410762182f972be250be151e52b7003 100644
|
||||
index 69feeaf08a37f30707aee19c955cd8ab0b3c3112..db0c2886be026d8a833736bec3396bc0019c16fd 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -84,6 +84,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -50,7 +50,7 @@ index ed86e0b82682ae445c2430115e39588c0a77028d..529aa684e410762182f972be250be151
|
||||
if (this.isPendingPing()) {
|
||||
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
||||
PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info
|
||||
@@ -2860,6 +2876,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2840,6 +2856,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
|
||||
@Override
|
||||
public void a(PacketPlayInKeepAlive packetplayinkeepalive) {
|
||||
|
||||
@@ -147,7 +147,7 @@ index 7b32a1fb79dcae355a8d95f3a8aa4284ec5d10db..b281ca841b2b7b51add3409318e2b92d
|
||||
return false;
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 1af01a6b8a2ea0912d552880f69e7f0dfd5ec991..1f408592d2af7b3b34f4a70506d1ffcd941c44e0 100644
|
||||
index 4bbfb21d13c7e2f3ffcaaa31bd9ceee3755aa7cc..9af491260a586d322796f8419d6aa1fffae10140 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2171,7 +2171,7 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -110,7 +110,7 @@ index 42e6761c8b18b79ffd3f4d5e853ea87a2c153c23..cfb009c811bd2908d38da1b0007cb7aa
|
||||
public EntityCow createChild(WorldServer worldserver, EntityAgeable entityageable) {
|
||||
return (EntityCow) EntityTypes.COW.a((World) worldserver);
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 1f408592d2af7b3b34f4a70506d1ffcd941c44e0..8192cbe48cef4e856dd9b5f1e4e4f4ced7c89824 100644
|
||||
index 9af491260a586d322796f8419d6aa1fffae10140..594e2735cd58a0a19446369b34ba8282f2af2130 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -80,7 +80,7 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -17,10 +17,10 @@ index 5c4d9b1f4e926909439b9c290d7cc5726cb8822e..32d1ca467fd80de220c5bdefd23c1f84
|
||||
this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition()));
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 529aa684e410762182f972be250be151e52b7003..0ef30ff92bb9e86b624c4988c00e3be6d95e554a 100644
|
||||
index db0c2886be026d8a833736bec3396bc0019c16fd..edac7a57c6c0612e87e836becbe59fc242e21b45 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -2857,6 +2857,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2837,6 +2837,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
}
|
||||
// Paper end
|
||||
|
||||
@@ -22,7 +22,7 @@ index 2291135eaef64c403183724cb6e413cd7e472672..bc61aaff65a7dc1e7534452b285953b8
|
||||
super(i, j, k);
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 8192cbe48cef4e856dd9b5f1e4e4f4ced7c89824..3138ca1cf56b7c89461b00a9e59c0a983d0fca77 100644
|
||||
index 594e2735cd58a0a19446369b34ba8282f2af2130..b9af6b392d4c7e83263d763eb86e77a407ca5ebf 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -98,9 +98,9 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Disable loot drops on death by cramming
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 3138ca1cf56b7c89461b00a9e59c0a983d0fca77..65639d3485f5dad566a3f709eceffedc0848ccaf 100644
|
||||
index b9af6b392d4c7e83263d763eb86e77a407ca5ebf..9373b7123eb4f108a96638c3814d50a47426a049 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1490,8 +1490,10 @@ public abstract class EntityLiving extends Entity {
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: William Blake Galbreath <Blake.Galbreath@GMail.com>
|
||||
Date: Sat, 4 Apr 2020 17:16:30 -0500
|
||||
Subject: [PATCH] Debug stick should not update neighbors
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 3adb29f004d2fee36f3ee9b21ee5417e84b64837..e7759f24819ea7c62d3ae52ed1cc5c00f994a836 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -229,6 +229,11 @@ public final class ItemStack {
|
||||
if (this.getItem() == Items.BONE_MEAL) {
|
||||
world.captureTreeGeneration = true;
|
||||
}
|
||||
+ // Purpur start
|
||||
+ else if (this.getItem() == Items.DEBUG_STICK) {
|
||||
+ world.captureBlockStates = false;
|
||||
+ }
|
||||
+ // Purpur end
|
||||
}
|
||||
Item item = this.getItem();
|
||||
EnumInteractionResult enuminteractionresult = item.a(itemactioncontext);
|
||||
@@ -17,7 +17,7 @@ index bcd70f3d871ef8ef957fde3bb86c5ae29dce3d2f..01cb91589912e1d3e4b1edf9cdc8fabf
|
||||
|
||||
public void f(double d0, double d1, double d2) {
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 65639d3485f5dad566a3f709eceffedc0848ccaf..5bde43be4294f0b55d699b2bf2bb598e9ef29fea 100644
|
||||
index 9373b7123eb4f108a96638c3814d50a47426a049..d774548cf872296384b1fd6317cedbd9a73f87d0 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2489,7 +2489,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Add obfhelpers for plugin use
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index e7759f24819ea7c62d3ae52ed1cc5c00f994a836..2c908a60401e851e56ec26e444d3c075cb256f24 100644
|
||||
index 5a62ac72edc49cd032cd02fa8d007959517d063b..fcdb82a4e54810a7da9f5d4e6a0d975c23a24884 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -644,6 +644,7 @@ public final class ItemStack {
|
||||
@@ -54,7 +54,7 @@ index c2be0c2bc315876f120cff207e5516dda2bd55d7..358d6d660581686a2e8d49e13e8c2ade
|
||||
if (entry != null) {
|
||||
ItemStack itemstack = (ItemStack) entry.getValue();
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 2c908a60401e851e56ec26e444d3c075cb256f24..6a9b7e609489244c4d239895de77033f58632d9d 100644
|
||||
index fcdb82a4e54810a7da9f5d4e6a0d975c23a24884..0d011a1aae667f473f1ad2ec60d8506cd32dff6d 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -418,10 +418,19 @@ public final class ItemStack {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Implement elytra settings
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 5bde43be4294f0b55d699b2bf2bb598e9ef29fea..1e32658dc3dada926767c35ebf618e1b493d5607 100644
|
||||
index d774548cf872296384b1fd6317cedbd9a73f87d0..92095d28bfdcf309585b5684be3b880591b7d18c 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -2848,7 +2848,16 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -46,7 +46,7 @@ index e775fe69ee7e555721bc73e7cb0dd3136736bc9c..990eb656699d9ead26b42fbb305530b7
|
||||
itemstack.subtract(1);
|
||||
} else ((EntityPlayer) entityhuman).getBukkitEntity().updateInventory();
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 6a9b7e609489244c4d239895de77033f58632d9d..40f553e3950318f5a1940e3dccd0018653770fdb 100644
|
||||
index 0d011a1aae667f473f1ad2ec60d8506cd32dff6d..623bcb93cbdf0f67ee999104936f9d60c5228037 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -450,7 +450,7 @@ public final class ItemStack {
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 0ef30ff92bb9e86b624c4988c00e3be6d95e554a..01f7de31ac2ba2807edd90fd87acd2afac7b34e4 100644
|
||||
index edac7a57c6c0612e87e836becbe59fc242e21b45..b74ca27ed9fe341b65443bdf954b6c1419c77dd4 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -1038,7 +1038,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1018,7 +1018,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
if (itemstack.getItem() == Items.WRITABLE_BOOK) {
|
||||
NBTTagList nbttaglist = new NBTTagList();
|
||||
|
||||
@@ -18,7 +18,7 @@ index 0ef30ff92bb9e86b624c4988c00e3be6d95e554a..01f7de31ac2ba2807edd90fd87acd2af
|
||||
ItemStack old = itemstack.cloneItemStack(); // CraftBukkit
|
||||
itemstack.a("pages", (NBTBase) nbttaglist);
|
||||
CraftEventFactory.handleEditBookEvent(player, i, old, itemstack); // CraftBukkit
|
||||
@@ -1056,13 +1057,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1036,13 +1037,14 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
itemstack1.setTag(nbttagcompound.clone());
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ index 0ef30ff92bb9e86b624c4988c00e3be6d95e554a..01f7de31ac2ba2807edd90fd87acd2af
|
||||
ChatComponentText chatcomponenttext = new ChatComponentText(s1);
|
||||
String s2 = IChatBaseComponent.ChatSerializer.a((IChatBaseComponent) chatcomponenttext);
|
||||
|
||||
@@ -1074,6 +1076,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1054,6 +1056,16 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,10 +92,10 @@ index 7a40f0864677e54c3a0eca6dcb9a115864edfbbd..1d5d87e61946c674f61541455cf54018
|
||||
}
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index 01f7de31ac2ba2807edd90fd87acd2afac7b34e4..a1a215dbf6fa050177d15ea6d7adcff1e6887e6e 100644
|
||||
index b74ca27ed9fe341b65443bdf954b6c1419c77dd4..c3fb79195021452c0e2ab41b56e67dc5b37f53be 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -2249,6 +2249,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2229,6 +2229,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
boolean triggerLeashUpdate = itemInHand != null && itemInHand.getItem() == Items.LEAD && entity instanceof EntityInsentient;
|
||||
Item origItem = this.player.inventory.getItemInHand() == null ? null : this.player.inventory.getItemInHand().getItem();
|
||||
PlayerInteractEntityEvent event;
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 1e32658dc3dada926767c35ebf618e1b493d5607..c2a1e9679f9c18d29e060709e1b7818057ab12d2 100644
|
||||
index 92095d28bfdcf309585b5684be3b880591b7d18c..e2635413da43f4afc412c0443ab99bc3aaa0ca33 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -277,6 +277,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Totems work in inventory
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index c2a1e9679f9c18d29e060709e1b7818057ab12d2..3ef4e807bd75748ec786cfa84f899896b0c7da58 100644
|
||||
index e2635413da43f4afc412c0443ab99bc3aaa0ca33..e37f37412b6bc24fa7a64823c30bd697731294d9 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -1324,6 +1324,19 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -6,10 +6,10 @@ Subject: [PATCH] Duplicate paper's vanilla scoreboard colors patch to sync
|
||||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index a1a215dbf6fa050177d15ea6d7adcff1e6887e6e..a4c7f0a86fb5542d85b81ca3bda2fc475a03a8c0 100644
|
||||
index c3fb79195021452c0e2ab41b56e67dc5b37f53be..ef8cf33431994dfee767514a20ecaceeda9854f9 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -2008,7 +2008,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -1988,7 +1988,15 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ index a1a215dbf6fa050177d15ea6d7adcff1e6887e6e..a4c7f0a86fb5542d85b81ca3bda2fc47
|
||||
PlayerConnection.this.minecraftServer.console.sendMessage(message);
|
||||
if (((LazyPlayerSet) queueEvent.getRecipients()).isLazy()) {
|
||||
for (Object player : PlayerConnection.this.minecraftServer.getPlayerList().players) {
|
||||
@@ -2041,7 +2049,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2021,7 +2029,7 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
// Paper Start - (Meh) Support for vanilla world scoreboard name coloring
|
||||
String displayName = event.getPlayer().getDisplayName();
|
||||
if (this.player.getWorld().paperConfig.useVanillaScoreboardColoring) {
|
||||
@@ -2372,7 +2372,7 @@ index bdff2368836dca230a6622a205d5772834afc6ee..9ee03b233b71d1b4b85a9a5e1f0ea9fe
|
||||
float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F;
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
index 3ef4e807bd75748ec786cfa84f899896b0c7da58..0da305798ed17b57d4100b526c49a222c90346a7 100644
|
||||
index e37f37412b6bc24fa7a64823c30bd697731294d9..84e37e38026e1fd5ec626c7c8b81972cd5ed2ea4 100644
|
||||
--- a/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
+++ b/src/main/java/net/minecraft/server/EntityLiving.java
|
||||
@@ -459,7 +459,7 @@ public abstract class EntityLiving extends Entity {
|
||||
@@ -4973,10 +4973,10 @@ index 0000000000000000000000000000000000000000..44929182dfd7ad847d9657c324f440cb
|
||||
+ }
|
||||
+}
|
||||
diff --git a/src/main/java/net/minecraft/server/PlayerConnection.java b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
index a4c7f0a86fb5542d85b81ca3bda2fc475a03a8c0..8132180f9fff6e298a0efe00dee88f78210a1f6a 100644
|
||||
index ef8cf33431994dfee767514a20ecaceeda9854f9..f16109a08804e0942f2f41d9637bd9b88c1c8893 100644
|
||||
--- a/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
+++ b/src/main/java/net/minecraft/server/PlayerConnection.java
|
||||
@@ -2266,6 +2266,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
@@ -2246,6 +2246,8 @@ public class PlayerConnection implements PacketListenerPlayIn {
|
||||
}
|
||||
this.server.getPluginManager().callEvent(event);
|
||||
|
||||
@@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak
|
||||
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
index 66447231244dbe3d6fadaa0d00710f9ec7f72445..62bdc1abe3355d1c730bcacab29b72d89f843b97 100644
|
||||
index 0292cae6225ae2ee156f436c8827a018e8ffa723..9f5802364d4098173be2d08893efa697033407e9 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
||||
@@ -827,5 +827,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
@@ -837,5 +837,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
||||
public void setSafeFallDistance(float safeFallDistance) {
|
||||
getHandle().safeFallDistance = safeFallDistance;
|
||||
}
|
||||
@@ -184,7 +184,7 @@ index a3eaeeda875d96fe4b047bd6bf993018722c96b9..f2f800087adb0238b4b672b9f6f4c8c4
|
||||
|
||||
if (((EntityHanging) object).survives()) {
|
||||
diff --git a/src/main/java/net/minecraft/server/ItemStack.java b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
index 40f553e3950318f5a1940e3dccd0018653770fdb..7161eba52ece2b4d9ed982598642f486fd314965 100644
|
||||
index 623bcb93cbdf0f67ee999104936f9d60c5228037..eb115a9c2aac9abe28d36f6284ca84f694a4898d 100644
|
||||
--- a/src/main/java/net/minecraft/server/ItemStack.java
|
||||
+++ b/src/main/java/net/minecraft/server/ItemStack.java
|
||||
@@ -738,6 +738,7 @@ public final class ItemStack {
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user