recoded whole project to support multi-version instead of standalone plugins, new config entry and comments, overall project cleanup and initial 1.12.5-1.20.6 support (actually doesn't work due to issues between java 21 and java 17)

This commit is contained in:
KinczeK committed 2024-05-09 21:02:20 +02:00
1 parent b4824cd8c8
commit eee83ba1d4
62 files changed
+613 -868

No files matched your search

+2 -2
View File
@@ -1,2 +1,2 @@
#Fri Feb 23 17:47:23 CET 2024
gradle.version=8.4
#Thu May 09 16:57:21 CEST 2024
gradle.version=8.5
+23 -1
View File
@@ -1,6 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="16" />
<bytecodeTargetLevel target="17">
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.18.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.18.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.3.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.3.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.4.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.4.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.19.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.2.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.2.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.4.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.4.test" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.main" target="17" />
<module name="FastCrystalsPlugin.fast-crystals-plugin-1.20.test" target="17" />
<module name="v1_18" target="17" />
<module name="v1_19" target="17" />
<module name="v1_19_3" target="17" />
<module name="v1_19_4" target="17" />
<module name="v1_20" target="17" />
<module name="v1_20_2" target="17" />
<module name="v1_20_4" target="17" />
</bytecodeTargetLevel>
</component>
</project>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" />
<option name="description" value="" />
</component>
</project>
+13 -9
View File
@@ -5,18 +5,22 @@
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="17" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.16" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.17" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.18" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.19" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.19.3" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.19.4" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.20" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.20.2" />
<option value="$PROJECT_DIR$/fast-crystals-plugin-1.20.4" />
<option value="$PROJECT_DIR$/core" />
<option value="$PROJECT_DIR$/shared" />
<option value="$PROJECT_DIR$/v1_16" />
<option value="$PROJECT_DIR$/v1_17" />
<option value="$PROJECT_DIR$/v1_18" />
<option value="$PROJECT_DIR$/v1_19" />
<option value="$PROJECT_DIR$/v1_19_3" />
<option value="$PROJECT_DIR$/v1_19_4" />
<option value="$PROJECT_DIR$/v1_20" />
<option value="$PROJECT_DIR$/v1_20_2" />
<option value="$PROJECT_DIR$/v1_20_4" />
<option value="$PROJECT_DIR$/v1_20_6" />
</set>
</option>
</GradleProjectSettings>
+25
View File
@@ -31,5 +31,30 @@
<option name="name" value="maven" />
<option name="url" value="https://hub.spigotmc.org/nexus/content/repositories/snapshots/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven2" />
<option name="name" value="maven2" />
<option name="url" value="https://hub.spigotmc.org/nexus/content/groups/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="https://repo.papermc.io/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenLocal" />
<option name="name" value="MavenLocal" />
<option name="url" value="file:/$MAVEN_REPOSITORY$/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://oss.sonatype.org/content/repositories/snapshots" />
</remote-repository>
<remote-repository>
<option name="id" value="maven3" />
<option name="name" value="maven3" />
<option name="url" value="https://oss.sonatype.org/content/repositories/central" />
</remote-repository>
</component>
</project>
+1 -1
View File
@@ -4,5 +4,5 @@
<component name="FrameworkDetectionExcludesConfiguration">
<file type="web" url="file://$PROJECT_DIR$" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_16" default="true" project-jdk-name="16" project-jdk-type="JavaSDK" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="16" project-jdk-type="JavaSDK" />
</project>
+124
View File
@@ -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>
Generated
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+13 -3
View File
@@ -3,8 +3,18 @@ plugins {
}
group 'xyz.exyron.fastcrystals'
version '1.0-SNAPSHOT'
version '1.0'
repositories {
mavenCentral()
subprojects {
afterEvaluate {
def isShadowPluginApplied = project.plugins.hasPlugin('com.github.johnrengelman.shadow')
if (isShadowPluginApplied) {
tasks.named('shadowJar') {
it.archiveFileName.set("${rootProject.name}-${rootProject.version}.jar")
it.destinationDirectory.set(file("${project.rootDir}/build/libs"))
it.relocate 'org.bstats', 'xyz.exyron.fastcrystals.bstats'
}
}
}
}
+31
View File
@@ -0,0 +1,31 @@
plugins {
id 'java'
id "com.github.johnrengelman.shadow" version "8.1.1"
}
group 'xyz.exyron.fastcrystals'
version '1.0'
repositories {
mavenCentral()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT'
implementation 'org.bstats:bstats-bukkit:3.0.2'
implementation project (':shared')
implementation project (':v1_16')
implementation project (':v1_17')
implementation project (':v1_18')
implementation project (':v1_19')
implementation project (':v1_19_3')
implementation project (':v1_19_4')
implementation project (':v1_20')
implementation project (':v1_20_2')
implementation project (':v1_20_4')
//implementation project (':v1_20_6')
}
@@ -0,0 +1,115 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = this.configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private CrystalDamage crystalDamage;
private static final int BSTATS_ID = 21848;
@Override
public void onEnable() {
this.saveDefaultConfig();
new Metrics(this, BSTATS_ID);
this.crystalDamage = this.assignCrystalDamageFromServerVersion(Bukkit.getBukkitVersion().split("-")[0]);
String disableMessage = this.colorize(Objects.requireNonNull(this.configuration.getString("disableMessage")));
String enableMessage = this.colorize(Objects.requireNonNull(this.configuration.getString("enableMessage")));
if (this.configuration.getBoolean("commandEnabled")) {
Objects.requireNonNull(this.getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
UUID playerUniqueId = player.getUniqueId();
if (this.playersUUID.contains(playerUniqueId)) {
player.sendMessage(disableMessage);
this.playersUUID.remove(playerUniqueId);
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(playerUniqueId);
}
} else {
sender.sendMessage(this.colorize("&cYou cannot run this command from Console."));
}
return false;
}));
}
this.getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal crystal && this.playersUUID.contains(player.getUniqueId())) {
this.crystalDamage.handle(player, crystal);
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (this.currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private CrystalDamage assignCrystalDamageFromServerVersion(String version) {
return switch (version) {
//case "1.20.5", "1.20.6" -> new CrystalDamage_v1_20_6();
case "1.20.4", "1.20.3" -> new CrystalDamage_v1_20_4();
case "1.20", "1.20.1", "1.20.2" -> new CrystalDamage_v1_20_2();
case "1.19.4" -> new CrystalDamage_v1_19_4();
case "1.19.3" -> new CrystalDamage_v1_19_3();
case "1.19.2", "1.19.1", "1.19" -> new CrystalDamage_v1_19();
case "1.18.2", "1.18.1", "1.18" -> new CrystalDamage_v1_18();
case "1.17.2", "1.17.1", "1.17" -> new CrystalDamage_v1_17();
case "1.16.5", "1.16.4" -> new CrystalDamage_v1_16();
default -> {
Bukkit.getPluginManager().disablePlugin(this);
throw new IllegalStateException(
"Plugin is disabling due to unsupported minecraft version (" + version + "). We currently support only 1.16.4+ versions."
);
}
};
}
private static final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message.replace(">>", "»").replace("<<", "«"));
}
}
+16
View File
@@ -0,0 +1,16 @@
#
# ___ __ __ _ _ _ __ ___ _ __ __ __ _ _ ____
# / _ \\ \/ /| | | || '__|/ _ \ | '_ \ \ \/ /| | | ||_ /
# | __/ > < | |_| || | | (_) || | | | _ > < | |_| | / /
# \___|/_/\_\ \__, ||_| \___/ |_| |_|(_)/_/\_\ \__, |/___|
# |___/ |___/
#
# Set this value to "false" if you don't want to be fast crystals automatically enabled on player join.
defaultStatus: true
# Set this value to "false" if you don't want "/fastcrystals" command to be working. (it's going to be completely disabled)
commandEnabled: true
enableMessage: "&7Fast crystal feature is now &aenabled&7."
disableMessage: "&7Fast crystal feature is now &cdisabled&7."
@@ -1,8 +1,8 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
api-version: 1.16
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
aliases: [ fastercrystals, fastcrystal, quickcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.server.v1_16_R3.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
this.saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(configuration.getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(configuration.getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
this.getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
this.saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
this.getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().b.sendPacket(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been enabled!"
disableMessage: "&cFastCrystals has been disabled!"
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().b.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().b.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().b.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().b.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().c.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().c.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
@@ -1,81 +0,0 @@
package xyz.exyron.fastcrystals;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.md_5.bungee.api.ChatColor;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class FastCrystalsPlugin extends JavaPlugin implements Listener {
private final FileConfiguration configuration = this.getConfig();
private final boolean currentStatus = configuration.getBoolean("defaultStatus");
private final Set<UUID> playersUUID = new HashSet<>();
private final Pattern HEX_PATTERN = Pattern.compile("#[A-Fa-f0-9]{6}");
@Override
public void onEnable() {
saveDefaultConfig();
String enableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("enableMessage")));
String disableMessage = colorize(Objects.requireNonNull(this.getConfig().getString("disableMessage")));
Objects.requireNonNull(getCommand("fastcrystals")).setExecutor(((sender, command, label, args) -> {
if (sender instanceof Player player) {
if (this.playersUUID.contains(player.getUniqueId())) {
player.sendMessage(disableMessage);
this.playersUUID.remove(player.getUniqueId());
} else {
player.sendMessage(enableMessage);
this.playersUUID.add(player.getUniqueId());
}
}
return false;
}));
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Player player && event.getEntity() instanceof EnderCrystal && this.playersUUID.contains(player.getUniqueId())) {
((CraftPlayer) player).getHandle().c.a(new PacketPlayOutEntityDestroy(event.getEntity().getEntityId()));
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
if (currentStatus) {
this.playersUUID.add(event.getPlayer().getUniqueId());
}
}
private String colorize(String message) {
Matcher matcher = HEX_PATTERN.matcher(message);
StringBuilder result = new StringBuilder();
while (matcher.find()) {
matcher.appendReplacement(result, ChatColor.of(matcher.group()).toString());
}
matcher.appendTail(result);
message = result.toString();
return ChatColor.translateAlternateColorCodes('&', message
.replace(">>", "\u00BB")
.replace("<<", "\u00AB"));
}
}
@@ -1,3 +0,0 @@
defaultStatus: true
enableMessage: "&aFastCrystals has been &2enabled&a!"
disableMessage: "&cFastCrystals has been &4disabled&c!"
@@ -1,8 +0,0 @@
name: Exyron-FastCrystals
version: 1.0
api-version: 1.13
main: xyz.exyron.fastcrystals.FastCrystalsPlugin
authors: [ Exyron.XYZ, KamlaX, KinczeK ]
commands:
fastcrystals:
aliases: [ fastercrystals, fastcrystal ]
+16 -9
View File
@@ -1,12 +1,19 @@
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.5.0")
}
rootProject.name = 'FastCrystalsPlugin'
include 'fast-crystals-plugin-1.16'
include 'fast-crystals-plugin-1.18'
include 'fast-crystals-plugin-1.17'
include 'fast-crystals-plugin-1.19'
include 'fast-crystals-plugin-1.19.3'
include 'fast-crystals-plugin-1.19.4'
include 'fast-crystals-plugin-1.20'
include 'fast-crystals-plugin-1.20.2'
include 'fast-crystals-plugin-1.20.4'
include 'core'
include 'shared'
include 'v1_16'
include 'v1_17'
include 'v1_18'
include 'v1_19'
include 'v1_19_3'
include 'v1_19_4'
include 'v1_20'
include 'v1_20_2'
include 'v1_20_4'
include 'v1_20_6'
+12
View File
@@ -0,0 +1,12 @@
plugins {
id 'java'
}
repositories {
mavenCentral()
maven { url 'https://repo.codemc.org/repository/nms/' }
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT'
}
@@ -0,0 +1,10 @@
package xyz.exyron.fastcrystals;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public interface CrystalDamage {
void handle(Player damager, Entity crystal);
}
@@ -12,4 +12,6 @@ repositories {
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.16.5-R0.1-SNAPSHOT'
compileOnly project(':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.server.v1_16_R3.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_16 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().playerConnection.sendPacket(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -12,4 +12,6 @@ repositories {
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT'
compileOnly project(':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_17 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().b.sendPacket(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,9 +6,7 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
@@ -17,7 +15,10 @@ repositories {
maven { url 'https://repo.codemc.org/repository/nms/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.18.2-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.18.2-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_18 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().b.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,12 +6,11 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
@@ -20,4 +19,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.19-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.19-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_19 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().b.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,12 +6,11 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
@@ -20,4 +19,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.19.3-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.19.3-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_19_3 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().b.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,12 +6,11 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
@@ -20,4 +19,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.19.4-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.19.4-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_19_4 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().b.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,12 +6,11 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenLocal()
mavenCentral()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
@@ -21,4 +20,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.20-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.20-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_20 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().c.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,13 +6,12 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
@@ -21,4 +20,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.20.2-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.20.2-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_20_2 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().c.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
@@ -6,13 +6,12 @@ group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
}
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
@@ -21,4 +20,6 @@ repositories {
dependencies {
compileOnly 'org.spigotmc:spigot:1.20.4-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.20.4-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_20_4 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().c.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}
+25
View File
@@ -0,0 +1,25 @@
plugins {
id 'java'
}
group 'xyz.exyron.fastcrystals'
version '1.0'
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
repositories {
mavenCentral()
mavenLocal()
maven { url 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' }
maven { url 'https://repo.codemc.org/repository/nms/' }
maven { url 'https://papermc.io/repo/repository/maven-public/' }
}
dependencies {
compileOnly 'org.spigotmc:spigot:1.20.6-R0.1-SNAPSHOT'
compileOnly 'org.spigotmc:spigot-api:1.20.6-R0.1-SNAPSHOT'
compileOnly project (':shared')
}
@@ -0,0 +1,14 @@
package xyz.exyron.fastcrystals;
import net.minecraft.network.protocol.game.PacketPlayOutEntityDestroy;
import org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
public class CrystalDamage_v1_20_6 implements CrystalDamage {
@Override
public void handle(Player damager, Entity crystal) {
((CraftPlayer) damager).getHandle().c.a(new PacketPlayOutEntityDestroy(crystal.getEntityId()));
}
}