@ -189,6 +189,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.Common.RecipeLinker;
import sig.plugin.TwosideKeeper.HelperStructures.Effects.EarthWaveTask ;
import sig.plugin.TwosideKeeper.HelperStructures.Effects.LavaPlume ;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.BlockUtils ;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.InventoryUtils ;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.ItemUtils ;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils ;
import sig.plugin.TwosideKeeper.HelperStructures.Utils.TimeUtils ;
@ -650,6 +651,9 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ScheduleRemoval ( lavaplume_list , lp ) ;
}
}
for ( Player p : Bukkit . getOnlinePlayers ( ) ) {
runServerHeartbeat . runVacuumCubeSuckup ( p ) ;
}
}
private void UpdateLavaBlock ( Block lavamod ) {
@ -984,9 +988,17 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
case "WITHER" : {
LivingEntity m = MonsterController . convertMonster ( ( Monster ) p . getWorld ( ) . spawnEntity ( p . getLocation ( ) , EntityType . WITHER ) , MonsterDifficulty . ELITE ) ;
} break ;
case "VACUUM" : {
ItemStack [ ] remaining = InventoryUtils . insertItemsInVacuumCube ( p , new ItemStack ( Material . ENDER_PEARL , 16 ) , new ItemStack ( Material . IRON_PICKAXE , 1 ) , new ItemStack ( Material . GOLDEN_APPLE , 64 ) ) ;
for ( ItemStack items : remaining ) {
if ( items ! = null ) {
p . getWorld ( ) . dropItemNaturally ( p . getLocation ( ) , items ) ;
}
}
LivingEntity m = MonsterController . convertMonster ( ( Monster ) p . getWorld ( ) . spawnEntity ( p . getLocation ( ) , EntityType . ZOMBIE ) , MonsterDifficulty . ELITE ) ;
} break ;
}
}
//LivingEntity m = MonsterController.convertMonster((Monster)p.getWorld().spawnEntity(p.getLocation(),EntityType.ZOMBIE), MonsterDifficulty.ELITE);
/ *
StackTraceElement [ ] stacktrace = new Throwable ( ) . getStackTrace ( ) ;
StringBuilder stack = new StringBuilder ( "Mini stack tracer:" ) ;
@ -2475,7 +2487,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
} else {
size = 27 ;
}
CubeType cub = ( size = = 9 ) ? CubeType . NORMAL : CubeType . LARGE ;
CubeType cub = ( size = = 9 ) ? CubeType . NORMAL : ( size = = 54 ) ? CubeType . VACUUM : CubeType . LARGE ;
//Now that we have the item cube. Dump whatever contents we can into the container.
//We need to make sure the chest is not a world shop. If it is, we can see if we're the owner of it.
@ -3363,7 +3375,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
itemlist . add ( ev . getPlayer ( ) . getOpenInventory ( ) . getTopInventory ( ) . getItem ( i ) ) ;
}
final Player p = ev . getPlayer ( ) ;
itemCube_saveConfig ( itemcube_id , itemlist , ( ( ev . getItemDrop ( ) . getItemStack ( ) . getType ( ) = = Material . CHEST ) ? CubeType . NORMAL : ( ev . getItemDrop ( ) . getItemStack ( ) . getType ( ) = = Material . STORAGE_MINECART ) ? CubeType . LARGE : CubeType . ENDER ) ) ;
itemCube_saveConfig ( itemcube_id , itemlist , ( ( ev . getItemDrop ( ) . getItemStack ( ) . getType ( ) = = Material . CHEST ) ? CubeType . NORMAL : ( ev . getItemDrop ( ) . getItemStack ( ) . getType ( ) = = Material . STORAGE_MINECART ) ? CubeType . LARGE : ( ( CustomItem . isVacuumCube ( ev . getItemDrop ( ) . getItemStack ( ) ) ) ) ? CubeType . VACUUM : CubeType . ENDER ) ) ;
Bukkit . getScheduler ( ) . scheduleSyncDelayedTask ( this , new Runnable ( ) {
@Override
public void run ( ) {
@ -3549,7 +3561,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
itemcube_contents . add ( new ItemStack ( Material . AIR ) ) ;
}
}
CubeType cub = p . getOpenInventory ( ) . getTopInventory ( ) . getSize ( ) = = 9 ? CubeType . NORMAL : CubeType . LARGE ;
CubeType cub = p . getOpenInventory ( ) . getTopInventory ( ) . getSize ( ) = = 9 ? CubeType . NORMAL : p . getOpenInventory ( ) . getTopInventory ( ) . getSize ( ) = = 54 ? CubeType . VACUUM : CubeType . LARGE ;
SoundUtils . playLocalSound ( p , Sound . BLOCK_CHEST_CLOSE , 1 . 0f , 1 . 0f ) ;
itemCube_saveConfig ( id , itemcube_contents , cub ) ;
if ( ! pd . opened_another_cube ) {
@ -3865,9 +3877,13 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
//Check for a Vacuum Cube. If this is a Vacuum Cube and we're trying to do something with the item, then don't allow it.
PerformVacuumCubeChecks ( ev ) ;
//LEFT CLICK STUFF.
//WARNING! This only happens for ITEM CUBES! Do not add other items in here!
pd = ( PlayerStructure ) playerdata . get ( ev . getWhoClicked ( ) . getUniqueId ( ) ) ;
if ( ev . getClick ( ) = = ClickType . RIGHT | | ev . getClick ( ) = = ClickType . SHIFT_RIGHT | | ( ev . getCursor ( ) = = null | | ev . getCursor ( ) . getType ( ) = = Material . AIR ) ) {
if ( ( ( ev . getInventory ( ) . getType ( ) ! = InventoryType . WORKBENCH & & ev . getRawSlot ( ) > = 0 ) | |
( ev . getInventory ( ) . getType ( ) = = InventoryType . WORKBENCH & & ev . getRawSlot ( ) > 9 ) ) & & ev . getCurrentItem ( ) ! = null ) {
if ( ev . getCurrentItem ( ) . hasItemMeta ( ) & & ( ev . getCurrentItem ( ) . getType ( ) ! = Material . AIR ) ) {
@ -3908,6 +3924,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
} } } }
}
//WARNING! This only happens for ITEM CUBES! Do not add other items in here!
if ( ( ( ev . getInventory ( ) . getType ( ) ! = InventoryType . WORKBENCH & & ev . getRawSlot ( ) > = 0 ) | |
@ -3924,16 +3941,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev . setCancelled ( true ) ;
//ev.setResult(Result.DENY);
if ( ev . getCurrentItem ( ) . getType ( ) = = Material . CHEST ) {
cubetype = CubeType . NORMAL ;
} else {
if ( ev . getCurrentItem ( ) . getType ( ) = = Material . STORAGE_MINECART ) {
cubetype = CubeType . LARGE ;
} else {
cubetype = CubeType . ENDER ;
}
}
int clicked_size ;
if ( ev . getCurrentItem ( ) . getType ( ) = = Material . CHEST ) {
@ -3941,6 +3948,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
cubetype = CubeType . NORMAL ;
} else {
if ( CustomItem . isVacuumCube ( ev . getCurrentItem ( ) ) ) {
cubetype = CubeType . VACUUM ;
clicked_size = 54 ;
} else {
clicked_size = 27 ;
@ -3992,6 +4000,19 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
else
//Make sure we are not already inside the cube we're placing into.
{
CubeType cub = clicked_size = = 9 ? CubeType . NORMAL : clicked_size = = 54 ? CubeType . VACUUM : CubeType . LARGE ;
if ( cub = = CubeType . VACUUM ) {
//A Vacuum Cube only accepts blocks, not items.
TwosideKeeper . log ( "Cursor is " + ev . getCursor ( ) , 5 ) ;
if ( ! ev . getCursor ( ) . getType ( ) . isBlock ( ) ) {
TwosideKeeper . log ( "Not allowed! " + ev . getCurrentItem ( ) + "," + ev . getCursor ( ) , 5 ) ;
ev . getWhoClicked ( ) . sendMessage ( ChatColor . RED + "You can only insert/remove Blocks in a Vacuum Cube." ) ;
ev . setCursor ( ev . getCursor ( ) ) ;
ev . setCancelled ( true ) ;
return ;
}
}
if ( idnumb ! = itemcubeid ) {
//See if someone has this inventory opened already.
Inventory virtualinventory = null ;
@ -4021,7 +4042,6 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
for ( int i = 0 ; i < virtualinventory . getSize ( ) ; i + + ) {
itemslist . add ( virtualinventory . getItem ( i ) ) ;
}
CubeType cub = clicked_size = = 9 ? CubeType . NORMAL : CubeType . LARGE ;
itemCube_saveConfig ( idnumb , itemslist , cub ) ;
return ;
} else {
@ -4048,6 +4068,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
}
}
//RIGHT CLICK STUFF DOWN HERE.
log ( "Inventory click." , 5 ) ;
@ -4077,6 +4098,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
ev . setCancelled ( true ) ;
return ;
} else {
TwosideKeeper . log ( "Got to here. ID is " + itemcubeid , 5 ) ;
Player p = ( Player ) ev . getWhoClicked ( ) ;
if ( itemcubeid ! = - 1 & & ev . getRawSlot ( ) < = ev . getView ( ) . getTopInventory ( ) . getSize ( ) - 1 ) {
//This means we are viewing an item cube currently. Add it to our list.
@ -4130,6 +4152,34 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
public void PerformVacuumCubeChecks ( InventoryClickEvent ev ) {
if ( ( ( ev . getInventory ( ) . getType ( ) ! = InventoryType . WORKBENCH & & ev . getRawSlot ( ) > = 0 ) | |
( ev . getInventory ( ) . getType ( ) = = InventoryType . WORKBENCH & & ev . getRawSlot ( ) > 9 ) ) & & ev . getCurrentItem ( ) ! = null ) {
//int idnumb = Integer.parseInt(item_meta_lore.get(3).split("#")[1]);
int itemcubeid = - 1 ; //This is the ID of the window we are looking at, if one exists.
CubeType cubetype = CubeType . NORMAL ;
//This is an Item Cube.
//ev.setResult(Result.DENY);
if ( ( ( PlayerStructure ) playerdata . get ( ev . getWhoClicked ( ) . getUniqueId ( ) ) ) . isViewingItemCube & &
ev . getWhoClicked ( ) . getOpenInventory ( ) . getTitle ( ) . contains ( "Item Cube #" ) ) {
itemcubeid = Integer . parseInt ( ev . getWhoClicked ( ) . getOpenInventory ( ) . getTitle ( ) . split ( "#" ) [ 1 ] ) ; //This is the ID of the window we are looking at, if one exists.
cubetype = itemCube_getCubeType ( itemcubeid ) ;
if ( cubetype = = CubeType . VACUUM ) {
//TwosideKeeper.log(ev.getCurrentItem()+"|||"+ev.getCursor(), 0);
if ( ( ev . getCurrentItem ( ) . getType ( ) ! = Material . AIR & & ! ev . getCurrentItem ( ) . getType ( ) . isBlock ( ) ) | | ( ev . getCursor ( ) . getType ( ) ! = Material . AIR & & ! ev . getCursor ( ) . getType ( ) . isBlock ( ) ) ) {
ev . getWhoClicked ( ) . sendMessage ( ChatColor . RED + "You can only insert/remove Blocks in a Vacuum Cube." ) ;
//TwosideKeeper.log((ev.getCurrentItem().getType()!=Material.AIR)+","+(!ev.getCurrentItem().getType().isBlock())+"|||"+(ev.getCursor().getType()!=Material.AIR)+","+(!ev.getCursor().getType().isBlock()), 0);
ev . setCancelled ( true ) ;
return ;
}
}
} else {
itemcubeid = - 1 ;
}
}
}
@EventHandler ( priority = EventPriority . LOW , ignoreCancelled = true )
public void onItemSpawn ( ItemSpawnEvent ev ) {
//If the item is of a rare type, we will highlight it for emphasis.
@ -5655,11 +5705,23 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
return ;
}
if ( ev . getItem ( ) . getItemStack ( ) . getType ( ) . isBlock ( ) & & InventoryUtils . isCarryingVacuumCube ( p ) ) {
//Try to insert it into the Vacuum cube.
ItemStack [ ] remaining = InventoryUtils . insertItemsInVacuumCube ( p , ev . getItem ( ) . getItemStack ( ) ) ;
if ( remaining . length = = 0 ) {
ev . setCancelled ( true ) ;
ev . getItem ( ) . remove ( ) ;
SoundUtils . playGlobalSound ( ev . getPlayer ( ) . getLocation ( ) , Sound . ENTITY_ITEM_PICKUP , 1 . 0f , 1 . 0f ) ;
return ;
}
}
if ( GenericFunctions . isValidArrow ( ev . getItem ( ) . getItemStack ( ) ) ) {
ev . setCancelled ( true ) ;
ev . getItem ( ) . remove ( ) ;
SoundUtils . playGlobalSound ( ev . getPlayer ( ) . getLocation ( ) , Sound . ENTITY_ITEM_PICKUP , 1 . 0f , 1 . 0f ) ;
AddToPlayerInventory ( ev . getItem ( ) . getItemStack ( ) , p ) ;
return ;
}
}
@ -6786,7 +6848,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
//Item Cube Saving.
public void itemCube_saveConfig ( int id , List < ItemStack > items ) {
public static void itemCube_saveConfig ( int id , List < ItemStack > items ) {
File config ;
config = new File ( TwosideKeeper . filesave , "itemcubes/ItemCube" + id + ".data" ) ;
FileConfiguration workable = YamlConfiguration . loadConfiguration ( config ) ;
@ -6802,7 +6864,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
}
}
public void itemCube_saveConfig ( int id , List < ItemStack > items , CubeType cubetype ) {
public static void itemCube_saveConfig ( int id , List < ItemStack > items , CubeType cubetype ) {
File config ;
config = new File ( TwosideKeeper . filesave , "itemcubes/ItemCube" + id + ".data" ) ;
FileConfiguration workable = YamlConfiguration . loadConfiguration ( config ) ;