From 24f259830ac0998de2e456d34f4c23528e6ebe0d Mon Sep 17 00:00:00 2001 From: Aplosh Date: Mon, 22 May 2023 04:56:29 +0100 Subject: [PATCH] Added EquipmentSetEvent and added fast smelting --- eSpigot-API/build.gradle.kts | 2 + .../event/inventory/EquipmentSetEvent.java | 51 +++ .../net/minecraft/server/EntityHuman.java | 16 +- .../net/minecraft/server/PlayerInventory.java | 423 +++++++++--------- .../minecraft/server/TileEntityFurnace.java | 5 +- .../main/java/org/spigotmc/SpigotConfig.java | 4 + 6 files changed, 283 insertions(+), 218 deletions(-) create mode 100644 eSpigot-API/src/main/java/org/bukkit/event/inventory/EquipmentSetEvent.java diff --git a/eSpigot-API/build.gradle.kts b/eSpigot-API/build.gradle.kts index a1175d0..74406cb 100644 --- a/eSpigot-API/build.gradle.kts +++ b/eSpigot-API/build.gradle.kts @@ -30,6 +30,8 @@ dependencies { api("com.googlecode.json-simple:json-simple:1.1.1") api("org.yaml:snakeyaml:1.30") api("net.md-5:bungeecord-chat:1.8-SNAPSHOT") + implementation("org.projectlombok:lombok:1.18.26") + implementation("org.projectlombok:lombok:1.18.26") compileOnlyApi("net.sf.trove4j:trove4j:3.0.3") // provided by server // bundled with Minecraft, should be kept in sync diff --git a/eSpigot-API/src/main/java/org/bukkit/event/inventory/EquipmentSetEvent.java b/eSpigot-API/src/main/java/org/bukkit/event/inventory/EquipmentSetEvent.java new file mode 100644 index 0000000..dc8475e --- /dev/null +++ b/eSpigot-API/src/main/java/org/bukkit/event/inventory/EquipmentSetEvent.java @@ -0,0 +1,51 @@ +package org.bukkit.event.inventory; + +import lombok.Setter; +import org.bukkit.entity.HumanEntity; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; +import org.bukkit.inventory.ItemStack; + +@Setter +public class EquipmentSetEvent extends Event { + + private static final HandlerList handlers = new HandlerList(); + + private final HumanEntity humanEntity; + private final int slot; + private final ItemStack previousItem; + private final ItemStack newItem; + + public EquipmentSetEvent(HumanEntity entity, int slot, ItemStack previousItem, ItemStack newItem) { + this.humanEntity = entity; + this.slot = slot; + this.previousItem = previousItem; + this.newItem = newItem; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public HumanEntity getHumanEntity() { + return humanEntity; + } + + public int getSlot() { + return slot; + } + + public ItemStack getPreviousItem() { + return previousItem; + } + + public ItemStack getNewItem() { + return newItem; + } + +} diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java b/eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java index 99e5b67..ced5d8a 100644 --- a/eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/EntityHuman.java @@ -13,6 +13,7 @@ import org.bukkit.craftbukkit.entity.CraftPlayer; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.Player; import org.bukkit.event.entity.EntityCombustByEntityEvent; +import org.bukkit.event.inventory.EquipmentSetEvent; import org.bukkit.event.player.PlayerBedEnterEvent; import org.bukkit.event.player.PlayerBedLeaveEvent; import org.bukkit.event.player.PlayerDropItemEvent; @@ -20,10 +21,7 @@ import org.bukkit.event.player.PlayerItemConsumeEvent; import com.elevatemc.spigot.knockback.KnockbackProfile; import org.bukkit.util.Vector; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.UUID; +import java.util.*; // CraftBukkit end public abstract class EntityHuman extends EntityLiving { @@ -1722,8 +1720,16 @@ public abstract class EntityHuman extends EntityLiving { return this.inventory.getItemInHand(); } + @Override public void setEquipment(int i, ItemStack itemstack) { - this.inventory.armor[i] = itemstack; + ItemStack previous = this.inventory.armor[i]; + if (!Objects.equals(previous, itemstack)) { + if (previous != null && EquipmentSetEvent.getHandlerList().getRegisteredListeners().length != 0) { + previous = previous.cloneItemStack(); + } + this.inventory.armor[i] = itemstack; + Bukkit.getPluginManager().callEvent(new EquipmentSetEvent(this.getBukkitEntity(), i, CraftItemStack.asBukkitCopy(previous), CraftItemStack.asBukkitCopy(itemstack))); + } } public abstract boolean isSpectator(); diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java index bfea2bb..3de0b27 100644 --- a/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/PlayerInventory.java @@ -1,28 +1,25 @@ package net.minecraft.server; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Callable; -// CraftBukkit start -import java.util.List; - -import com.elevatemc.spigot.config.eSpigotConfig; import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.entity.HumanEntity; -// CraftBukkit end +import org.bukkit.inventory.InventoryHolder; +import org.spigotmc.SpigotConfig; public class PlayerInventory implements IInventory { - public ItemStack[] items = new ItemStack[36]; public ItemStack[] armor = new ItemStack[4]; public int itemInHandIndex; public EntityHuman player; private ItemStack f; public boolean e; + public List transaction = new ArrayList(); + private int maxStack = 64; - // CraftBukkit start - add fields and methods - public List transaction = new java.util.ArrayList<>(); - private int maxStack = MAX_STACK; - + @Override public ItemStack[] getContents() { return this.items; } @@ -31,26 +28,30 @@ public class PlayerInventory implements IInventory { return this.armor; } + @Override public void onOpen(CraftHumanEntity who) { - transaction.add(who); + this.transaction.add(who); } + @Override public void onClose(CraftHumanEntity who) { - transaction.remove(who); + this.transaction.remove(who); } + @Override public List getViewers() { - return transaction; + return this.transaction; } - public org.bukkit.inventory.InventoryHolder getOwner() { + @Override + public InventoryHolder getOwner() { return this.player.getBukkitEntity(); } + @Override public void setMaxStackSize(int size) { - maxStack = size; + this.maxStack = size; } - // CraftBukkit end public PlayerInventory(EntityHuman entityhuman) { this.player = entityhuman; @@ -65,61 +66,64 @@ public class PlayerInventory implements IInventory { } private int c(Item item) { - for (int i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] != null && this.items[i].getItem() == item) { return i; } + ++i; } - return -1; } private int firstPartial(ItemStack itemstack) { - for (int i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] != null && this.items[i].getItem() == itemstack.getItem() && this.items[i].isStackable() && this.items[i].count < this.items[i].getMaxStackSize() && this.items[i].count < this.getMaxStackSize() && (!this.items[i].usesData() || this.items[i].getData() == itemstack.getData()) && ItemStack.equals(this.items[i], itemstack)) { return i; } + ++i; } - return -1; } - // CraftBukkit start - Watch method above! :D public int canHold(ItemStack itemstack) { int remains = itemstack.count; - for (ItemStack item : this.items) { - if (item == null) return itemstack.count; - - // Taken from firstPartial(ItemStack) - if (item != null && item.getItem() == itemstack.getItem() && item.isStackable() && item.count < item.getMaxStackSize() && item.count < this.getMaxStackSize() && (!item.usesData() || item.getData() == itemstack.getData()) && ItemStack.equals(item, itemstack)) { - remains -= (item.getMaxStackSize() < this.getMaxStackSize() ? item.getMaxStackSize() : this.getMaxStackSize()) - item.count; + int i = 0; + while (i < this.items.length) { + if (this.items[i] == null) { + return itemstack.count; } - if (remains <= 0) return itemstack.count; + if (this.items[i] != null && this.items[i].getItem() == itemstack.getItem() && this.items[i].isStackable() && this.items[i].count < this.items[i].getMaxStackSize() && this.items[i].count < this.getMaxStackSize() && (!this.items[i].usesData() || this.items[i].getData() == itemstack.getData()) && ItemStack.equals(this.items[i], itemstack)) { + remains -= (this.items[i].getMaxStackSize() < this.getMaxStackSize() ? this.items[i].getMaxStackSize() : this.getMaxStackSize()) - this.items[i].count; + } + if (remains <= 0) { + return itemstack.count; + } + ++i; } return itemstack.count - remains; } - // CraftBukkit end public int getFirstEmptySlotIndex() { - for (int i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] == null) { return i; } + ++i; } - return -1; } public int a(Item item, int i, int j, NBTTagCompound nbttagcompound) { - int k = 0; - - int l; - ItemStack itemstack; int i1; - - for (l = 0; l < this.items.length; ++l) { + ItemStack itemstack; + int k = 0; + int l = 0; + while (l < this.items.length) { itemstack = this.items[l]; - if (itemstack != null && (item == null || itemstack.getItem() == item) && (i <= -1 || itemstack.getData() == i) && (nbttagcompound == null || GameProfileSerializer.a(nbttagcompound, itemstack.getTag(), true))) { + if (!(itemstack == null || item != null && itemstack.getItem() != item || i > -1 && itemstack.getData() != i || nbttagcompound != null && !GameProfileSerializer.a(nbttagcompound, itemstack.getTag(), true))) { i1 = j <= 0 ? itemstack.count : Math.min(j - k, itemstack.count); k += i1; if (j != 0) { @@ -127,45 +131,41 @@ public class PlayerInventory implements IInventory { if (this.items[l].count == 0) { this.items[l] = null; } - if (j > 0 && k >= j) { return k; } } } + ++l; } - - for (l = 0; l < this.armor.length; ++l) { + l = 0; + while (l < this.armor.length) { itemstack = this.armor[l]; - if (itemstack != null && (item == null || itemstack.getItem() == item) && (i <= -1 || itemstack.getData() == i) && (nbttagcompound == null || GameProfileSerializer.a(nbttagcompound, itemstack.getTag(), false))) { + if (!(itemstack == null || item != null && itemstack.getItem() != item || i > -1 && itemstack.getData() != i || nbttagcompound != null && !GameProfileSerializer.a(nbttagcompound, itemstack.getTag(), false))) { i1 = j <= 0 ? itemstack.count : Math.min(j - k, itemstack.count); k += i1; if (j != 0) { this.armor[l].count -= i1; if (this.armor[l].count == 0) { - this.armor[l] = null; + this.player.setEquipment(k, null); } - if (j > 0 && k >= j) { return k; } } } + ++l; } - if (this.f != null) { if (item != null && this.f.getItem() != item) { return k; } - if (i > -1 && this.f.getData() != i) { return k; } - if (nbttagcompound != null && !GameProfileSerializer.a(nbttagcompound, this.f.getTag(), false)) { return k; } - l = j <= 0 ? this.f.count : Math.min(j - k, this.f.count); k += l; if (j != 0) { @@ -173,13 +173,11 @@ public class PlayerInventory implements IInventory { if (this.f.count == 0) { this.f = null; } - if (j > 0 && k >= j) { return k; } } } - return k; } @@ -187,277 +185,270 @@ public class PlayerInventory implements IInventory { Item item = itemstack.getItem(); int i = itemstack.count; int j = this.firstPartial(itemstack); - if (j < 0) { j = this.getFirstEmptySlotIndex(); } - if (j < 0) { return i; - } else { - if (this.items[j] == null) { - this.items[j] = new ItemStack(item, 0, itemstack.getData()); - if (itemstack.hasTag()) { - this.items[j].setTag((NBTTagCompound) itemstack.getTag().clone()); - } - } - - int k = i; - - if (i > this.items[j].getMaxStackSize() - this.items[j].count) { - k = this.items[j].getMaxStackSize() - this.items[j].count; - } - - if (k > this.getMaxStackSize() - this.items[j].count) { - k = this.getMaxStackSize() - this.items[j].count; - } - - if (k == 0) { - return i; - } else { - i -= k; - this.items[j].count += k; - this.items[j].c = 5; - return i; + } + if (this.items[j] == null) { + this.items[j] = new ItemStack(item, 0, itemstack.getData()); + if (itemstack.hasTag()) { + this.items[j].setTag((NBTTagCompound) itemstack.getTag().clone()); } } + int k = i; + if (i > this.items[j].getMaxStackSize() - this.items[j].count) { + k = this.items[j].getMaxStackSize() - this.items[j].count; + } + if (k > this.getMaxStackSize() - this.items[j].count) { + k = this.getMaxStackSize() - this.items[j].count; + } + if (k == 0) { + return i; + } + this.items[j].count += k; + this.items[j].c = 5; + return i -= k; } public void k() { - for (int i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] != null) { this.items[i].a(this.player.world, this.player, i, this.itemInHandIndex == i); } + ++i; } - } public boolean a(Item item) { int i = this.c(item); - if (i < 0) { return false; - } else { - if (--this.items[i].count <= 0) { - this.items[i] = null; - } - - return true; } + if (--this.items[i].count <= 0) { + this.items[i] = null; + } + return true; } public boolean b(Item item) { int i = this.c(item); - return i >= 0; } public boolean pickup(final ItemStack itemstack) { if (itemstack != null && itemstack.count != 0 && itemstack.getItem() != null) { - try { - int i; - - if (itemstack.g()) { - i = this.getFirstEmptySlotIndex(); - if (i >= 0) { + int i; + block10: + { + block8: + { + block9: + { + if (!itemstack.g()) break block8; + i = this.getFirstEmptySlotIndex(); + if (i < 0) break block9; this.items[i] = ItemStack.b(itemstack); this.items[i].c = 5; itemstack.count = 0; return true; - } else if (this.player.abilities.canInstantlyBuild) { + } + if (this.player.abilities.canInstantlyBuild) { itemstack.count = 0; return true; - } else { - return false; } - } else { + return false; + } + try { do { i = itemstack.count; itemstack.count = this.e(itemstack); } while (itemstack.count > 0 && itemstack.count < i); + if (itemstack.count != i || !this.player.abilities.canInstantlyBuild) break block10; + itemstack.count = 0; + return true; + } catch (Throwable throwable) { + CrashReport crashreport = CrashReport.a(throwable, "Adding item to inventory"); + CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Item being added"); + crashreportsystemdetails.a("Item ID", Item.getId(itemstack.getItem())); + crashreportsystemdetails.a("Item data", itemstack.getData()); + crashreportsystemdetails.a("Item name", new Callable() { - if (itemstack.count == i && this.player.abilities.canInstantlyBuild) { - itemstack.count = 0; - return true; - } else { - return itemstack.count < i; - } + public String a() throws Exception { + return itemstack.getName(); + } + + public Object call() throws Exception { + return this.a(); + } + }); + throw new ReportedException(crashreport); } - } catch (Throwable throwable) { - CrashReport crashreport = CrashReport.a(throwable, "Adding item to inventory"); - CrashReportSystemDetails crashreportsystemdetails = crashreport.a("Item being added"); - - crashreportsystemdetails.a("Item ID", Item.getId(itemstack.getItem())); - crashreportsystemdetails.a("Item data", itemstack.getData()); - crashreportsystemdetails.a("Item name", new Callable() { - public String a() throws Exception { - return itemstack.getName(); - } - - public Object call() throws Exception { - return this.a(); - } - }); - throw new ReportedException(crashreport); } - } else { - return false; + return itemstack.count < i; } + return false; } + @Override public ItemStack splitStack(int i, int j) { + boolean settingArmor; ItemStack[] aitemstack = this.items; - + boolean bl = settingArmor = i >= this.items.length; if (i >= this.items.length) { aitemstack = this.armor; i -= this.items.length; } - if (aitemstack[i] != null) { - ItemStack itemstack; - if (aitemstack[i].count <= j) { - itemstack = aitemstack[i]; - aitemstack[i] = null; - return itemstack; - } else { - itemstack = aitemstack[i].cloneAndSubtract(j); - if (aitemstack[i].count == 0) { + ItemStack itemstack = aitemstack[i]; + if (settingArmor) { + this.player.setEquipment(i, null); + } else { aitemstack[i] = null; } - return itemstack; } - } else { - return null; + ItemStack itemstack = aitemstack[i].cloneAndSubtract(j); + if (aitemstack[i].count == 0) { + if (settingArmor) { + this.player.setEquipment(i, null); + } else { + aitemstack[i] = null; + } + } + return itemstack; } + return null; } + @Override public ItemStack splitWithoutUpdate(int i) { + boolean settingArmor; ItemStack[] aitemstack = this.items; - + boolean bl = settingArmor = i >= this.items.length; if (i >= this.items.length) { aitemstack = this.armor; i -= this.items.length; } - if (aitemstack[i] != null) { ItemStack itemstack = aitemstack[i]; - - aitemstack[i] = null; + if (settingArmor) { + this.player.setEquipment(i, null); + } else { + aitemstack[i] = null; + } return itemstack; - } else { - return null; } + return null; } + @Override public void setItem(int i, ItemStack itemstack) { ItemStack[] aitemstack = this.items; - if (i >= aitemstack.length) { - i -= aitemstack.length; - aitemstack = this.armor; + this.player.setEquipment(i -= aitemstack.length, itemstack); + } else { + aitemstack[i] = itemstack; } - - aitemstack[i] = itemstack; } public float a(Block block) { - float f = 1.0F; - + float f = 1.0f; if (this.items[this.itemInHandIndex] != null) { f *= this.items[this.itemInHandIndex].a(block); } - return f; } public NBTTagList a(NBTTagList nbttaglist) { - int i; NBTTagCompound nbttagcompound; - - for (i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] != null) { nbttagcompound = new NBTTagCompound(); nbttagcompound.setByte("Slot", (byte) i); this.items[i].save(nbttagcompound); nbttaglist.add(nbttagcompound); } + ++i; } - - for (i = 0; i < this.armor.length; ++i) { + i = 0; + while (i < this.armor.length) { if (this.armor[i] != null) { nbttagcompound = new NBTTagCompound(); nbttagcompound.setByte("Slot", (byte) (i + 100)); this.armor[i].save(nbttagcompound); nbttaglist.add(nbttagcompound); } + ++i; } - return nbttaglist; } public void b(NBTTagList nbttaglist) { this.items = new ItemStack[36]; this.armor = new ItemStack[4]; - - for (int i = 0; i < nbttaglist.size(); ++i) { + int i = 0; + while (i < nbttaglist.size()) { NBTTagCompound nbttagcompound = nbttaglist.get(i); - int j = nbttagcompound.getByte("Slot") & 255; + int j = nbttagcompound.getByte("Slot") & 0xFF; ItemStack itemstack = ItemStack.createStack(nbttagcompound); - if (itemstack != null) { if (j >= 0 && j < this.items.length) { this.items[j] = itemstack; } - if (j >= 100 && j < this.armor.length + 100) { - this.armor[j - 100] = itemstack; + this.player.setEquipment(j - 100, itemstack); } } + ++i; } - } + @Override public int getSize() { return this.items.length + 4; } + @Override public ItemStack getItem(int i) { ItemStack[] aitemstack = this.items; - if (i >= aitemstack.length) { i -= aitemstack.length; aitemstack = this.armor; } - return aitemstack[i]; } + @Override public String getName() { return "container.inventory"; } + @Override public boolean hasCustomName() { return false; } + @Override public IChatBaseComponent getScoreboardDisplayName() { return this.hasCustomName() ? new ChatComponentText(this.getName()) : new ChatMessage(this.getName(), new Object[0]); } + @Override public int getMaxStackSize() { - return maxStack; // CraftBukkit + return this.maxStack; } public boolean b(Block block) { if (block.getMaterial().isAlwaysDestroyable()) { return true; - } else { - ItemStack itemstack = this.getItem(this.itemInHandIndex); - - return itemstack != null && itemstack.b(block); } + ItemStack itemstack = this.getItem(this.itemInHandIndex); + return itemstack != null ? itemstack.b(block) : false; } public ItemStack e(int i) { @@ -466,54 +457,55 @@ public class PlayerInventory implements IInventory { public int m() { int i = 0; - - for (ItemStack itemStack : this.armor) { - if (itemStack != null && itemStack.getItem() instanceof ItemArmor) { - int k = ((ItemArmor) itemStack.getItem()).c; - + int j = 0; + while (j < this.armor.length) { + if (this.armor[j] != null && this.armor[j].getItem() instanceof ItemArmor) { + int k = ((ItemArmor) this.armor[j].getItem()).c; i += k; } + ++j; } - return i; } public void a(float f) { - f /= eSpigotConfig.reduceArmorDamage ? 8.0F : 4.0F; // MineHQ + f /= 4.0F; // MineHQ if (f < 1.0F) { f = 1.0F; } - for (int i = 0; i < this.armor.length; ++i) { + int i = 0; + while (i < this.armor.length) { if (this.armor[i] != null && this.armor[i].getItem() instanceof ItemArmor) { this.armor[i].damage((int) f, this.player); if (this.armor[i].count == 0) { - this.armor[i] = null; + this.player.setEquipment(i, null); } } + ++i; } - } public void n() { - int i; - - for (i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { if (this.items[i] != null) { this.player.a(this.items[i], true, false); this.items[i] = null; } + ++i; } - - for (i = 0; i < this.armor.length; ++i) { + i = 0; + while (i < this.armor.length) { if (this.armor[i] != null) { this.player.a(this.armor[i], true, false); - this.armor[i] = null; + this.player.setEquipment(i, null); } + ++i; } - } + @Override public void update() { this.e = true; } @@ -523,78 +515,87 @@ public class PlayerInventory implements IInventory { } public ItemStack getCarried() { - // CraftBukkit start - if (this.f != null && this.f.count == 0) { + if (this.f != null && this.f.count <= 0) { this.setCarried(null); } - // CraftBukkit end return this.f; } + @Override public boolean a(EntityHuman entityhuman) { - return !this.player.dead && entityhuman.h(this.player) <= 64.0D; + return this.player.dead ? false : entityhuman.h(this.player) <= 64.0; } public boolean c(ItemStack itemstack) { - int i; - - for (i = 0; i < this.armor.length; ++i) { + int i = 0; + while (i < this.armor.length) { if (this.armor[i] != null && this.armor[i].doMaterialsMatch(itemstack)) { return true; } + ++i; } - - for (i = 0; i < this.items.length; ++i) { + i = 0; + while (i < this.items.length) { if (this.items[i] != null && this.items[i].doMaterialsMatch(itemstack)) { return true; } + ++i; } - return false; } - public void startOpen(EntityHuman entityhuman) {} + @Override + public void startOpen(EntityHuman entityhuman) { + } - public void closeContainer(EntityHuman entityhuman) {} + @Override + public void closeContainer(EntityHuman entityhuman) { + } + @Override public boolean b(int i, ItemStack itemstack) { return true; } public void b(PlayerInventory playerinventory) { - int i; - - for (i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { this.items[i] = ItemStack.b(playerinventory.items[i]); + ++i; } - - for (i = 0; i < this.armor.length; ++i) { - this.armor[i] = ItemStack.b(playerinventory.armor[i]); + i = 0; + while (i < this.armor.length) { + this.player.setEquipment(i, ItemStack.b(playerinventory.armor[i])); + ++i; } - this.itemInHandIndex = playerinventory.itemInHandIndex; } + @Override public int getProperty(int i) { return 0; } - public void b(int i, int j) {} + @Override + public void b(int i, int j) { + } + @Override public int g() { return 0; } + @Override public void l() { - int i; - - for (i = 0; i < this.items.length; ++i) { + int i = 0; + while (i < this.items.length) { this.items[i] = null; + ++i; } - - for (i = 0; i < this.armor.length; ++i) { + i = 0; + while (i < this.armor.length) { this.armor[i] = null; + ++i; } - } } diff --git a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java index dd10ddc..d6b2e3c 100644 --- a/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java +++ b/eSpigot-Server/src/main/java/net/minecraft/server/TileEntityFurnace.java @@ -9,6 +9,7 @@ import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.FurnaceBurnEvent; import org.bukkit.event.inventory.FurnaceSmeltEvent; import org.bukkit.craftbukkit.entity.CraftHumanEntity; +import org.spigotmc.SpigotConfig; // CraftBukkit end public class TileEntityFurnace extends TileEntityContainer implements IUpdatePlayerListBox, IWorldInventory { @@ -186,9 +187,9 @@ public class TileEntityFurnace extends TileEntityContainer implements IUpdatePla // CraftBukkit - moved from below if (this.isBurning() && this.canBurn()) { - this.cookTime += elapsedTicks; + this.cookTime += elapsedTicks * SpigotConfig.smeltingMultiplier; if (this.cookTime >= this.cookTimeTotal) { - this.cookTime -= this.cookTimeTotal; // Paper + this.cookTime = 0; this.cookTimeTotal = this.a(this.items[0]); this.burn(); flag1 = true; diff --git a/eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java b/eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java index da25c63..646544c 100644 --- a/eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java +++ b/eSpigot-Server/src/main/java/org/spigotmc/SpigotConfig.java @@ -299,4 +299,8 @@ public class SpigotConfig Bukkit.getLogger().info( "Debug logging is disabled" ); } } + + + public static int smeltingMultiplier; + private static void smeltingMultiplier() { smeltingMultiplier = getInt("settings.smeltingMultipler", 1);} }