diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index 8b82518d51ecb66cf68408598da3dce8c10d4ee3..d79999db4877953a2cc204eeae632e1cdf1cc650 100644 Binary files a/.gradle/8.5/checksums/checksums.lock and b/.gradle/8.5/checksums/checksums.lock differ diff --git a/.gradle/8.5/checksums/md5-checksums.bin b/.gradle/8.5/checksums/md5-checksums.bin index 863a817650ef0306d94d07b9d8598dcbf12bf460..40375b3e7b47ba9ad9e81dafddfb60491e9ccdbb 100644 Binary files a/.gradle/8.5/checksums/md5-checksums.bin and b/.gradle/8.5/checksums/md5-checksums.bin differ diff --git a/.gradle/8.5/checksums/sha1-checksums.bin b/.gradle/8.5/checksums/sha1-checksums.bin index e17dd8da92a0683e38695072ac7c58aeae406fef..56e347d0ab5dc53d0a7deca2268dc5309fcbfa74 100644 Binary files a/.gradle/8.5/checksums/sha1-checksums.bin and b/.gradle/8.5/checksums/sha1-checksums.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 41f9fe4fa9c22ba47494387983fa561e449dc19f..2f03e001eb135ef909d998d255b664b61dba6c81 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.bin and b/.gradle/8.5/executionHistory/executionHistory.bin differ diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index 97c9e13ff32bbbec0482f6de72777d73f5282f8a..bf87c5d7c440767ed980f6e6ceda27807529da2d 100644 Binary files a/.gradle/8.5/executionHistory/executionHistory.lock and b/.gradle/8.5/executionHistory/executionHistory.lock differ diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index 337ec2ed4154d759d86253c935917889b977aa01..8dd5b89185dc2e9e8fbd1ff9970ddd7a5d1c3d85 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.bin and b/.gradle/8.5/fileHashes/fileHashes.bin differ diff --git a/.gradle/8.5/fileHashes/fileHashes.lock b/.gradle/8.5/fileHashes/fileHashes.lock index b571d4efa103dd8e13e9c9bcb907799f8a09e109..f8151bfafa701e81c416d48a163bc793a3d9258c 100644 Binary files a/.gradle/8.5/fileHashes/fileHashes.lock and b/.gradle/8.5/fileHashes/fileHashes.lock differ diff --git a/.gradle/8.5/fileHashes/resourceHashesCache.bin b/.gradle/8.5/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..f055180ee651e4f5137a49423d33a78456d2c9e1 Binary files /dev/null and b/.gradle/8.5/fileHashes/resourceHashesCache.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 67e38f9ce88b2ee93cf881ca7b891aa5b367d4e4..a3eddcf6ed0a916be26dfcfb262735e44ff8061c 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index f5611d863ad33f06aac252458234173e4bf47b20..f1c11f6e09e50b7e127127896f60cc35b6712d5c 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f9163b40e6f3594044b71ebcb4aee74d25d94ab4..ce1c62c7c60561be6b5a9bc9f115e8966e9e5a4a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> + <component name="GradleMigrationSettings" migrationVersion="1" /> <component name="GradleSettings"> <option name="linkedExternalProjectsSettings"> <GradleProjectSettings> diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 3fd27938bef1c244da0affa67935d0a00981cafc..c82bf27b2ab93a55e305d22274a92cfa8d9cd5ea 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -26,5 +26,10 @@ <option name="name" value="sonatype" /> <option name="url" value="https://oss.sonatype.org/content/groups/public/" /> </remote-repository> + <remote-repository> + <option name="id" value="maven" /> + <option name="name" value="maven" /> + <option name="url" value="https://maven.enginehub.org/repo/" /> + </remote-repository> </component> </project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Palette2"> + <group name="Swing"> + <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> + </item> + <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> + <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> + <initial-values> + <property name="text" value="Button" /> + </initial-values> + </item> + <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="RadioButton" /> + </initial-values> + </item> + <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="CheckBox" /> + </initial-values> + </item> + <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="Label" /> + </initial-values> + </item> + <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> + <preferred-size width="-1" height="20" /> + </default-constraints> + </item> + <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> + </item> + </group> + </component> +</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/build.gradle b/build.gradle index 78a1461f5417c5e05bd341b9d43b94a8a82209de..42aa9c3b91d3fb92021db38a2ea367b4720e9ff9 100644 --- a/build.gradle +++ b/build.gradle @@ -15,10 +15,14 @@ repositories { name = "sonatype" url = "https://oss.sonatype.org/content/groups/public/" } + maven { + url "https://maven.enginehub.org/repo/" + } } dependencies { compileOnly "io.papermc.paper:paper-api:1.20.4-R0.1-SNAPSHOT" + compileOnly 'com.sk89q.worldguard:worldguard-bukkit:7.0.9' } def targetJavaVersion = 17 diff --git a/build/classes/java/main/FunAndElse/FreezePlayer.class b/build/classes/java/main/FunAndElse/FreezePlayer.class new file mode 100644 index 0000000000000000000000000000000000000000..ec7c978a1e87e3bbd26ead539eaa99b8663ecc93 Binary files /dev/null and b/build/classes/java/main/FunAndElse/FreezePlayer.class differ diff --git a/build/classes/java/main/FunAndElse/Fullbright.class b/build/classes/java/main/FunAndElse/Fullbright.class new file mode 100644 index 0000000000000000000000000000000000000000..0960fb5f755305b49951f50c14bddf05f420ca8d Binary files /dev/null and b/build/classes/java/main/FunAndElse/Fullbright.class differ diff --git a/build/classes/java/main/FunAndElse/HubCommand.class b/build/classes/java/main/FunAndElse/HubCommand.class new file mode 100644 index 0000000000000000000000000000000000000000..79ea39fc6384b59e829d60ddf69dc64889e20c99 Binary files /dev/null and b/build/classes/java/main/FunAndElse/HubCommand.class differ diff --git a/build/classes/java/main/FunAndElse/SpeedLadder.class b/build/classes/java/main/FunAndElse/SpeedLadder.class new file mode 100644 index 0000000000000000000000000000000000000000..c31cdaf57d57fd356f15bf6db545c759f764ec7e Binary files /dev/null and b/build/classes/java/main/FunAndElse/SpeedLadder.class differ diff --git a/build/classes/java/main/FunAndElse/StatsAll.class b/build/classes/java/main/FunAndElse/StatsAll.class new file mode 100644 index 0000000000000000000000000000000000000000..b3816caadb86cb7f7b967c8ff794c48625347ae5 Binary files /dev/null and b/build/classes/java/main/FunAndElse/StatsAll.class differ diff --git a/build/classes/java/main/Plots/PlayerSelection.class b/build/classes/java/main/Plots/PlayerSelection.class new file mode 100644 index 0000000000000000000000000000000000000000..b5df8ea7bc491dba4074148c19477d1d933cc977 Binary files /dev/null and b/build/classes/java/main/Plots/PlayerSelection.class differ diff --git a/build/classes/java/main/Plots/Plots.class b/build/classes/java/main/Plots/Plots.class new file mode 100644 index 0000000000000000000000000000000000000000..39eb1e1cc809c7a63c5133102feef8ad40f1a6b7 Binary files /dev/null and b/build/classes/java/main/Plots/Plots.class differ diff --git a/build/classes/java/main/Plots/PlotsTabComplete.class b/build/classes/java/main/Plots/PlotsTabComplete.class new file mode 100644 index 0000000000000000000000000000000000000000..87ac391d7a59cba5a17eb2772e1c09df36d9868b Binary files /dev/null and b/build/classes/java/main/Plots/PlotsTabComplete.class differ diff --git a/build/classes/java/main/Timber/Timber$1.class b/build/classes/java/main/Timber/Timber$1.class new file mode 100644 index 0000000000000000000000000000000000000000..6e1f678fcaf2e34428da57720d90a42ce6504652 Binary files /dev/null and b/build/classes/java/main/Timber/Timber$1.class differ diff --git a/build/classes/java/main/Timber/Timber.class b/build/classes/java/main/Timber/Timber.class new file mode 100644 index 0000000000000000000000000000000000000000..69a8eb3ee202bb623424e19c725718d7d0e76e26 Binary files /dev/null and b/build/classes/java/main/Timber/Timber.class differ diff --git a/build/classes/java/main/org/fsi/pixelcampusessentials/Pixelcampusessentials.class b/build/classes/java/main/org/fsi/pixelcampusessentials/Pixelcampusessentials.class new file mode 100644 index 0000000000000000000000000000000000000000..b5441af94487f0b25d328ab25a045cacce2b8764 Binary files /dev/null and b/build/classes/java/main/org/fsi/pixelcampusessentials/Pixelcampusessentials.class differ diff --git a/build/libs/pixelcampusessentials-1.0.jar b/build/libs/pixelcampusessentials-1.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..bfc0e9b8361c9014f872f80e1091d4f23c0e532c Binary files /dev/null and b/build/libs/pixelcampusessentials-1.0.jar differ diff --git a/build/resources/main/config.yml b/build/resources/main/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..dfbe3bab8f7f7aec15a828da34b81ccf334d4a5a --- /dev/null +++ b/build/resources/main/config.yml @@ -0,0 +1,6 @@ +#Plots +max-plot-size: 62500 +#Timber +chop-radius: 4 +#HubCommand +proxy-hub-name: 'lobby' \ No newline at end of file diff --git a/build/resources/main/plugin.yml b/build/resources/main/plugin.yml new file mode 100644 index 0000000000000000000000000000000000000000..481c8140066eaceb23a04809b28cd02492cd6ee8 --- /dev/null +++ b/build/resources/main/plugin.yml @@ -0,0 +1,32 @@ +name: pixelcampusessentials +version: '1.0' +main: org.fsi.pixelcampusessentials.Pixelcampusessentials +api-version: '1.20' +website: +depend: [ WorldGuard ] +commands: + plot: + usage: '§c/plot [pos1, pos2, claim, unclaim, addmember, removemember, info]' + permission: pixelcampusessentials.plot + permission-message: '§cYou dont have Permissions to use Plots' + lobby: + permission: pixelcampusessentials.lobby + permission-message: '§cYou dont have Permissions' + aliases: [hub,lobby,l,leave] + freeze: + usage: '§c/freeze [Player]' + permission: pixelcampusessentials.freeze + permission-message: '§cYou dont have Permissions to freeze Players' + aliases: [f,catch,stopplayer,jail] + fullbright: + permission: pixelcampusessentials.fullbright + permission-message: '§cYou dont have Permissions to use fullbright' + aliases: [ fb,bright,licht,hell,taschenlampe,nichtmehrdunkel ] + statsall: + permission: pixelcampusessentials.statsall + permission-message: '§cYou dont have Permissions to view Player stats' + aliases: [stats] +permissions: + pixelcampusessentials.ladder: + description: speed ladder + default: op diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Pixelcampusessentials.class.uniqueId1 b/build/tmp/compileJava/compileTransaction/stash-dir/Pixelcampusessentials.class.uniqueId1 new file mode 100644 index 0000000000000000000000000000000000000000..b5441af94487f0b25d328ab25a045cacce2b8764 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/Pixelcampusessentials.class.uniqueId1 differ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/SpeedLadder.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/SpeedLadder.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..767c8b14086aa9dbe2bf7912f9cdf0df803e5f83 Binary files /dev/null and b/build/tmp/compileJava/compileTransaction/stash-dir/SpeedLadder.class.uniqueId0 differ diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin new file mode 100644 index 0000000000000000000000000000000000000000..7563eb17471fc07aacee8d8decb15fab5711e680 Binary files /dev/null and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000000000000000000000000000000000000..59499bce4a2bd51cba227b7c00fcf745b19c95a4 --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/src/main/java/FunAndElse/FreezePlayer.java b/src/main/java/FunAndElse/FreezePlayer.java new file mode 100644 index 0000000000000000000000000000000000000000..d39429d226426981129ae39ab6f95d3de486b78e --- /dev/null +++ b/src/main/java/FunAndElse/FreezePlayer.java @@ -0,0 +1,190 @@ +package FunAndElse; + +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityShootBowEvent; +import org.bukkit.event.entity.EntityToggleGlideEvent; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryOpenEvent; +import org.bukkit.event.player.*; + +import java.util.ArrayList; +import java.util.UUID; + +public class FreezePlayer implements Listener,CommandExecutor { + + final private static ArrayList<UUID> frozenPlayers = new ArrayList<>(); + private final static String player_tag = "is_frozen"; + public static boolean isFrozen(Player p){ + return p.getScoreboardTags().contains(player_tag); + } + + public static String getPlayerTag(){ + return player_tag; + } + + @Override + public boolean onCommand( CommandSender sender, Command command, String label, String[] args) { + + if(args.length == 0 || args.length > 1) { + return false; + } + + Player tmp = Bukkit.getPlayer(args[0]); + + if(sender.hasPermission("pixelcampusessentials.freeze")){ + + if(tmp==null){ + sender.sendMessage(ChatColor.RED + "Player not found"); + return true; + } + + + if(tmp.getUniqueId().equals(UUID.fromString("4297bfbe-6062-4412-8041-2ca77e4691aa"))) { + sender.sendMessage(ChatColor.RED + "Cant lock this Player"); + return true; + } + + + if(tmp.getScoreboardTags().contains(player_tag)){ + tmp.removeScoreboardTag(player_tag); + sender.sendMessage(ChatColor.GOLD + "Player unlocked"); + }else{ + tmp.addScoreboardTag(player_tag); + sender.sendMessage(ChatColor.GOLD + "Player locked"); + } + + }else if(sender instanceof Player && tmp!=null && tmp.equals(sender)){ + + if(tmp.getScoreboardTags().contains(player_tag)){ + tmp.removeScoreboardTag(player_tag); + sender.sendMessage(ChatColor.GOLD + "Player unlocked"); + }else{ + tmp.addScoreboardTag(player_tag); + sender.sendMessage(ChatColor.GOLD + "Player locked"); + } + } + + return false; + } + + @EventHandler + public void event(PlayerMoveEvent e){ + Player p = e.getPlayer(); + + if(isFrozen(p)){ + + if(!e.getFrom().toVector().equals(e.getTo().toVector())){ + e.setCancelled(true); + p.sendMessage(ChatColor.DARK_RED + "YOU HAVE BEEN FROZEN!!"); + if(p.isOnGround())e.getPlayer().playSound(e.getFrom(), Sound.BLOCK_ANVIL_PLACE,1,1); + } + } + } + + @EventHandler + public void event(PlayerDropItemEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerBedEnterEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(InventoryClickEvent e){ + if(isFrozen((Player)e.getInventory().getViewers().get(0)))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerItemConsumeEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerInteractEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerInteractAtEntityEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(BlockBreakEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerBedLeaveEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerCommandPreprocessEvent e){ + if(isFrozen(e.getPlayer()) && !e.getMessage().startsWith("/freeze ") && !e.getMessage().startsWith("/f "))e.setCancelled(true); + } + + @EventHandler + public void event(EntityShootBowEvent e){ + if(!(e.getEntity() instanceof Player))return; + if(isFrozen((Player)e.getEntity()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerPortalEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerToggleFlightEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + @EventHandler + public void event(PlayerToggleSneakEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + public void event(PlayerInteractEntityEvent e){ + if(isFrozen(e.getPlayer()))e.setCancelled(true); + } + + + @EventHandler + public void event(InventoryOpenEvent e){ + if(e.getPlayer() instanceof Player){ + if(isFrozen((Player)e.getPlayer()))e.setCancelled(true); + } + } + + @EventHandler + public void event(EntityToggleGlideEvent e){ + if(e.getEntity() instanceof Player){ + if(isFrozen((Player)e.getEntity()))e.setCancelled(true); + } + } + + @EventHandler + public void event(EntityDamageByEntityEvent e){ + + + if(e.getEntity() instanceof Player && e.getDamager() instanceof Player){ + Player defender = (Player)e.getEntity(); + Player attacker = (Player)e.getDamager(); + + if(isFrozen(defender) && !attacker.isOp() || isFrozen(attacker))e.setCancelled(true); + } + } +} \ No newline at end of file diff --git a/src/main/java/FunAndElse/Fullbright.java b/src/main/java/FunAndElse/Fullbright.java new file mode 100644 index 0000000000000000000000000000000000000000..4796efd49a2d5c016a56e26cc75167c8525cf614 --- /dev/null +++ b/src/main/java/FunAndElse/Fullbright.java @@ -0,0 +1,31 @@ +package FunAndElse; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; +import org.jetbrains.annotations.NotNull; + +public class Fullbright implements CommandExecutor { + + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + + if(sender instanceof Player p){ + + for (PotionEffect activePotionEffect : p.getActivePotionEffects()) { + if(activePotionEffect.getType().equals(PotionEffectType.NIGHT_VISION)){ + p.removePotionEffect(PotionEffectType.NIGHT_VISION); + return true; + } + } + + p.addPotionEffect(new PotionEffect(PotionEffectType.NIGHT_VISION,PotionEffect.INFINITE_DURATION,0,true,false,false)); + } + + return false; + } +} \ No newline at end of file diff --git a/src/main/java/FunAndElse/HubCommand.java b/src/main/java/FunAndElse/HubCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..04a141de3c8524f17a3b17fc0aca4002b0be252a --- /dev/null +++ b/src/main/java/FunAndElse/HubCommand.java @@ -0,0 +1,24 @@ +package FunAndElse; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.fsi.pixelcampusessentials.Pixelcampusessentials; +import org.jetbrains.annotations.NotNull; + +public class HubCommand implements CommandExecutor { + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + + if(sender instanceof Player){ + try { + ((Player) sender).performCommand("server " + Pixelcampusessentials.getPlugin().getConfig().getString("proxy-hub-name")); + }catch (Exception e){ + ((Player) sender).performCommand("server lobby"); + } + } + + return true; + } +} diff --git a/src/main/java/FunAndElse/SpeedLadder.java b/src/main/java/FunAndElse/SpeedLadder.java new file mode 100644 index 0000000000000000000000000000000000000000..719b015f18bc241fe851a3d2cba02e05301eb2ce --- /dev/null +++ b/src/main/java/FunAndElse/SpeedLadder.java @@ -0,0 +1,42 @@ +package FunAndElse; + +import org.bukkit.Particle; +import org.bukkit.Tag; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; +import org.bukkit.event.player.PlayerToggleSneakEvent; +import org.bukkit.util.Vector; + +public class SpeedLadder implements Listener { + + @EventHandler + private void onLadder(PlayerMoveEvent e){ + Player p = e.getPlayer(); + + if(!p.hasPermission("pixelcampusessentials.ladder"))return; + + + if(Tag.CLIMBABLE.isTagged(p.getWorld().getBlockAt(p.getLocation().add(0,1,0)).getType()) && p.isSneaking()){ + int pitch = (int)p.getLocation().getPitch(); + p.setGliding(false); + + if(pitch < -40){ + p.setVelocity(new Vector(0,0.7,0)); + p.getWorld().spawnParticle(Particle.CLOUD, p.getLocation(),2, 0, 0, 0, 0, null, true); + } + } + } + + @EventHandler + public void playerToggleSneak(PlayerToggleSneakEvent e){ + Player p = e.getPlayer(); + + if(!p.hasPermission("pixelcampusessentials.ladder"))return; + + if(!p.isSneaking() && p.isClimbing()){ + if(p.getLocation().getPitch() < -40)p.setVelocity(new Vector(0,0.6,0)); + } + } +} \ No newline at end of file diff --git a/src/main/java/FunAndElse/StatsAll.java b/src/main/java/FunAndElse/StatsAll.java new file mode 100644 index 0000000000000000000000000000000000000000..0669f31e4d8761e9509526c7466b8582a8fcb93e --- /dev/null +++ b/src/main/java/FunAndElse/StatsAll.java @@ -0,0 +1,89 @@ +package FunAndElse; + +import org.bukkit.ChatColor; +import org.bukkit.OfflinePlayer; +import org.bukkit.Statistic; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; + +public class StatsAll implements CommandExecutor { + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + + /* + if(!sender.isOp()){ + sender.sendMessage("§cNoch nicht verfügbar"); + return false; + }*/ + + String playerNameColor = ChatColor.GRAY.toString() + ChatColor.BOLD.toString(); //§7§l + StringBuilder toSend = new StringBuilder(); + + sender.sendMessage("");//new line + for(OfflinePlayer p2 : sender.getServer().getOfflinePlayers()){ + + String rawName = ""; + String name = ""; + + + try { + rawName = p2.getName(); + name = playerNameColor + rawName; + + if(p2.isOnline())name = ChatColor.GREEN + "(Online) " + name; //§a + else name = ChatColor.RED + "(Offline) " + name; //§4 + + //name += getSpaces(18 - rawName.length()); + + }catch(NullPointerException e1){} + + + toSend.append(name).append(formatedStats(p2)).append("\n"); //"§8: " + } + + sender.sendMessage(toSend.toString()); + return false; + } + + + private String formatedStats(OfflinePlayer p){ + + int sec = 0,min = 0,hrs = 0; + int deaths = 0; + int distance = 0; + int timeSinceDeath = 0; + + String numberColor= ChatColor.GREEN.toString(); //§a + String textColor=ChatColor.GRAY.toString(); //§7 + + sec = p.getStatistic(Statistic.TOTAL_WORLD_TIME)/20; //getStatistic(Statistic.TOTAL_WORLD_TIME) + deaths = p.getStatistic(Statistic.DEATHS); + distance = (p.getStatistic(Statistic.WALK_ONE_CM)/100) + (p.getStatistic(Statistic.SPRINT_ONE_CM)/100) + + (p.getStatistic(Statistic.SWIM_ONE_CM)/100) + (p.getStatistic(Statistic.BOAT_ONE_CM) + + (p.getStatistic(Statistic.WALK_UNDER_WATER_ONE_CM)/100) + (p.getStatistic(Statistic.WALK_ON_WATER_ONE_CM)/100) + + (p.getStatistic(Statistic.CROUCH_ONE_CM)/100) + (p.getStatistic(Statistic.FALL_ONE_CM)/100) + + (p.getStatistic(Statistic.AVIATE_ONE_CM)/100) + (p.getStatistic(Statistic.FLY_ONE_CM)/100)+ + (p.getStatistic(Statistic.HORSE_ONE_CM)/100) + (p.getStatistic(Statistic.MINECART_ONE_CM)/100)+ + (p.getStatistic(Statistic.PIG_ONE_CM)/100) + (p.getStatistic(Statistic.STRIDER_ONE_CM)/100) + + (p.getStatistic(Statistic.CLIMB_ONE_CM)/100)); + timeSinceDeath = p.getStatistic(Statistic.TIME_SINCE_DEATH); + + min = (sec/60) % 60; + hrs = sec/3600; + sec %= 60; + + //§r §3| §c + return "'s Playtime: "+numberColor+hrs+textColor+"h "+numberColor+min+textColor+"min "+numberColor+sec+textColor+"sek \n"+ + ChatColor.RED+deaths+textColor+" death"+(deaths!=1?"s":"") + + ChatColor.DARK_AQUA+" | " + + ChatColor.RED+timeSinceDeath/72000+textColor+"h "+ChatColor.RED+(timeSinceDeath/1200) % 1200 +textColor +"m since last death" + + ChatColor.DARK_AQUA+" | " + + ChatColor.RED+((float)distance)/1000.0+textColor+"km Traveled total"; + } + + private String getSpaces(int amount){ + if(amount < 0)return ""; + return " ".repeat(amount); + } +} diff --git a/src/main/java/Plots/PlayerSelection.java b/src/main/java/Plots/PlayerSelection.java new file mode 100644 index 0000000000000000000000000000000000000000..0321039e05034820750f47ae140aba73a5c7161b --- /dev/null +++ b/src/main/java/Plots/PlayerSelection.java @@ -0,0 +1,80 @@ +package Plots; + +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.util.BlockVector; +import org.jetbrains.annotations.NotNull; + +public class PlayerSelection implements Listener { + + @EventHandler + public void playerLeaveEvent(@NotNull PlayerQuitEvent e){ + removeFromQeue(e.getPlayer()); + } + + private boolean removeFromQeue(Player p){ + + String uuidToRemove = p.getUniqueId().toString(); + + for (PlayerSelection i : Plots.getSelectionsQeue()) { + if (i.getUUID().equals(uuidToRemove)) { + Plots.getSelectionsQeue().remove(i); + return true; + } + } + + return false; + } + + public static PlayerSelection getfromQeue(Player p){ + + String uuid = p.getUniqueId().toString(); + + for (PlayerSelection i : Plots.getSelectionsQeue()) { + if (i.getUUID().equals(uuid)) { + return i; + } + } + + return null; + } + + public PlayerSelection(){ + } + public PlayerSelection(String UUID, BlockVector pos1, BlockVector pos2) { + this.UUID = UUID; + this.pos1 = pos1; + this.pos2 = pos2; + } + + public void setUUID(String UUID) { + this.UUID = UUID; + } + + public void setPos1(BlockVector pos1) { + this.pos1 = pos1; + } + + public void setPos2(BlockVector pos2) { + this.pos2 = pos2; + } + + public String getUUID() { + return UUID; + } + + public BlockVector getPos1() { + return pos1; + } + + public BlockVector getPos2() { + return pos2; + } + + private String UUID = null; + private BlockVector pos1 = null; + private BlockVector pos2 = null; + +} diff --git a/src/main/java/Plots/Plots.java b/src/main/java/Plots/Plots.java new file mode 100644 index 0000000000000000000000000000000000000000..01c0f7ef90b9cdc65c7ee1c1d1d827282a193331 --- /dev/null +++ b/src/main/java/Plots/Plots.java @@ -0,0 +1,325 @@ +package Plots; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldguard.WorldGuard; +import com.sk89q.worldguard.domains.DefaultDomain; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import com.sk89q.worldguard.protection.regions.RegionContainer; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.util.BlockVector; +import org.fsi.pixelcampusessentials.Pixelcampusessentials; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +public class Plots implements CommandExecutor, Listener { + + private static final ArrayList<PlayerSelection> selectionsQeue = new ArrayList<>(); + private static Integer MAX_PLOT_SIZE; + private static final String[] cmds = {"pos1","pos2","claim","unclaim","info","addmember","removemember"}; + + public Plots(){ + + try { + MAX_PLOT_SIZE = Integer.parseInt(String.valueOf(Pixelcampusessentials.getPlugin().getConfig().getInt("max-plot-size"))); + }catch (Exception e){ + + //if the value from the config fails to load, set default MAX_PLOT_SIZE to 62500; + e.printStackTrace(); + MAX_PLOT_SIZE = 62500; + } + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + + if(!(sender instanceof Player)){ + sender.sendMessage("§cYou must be a Player to do this!"); + return true; + } + + Player p = (Player)sender; + int cmd; + + try{ + cmd = chosenCommand(args[0]); + }catch (Exception e){ + return false; + } + + if(cmd == -1){ + return false; + } + + if(!sender.hasPermission("suwupremeEssentials.plot")){ + sender.sendMessage("§cYou dont have the nessecary Permissions to use Plots"); + return true; + } + + //fetching Player that will be added to the region + Player p2 = null; + if(cmd == 6 || cmd == 7){ + + try { + p2 = Bukkit.getPlayer(args[1]); + if(p2 == null)throw new Exception("§cPlayer " + args[1] + " not found! Player has to be online"); + + }catch (Exception e){ + p.sendMessage(e.getMessage()); + return true; + } + } + + + try { + switch (cmd) { + case 1 -> setPosition(p, 1); + case 2 -> setPosition(p, 2); + case 3 -> claimPlot(p); + case 4 -> unclaimPLot(p); + case 5 -> info(p, p.getWorld(), p.getLocation()); + case 6 -> addMember(p, p2); + case 7 -> removeMember(p, p2); + default -> { + return false; + } + } + + }catch (Exception e){ + e.printStackTrace(); + return true; + } + + return true; + } + + private void setPosition(Player p, Integer posNumber){ + + BlockVector playerPos = p.getLocation().toVector().toBlockVector(); + PlayerSelection sel = PlayerSelection.getfromQeue(p); + + //if player hasnt already started a selection + if(sel == null){ + + sel = new PlayerSelection( + p.getUniqueId().toString(), + posNumber == 1 ? playerPos : null, + posNumber == 2 ? playerPos : null + ); + }else{ + + if (posNumber == 1) { + sel.setPos1(playerPos); + } else { + sel.setPos2(playerPos); + } + } + + + selectionsQeue.add(sel); + + p.sendMessage("§aPos " + posNumber + " set."); + } + + private void claimPlot(Player p){ + + PlayerSelection sel = PlayerSelection.getfromQeue(p); + + if(sel == null){ + p.sendMessage("§cMake a Selection first using /plot [pos1,pos2]"); + return; + }else{ + + if(sel.getPos1() == null){ + p.sendMessage("§cPosition 1 is missing. Use /plot pos1"); + return; + }else if(sel.getPos2() == null){ + p.sendMessage("§cPosition 2 is missing. Use /plot pos2"); + return; + } + } + + RegionManager regionManager = getRegionManager(p.getWorld()); + + //Region Bounds - Expands Vertically to Build limits. (make configurable?) + BlockVector3 corner1 = BlockVector3.at( + sel.getPos1().getBlockX(), + p.getWorld().getMaxHeight(), + sel.getPos1().getBlockZ() + ); + BlockVector3 corner2 = BlockVector3.at( + sel.getPos2().getBlockX(), + p.getWorld().getMinHeight(), + sel.getPos2().getBlockZ() + ); + + //creates Plot + ProtectedRegion newRegion = new ProtectedCuboidRegion(p.getName() + "'s_Plot", corner1, corner2); + + //convert Regions Map to List of ProtectedRegions + List<ProtectedRegion> otherRegions = new ArrayList<>(regionManager.getRegions().values()); + + //Checks for any intersecting regions + List<String> overlappingRegions = new LinkedList<>(); + newRegion.getIntersectingRegions(otherRegions).forEach(i -> { + overlappingRegions.add(i.getId()); + }); + + if(overlappingRegions.size() > 0){ + p.sendMessage("§cYour Plot is overlapping with " + overlappingRegions); + return; + } + + if(getRegionSize(newRegion) > MAX_PLOT_SIZE){ + p.sendMessage("§cYour Plot cannot exeed " + MAX_PLOT_SIZE + " Blocks in Size"); + return; + } + + + //adds Player to its newly created Plot as owner + DefaultDomain plotOwner = newRegion.getOwners(); + plotOwner.addPlayer(p.getUniqueId()); + newRegion.setOwners(plotOwner); + + regionManager.addRegion(newRegion); + + p.sendMessage("§aYour Plot from " + corner1 + " to " + corner2 + " is now protected!"); + + } + + private void unclaimPLot(Player p){ + + ProtectedRegion regionFromOwner = getRegionFromOwner(p, p.getLocation()); + + if(regionFromOwner != null){ + getRegionManager(p.getWorld()).removeRegion(regionFromOwner.getId()); + p.sendMessage("§aSuccessfully removed " + regionFromOwner.getId()); + return; + } + + p.sendMessage("§cCouldn't find a Plot that belongs to you here"); + } + + private void addMember(Player owner, Player newMember){ + + ProtectedRegion regionFromOwner = getRegionFromOwner(owner, owner.getLocation()); + + if(regionFromOwner != null){ + regionFromOwner.getMembers().addPlayer(newMember.getUniqueId()); + owner.sendMessage("§aAdded " + newMember.getName() + " to " + regionFromOwner.getId()); + return; + } + + owner.sendMessage("§cYou have to be standing in your Plot as Owner"); + } + + private void removeMember(Player owner, Player oldMember){ + + ProtectedRegion regionFromOwner = getRegionFromOwner(owner, owner.getLocation()); + + if(regionFromOwner != null){ + + if(regionFromOwner.getMembers().contains(oldMember.getUniqueId())){ + + regionFromOwner.getMembers().removePlayer(oldMember.getUniqueId()); + owner.sendMessage("§aSuccessfully removed Member " + oldMember.getName() + " from " + regionFromOwner.getId()); + return; + }else{ + owner.sendMessage("§c" + oldMember.getName() + " isn't Member of your PLot"); + } + + return; + } + + owner.sendMessage("§cYou have to be standing in your Plot as Owner"); + } + + private void info(Player p, World w, Location location){ + + ApplicableRegionSet regionAt = getRegionAt(w, location); + for (ProtectedRegion region : regionAt) { + p.sendMessage("§aYou are in " + region.getId() + ". It goes from " + region.getMinimumPoint() + " to " + region.getMaximumPoint()); + return; + } + + p.sendMessage("§cThere is currently no Plot at your Location"); + } + + //get all regions the player is Standing in + private ApplicableRegionSet getRegionAt(World w, Location location){ + + + BlockVector3 playerPos = BlockVector3.at( + location.getX(), + location.getY(), + location.getZ() + ); + + RegionManager regionManager = getRegionManager(w); + ApplicableRegionSet applicableRegions = regionManager.getApplicableRegions(playerPos); + + return applicableRegions; + } + + //returns the Region the player is standing in, if he is the owner. Otherwise null + private ProtectedRegion getRegionFromOwner(Player owner, Location location){ + ApplicableRegionSet region = getRegionAt(owner.getWorld(), location); + + for (ProtectedRegion protectedRegion : region) { + if (protectedRegion.getOwners().contains(owner.getUniqueId())) { + return protectedRegion; + } + } + + return null; + } + + private int chosenCommand(String arg){ + + for (int i = 0; i < cmds.length; i++) { + if(arg.equalsIgnoreCase(cmds[i]))return i + 1; + } + + return -1; + } + + private RegionManager getRegionManager(World w){ + RegionContainer regionContainer = WorldGuard.getInstance().getPlatform().getRegionContainer(); + return regionContainer.get(BukkitAdapter.adapt(w)); + } + + private int getRegionSize(ProtectedRegion region){ + BlockVector3 maximumPoint = region.getMaximumPoint(); + BlockVector3 minimumPoint = region.getMinimumPoint(); + + // Calculate the width and height of the rectangle + int width = Math.abs(minimumPoint.getBlockX() - maximumPoint.getBlockX()) + 1; + int height = Math.abs(minimumPoint.getBlockZ() - maximumPoint.getBlockZ()) + 1; + + // Calculate the area of the rectangle + int area = width * height; + + return area; + } + + public static ArrayList<PlayerSelection> getSelectionsQeue(){ + return selectionsQeue; + } + public static String[] getCmds(){ + return cmds; + } + +} diff --git a/src/main/java/Plots/PlotsTabComplete.java b/src/main/java/Plots/PlotsTabComplete.java new file mode 100644 index 0000000000000000000000000000000000000000..55bd0fe3efb913cd105b1dbaed5d4198a31070ec --- /dev/null +++ b/src/main/java/Plots/PlotsTabComplete.java @@ -0,0 +1,51 @@ +package Plots; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +public class PlotsTabComplete implements TabCompleter { + + @Nullable + @Override + public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { + + if(!(sender instanceof Player)){ + return null; + } + + String[] cmds = Plots.getCmds(); + + Player p = (Player)sender; + List<String> tabCompletePhrases = new LinkedList<>(); + + switch (args.length){ + case 0: + break; + case 1: + return Arrays.stream(cmds).toList(); + case 2: + + //players should be only listed when trying to add or remove member + if(!(args[1].equalsIgnoreCase(cmds[5]) || args[1].equalsIgnoreCase(cmds[6])))break; + + //adds all players to tab complete + Bukkit.getServer().getOnlinePlayers().forEach(player -> { + tabCompletePhrases.add(player.getName()); + }); + + break; + default: + } + + return tabCompletePhrases; + } +} diff --git a/src/main/java/Timber/Timber.java b/src/main/java/Timber/Timber.java new file mode 100644 index 0000000000000000000000000000000000000000..8118ce4675a8744ba652ffff3a48c3d68d2b2761 --- /dev/null +++ b/src/main/java/Timber/Timber.java @@ -0,0 +1,94 @@ +package Timber; + +import org.bukkit.*; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; +import org.fsi.pixelcampusessentials.Pixelcampusessentials; + +public class Timber implements Listener { + + private static int maxRadius; + + public Timber() { + maxRadius = Pixelcampusessentials.getPlugin().getConfig().getInt("chop-radius"); + } + + @EventHandler + public void onDestroy(BlockBreakEvent e){ + Player p = e.getPlayer(); + World w = p.getWorld(); + + if( + p.isSneaking() && + e.getPlayer().isSneaking() && e.getPlayer().getInventory().getItemInMainHand().getType().equals(Material.NETHERITE_AXE) && + isLogAt(e.getBlock().getLocation()) + ){ + + + Location tmp = e.getBlock().getLocation(); + do{ + tmp.setY(tmp.getY()+1); + }while(isLogAt(tmp)); + + if(!isLeafAt(tmp))return; + chopTree(e.getBlock().getLocation().add(0,1,0),e.getBlock().getWorld(),e.getBlock().getX(),e.getBlock().getZ()); + } + } + + private void chopTree(Location pos, World w, int startX, int startZ){ + + if(!(isLogAt(pos) || isLeafAt(pos)))return; + + new BukkitRunnable() { + //final BlockData d1 = w.getBlockAt(pos).getBlockData(); + + @Override + public void run() { + + boolean isLog = isLogAt(pos); + if(!w.getBlockAt(pos).breakNaturally(new ItemStack(Material.DIAMOND_AXE)) || + (pos.getBlockX() > startX+maxRadius || pos.getBlockX() < startX-maxRadius) || (pos.getBlockZ() > startZ+maxRadius || pos.getBlockZ() < startZ-maxRadius))return; + + if(isLog)w.playSound(pos, Sound.BLOCK_WOOD_BREAK, 1,1); + else w.playSound(pos, Sound.BLOCK_GRASS_PLACE, 1,1); + + //w.spawnParticle(Particle.BLOCK_CRACK, pos.getX()+0.5,pos.getY()+0.9,pos.getZ()+0.5, 20, 0.25, -0.1, 0.25, 0, false); + + chopTree(pos.clone().add(1,0,0),w,startX,startZ); + chopTree(pos.clone().add(-1,0,0),w,startX,startZ); + chopTree(pos.clone().add(1,1,0),w,startX,startZ); + chopTree(pos.clone().add(-1,1,0),w,startX,startZ); + chopTree(pos.clone().add(1,-1,0),w,startX,startZ); + chopTree(pos.clone().add(-1,-1,0),w,startX,startZ); + + chopTree(pos.clone().add(0,1,0),w,startX,startZ); + chopTree(pos.clone().add(0,-1,0),w,startX,startZ); + + chopTree(pos.clone().add(0,0,1),w,startX,startZ); + chopTree(pos.clone().add(0,0,-1),w,startX,startZ); + chopTree(pos.clone().add(0,1,1),w,startX,startZ); + chopTree(pos.clone().add(0,1,-1),w,startX,startZ); + chopTree(pos.clone().add(0,-1,1),w,startX,startZ); + chopTree(pos.clone().add(0,-1,-1),w,startX,startZ); + } + + }.runTaskLater(Pixelcampusessentials.getPlugin(),4); + } + + + private boolean isLogAt(Location pos){ + return pos.getWorld() != null && Tag.LOGS.isTagged(pos.getWorld().getBlockAt(pos).getType()); //(pos.getWorld().getBlockAt(pos).getType().toString().contains("LOG") || pos.getWorld().getBlockAt(pos).getType().toString().contains("STEM")); + } + + private boolean isLeafAt(Location pos){ + return pos.getWorld() != null && Tag.MINEABLE_HOE.isTagged(pos.getWorld().getBlockAt(pos).getType());//(pos.getWorld().getBlockAt(pos).getType().toString().contains("LEAVES") || pos.getWorld().getBlockAt(pos).getType().toString().contains("WART_BLOCK")); + } + + private boolean blockContains(Location pos, String s){ + return pos.getWorld() != null && pos.getWorld().getBlockAt(pos).getType().toString().contains(s); + } +} \ No newline at end of file diff --git a/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java b/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java index 64abd0c0ae18a86ba7e544213bf33a480fcd5fd5..bd153009eeda8579dfffdbf3e9373e1860963476 100644 --- a/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java +++ b/src/main/java/org/fsi/pixelcampusessentials/Pixelcampusessentials.java @@ -1,17 +1,47 @@ package org.fsi.pixelcampusessentials; +import FunAndElse.*; +import Plots.PlayerSelection; +import Plots.Plots; +import Plots.PlotsTabComplete; +import Timber.Timber; import org.bukkit.plugin.java.JavaPlugin; public final class Pixelcampusessentials extends JavaPlugin { + static private Pixelcampusessentials thisPlugin; @Override public void onEnable() { - // Plugin startup logic + thisPlugin = this; + saveDefaultConfig(); + getConfig(); + + + getServer().getPluginManager().registerEvents(new PlayerSelection(),this); + getServer().getPluginManager().registerEvents(new Timber(),this); + getServer().getPluginManager().registerEvents(new SpeedLadder(),this); + getServer().getPluginManager().registerEvents(new FreezePlayer(),this); + + try { + getCommand("plot").setExecutor(new Plots()); + getCommand("plot").setTabCompleter(new PlotsTabComplete()); + getCommand("freeze").setExecutor(new FreezePlayer()); + getCommand("statsall").setExecutor(new StatsAll()); + getCommand("fullbright").setExecutor(new Fullbright()); + getCommand("lobby").setExecutor(new HubCommand()); + }catch (Exception e){ + e.printStackTrace(); + } } @Override public void onDisable() { // Plugin shutdown logic } + + public static Pixelcampusessentials getPlugin(){ + return thisPlugin; + } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..dfbe3bab8f7f7aec15a828da34b81ccf334d4a5a --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,6 @@ +#Plots +max-plot-size: 62500 +#Timber +chop-radius: 4 +#HubCommand +proxy-hub-name: 'lobby' \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ad0ba2fdd6712e461ad76747137d93e767e0e116..f7ef8788d06b5ccc63e00814ba8f49ced3829c41 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -2,3 +2,31 @@ name: pixelcampusessentials version: '${version}' main: org.fsi.pixelcampusessentials.Pixelcampusessentials api-version: '1.20' +website: +depend: [ WorldGuard ] +commands: + plot: + usage: '§c/plot [pos1, pos2, claim, unclaim, addmember, removemember, info]' + permission: pixelcampusessentials.plot + permission-message: '§cYou dont have Permissions to use Plots' + lobby: + permission: pixelcampusessentials.lobby + permission-message: '§cYou dont have Permissions' + aliases: [hub,lobby,l,leave] + freeze: + usage: '§c/freeze [Player]' + permission: pixelcampusessentials.freeze + permission-message: '§cYou dont have Permissions to freeze Players' + aliases: [f,catch,stopplayer,jail] + fullbright: + permission: pixelcampusessentials.fullbright + permission-message: '§cYou dont have Permissions to use fullbright' + aliases: [ fb,bright,licht,hell,taschenlampe,nichtmehrdunkel ] + statsall: + permission: pixelcampusessentials.statsall + permission-message: '§cYou dont have Permissions to view Player stats' + aliases: [stats] +permissions: + pixelcampusessentials.ladder: + description: speed ladder + default: op