Vacuum Cube implementation completed.

testdev
sigonasr2 8 years ago
parent e100ccaadc
commit 5507546ac5
  1. BIN
      TwosideKeeper.jar
  2. 7
      src/sig/plugin/TwosideKeeper/HelperStructures/ItemCube.java
  3. 21
      src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ArrayUtils.java
  4. 58
      src/sig/plugin/TwosideKeeper/HelperStructures/Utils/InventoryUtils.java
  5. 14
      src/sig/plugin/TwosideKeeper/HelperStructures/Utils/ItemUtils.java
  6. 13
      src/sig/plugin/TwosideKeeper/ItemCubeWindow.java
  7. 268
      src/sig/plugin/TwosideKeeper/TwosideKeeper.java
  8. 71
      src/sig/plugin/TwosideKeeper/runServerHeartbeat.java

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));
} 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;
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 {
//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…
Cancel
Save