Fixed a bug causing items to vanish while picking up partial stacks that

enter a player's inventory.
This commit is contained in:
sigonasr2 2017-05-10 03:52:51 -07:00
parent 30915bb6b6
commit c86785c16b
3 changed files with 16 additions and 21 deletions

Binary file not shown.

View File

@ -264,11 +264,17 @@ public class InventoryUtils {
if (itemStackInventory.isSimilar(itemStackAdded) && itemStackInventory.getAmount()<itemStackInventory.getMaxStackSize()) { if (itemStackInventory.isSimilar(itemStackAdded) && itemStackInventory.getAmount()<itemStackInventory.getMaxStackSize()) {
int amt = itemStackInventory.getMaxStackSize()-itemStackInventory.getAmount(); int amt = itemStackInventory.getMaxStackSize()-itemStackInventory.getAmount();
if (itemStackAdded.getAmount()>=amt) { if (itemStackAdded.getAmount()>=amt) {
//TwosideKeeper.log(" itemStackAdded amt: "+itemStackAdded.getAmount()+", amt:"+amt,0);
int remaining = itemStackAdded.getAmount()-amt; int remaining = itemStackAdded.getAmount()-amt;
itemStackInventory.setAmount(itemStackInventory.getMaxStackSize()); itemStackInventory.setAmount(itemStackInventory.getMaxStackSize());
itemStackAdded.setAmount(remaining); itemStackAdded.setAmount(remaining);
//TwosideKeeper.log(" ItemStack in inventory: "+itemStackInventory,0);
//TwosideKeeper.log(" Remaining amount: "+itemStackAdded,0);
//TwosideKeeper.log(" Remaining was: "+remaining,0);
} else { } else {
itemStackInventory.setAmount(itemStackInventory.getAmount()+itemStackAdded.getAmount()); itemStackInventory.setAmount(itemStackInventory.getAmount()+itemStackAdded.getAmount());
//TwosideKeeper.log(" End. We're done. Added "+itemStackAdded,0);
itemStackAdded=null; itemStackAdded=null;
break; //Ran out, we're done here. break; //Ran out, we're done here.
} }

View File

@ -3,10 +3,8 @@ package sig.plugin.TwosideKeeper;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.OffsetDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
@ -21,7 +19,6 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.Effect;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -49,9 +46,6 @@ import org.bukkit.entity.Bat;
import org.bukkit.entity.Blaze; import org.bukkit.entity.Blaze;
import org.bukkit.entity.Chicken; import org.bukkit.entity.Chicken;
import org.bukkit.entity.Creeper; import org.bukkit.entity.Creeper;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.EnderDragon.Phase;
import org.bukkit.entity.EnderSignal;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.ExperienceOrb; import org.bukkit.entity.ExperienceOrb;
@ -91,13 +85,11 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.Action; import org.bukkit.event.block.Action;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDispenseEvent; import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.SignChangeEvent; import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason;
import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
@ -121,10 +113,8 @@ import org.bukkit.event.entity.ProjectileLaunchEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason;
import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.ClickType;
import org.bukkit.event.inventory.CraftItemEvent; import org.bukkit.event.inventory.CraftItemEvent;
import org.bukkit.event.inventory.InventoryAction;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryMoveItemEvent; import org.bukkit.event.inventory.InventoryMoveItemEvent;
import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.inventory.InventoryOpenEvent;
import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.inventory.InventoryPickupItemEvent;
@ -134,7 +124,6 @@ import org.bukkit.event.inventory.PrepareAnvilEvent;
import org.bukkit.event.inventory.PrepareItemCraftEvent; import org.bukkit.event.inventory.PrepareItemCraftEvent;
import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerAchievementAwardedEvent; import org.bukkit.event.player.PlayerAchievementAwardedEvent;
import org.bukkit.event.player.PlayerArmorStandManipulateEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerExpChangeEvent; import org.bukkit.event.player.PlayerExpChangeEvent;
@ -165,7 +154,6 @@ import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldSaveEvent; import org.bukkit.event.world.WorldSaveEvent;
import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe; import org.bukkit.inventory.Recipe;
import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapedRecipe;
@ -178,8 +166,6 @@ import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import org.bukkit.potion.PotionEffectTypeWrapper;
import org.bukkit.potion.PotionType;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.inventivetalent.glow.GlowAPI; import org.inventivetalent.glow.GlowAPI;
@ -190,7 +176,6 @@ import com.google.common.collect.ImmutableSet;
import aPlugin.API.Chests; import aPlugin.API.Chests;
import events.PlayerGainItemEvent; import events.PlayerGainItemEvent;
import events.PlayerManualPickupItemEvent;
import events.PluginLoadEvent; import events.PluginLoadEvent;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.chat.ComponentBuilder;
@ -200,7 +185,6 @@ import net.minecraft.server.v1_9_R1.EnumParticle;
import net.minecraft.server.v1_9_R1.MinecraftServer; import net.minecraft.server.v1_9_R1.MinecraftServer;
import sig.plugin.AutoPluginUpdate.AnnounceUpdateEvent; import sig.plugin.AutoPluginUpdate.AnnounceUpdateEvent;
import sig.plugin.TwosideKeeper.Boss.Arena; import sig.plugin.TwosideKeeper.Boss.Arena;
import sig.plugin.TwosideKeeper.Boss.SendMiningFatigueToAllNearbyElderGuardians;
import sig.plugin.TwosideKeeper.Events.EntityDamagedEvent; import sig.plugin.TwosideKeeper.Events.EntityDamagedEvent;
import sig.plugin.TwosideKeeper.Events.InventoryUpdateEvent; import sig.plugin.TwosideKeeper.Events.InventoryUpdateEvent;
import sig.plugin.TwosideKeeper.Events.InventoryUpdateEvent.UpdateReason; import sig.plugin.TwosideKeeper.Events.InventoryUpdateEvent.UpdateReason;
@ -258,7 +242,6 @@ import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemCubeUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TextUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils; import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.Classes.SoundData; import sig.plugin.TwosideKeeper.HelperStructures.Utils.Classes.SoundData;
import sig.plugin.TwosideKeeper.HolidayEvents.Christmas; import sig.plugin.TwosideKeeper.HolidayEvents.Christmas;
@ -268,7 +251,6 @@ import sig.plugin.TwosideKeeper.Logging.LootLogger;
import sig.plugin.TwosideKeeper.Logging.MysteriousEssenceLogger; import sig.plugin.TwosideKeeper.Logging.MysteriousEssenceLogger;
import sig.plugin.TwosideKeeper.Monster.Dummy; import sig.plugin.TwosideKeeper.Monster.Dummy;
import sig.plugin.TwosideKeeper.Monster.HellfireGhast; import sig.plugin.TwosideKeeper.Monster.HellfireGhast;
import sig.plugin.TwosideKeeper.Monster.HellfireSpider;
import sig.plugin.TwosideKeeper.Monster.MonsterTemplate; import sig.plugin.TwosideKeeper.Monster.MonsterTemplate;
@ -6977,7 +6959,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
habitat_data.addKillToLocation(m); habitat_data.addKillToLocation(m);
} }
habitat_data.startinglocs.remove(m.getUniqueId()); habitat_data.startinglocs.remove(m.getUniqueId());
log("Killed by a player.",0); //log("Killed by a player.",0);
killedByPlayer = true; killedByPlayer = true;
Player p = (Player)ms.GetTarget(); Player p = (Player)ms.GetTarget();
AwardDeathAchievements(p,ev.getEntity()); AwardDeathAchievements(p,ev.getEntity());
@ -7017,7 +6999,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
dropmult+=GenericFunctions.getAbilityValue(ArtifactAbility.GREED, p.getEquipment().getItemInMainHand())/100d; dropmult+=GenericFunctions.getAbilityValue(ArtifactAbility.GREED, p.getEquipment().getItemInMainHand())/100d;
} }
} else { } else {
TwosideKeeper.log("killedByPlayer flag set to false.", 0); //TwosideKeeper.log("killedByPlayer flag set to false.", 0);
killedByPlayer=false; killedByPlayer=false;
} }
} }
@ -7940,13 +7922,20 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
return; return;
} }
Player p = ev.getPlayer(); Player p = ev.getPlayer();
//log("Item Right now: "+ev.getItem().getItemStack(),0);
InventoryUpdateEvent.TriggerUpdateInventoryEvent(p,ev.getItem().getItemStack(),UpdateReason.PICKEDUPITEM); InventoryUpdateEvent.TriggerUpdateInventoryEvent(p,ev.getItem().getItemStack(),UpdateReason.PICKEDUPITEM);
ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItem().getItemStack()); ItemStack newstack = InventoryUtils.AttemptToFillPartialSlotsFirst(p,ev.getItem().getItemStack());
//TwosideKeeper.log(" New Stack is: "+newstack,0);
if (newstack==null || newstack.getType()==Material.AIR) { if (newstack==null || newstack.getType()==Material.AIR) {
SoundUtils.playGlobalSound(ev.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(ev.getItem().getItemStack())); SoundUtils.playGlobalSound(ev.getPlayer().getLocation(), Sound.ENTITY_ITEM_PICKUP, 0.6f, SoundUtils.DetermineItemPitch(ev.getItem().getItemStack()));
if (ev.getRemaining()>0) {
Item it = ev.getItem();
it.getItemStack().setAmount(ev.getRemaining());
GenericFunctions.giveItem(p, it.getItemStack());
}
ev.getItem().remove();ev.setCancelled(true);return;} ev.getItem().remove();ev.setCancelled(true);return;}
ev.getItem().setItemStack(newstack); ev.getItem().setItemStack(newstack);
log("Pickup Metadata: "+ev.getItem().getItemStack().getItemMeta().toString(),5); //log("Pickup Metadata: "+ev.getItem().getItemStack().getItemMeta().toString(),0);
//GenericFunctions.updateSetItems(p.getInventory()); //GenericFunctions.updateSetItems(p.getInventory());
GenericFunctions.UpdateItemLore(ev.getItem().getItemStack()); GenericFunctions.UpdateItemLore(ev.getItem().getItemStack());
/*//LEGACY CODE /*//LEGACY CODE