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.
dev
sigonasr2 11 years ago
parent 42355d475a
commit 090603dec4
  1. 48
      BankEconomyMod/src/me/kaZep/Base/PlayerListener.java

@ -14279,14 +14279,42 @@ implements Listener
if (event.getCurrentItem()!=null) { 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) { 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()); 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 (!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 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. //If they are the same, instead we will simply swap them. Normal functionality.
event.setCursor(extra_item); final ItemStack item = extra_item;
p.updateInventory(); Bukkit.getScheduler().scheduleSyncDelayedTask(this.plugin, new
event.setCancelled(true); Runnable() {
@Override
public void run() {
p2.setItemOnCursor(item);
p2.getInventory().setContents(p2.getInventory().getContents());
event2.getInventory().setContents(event2.getInventory().getContents());
p2.updateInventory();
}
}, 1);
return; 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) { public void onMinecartExit(VehicleExitEvent e) {
if (e.getVehicle().getType()==EntityType.MINECART && e.getVehicle().getPassenger().getType()==EntityType.PLAYER) { if (e.getVehicle().getType()==EntityType.MINECART && e.getVehicle().getPassenger().getType()==EntityType.PLAYER) {
Bukkit.getWorld("world").dropItemNaturally(e.getVehicle().getLocation(),new ItemStack(Material.MINECART)); 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(); e.getVehicle().remove();
} }
} }
@ -16648,12 +16684,16 @@ implements Listener
p.closeInventory(); p.closeInventory();
} }
for (int i=0;i<this.plugin.SPEED_CONTROL.size();i++) { for (int i=0;i<this.plugin.SPEED_CONTROL.size();i++) {
if (this.plugin.SPEED_CONTROL.get(i).p==null) {
this.plugin.SPEED_CONTROL.remove(i);
i--;
} else
if (this.plugin.SPEED_CONTROL.get(i).p.getName().toLowerCase().compareTo(p.getName().toLowerCase())==0) { if (this.plugin.SPEED_CONTROL.get(i).p.getName().toLowerCase().compareTo(p.getName().toLowerCase())==0) {
p.removePotionEffect(PotionEffectType.SPEED); p.removePotionEffect(PotionEffectType.SPEED);
//If they have a "speed" potion, give it back. //If they have a "speed" potion, give it back.
p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, (int) ((this.plugin.SPEED_CONTROL.get(i).potion_time-Main.SERVER_TICK_TIME)*2), this.plugin.SPEED_CONTROL.get(i).potion_spdlv, true)); p.addPotionEffect(new PotionEffect(PotionEffectType.SPEED, (int) ((this.plugin.SPEED_CONTROL.get(i).potion_time-Main.SERVER_TICK_TIME)*2), this.plugin.SPEED_CONTROL.get(i).potion_spdlv, true));
this.plugin.SPEED_CONTROL.remove(i); this.plugin.SPEED_CONTROL.remove(i);
break; i--;
} }
} }
Player[] list = Bukkit.getOnlinePlayers(); Player[] list = Bukkit.getOnlinePlayers();

Loading…
Cancel
Save