Skip to content
This repository has been archived by the owner on Dec 7, 2022. It is now read-only.

Commit

Permalink
Update inventory viewer
Browse files Browse the repository at this point in the history
  • Loading branch information
Pablete1234 authored and Kevin Phoenix committed Nov 20, 2015
1 parent 257253b commit d37de01
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 56 deletions.
2 changes: 2 additions & 0 deletions src/main/java/in/twizmwaz/cardinal/Cardinal.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import in.twizmwaz.cardinal.command.ChatCommands;
import in.twizmwaz.cardinal.command.ClassCommands;
import in.twizmwaz.cardinal.command.CycleCommand;
import in.twizmwaz.cardinal.command.InventoryCommand;
import in.twizmwaz.cardinal.command.JoinCommand;
import in.twizmwaz.cardinal.command.ListCommand;
import in.twizmwaz.cardinal.command.MapCommands;
Expand Down Expand Up @@ -123,6 +124,7 @@ public boolean hasPermission(CommandSender sender, String perm) {
cmdRegister.register(ChatCommands.class);
cmdRegister.register(ClassCommands.class);
cmdRegister.register(CycleCommand.class);
cmdRegister.register(InventoryCommand.class);
cmdRegister.register(JoinCommand.class);
cmdRegister.register(ListCommand.class);
cmdRegister.register(MapCommands.class);
Expand Down
1 change: 1 addition & 0 deletions src/main/java/in/twizmwaz/cardinal/chat/ChatConstant.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ public enum ChatConstant {
ERROR_CANNOT_CALCULATE_SCORES("error.cannotCalculateScores"),
ERROR_PROXIMITY_OBS_ONLY("error.proximityObsOnly"),
ERROR_PROXIMITY_NO_SCORING("error.proximityNoScoring"),
ERROR_INVENTORY_NOT_VIEWABLE("error.inventoryNotViewable"),

GENERIC_MAP_SET("generic.mapSet"),
GENERIC_MARKED_FOR_RELOADING("generic.markedForReloading"),
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/in/twizmwaz/cardinal/command/InventoryCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package in.twizmwaz.cardinal.command;

import com.sk89q.minecraft.util.commands.Command;
import com.sk89q.minecraft.util.commands.CommandContext;
import com.sk89q.minecraft.util.commands.CommandException;
import in.twizmwaz.cardinal.GameHandler;
import in.twizmwaz.cardinal.chat.ChatConstant;
import in.twizmwaz.cardinal.module.modules.observers.ObserverModule;
import in.twizmwaz.cardinal.util.ChatUtil;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

public class InventoryCommand {

@Command(aliases = {"inventory", "inv"}, desc = "Opens a player's inventory", min = 1, usage = "<player>")
public static void inventory(final CommandContext cmd, CommandSender sender) throws CommandException {
if (!(sender instanceof Player)) {
throw new CommandException(ChatConstant.ERROR_CONSOLE_NO_USE.getMessage(ChatUtil.getLocale(sender)));
}
Player target = Bukkit.getPlayer(cmd.getString(0), sender);
if (target == null) {
throw new CommandException(ChatConstant.ERROR_PLAYER_NOT_FOUND.getMessage(ChatUtil.getLocale(sender)));
}
GameHandler.getGameHandler().getMatch().getModules().getModule(ObserverModule.class).openInventory((Player)sender, target, true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryDragEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerDropItemEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
Expand Down Expand Up @@ -92,6 +93,7 @@ public void unload() {

private void resetPlayer(Player player, boolean clear) {
player.setGameMode(GameMode.CREATIVE);
player.setFlying(true);
player.setAffectsSpawning(false);
player.setCollidesWithEntities(false);
player.setCanPickupItems(false);
Expand All @@ -108,6 +110,7 @@ private void resetPlayer(Player player, boolean clear) {
ItemStack shears = Items.createItem(Material.SHEARS, 1, (short) 0, ChatColor.RED + new LocalizedChatMessage(ChatConstant.UI_TNT_DEFUSER).getMessage(player.getLocale()));
player.getInventory().setItem(5, shears);
}
player.closeInventory();

try {
player.updateInventory();
Expand Down Expand Up @@ -174,56 +177,56 @@ public void onInteraction(PlayerInteractEvent event) {
}
if (event.getClickedBlock() != null && event.getAction() == Action.RIGHT_CLICK_BLOCK) {
if (event.getClickedBlock().getType().equals(Material.CHEST) || event.getClickedBlock().getType().equals(Material.TRAPPED_CHEST)) {
Inventory chest = Bukkit.createInventory(null, ((Chest) event.getClickedBlock().getState()).getInventory().getSize(), (((Chest) event.getClickedBlock().getState()).getInventory().getSize() == 54 ? "Large Chest" : "Chest"));
Inventory chest = Bukkit.createInventory(null, ((Chest) event.getClickedBlock().getState()).getInventory().getSize());
for (int i = 0; i < ((Chest) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
chest.setItem(i, ((Chest) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(chest);
}
if (event.getClickedBlock().getType().equals(Material.FURNACE)) {
Inventory furnace = Bukkit.createInventory(null, InventoryType.FURNACE, "Furnace");
Inventory furnace = Bukkit.createInventory(null, InventoryType.FURNACE);
for (int i = 0; i < ((Furnace) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
furnace.setItem(i, ((Furnace) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(furnace);
}
if (event.getClickedBlock().getType().equals(Material.BURNING_FURNACE)) {
Inventory furnace = Bukkit.createInventory(null, InventoryType.FURNACE, "Furnace");
Inventory furnace = Bukkit.createInventory(null, InventoryType.FURNACE);
for (int i = 0; i < ((Furnace) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
furnace.setItem(i, ((Furnace) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(furnace);
}
if (event.getClickedBlock().getType().equals(Material.DISPENSER)) {
Inventory dispenser = Bukkit.createInventory(null, InventoryType.DISPENSER, "Dispenser");
Inventory dispenser = Bukkit.createInventory(null, InventoryType.DISPENSER);
for (int i = 0; i < ((Dispenser) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
dispenser.setItem(i, ((Dispenser) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(dispenser);
}
if (event.getClickedBlock().getType().equals(Material.DROPPER)) {
Inventory dropper = Bukkit.createInventory(null, InventoryType.DROPPER, "Dropper");
Inventory dropper = Bukkit.createInventory(null, InventoryType.DROPPER);
for (int i = 0; i < ((Dropper) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
dropper.setItem(i, ((Dropper) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(dropper);
}
if (event.getClickedBlock().getType().equals(Material.HOPPER)) {
Inventory hopper = Bukkit.createInventory(null, InventoryType.HOPPER, "Hopper");
Inventory hopper = Bukkit.createInventory(null, InventoryType.HOPPER);
for (int i = 0; i < ((Hopper) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
hopper.setItem(i, ((Hopper) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(hopper);
}
if (event.getClickedBlock().getType().equals(Material.BREWING_STAND)) {
Inventory brewingStand = Bukkit.createInventory(null, InventoryType.BREWING, "Brewing Stand");
Inventory brewingStand = Bukkit.createInventory(null, InventoryType.BREWING);
for (int i = 0; i < ((BrewingStand) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
brewingStand.setItem(i, ((BrewingStand) event.getClickedBlock().getState()).getInventory().getItem(i));
}
event.getPlayer().openInventory(brewingStand);
}
if (event.getClickedBlock().getType().equals(Material.BEACON)) {
Inventory beacon = Bukkit.createInventory(null, InventoryType.BEACON, "Beacon");
Inventory beacon = Bukkit.createInventory(null, InventoryType.BEACON);
for (int i = 0; i < ((Beacon) event.getClickedBlock().getState()).getInventory().getSize(); i++) {
beacon.setItem(i, ((Beacon) event.getClickedBlock().getState()).getInventory().getItem(i));
}
Expand All @@ -235,13 +238,10 @@ public void onInteraction(PlayerInteractEvent event) {

@EventHandler
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
if (testObserver(event.getPlayer())) {
if (event.getRightClicked() instanceof Player && !testObserver((Player) event.getRightClicked())) {
event.getPlayer().openInventory(getFakeInventory((Player) event.getRightClicked(), event.getPlayer().getLocale()));
setViewing(event.getPlayer().getUniqueId(), event.getRightClicked().getUniqueId());
} else if (event.getRightClicked() instanceof ItemFrame) {
event.setCancelled(true);
}
if (event.getRightClicked() instanceof Player){
openInventory(event.getPlayer(), (Player) event.getRightClicked(), false);
} else if (event.getRightClicked() instanceof ItemFrame) {
event.setCancelled(true);
}
}

Expand All @@ -261,6 +261,11 @@ public void onViewingInventoryClick(InventoryClickEvent event) {
refreshView(event.getWhoClicked().getUniqueId());
}

@EventHandler(priority = EventPriority.MONITOR)
public void onViewingInventoryDrag(InventoryDragEvent event) {
refreshView(event.getWhoClicked().getUniqueId());
}

@EventHandler
public void onViewingPlayerPickupItem(PlayerPickupItemEvent event) {
refreshView(event.getPlayer().getUniqueId());
Expand Down Expand Up @@ -324,63 +329,62 @@ public void onPlayerInteract(PlayerInteractEvent event) {

@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
if (viewing.containsKey(event.getPlayer().getUniqueId())) {
List<UUID> toClose = new ArrayList<>();
for (UUID uuid : viewing.get(event.getPlayer().getUniqueId())) {
if (Bukkit.getPlayer(uuid) != null) {
toClose.add(uuid);
}
}
for (UUID uuid : toClose) {
Bukkit.getPlayer(uuid).closeInventory();
closeInventories(event.getPlayer().getUniqueId());
}

@EventHandler (priority = EventPriority.MONITOR)
public void onPlayerChangeTeamEvent(PlayerChangeTeamEvent event) {
if (event.getNewTeam().isPresent() && event.getNewTeam().get().isObserver()){
closeInventories(event.getPlayer().getUniqueId());
}
}

public void openInventory(Player viewer, Player view, boolean message){
if (testObserver(viewer) && !testObserver(view)) {
viewer.openInventory(getFakeInventory(view, viewer.getLocale()));
if (!viewing.containsKey(view.getUniqueId())) {
viewing.put(view.getUniqueId(), new ArrayList<UUID>());
}
viewing.get(view.getUniqueId()).add(viewer.getUniqueId());
} else if (message){
viewer.sendMessage(ChatColor.RED + new LocalizedChatMessage(ChatConstant.ERROR_INVENTORY_NOT_VIEWABLE).getMessage(viewer.getLocale()));
}
}

public void setViewing(UUID uuid, UUID view) {
if (!viewing.containsKey(view)) {
viewing.put(view, new ArrayList<UUID>());
public void closeInventories (UUID uuid) {
if (viewing.containsKey(uuid)) {
for (int i = 0; i < viewing.get(uuid).size(); i++) {
if (Bukkit.getPlayer(viewing.get(uuid).get(0)) != null) {
Bukkit.getPlayer(viewing.get(uuid).get(0)).closeInventory();
}
}
}
viewing.get(view).add(uuid);
}

public void refreshView(final UUID view) {
Bukkit.getScheduler().scheduleSyncDelayedTask(GameHandler.getGameHandler().getPlugin(), new Runnable() {
@Override
public void run() {
if (Bukkit.getPlayer(view) != null && viewing.containsKey(view)) {
List<UUID> toOpen = new ArrayList<>();
for (UUID uuid : viewing.get(view)) {
if (Bukkit.getPlayer(uuid) != null) {
toOpen.add(uuid);
if (Bukkit.getPlayer(view) != null && viewing.containsKey(view)) {
List<UUID> viewers = viewing.get(view);
for (int i = 0; i < viewers.size(); i++) {
Player player = Bukkit.getPlayer(viewers.get(i));
if (player != null && player.getOpenInventory().getTitle().contains(Bukkit.getPlayer(view).getName())) {
Inventory fake = getFakeInventory(Bukkit.getPlayer(view), player.getLocale());
for (int i2 = 0; i2 < 45; i2 ++) {
try {
player.getOpenInventory().setItem(i2, fake.getItem(i2));
} catch (NullPointerException e) {
}
}
for (UUID uuid : toOpen) {
Bukkit.getPlayer(uuid).openInventory(getFakeInventory(Bukkit.getPlayer(view), Bukkit.getPlayer(uuid).getLocale()));
setViewing(uuid, view);
}
}

if (Bukkit.getPlayer(view) != null && viewing.containsKey(view)) {
for (UUID uuid : viewing.get(view)) {
Player player = Bukkit.getPlayer(uuid);
if (player != null && player.getOpenInventory().getTitle().equals(Teams.getTeamColorByPlayer(Bukkit.getPlayer(view)) + Bukkit.getPlayer(view).getName())) {
Inventory fake = getFakeInventory(Bukkit.getPlayer(view), player.getLocale());
for (int i = 0; i < 36; i++) {
try {
player.getOpenInventory().setItem(i, fake.getItem(i));
} catch (NullPointerException e) {
}
}
}
if (!player.getOpenInventory().getTitle().equals(Bukkit.getPlayer(view).getDisplayName())){
player.openInventory(fake);
viewing.get(view).add(viewers.get(i));
}
}
}
}, 0);
}
}

public Inventory getFakeInventory(Player player, String locale) {
Inventory inventory = Bukkit.createInventory(null, 45, Teams.getTeamColorByPlayer(player) + player.getName());
Inventory inventory = Bukkit.createInventory(null, 45, player.getDisplayName());
inventory.setItem(0, player.getInventory().getHelmet());
inventory.setItem(1, player.getInventory().getChestplate());
inventory.setItem(2, player.getInventory().getLeggings());
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/lang/en.xml
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
<cannotCalculateScores>Team scores cannot be calculated.</cannotCalculateScores>
<proximityObsOnly>The /proximity command is only available to observers.</proximityObsOnly>
<proximityNoScoring>There are no objectives that track proximity.</proximityNoScoring>
<inventoryNotViewable>Player's inventory is not currently viewable</inventoryNotViewable>
</error>
<generic>
<mapSet>Next map set to {0}</mapSet>
Expand Down

0 comments on commit d37de01

Please sign in to comment.