Vacuum Cube implementation completed.
This commit is contained in:
parent
e100ccaadc
commit
5507546ac5
Binary file not shown.
@ -45,4 +45,11 @@ public class ItemCube {
|
||||
inv.addItem(cursor);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addToViewersOfItemCube(int idnumb, ItemStack[] cursor, Player check) {
|
||||
Inventory inv = getViewingItemCubeInventory(idnumb, check);
|
||||
if (inv!=null) {
|
||||
inv.addItem(cursor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
package sig.plugin.TwosideKeeper.HelperStructures.Utils;
|
||||
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ArrayUtils {
|
||||
public static String toString(ItemStack[] items) {
|
||||
StringBuilder string = new StringBuilder();
|
||||
boolean first=false;
|
||||
for (ItemStack i : items) {
|
||||
if (i!=null) {
|
||||
if (!first) {
|
||||
string.append(i.toString());
|
||||
first=true;
|
||||
} else {
|
||||
string.append(","+i.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
return string.toString();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,58 @@
|
||||
package sig.plugin.TwosideKeeper.HelperStructures.Utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import sig.plugin.TwosideKeeper.TwosideKeeper;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.CubeType;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.CustomItem;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.ItemCube;
|
||||
|
||||
public class InventoryUtils {
|
||||
public static boolean isCarryingVacuumCube(Player p) {
|
||||
for (ItemStack items : p.getInventory().getContents()) {
|
||||
if (items!=null && CustomItem.isVacuumCube(items)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public static ItemStack[] insertItemsInVacuumCube(Player p,ItemStack...items) {
|
||||
ItemStack[] remaining = items;
|
||||
for (ItemStack itemStacks : p.getInventory().getContents()) {
|
||||
if (itemStacks!=null && CustomItem.isVacuumCube(itemStacks)) {
|
||||
//Insert as many items as possible in here.
|
||||
int id = Integer.parseInt(ItemUtils.GetLoreLineContainingString(itemStacks, ChatColor.DARK_PURPLE+"ID#").split("#")[1]);
|
||||
List<ItemStack> itemCubeContents = TwosideKeeper.itemCube_loadConfig(id);
|
||||
Inventory virtualinventory = Bukkit.createInventory(p, itemCubeContents.size());
|
||||
for (int i=0;i<virtualinventory.getSize();i++) {
|
||||
if (itemCubeContents.get(i)!=null) {
|
||||
virtualinventory.setItem(i, itemCubeContents.get(i));
|
||||
}
|
||||
}
|
||||
//TwosideKeeper.log("Items: "+ArrayUtils.toString(remaining), 0);
|
||||
HashMap<Integer,ItemStack> remainingitems = virtualinventory.addItem(remaining);
|
||||
List<ItemStack> itemslist = new ArrayList<ItemStack>();
|
||||
for (int i=0;i<virtualinventory.getSize();i++) {
|
||||
itemslist.add(virtualinventory.getItem(i));
|
||||
}
|
||||
ItemCube.addToViewersOfItemCube(id,remaining,null);
|
||||
TwosideKeeper.itemCube_saveConfig(id, itemslist, CubeType.VACUUM);
|
||||
|
||||
/*for (ItemStack i : remainingitems.values()) {
|
||||
TwosideKeeper.log("Item "+i+" remains", 0);
|
||||
}*/
|
||||
remaining = remainingitems.values().toArray(new ItemStack[0]);
|
||||
//TwosideKeeper.log("Remaining items: "+ArrayUtils.toString(remaining), 0);
|
||||
}
|
||||
}
|
||||
return remaining;
|
||||
}
|
||||
}
|
||||
@ -8,6 +8,8 @@ import org.bukkit.inventory.ItemFlag;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
|
||||
import sig.plugin.TwosideKeeper.TwosideKeeper;
|
||||
|
||||
public class ItemUtils {
|
||||
|
||||
public static void addLore(ItemStack item, String string) {
|
||||
@ -65,6 +67,18 @@ public class ItemUtils {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static String GetLoreLineContainingString(ItemStack item, String string) {
|
||||
if (isValidLoreItem(item)) {
|
||||
List<String> lore = item.getItemMeta().getLore();
|
||||
for (String l : lore) {
|
||||
if (l.contains(string)) {
|
||||
return l;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String GetLoreLine(ItemStack item, int line_numb) {
|
||||
if (isValidLoreItem(item)) {
|
||||
List<String> lore = item.getItemMeta().getLore();
|
||||
|
||||
@ -14,7 +14,7 @@ public class ItemCubeWindow {
|
||||
public static void addItemCubeWindow(Player p, int id) {
|
||||
PlayerStructure pd = PlayerStructure.GetPlayerStructure(p);
|
||||
pd.itemcubelist.add(id);
|
||||
TwosideKeeper.log("Added cube "+id+" to Item Cube List for Player "+p.getName()+". New list: "+pd.itemcubelist.toString(),0);
|
||||
TwosideKeeper.log("Added cube "+id+" to Item Cube List for Player "+p.getName()+". New list: "+pd.itemcubelist.toString(),3);
|
||||
}
|
||||
public static void popItemCubeWindow(Player p) {
|
||||
//Opens the next possible item cube inventory from the list of inventories.
|
||||
@ -22,7 +22,7 @@ public class ItemCubeWindow {
|
||||
if (pd.itemcubelist.size()>0 && !pd.opened_another_cube) {
|
||||
int index = pd.itemcubelist.size()-1;
|
||||
Integer itemcubeid = pd.itemcubelist.get(index);
|
||||
TwosideKeeper.log("Popping Item Cube ID "+index+" from "+p.getName()+"'s list.", 0);
|
||||
TwosideKeeper.log("Popping Item Cube ID "+index+" from "+p.getName()+"'s list.", 3);
|
||||
pd.itemcubelist.remove(index);
|
||||
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() {
|
||||
@ -32,6 +32,7 @@ public class ItemCubeWindow {
|
||||
CubeType size = TwosideKeeper.itemCube_getCubeType(itemcubeid);
|
||||
int inv_size = 9;
|
||||
if (size==CubeType.VACUUM) {
|
||||
TwosideKeeper.log("Opening Vacuum cube.", 5);
|
||||
inv_size=54;
|
||||
} else
|
||||
if (size!=CubeType.NORMAL) {
|
||||
@ -47,9 +48,11 @@ public class ItemCubeWindow {
|
||||
SoundUtils.playLocalSound(p,Sound.BLOCK_CHEST_OPEN,1.0f,1.0f);
|
||||
} else {
|
||||
pd.opened_another_cube=true;
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() {@Override public void run() {p.openInventory(ItemCube.getViewingItemCubeInventory(itemcubeid, p));
|
||||
pd.opened_another_cube=false;
|
||||
pd.isViewingItemCube=true;}},1);
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(TwosideKeeper.plugin, new Runnable() {@Override public void run() {
|
||||
p.openInventory(ItemCube.getViewingItemCubeInventory(itemcubeid, p));
|
||||
pd.opened_another_cube=false;
|
||||
pd.isViewingItemCube=true;
|
||||
}},1);
|
||||
SoundUtils.playLocalSound(p, Sound.BLOCK_CHEST_OPEN, 1.0f, 1.0f);
|
||||
}
|
||||
}},1);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}break;
|
||||
}
|
||||
}
|
||||
LivingEntity m = MonsterController.convertMonster((Monster)p.getWorld().spawnEntity(p.getLocation(),EntityType.ZOMBIE), MonsterDifficulty.ELITE);
|
||||
//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) {
|
||||
@ -3864,50 +3876,55 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
ItemCubeWindow.popItemCubeWindow((Player)ev.getWhoClicked());
|
||||
}
|
||||
}
|
||||
|
||||
//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.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)) {
|
||||
ItemMeta item_meta = ev.getCurrentItem().getItemMeta();
|
||||
if (item_meta.hasLore()) {
|
||||
List<String> item_meta_lore = item_meta.getLore();
|
||||
if (item_meta_lore.size()==4 && item_meta_lore.get(3).contains(ChatColor.DARK_PURPLE+"ID#")) {
|
||||
int itemcubeid = -1;
|
||||
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.
|
||||
} else {
|
||||
itemcubeid = -1;
|
||||
}
|
||||
//This is an Item Cube.
|
||||
//Check to see if the cursor item is an item cube.
|
||||
if ((ev.getCurrentItem().getType()==Material.CHEST ||
|
||||
ev.getCurrentItem().getType()==Material.STORAGE_MINECART ||
|
||||
ev.getCurrentItem().getType()==Material.ENDER_CHEST) &&
|
||||
ev.getCurrentItem().hasItemMeta() &&
|
||||
ev.getCurrentItem().getItemMeta().hasLore()) {
|
||||
log("The clicked item has lore...",5);
|
||||
for (int i=0;i<ev.getCurrentItem().getItemMeta().getLore().size();i++) {
|
||||
if (ev.getCurrentItem().getItemMeta().getLore().get(i).contains(ChatColor.DARK_PURPLE+"ID#")) {
|
||||
log("We clicked an item cube, checking ID.",5);
|
||||
//We clicked an item cube. Check its ID.
|
||||
int clicked_id = Integer.parseInt(ev.getCurrentItem().getItemMeta().getLore().get(i).split("#")[1]);
|
||||
log("ID is "+clicked_id+" and we are viewing "+itemcubeid,5);
|
||||
if (clicked_id==itemcubeid) {
|
||||
//The inventory we are viewing is the same as the item cube we have clicked on!
|
||||
//Stop this before the player does something dumb!
|
||||
//Player p = ((Player)ev.getWhoClicked());
|
||||
//SoundUtils.playLocalSound(p, Sound.BLOCK_NOTE_HARP, 0.4f, 0.2f);
|
||||
ev.setCancelled(true);
|
||||
return;
|
||||
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)) {
|
||||
ItemMeta item_meta = ev.getCurrentItem().getItemMeta();
|
||||
if (item_meta.hasLore()) {
|
||||
List<String> item_meta_lore = item_meta.getLore();
|
||||
if (item_meta_lore.size()==4 && item_meta_lore.get(3).contains(ChatColor.DARK_PURPLE+"ID#")) {
|
||||
int itemcubeid = -1;
|
||||
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.
|
||||
} else {
|
||||
itemcubeid = -1;
|
||||
}
|
||||
//This is an Item Cube.
|
||||
//Check to see if the cursor item is an item cube.
|
||||
if ((ev.getCurrentItem().getType()==Material.CHEST ||
|
||||
ev.getCurrentItem().getType()==Material.STORAGE_MINECART ||
|
||||
ev.getCurrentItem().getType()==Material.ENDER_CHEST) &&
|
||||
ev.getCurrentItem().hasItemMeta() &&
|
||||
ev.getCurrentItem().getItemMeta().hasLore()) {
|
||||
log("The clicked item has lore...",5);
|
||||
for (int i=0;i<ev.getCurrentItem().getItemMeta().getLore().size();i++) {
|
||||
if (ev.getCurrentItem().getItemMeta().getLore().get(i).contains(ChatColor.DARK_PURPLE+"ID#")) {
|
||||
log("We clicked an item cube, checking ID.",5);
|
||||
//We clicked an item cube. Check its ID.
|
||||
int clicked_id = Integer.parseInt(ev.getCurrentItem().getItemMeta().getLore().get(i).split("#")[1]);
|
||||
log("ID is "+clicked_id+" and we are viewing "+itemcubeid,5);
|
||||
if (clicked_id==itemcubeid) {
|
||||
//The inventory we are viewing is the same as the item cube we have clicked on!
|
||||
//Stop this before the player does something dumb!
|
||||
//Player p = ((Player)ev.getWhoClicked());
|
||||
//SoundUtils.playLocalSound(p, Sound.BLOCK_NOTE_HARP, 0.4f, 0.2f);
|
||||
ev.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}}}}
|
||||
}}}}
|
||||
}
|
||||
|
||||
//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;
|
||||
@ -3948,7 +3956,7 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
cubetype=CubeType.LARGE;
|
||||
} else {
|
||||
cubetype=CubeType.ENDER;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3992,57 +4000,70 @@ public class TwosideKeeper extends JavaPlugin implements Listener {
|
||||
}
|
||||
else
|
||||
//Make sure we are not already inside the cube we're placing into.
|
||||
if (idnumb!=itemcubeid) {
|
||||
//See if someone has this inventory opened already.
|
||||
Inventory virtualinventory = null;
|
||||
virtualinventory = ItemCube.getViewingItemCubeInventory(idnumb, (Player)ev.getWhoClicked());
|
||||
if (virtualinventory==null) {
|
||||
virtualinventory = Bukkit.createInventory((Player)ev.getWhoClicked(), clicked_size);
|
||||
log("Inventory size is "+clicked_size,5);
|
||||
List<ItemStack> items = itemCube_loadConfig(idnumb);
|
||||
for (int i=0;i<virtualinventory.getSize();i++) {
|
||||
if (items.get(i)!=null) {
|
||||
virtualinventory.setItem(i, items.get(i));
|
||||
log("Load up with "+items.get(i).toString(),5);
|
||||
}
|
||||
}
|
||||
ItemCube.addToViewersOfItemCube(idnumb,ev.getCursor(),(Player)ev.getWhoClicked());
|
||||
{
|
||||
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;
|
||||
}
|
||||
HashMap<Integer,ItemStack> result = virtualinventory.addItem(ev.getCursor());
|
||||
log("Clicked ID number "+idnumb,5);
|
||||
//Set whatever's left back to the cursor.
|
||||
if (result.size()>0) {
|
||||
ev.setCursor((ItemStack)result.get(0));
|
||||
}
|
||||
if (idnumb!=itemcubeid) {
|
||||
//See if someone has this inventory opened already.
|
||||
Inventory virtualinventory = null;
|
||||
virtualinventory = ItemCube.getViewingItemCubeInventory(idnumb, (Player)ev.getWhoClicked());
|
||||
if (virtualinventory==null) {
|
||||
virtualinventory = Bukkit.createInventory((Player)ev.getWhoClicked(), clicked_size);
|
||||
log("Inventory size is "+clicked_size,5);
|
||||
List<ItemStack> items = itemCube_loadConfig(idnumb);
|
||||
for (int i=0;i<virtualinventory.getSize();i++) {
|
||||
if (items.get(i)!=null) {
|
||||
virtualinventory.setItem(i, items.get(i));
|
||||
log("Load up with "+items.get(i).toString(),5);
|
||||
}
|
||||
}
|
||||
ItemCube.addToViewersOfItemCube(idnumb,ev.getCursor(),(Player)ev.getWhoClicked());
|
||||
}
|
||||
HashMap<Integer,ItemStack> result = virtualinventory.addItem(ev.getCursor());
|
||||
log("Clicked ID number "+idnumb,5);
|
||||
//Set whatever's left back to the cursor.
|
||||
if (result.size()>0) {
|
||||
ev.setCursor((ItemStack)result.get(0));
|
||||
} else {
|
||||
ev.setCursor(new ItemStack(Material.AIR));
|
||||
log("Cursor should be air.",5);
|
||||
}
|
||||
List<ItemStack> itemslist = new ArrayList<ItemStack>();
|
||||
for (int i=0;i<virtualinventory.getSize();i++) {
|
||||
itemslist.add(virtualinventory.getItem(i));
|
||||
}
|
||||
itemCube_saveConfig(idnumb,itemslist,cub);
|
||||
return;
|
||||
} else {
|
||||
ev.setCursor(new ItemStack(Material.AIR));
|
||||
log("Cursor should be air.",5);
|
||||
}
|
||||
List<ItemStack> itemslist = new ArrayList<ItemStack>();
|
||||
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 {
|
||||
//Well, we're already in here, I don't know why they didn't just use the
|
||||
//minecraft inventory management system. Now I have to do math...
|
||||
//Add it to the inventory being viewed.
|
||||
HashMap<Integer,ItemStack> result = ev.getWhoClicked().getOpenInventory().getTopInventory().addItem(ev.getCursor());
|
||||
//Add it to everyone viewing the cube.
|
||||
//ItemCube.addToViewersOfItemCube(idnumb, ev.getCursor(), (Player)ev.getWhoClicked());
|
||||
|
||||
if (result.size()>0) {
|
||||
ev.setCursor((ItemStack)result.get(0));
|
||||
} else {
|
||||
ev.setCursor(new ItemStack(Material.AIR));
|
||||
}
|
||||
List<ItemStack> itemslist = new ArrayList<ItemStack>();
|
||||
for (int i=0;i<ev.getWhoClicked().getOpenInventory().getTopInventory().getSize();i++) {
|
||||
itemslist.add(ev.getWhoClicked().getOpenInventory().getTopInventory().getItem(i));
|
||||
}
|
||||
itemCube_saveConfig(idnumb,itemslist);
|
||||
return;
|
||||
//Well, we're already in here, I don't know why they didn't just use the
|
||||
//minecraft inventory management system. Now I have to do math...
|
||||
//Add it to the inventory being viewed.
|
||||
HashMap<Integer,ItemStack> result = ev.getWhoClicked().getOpenInventory().getTopInventory().addItem(ev.getCursor());
|
||||
//Add it to everyone viewing the cube.
|
||||
//ItemCube.addToViewersOfItemCube(idnumb, ev.getCursor(), (Player)ev.getWhoClicked());
|
||||
|
||||
if (result.size()>0) {
|
||||
ev.setCursor((ItemStack)result.get(0));
|
||||
} else {
|
||||
ev.setCursor(new ItemStack(Material.AIR));
|
||||
}
|
||||
List<ItemStack> itemslist = new ArrayList<ItemStack>();
|
||||
for (int i=0;i<ev.getWhoClicked().getOpenInventory().getTopInventory().getSize();i++) {
|
||||
itemslist.add(ev.getWhoClicked().getOpenInventory().getTopInventory().getItem(i));
|
||||
}
|
||||
itemCube_saveConfig(idnumb,itemslist);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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.
|
||||
@ -4129,6 +4151,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) {
|
||||
@ -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);
|
||||
|
||||
@ -15,7 +15,9 @@ import org.bukkit.Particle;
|
||||
import org.bukkit.Sound;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.FallingBlock;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Monster;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
@ -35,6 +37,7 @@ import sig.plugin.TwosideKeeper.HelperStructures.ServerType;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.WorldShop;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Common.GenericFunctions;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Effects.LavaPlume;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.InventoryUtils;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.MessageUtils;
|
||||
import sig.plugin.TwosideKeeper.HelperStructures.Utils.SoundUtils;
|
||||
|
||||
@ -335,6 +338,7 @@ final class runServerHeartbeat implements Runnable {
|
||||
GenericFunctions.applyStealth(p, true);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//TwosideKeeper.outputArmorDurability(p,">");
|
||||
}
|
||||
@ -346,6 +350,73 @@ final class runServerHeartbeat implements Runnable {
|
||||
TwosideKeeper.TwosideSpleefGames.TickEvent();
|
||||
}
|
||||
|
||||
public static void runVacuumCubeSuckup(Player p) {
|
||||
if (InventoryUtils.isCarryingVacuumCube(p)) {
|
||||
//Suck up nearby item entities.
|
||||
List<Entity> ents = p.getNearbyEntities(8, 8, 8);
|
||||
for (Entity ent : ents) {
|
||||
if (ent instanceof Item) {
|
||||
//Pull towards the player.
|
||||
double SPD = 0.2;
|
||||
double deltax = ent.getLocation().getX()-p.getLocation().getX();
|
||||
double deltay = ent.getLocation().getY()-p.getLocation().getY();
|
||||
double deltaz = ent.getLocation().getZ()-p.getLocation().getZ();
|
||||
double xvel = 0;
|
||||
double yvel = 0;
|
||||
double zvel = 0;
|
||||
if (deltax>0.25) {
|
||||
xvel=-SPD*(Math.min(10, Math.abs(deltax)));
|
||||
} else
|
||||
if (deltax<-0.25) {
|
||||
xvel=SPD*(Math.min(10, Math.abs(deltax)));
|
||||
}
|
||||
if (deltay>0.01) {
|
||||
yvel=-SPD*deltay*4;
|
||||
} else
|
||||
if (deltay<-0.01) {
|
||||
yvel=SPD*deltay*4;
|
||||
}
|
||||
if (deltaz>0.25) {
|
||||
zvel=-SPD*(Math.min(10, Math.abs(deltaz)));
|
||||
} else
|
||||
if (deltaz<-0.25) {
|
||||
zvel=SPD*(Math.min(10, Math.abs(deltaz)));
|
||||
}
|
||||
if (Math.abs(deltax)<0.25 &&
|
||||
Math.abs(deltay)<0.25 &&
|
||||
Math.abs(deltaz)<0.25) {
|
||||
//Collect this item.
|
||||
if (((Item)ent).getItemStack().getType().isBlock()) {
|
||||
ItemStack[] remaining = InventoryUtils.insertItemsInVacuumCube(p, ((Item) ent).getItemStack());
|
||||
if (remaining.length==0) {
|
||||
SoundUtils.playGlobalSound(ent.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1.0f, 1.4f);
|
||||
ent.remove();
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
ent.setVelocity(new Vector(xvel,yvel,zvel));
|
||||
}
|
||||
/*if (ent.getLocation().getX()<p.getLocation().getX()) {
|
||||
ent.setVelocity(ent.getVelocity().setX(SPD*(10-Math.min(10,Math.abs()))));
|
||||
} else {
|
||||
ent.setVelocity(ent.getVelocity().setX(-SPD*(10-Math.min(10,Math.abs(p.getLocation().getX()-ent.getLocation().getX())))));
|
||||
}
|
||||
if (ent.getLocation().getY()<p.getLocation().getY()) {
|
||||
ent.setVelocity(ent.getVelocity().setY(SPD*(10-Math.min(10,Math.abs(p.getLocation().getY()-ent.getLocation().getY())))));
|
||||
} else {
|
||||
ent.setVelocity(ent.getVelocity().setY(-SPD*(10-Math.min(10,Math.abs(p.getLocation().getY()-ent.getLocation().getY())))));
|
||||
}
|
||||
if (ent.getLocation().getZ()<p.getLocation().getZ()) {
|
||||
ent.setVelocity(ent.getVelocity().setZ(SPD*(10-Math.min(10,Math.abs(p.getLocation().getZ()-ent.getLocation().getZ())))));
|
||||
} else {
|
||||
ent.setVelocity(ent.getVelocity().setZ(-SPD*(10-Math.min(10,Math.abs(p.getLocation().getZ()-ent.getLocation().getZ())))));
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void PopRandomLavaBlock(Player p) {
|
||||
if (p.getWorld().getName().equalsIgnoreCase("world_nether") &&
|
||||
TwosideKeeper.last_lava_plume_time+(TwosideKeeper.LAVA_PLUME_COOLDOWN/(Math.max(Bukkit.getOnlinePlayers().size(),1)))<TwosideKeeper.getServerTickTime()) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user