From 090603dec449469987901f1d6070dba386054718 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Sun, 16 Feb 2014 10:05:23 -0700 Subject: [PATCH] Force players to exit minecarts correctly. (Override 1.7 default behavior) Clear SPEED_CONTROL list correctly. Remove ability to drop items in item cubes directly due to 1.7 inventory desync issues. --- .../src/me/kaZep/Base/PlayerListener.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java index 8a390cc..0e1703e 100644 --- a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java +++ b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java @@ -14279,14 +14279,42 @@ implements Listener if (event.getCurrentItem()!=null) { if (event.getCursor()!=null && event.getSlotType()!=SlotType.RESULT && event.getCursor().getType()!=Material.AIR && (event.getCurrentItem().getType()==Material.CHEST || event.getCurrentItem().getType()==Material.TRAPPED_CHEST || event.getCurrentItem().getType()==Material.ENDER_CHEST) && event.getClick()==ClickType.LEFT) { ItemStack extra_item = insertIntoItemCube(p, event.getCurrentItem(), event.getCursor()); + final Player p2 = p; + final InventoryClickEvent event2 = event; + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new + Runnable() { + @Override + public void run() { + p2.getInventory().setContents(p2.getInventory().getContents()); + event2.getInventory().setContents(event2.getInventory().getContents()); + p2.updateInventory(); + } + }, 1); if (!extra_item.equals(event.getCursor())) { //If the items don't match, it means something happened to the items, so some got inserted into the Item Cube. //If they are the same, instead we will simply swap them. Normal functionality. - event.setCursor(extra_item); - p.updateInventory(); - event.setCancelled(true); + final ItemStack item = extra_item; + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new + Runnable() { + @Override + public void run() { + p2.setItemOnCursor(item); + p2.getInventory().setContents(p2.getInventory().getContents()); + event2.getInventory().setContents(event2.getInventory().getContents()); + p2.updateInventory(); + } + }, 1); return; } + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new + Runnable() { + @Override + public void run() { + p2.getInventory().setContents(p2.getInventory().getContents()); + event2.getInventory().setContents(event2.getInventory().getContents()); + p2.updateInventory(); + } + }, 1); } } } @@ -15553,6 +15581,14 @@ implements Listener public void onMinecartExit(VehicleExitEvent e) { if (e.getVehicle().getType()==EntityType.MINECART && e.getVehicle().getPassenger().getType()==EntityType.PLAYER) { Bukkit.getWorld("world").dropItemNaturally(e.getVehicle().getLocation(),new ItemStack(Material.MINECART)); + final Player p = (Player)e.getVehicle().getPassenger(); + final Location tele_loc = e.getVehicle().getLocation(); + Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new Runnable() { + @Override + public void run() { + p.teleport(tele_loc); + } + },5); e.getVehicle().remove(); } } @@ -16648,12 +16684,16 @@ implements Listener p.closeInventory(); } for (int i=0;i