item slot refactor
This commit is contained in:
parent
c3f9655338
commit
6fb9ded711
90 changed files with 1177 additions and 1622 deletions
|
@ -930,7 +930,7 @@ public final class Server implements IThreadListener, Executor {
|
|||
conn.sendPacket(new SPacketServerConfig(vars));
|
||||
conn.sendPacket(new SPacketDimensions(Dimensions.getDimensionData()));
|
||||
conn.sendPacket(new SPacketJoinGame(player.getId(), world.dimension, UniverseRegistry.getName(world.dimension), EntityRegistry.getEntityID(player), tag == null));
|
||||
conn.sendPacket(new SPacketHeldItemChange(player.inventory.currentItem));
|
||||
conn.sendPacket(new SPacketHeldItemChange(player.getSelectedIndex()));
|
||||
this.sendPacket(new SPacketPlayerListItem(false, conn));
|
||||
|
||||
world.spawnEntityInWorld(player);
|
||||
|
@ -1206,7 +1206,7 @@ public final class Server implements IThreadListener, Executor {
|
|||
public void syncPlayerInventory(EntityNPC player) {
|
||||
player.connection.sendContainer(player.inventoryContainer, player.inventoryContainer.getInventory());
|
||||
player.connection.setPlayerHealthUpdated();
|
||||
player.connection.sendPacket(new SPacketHeldItemChange(player.inventory.currentItem));
|
||||
player.connection.sendPacket(new SPacketHeldItemChange(player.getSelectedIndex()));
|
||||
}
|
||||
|
||||
private void terminateEndpoint(String message) {
|
||||
|
|
|
@ -4,7 +4,6 @@ import java.util.List;
|
|||
|
||||
import common.entity.npc.EntityNPC;
|
||||
import common.entity.types.EntityLiving;
|
||||
import common.util.Equipment;
|
||||
import server.command.Command;
|
||||
import server.command.CommandEnvironment;
|
||||
import server.command.Executor;
|
||||
|
@ -21,16 +20,11 @@ public class CommandClear extends Command {
|
|||
int done = 0;
|
||||
for(EntityLiving entity : entities) {
|
||||
if(entity instanceof EntityNPC) {
|
||||
if(entity.isPlayer()) {
|
||||
((EntityNPC)entity).inventory.clearItems();
|
||||
}
|
||||
else {
|
||||
((EntityNPC)entity).getExtendedInventory().clear();
|
||||
((EntityNPC)entity).clear();
|
||||
if(entity.isPlayer())
|
||||
((EntityNPC)entity).setMouseItem(null);
|
||||
else
|
||||
((EntityNPC)entity).setHeldItem(null);
|
||||
for(Equipment slot : Equipment.ARMOR) {
|
||||
((EntityNPC)entity).setArmor(slot, null);
|
||||
}
|
||||
}
|
||||
exec.log("Inventar von %s gelöscht", entity.getCommandName());
|
||||
done++;
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ public class CommandItem extends Command {
|
|||
while(total > 0) {
|
||||
int added = Math.min(total, stack.getMaxStackSize());
|
||||
ItemStack st = stack.copy(added);
|
||||
player.inventory.addItemStackToInventory(st);
|
||||
player.addItemStackToInventory(st);
|
||||
added -= st.getSize();
|
||||
if(added <= 0)
|
||||
break;
|
||||
|
|
|
@ -31,11 +31,8 @@ public class CommandMore extends Command {
|
|||
for(EntityNPC player : players) {
|
||||
int add = 0;
|
||||
if(all) {
|
||||
for(ItemStack item : player.inventory.mainInventory) {
|
||||
if(item != null)
|
||||
add += this.addItems(item);
|
||||
}
|
||||
for(ItemStack item : player.inventory.armorInventory) {
|
||||
for(int z = 0; z < player.getSizeInventory(); z++) {
|
||||
ItemStack item = player.getStackInSlot(z);
|
||||
if(item != null)
|
||||
add += this.addItems(item);
|
||||
}
|
||||
|
|
|
@ -38,11 +38,8 @@ public class CommandRepair extends Command {
|
|||
for(EntityNPC player : players) {
|
||||
int rep = 0;
|
||||
if(all) {
|
||||
for(ItemStack item : player.inventory.mainInventory) {
|
||||
if(item != null && this.fixItem(item))
|
||||
rep++;
|
||||
}
|
||||
for(ItemStack item : player.inventory.armorInventory) {
|
||||
for(int z = 0; z < player.getSizeInventory(); z++) {
|
||||
ItemStack item = player.getStackInSlot(z);
|
||||
if(item != null && this.fixItem(item))
|
||||
rep++;
|
||||
}
|
||||
|
|
|
@ -40,7 +40,6 @@ import common.inventory.ContainerMerchant;
|
|||
import common.inventory.ContainerTile;
|
||||
import common.inventory.IInventory;
|
||||
import common.inventory.InventoryBasic;
|
||||
import common.inventory.InventoryPlayer;
|
||||
import common.inventory.Slot;
|
||||
import common.inventory.SlotCrafting;
|
||||
import common.item.Item;
|
||||
|
@ -289,7 +288,15 @@ public class Player extends User implements Executor, IPlayer
|
|||
|
||||
if (!Vars.keepInventory && Vars.playerDrop)
|
||||
{
|
||||
this.entity.inventory.dropAllItems();
|
||||
for (int i = 0; i < this.entity.getSizeInventory(); ++i)
|
||||
{
|
||||
ItemStack stack = this.entity.getStackInSlot(i);
|
||||
if (stack != null)
|
||||
{
|
||||
this.entity.dropItem(stack, true, false);
|
||||
this.entity.setInventorySlotContents(i, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(Vars.skullDrop) {
|
||||
ItemStack stack = new ItemStack(Items.skull);
|
||||
|
@ -411,11 +418,11 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.currentFormId = this.currentFormId % 100 + 1;
|
||||
}
|
||||
|
||||
public void updateHeldItem()
|
||||
public void updateMouseItem()
|
||||
{
|
||||
if (!this.isChangingQuantityOnly)
|
||||
{
|
||||
this.sendPacket(new SPacketSetSlot(-1, -1, this.entity.inventory.getItemStack()));
|
||||
this.sendPacket(new SPacketSetSlot(-1, -1, this.entity.getMouseItem()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -447,8 +454,12 @@ public class Player extends User implements Executor, IPlayer
|
|||
{
|
||||
this.lastExperience = -1;
|
||||
this.lastHealth = -1.0F;
|
||||
if(Vars.keepInventory)
|
||||
this.entity.inventory.copyInventory(oldPlayer.inventory);
|
||||
if(Vars.keepInventory) {
|
||||
for(int z = 0; z < this.entity.getSizeInventory(); z++) {
|
||||
this.entity.setInventorySlotContents(z, ItemStack.copy(oldPlayer.getStackInSlot(z)));
|
||||
}
|
||||
this.entity.setSelectedIndex(oldPlayer.getSelectedIndex());
|
||||
}
|
||||
this.entity.experienceLevel = oldPlayer.experienceLevel;
|
||||
this.entity.experienceTotal = oldPlayer.experienceTotal;
|
||||
this.entity.experience = oldPlayer.experience;
|
||||
|
@ -665,19 +676,19 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.sendPacket(new SPacketSignEditorOpen(sign.getPos()));
|
||||
return;
|
||||
}
|
||||
else if(object instanceof EntityNPC npc) {
|
||||
else if(object instanceof EntityNPC npc && !npc.isPlayer()) {
|
||||
this.getNextWindowId();
|
||||
this.entity.openContainer = new ContainerMerchant(this.entity.inventory, npc, this.entity.worldObj);
|
||||
this.entity.openContainer = new ContainerMerchant(this.entity, npc, this.entity.worldObj);
|
||||
}
|
||||
else if(object instanceof Entity entity) {
|
||||
else if(object instanceof Entity entity && !entity.isPlayer()) {
|
||||
InventoryBasic inv = entity.getEntityInventory();
|
||||
this.sendPacket(new SPacketOpenWindow(this.getNextWindowId(), entity.getId(), inv.getSizeInventory()));
|
||||
this.entity.openContainer = new ContainerEntityInventory(this.entity.inventory, inv, entity, this.entity);
|
||||
this.entity.openContainer = new ContainerEntityInventory(this.entity, inv, entity);
|
||||
}
|
||||
else if (object instanceof Device device)
|
||||
{
|
||||
this.sendPacket(new SPacketOpenWindow(this.getNextWindowId(), device.getPos(), device.getSizeInventory()));
|
||||
this.entity.openContainer = new ContainerTile(this.entity.inventory, device, device, this.entity);
|
||||
this.entity.openContainer = new ContainerTile(this.entity, device, device);
|
||||
}
|
||||
else if (object instanceof TileEntityChest chest)
|
||||
{
|
||||
|
@ -688,17 +699,17 @@ public class Player extends User implements Executor, IPlayer
|
|||
return;
|
||||
}
|
||||
this.sendPacket(new SPacketOpenWindow(this.getNextWindowId(), chest.getBlockType(), chest.getSizeInventory()));
|
||||
this.entity.openContainer = new ContainerChest(this.entity.inventory, chest, this.entity);
|
||||
this.entity.openContainer = new ContainerChest(this.entity, chest);
|
||||
}
|
||||
else if (object instanceof TileEntityInventory tile)
|
||||
{
|
||||
this.sendPacket(new SPacketOpenWindow(this.getNextWindowId(), tile.getBlockType(), tile.getSizeInventory()));
|
||||
this.entity.openContainer = tile.createContainer(this.entity.inventory, this.entity);
|
||||
this.entity.openContainer = tile.createContainer(this.entity);
|
||||
}
|
||||
else if (object instanceof InteractionObject obj)
|
||||
{
|
||||
this.sendPacket(new SPacketOpenWindow(this.getNextWindowId(), obj.getBlock(), 0));
|
||||
this.entity.openContainer = obj.createContainer(this.entity.inventory, this.entity);
|
||||
this.entity.openContainer = obj.createContainer(this.entity);
|
||||
}
|
||||
else {
|
||||
return;
|
||||
|
@ -707,7 +718,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.entity.openContainer.windowId = this.currentWindowId;
|
||||
this.entity.openContainer.onCraftGuiOpened(this);
|
||||
|
||||
if(object instanceof EntityNPC npc) {
|
||||
if(object instanceof EntityNPC npc && !npc.isPlayer()) {
|
||||
IInventory merchant = ((ContainerMerchant)this.entity.openContainer).getMerchantInventory();
|
||||
this.sendPacket(new SPacketOpenWindow(this.currentWindowId, npc.getId(), merchant.getSizeInventory()));
|
||||
MerchantRecipeList trades = npc.getTrades(this.entity);
|
||||
|
@ -807,7 +818,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
public void sendContainer(Container container, List<ItemStack> items)
|
||||
{
|
||||
this.sendPacket(new SPacketWindowItems(container.windowId, items));
|
||||
this.sendPacket(new SPacketSetSlot(-1, -1, this.entity.inventory.getItemStack()));
|
||||
this.sendPacket(new SPacketSetSlot(-1, -1, this.entity.getMouseItem()));
|
||||
}
|
||||
|
||||
public void sendProperty(Container container, int variable, int value)
|
||||
|
@ -959,7 +970,6 @@ public class Player extends User implements Executor, IPlayer
|
|||
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
// if(!this.worldObj.client)
|
||||
this.entity.inventoryContainer.detectAttributeChanges();
|
||||
|
||||
if (/* !this.worldObj.client && */ !this.entity.openContainer.canInteractWith(this.entity))
|
||||
{
|
||||
|
@ -1102,7 +1112,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
if(this.onPlayerInteract(true, pos)) {
|
||||
this.sendPacket(new SPacketBlockChange(this.entity.worldObj, pos));
|
||||
if(this.entity.getHeldItem() != null && this.entity.getHeldItem().isEmpty())
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null;
|
||||
this.entity.setHeldItem(null);
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
return;
|
||||
}
|
||||
|
@ -1220,7 +1230,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
|
||||
if (itemstack1.isEmpty())
|
||||
{
|
||||
this.entity.destroyCurrentEquippedItem();
|
||||
this.entity.setHeldItem(null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1245,11 +1255,11 @@ public class Player extends User implements Executor, IPlayer
|
|||
|
||||
if (itemstack != stack || itemstack != null && (itemstack.getSize() != i || itemstack.getMaxItemUseDuration() > 0 || itemstack.getItemDamage() != j))
|
||||
{
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = itemstack;
|
||||
this.entity.setHeldItem(itemstack);
|
||||
|
||||
if (itemstack.isEmpty())
|
||||
{
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null;
|
||||
this.entity.setHeldItem(null);
|
||||
}
|
||||
|
||||
if (!this.entity.isUsingItem())
|
||||
|
@ -1265,7 +1275,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.sendPacket(new SPacketBlockChange(this.entity.worldObj, pos));
|
||||
stack.getItem().onItemUse(stack, this.entity, this.entity.worldObj, pos, side, offsetX, offsetY, offsetZ);
|
||||
if(stack.isEmpty())
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null;
|
||||
this.entity.setHeldItem(null);
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
return false;
|
||||
}
|
||||
|
@ -1948,7 +1958,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
if(msg.length() > 30)
|
||||
throw new IllegalArgumentException("Ungültiger Name");
|
||||
if(packetIn.getArg() == -1)
|
||||
this.entity.inventoryContainer.renameItem(36 + this.entity.inventory.currentItem, msg);
|
||||
this.entity.inventoryContainer.renameItem(36 + this.entity.getSelectedIndex(), msg);
|
||||
else
|
||||
this.entity.openContainer.renameItem(packetIn.getArg(), msg);
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
|
@ -2320,7 +2330,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
if(this.charEditor)
|
||||
return;
|
||||
WorldServer worldserver = this.getEntityWorld(); // this.serverController.getWorld(this.playerEntity.dimension);
|
||||
ItemStack itemstack = this.entity.inventory.getCurrentItem();
|
||||
ItemStack itemstack = this.entity.getHeldItem();
|
||||
boolean flag = false;
|
||||
BlockPos blockpos = packetIn.getPosition();
|
||||
Facing enumfacing = Facing.getFront(packetIn.getPlacedBlockDirection());
|
||||
|
@ -2361,25 +2371,25 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.entity.connection.sendPacket(new SPacketBlockChange(worldserver, blockpos.offset(enumfacing)));
|
||||
}
|
||||
|
||||
itemstack = this.entity.inventory.getCurrentItem();
|
||||
itemstack = this.entity.getHeldItem();
|
||||
|
||||
if (itemstack != null && itemstack.isEmpty())
|
||||
{
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null;
|
||||
this.entity.setHeldItem(null);
|
||||
itemstack = null;
|
||||
}
|
||||
|
||||
if (itemstack == null || itemstack.getMaxItemUseDuration() == 0)
|
||||
{
|
||||
this.isChangingQuantityOnly = true;
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = ItemStack.copy(this.entity.inventory.mainInventory[this.entity.inventory.currentItem]);
|
||||
Slot slot = this.entity.openContainer.getSlotFromInventory(this.entity.inventory, this.entity.inventory.currentItem);
|
||||
this.entity.setHeldItem(ItemStack.copy(this.entity.getHeldItem()));
|
||||
Slot slot = this.entity.openContainer.getSlotFromInventory(this.entity, this.entity.getSelectedIndex());
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
this.isChangingQuantityOnly = false;
|
||||
|
||||
if (!ItemStack.allEquals(this.entity.inventory.getCurrentItem(), packetIn.getStack()))
|
||||
if (!ItemStack.allEquals(this.entity.getHeldItem(), packetIn.getStack()))
|
||||
{
|
||||
this.sendPacket(new SPacketSetSlot(this.entity.openContainer.windowId, slot.slotNumber, this.entity.inventory.getCurrentItem()));
|
||||
this.sendPacket(new SPacketSetSlot(this.entity.openContainer.windowId, slot.slotNumber, this.entity.getHeldItem()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2590,10 +2600,10 @@ public class Player extends User implements Executor, IPlayer
|
|||
break;
|
||||
|
||||
case SET_ITEMSLOT:
|
||||
if(packetIn.getAuxData() >= 0 && packetIn.getAuxData() < InventoryPlayer.getHotbarSize()) {
|
||||
if(packetIn.getAuxData() != this.entity.inventory.currentItem)
|
||||
if(packetIn.getAuxData() >= 0 && packetIn.getAuxData() < 9) {
|
||||
if(packetIn.getAuxData() != this.entity.getSelectedIndex())
|
||||
this.itemUseCooldown = 0;
|
||||
this.entity.inventory.currentItem = packetIn.getAuxData();
|
||||
this.entity.setSelectedIndex(packetIn.getAuxData());
|
||||
}
|
||||
// else
|
||||
// Log.warn(this.user + " versuchte, einen ungültigen Slot zu wählen");
|
||||
|
@ -2639,7 +2649,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
item.getItem().onAction(item, this.entity, this.entity.worldObj,
|
||||
ItemControl.values()[packetIn.getAuxData() % ItemControl.values().length], null);
|
||||
if(item.isEmpty())
|
||||
this.entity.inventory.mainInventory[this.entity.inventory.currentItem] = null;
|
||||
this.entity.setHeldItem(null);
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
}
|
||||
break;
|
||||
|
@ -2686,15 +2696,8 @@ public class Player extends User implements Executor, IPlayer
|
|||
case REPAIR:
|
||||
if(this.isAdmin()) {
|
||||
if(packetIn.getAuxData() != 0) {
|
||||
for(ItemStack stack : this.entity.inventory.mainInventory) {
|
||||
if(stack != null) {
|
||||
stack.setSize(stack.getMaxStackSize());
|
||||
stack.setRepairCost(0);
|
||||
if(stack.getItem().getMaxDamage() > 0)
|
||||
stack.setItemDamage(0);
|
||||
}
|
||||
}
|
||||
for(ItemStack stack : this.entity.inventory.armorInventory) {
|
||||
for(int z = 0; z < this.entity.getSizeInventory(); z++) {
|
||||
ItemStack stack = this.entity.getStackInSlot(z);
|
||||
if(stack != null) {
|
||||
stack.setSize(stack.getMaxStackSize());
|
||||
stack.setRepairCost(0);
|
||||
|
@ -2796,15 +2799,15 @@ public class Player extends User implements Executor, IPlayer
|
|||
break;
|
||||
|
||||
case CRAFT_ITEM: {
|
||||
if(this.entity.inventory.getItemStack() == null) {
|
||||
if(this.entity.getMouseItem() == null) {
|
||||
Slot slot = this.entity.openContainer.getSlot(packetIn.getAuxData());
|
||||
if(slot != null && slot.canCheatItem() && slot.getHasStack()) {
|
||||
ItemStack stack = this.entity.inventoryContainer.getSingleRecipe(slot.getStack());
|
||||
if(stack != null) {
|
||||
slot.putStack(this.entity.inventoryContainer.craftSingleRecipe(slot.getStack()));
|
||||
this.entity.inventory.setItemStack(stack);
|
||||
this.entity.setMouseItem(stack);
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
this.updateHeldItem();
|
||||
this.updateMouseItem();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2852,7 +2855,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
this.entity.connection.sendPacket(new SPacketConfirmTransaction(packetIn.getWindowId(), packetIn.getActionNumber(), true));
|
||||
this.isChangingQuantityOnly = true;
|
||||
this.entity.openContainer.detectAndSendChanges();
|
||||
this.updateHeldItem();
|
||||
this.updateMouseItem();
|
||||
this.isChangingQuantityOnly = false;
|
||||
}
|
||||
else
|
||||
|
@ -2886,7 +2889,7 @@ public class Player extends User implements Executor, IPlayer
|
|||
if(amount <= 0)
|
||||
return;
|
||||
if(packet.getSlot() == -1) {
|
||||
this.entity.inventory.addItemStackToInventory(stack);
|
||||
this.entity.addItemStackToInventory(stack);
|
||||
amount -= stack.getSize();
|
||||
if(amount <= 0)
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue