summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/modules/cycle
diff options
context:
space:
mode:
authorDavid <david@panic.tk>2018-11-07 23:50:06 +0100
committerDavid <david@panic.tk>2018-11-07 23:50:06 +0100
commit604cf01967ede98bf5024e4926bb0777fc4e8eee (patch)
treee2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/cycle
parente86c52ef7c0e1e33c6af0e8674b038976bec11cc (diff)
Converted Modules to gradle
Diffstat (limited to 'src/main/java/com/redstoner/modules/cycle')
-rw-r--r--src/main/java/com/redstoner/modules/cycle/Cycle.cmd12
-rw-r--r--src/main/java/com/redstoner/modules/cycle/Cycle.java142
2 files changed, 154 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/modules/cycle/Cycle.cmd b/src/main/java/com/redstoner/modules/cycle/Cycle.cmd
new file mode 100644
index 0000000..dc8e10a
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/cycle/Cycle.cmd
@@ -0,0 +1,12 @@
+command cycle {
+ on {
+ help Turns on cycle;
+ type player;
+ run cycle_on;
+ }
+ off {
+ help Turns off cycle;
+ type player;
+ run cycle_off;
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/redstoner/modules/cycle/Cycle.java b/src/main/java/com/redstoner/modules/cycle/Cycle.java
new file mode 100644
index 0000000..b0a6310
--- /dev/null
+++ b/src/main/java/com/redstoner/modules/cycle/Cycle.java
@@ -0,0 +1,142 @@
+package com.redstoner.modules.cycle;
+
+import java.io.File;
+import java.util.UUID;
+
+import org.bukkit.GameMode;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerItemHeldEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.json.simple.JSONArray;
+
+import com.nemez.cmdmgr.Command;
+import com.redstoner.annotations.AutoRegisterListener;
+import com.redstoner.annotations.Commands;
+import com.redstoner.annotations.Version;
+import com.redstoner.misc.CommandHolderType;
+import com.redstoner.misc.JsonManager;
+import com.redstoner.misc.Main;
+import com.redstoner.modules.Module;
+
+@Commands(CommandHolderType.File)
+@AutoRegisterListener
+@Version(major = 4, minor = 1, revision = 0, compatible = 4)
+public class Cycle implements Module, Listener
+{
+ private File cycleFile = new File(Main.plugin.getDataFolder(), "cycle.json");
+ private JSONArray no_cyclers;
+
+ @Override
+ public boolean onEnable()
+ {
+ no_cyclers = JsonManager.getArray(cycleFile);
+ if (no_cyclers == null)
+ no_cyclers = new JSONArray();
+ return true;
+ }
+
+ @Override
+ public void onDisable()
+ {
+ saveCyclers();
+ }
+
+ private void saveCyclers()
+ {
+ JsonManager.save(no_cyclers, cycleFile);
+ }
+
+ @Command(hook = "cycle_on")
+ public boolean cycleOn(CommandSender sender)
+ {
+ UUID uid = ((Player) sender).getUniqueId();
+ if (no_cyclers.remove(uid.toString()))
+ {
+ getLogger().message(sender, "Cycle enabled!");
+ saveCyclers();
+ }
+ else
+ getLogger().message(sender, "Cycle was already enabled!");
+ return true;
+ }
+
+ @SuppressWarnings("unchecked")
+ @Command(hook = "cycle_off")
+ public boolean cycleOff(CommandSender sender)
+ {
+ UUID uid = ((Player) sender).getUniqueId();
+ if (!no_cyclers.contains(uid.toString()))
+ {
+ getLogger().message(sender, "Cycle disabled!");
+ no_cyclers.add(uid.toString());
+ saveCyclers();
+ }
+ else
+ getLogger().message(sender, "Cycle was already disabled!");
+ return true;
+ }
+
+ @EventHandler
+ public void onInventoryCycle(PlayerItemHeldEvent event)
+ {
+ Player player = event.getPlayer();
+ UUID uid = player.getUniqueId();
+ if (!player.getGameMode().equals(GameMode.CREATIVE) || player.isSneaking()
+ || no_cyclers.contains(uid.toString()))
+ return;
+ int prev_slot = event.getPreviousSlot();
+ int new_slot = event.getNewSlot();
+ if (prev_slot == 0 && new_slot == 8)
+ shift(player, false);
+ else if (prev_slot == 8 && new_slot == 0)
+ shift(player, true);
+ }
+
+ private void shift(Player player, boolean down)
+ {
+ Inventory inv = player.getInventory();
+ ItemStack[] items = inv.getStorageContents();
+ int shift = down ? -9 : 9;
+ shift = (shift + items.length) % items.length;
+ for (int i = 0; i < 4; i++)
+ {
+ items = join(subset(items, shift, items.length), subset(items, 0, shift));
+ ItemStack[] hotbar = subset(items, 0, 9);
+ boolean found = false;
+ for (ItemStack item : hotbar)
+ if (item != null)
+ {
+ found = true;
+ break;
+ }
+ if (found)
+ break;
+ }
+ inv.setStorageContents(items);
+ }
+
+ private ItemStack[] subset(ItemStack[] items, int start, int end)
+ {
+ ItemStack[] result = new ItemStack[end - start];
+ for (int i = start; i < end; i++)
+ {
+ result[i - start] = items[i];
+ }
+ return result;
+ }
+
+ private ItemStack[] join(ItemStack[] items1, ItemStack[] items2)
+ {
+ ItemStack[] result = new ItemStack[items1.length + items2.length];
+ for (int i = 0; i < items1.length; i++)
+ result[i] = items1[i];
+ int offset = items1.length;
+ for (int i = 0; i < items2.length; i++)
+ result[i + offset] = items2[i];
+ return result;
+ }
+}