diff options
author | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
---|---|---|
committer | David <david@panic.tk> | 2018-11-07 23:50:06 +0100 |
commit | 604cf01967ede98bf5024e4926bb0777fc4e8eee (patch) | |
tree | e2fa63d7e683769ee3bf3eddc75280648e92eb04 /src/main/java/com/redstoner/modules/cycle | |
parent | e86c52ef7c0e1e33c6af0e8674b038976bec11cc (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.cmd | 12 | ||||
-rw-r--r-- | src/main/java/com/redstoner/modules/cycle/Cycle.java | 142 |
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; + } +} |