3 Commits

Author SHA1 Message Date
TheGame cc7d6f7610 Added Crown
Java CI with Maven / build (push) Successful in 1m48s
2025-09-11 13:29:21 +01:00
TheGame 951f8e044e Removed Common Class 2025-09-11 09:31:48 +01:00
TheGame b57f8fd545 Recoded
Java CI with Maven / build (push) Successful in 30s
2025-09-11 09:21:36 +01:00
44 changed files with 2560 additions and 2228 deletions
-57
View File
@@ -1,57 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-21">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="target/generated-sources/annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
<attribute name="test" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
+4 -10
View File
@@ -1,12 +1,6 @@
name: Java CI with Maven name: Java CI with Maven
on: on: [push]
push:
branches:
- "main"
pull_request:
branches:
- "*"
jobs: jobs:
build: build:
@@ -16,8 +10,8 @@ jobs:
- name: Set up JDK 21 - name: Set up JDK 21
uses: actions/setup-java@v4 uses: actions/setup-java@v4
with: with:
java-version: "21" java-version: '21'
distribution: "temurin" distribution: 'temurin'
cache: maven cache: maven
- uses: stCarolas/setup-maven@v5 - uses: stCarolas/setup-maven@v5
- name: Build with Maven - name: Build with Maven
@@ -26,4 +20,4 @@ jobs:
uses: akkuman/gitea-release-action@v1 uses: akkuman/gitea-release-action@v1
with: with:
files: ./target/fantasysmp*.jar files: ./target/fantasysmp*.jar
token: "${{secrets.RELEASE_TOKEN}}" token: '${{secrets.RELEASE_TOKEN}}'
-34
View File
@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>fantasysmp</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<filteredResources>
<filter>
<id>1756828330981</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
@@ -1,4 +0,0 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/main/resources=UTF-8
encoding/<project>=UTF-8
-2
View File
@@ -1,2 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.apt.aptEnabled=false
-9
View File
@@ -1,9 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
org.eclipse.jdt.core.compiler.compliance=21
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=21
-4
View File
@@ -1,4 +0,0 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
-37
View File
@@ -1,37 +0,0 @@
// Project tasks configuration. See https://zed.dev/docs/tasks for documentation.
[
{
"label": "Maven Compile",
"command": "mvn",
"args": ["compile"],
"shell": "system",
"use_new_terminal": false
},
{
"label": "Maven Clean Package",
"command": "mvn",
"args": ["clean", "package"],
"shell": "system",
"use_new_terminal": false
},
{
"label": "Maven Test",
"command": "mvn",
"args": ["test"],
"shell": "system",
"use_new_terminal": false
},
{
"label": "Run Project",
"command": "./run.sh",
"shell": "system",
"use_new_terminal": false
},
{
"label": "Maven Package (Skip Tests)",
"command": "mvn",
"args": ["clean", "package", "-DskipTests"],
"shell": "system",
"use_new_terminal": false
}
]
-4
View File
@@ -1,4 +0,0 @@
mkdir -p ./run/plugins/
cp ./target/fantasysmp*.jar run/plugins/fantasysmp.jar
cd run/
java -jar ./paper.jar nogui
@@ -4,16 +4,37 @@ import dev.zxq5.fantasysmp.events.*;
import dev.zxq5.fantasysmp.groups.Commands; import dev.zxq5.fantasysmp.groups.Commands;
import dev.zxq5.fantasysmp.groups.Team; import dev.zxq5.fantasysmp.groups.Team;
import dev.zxq5.fantasysmp.items.*; import dev.zxq5.fantasysmp.items.*;
import dev.zxq5.fantasysmp.items.presets.CustomItem;
import dev.zxq5.fantasysmp.items.presets.CustomItemHandler;
import dev.zxq5.fantasysmp.warps.Warp; import dev.zxq5.fantasysmp.warps.Warp;
import dev.zxq5.fantasysmp.warps.Warper; import dev.zxq5.fantasysmp.warps.Warper;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public final class Fantasysmp extends JavaPlugin { public final class Fantasysmp extends JavaPlugin {
private static JavaPlugin plugin;
public static NamespacedKey customItemKey;
public static Map<String, CustomItem> customItemMap;
@Override @Override
public void onEnable() { public void onEnable() {
Items items = new Items(this);
plugin = this;
customItemKey = new NamespacedKey(this, "custom-item-key");
customItemMap = new HashMap<>();
Items items = new Items();
getCommand("items").setExecutor(items); getCommand("items").setExecutor(items);
registerListeners(new CustomItemHandler());
// Plugin startup logic // Plugin startup logic
try { try {
@@ -38,9 +59,9 @@ public final class Fantasysmp extends JavaPlugin {
heresyChecker.scheduleHeresyChecker(); heresyChecker.scheduleHeresyChecker();
getServer().getPluginManager().registerEvents(heresyChecker, this); getServer().getPluginManager().registerEvents(heresyChecker, this);
getServer() getServer().getPluginManager().registerEvents(new DeathMessageCustomiser(), this);
.getPluginManager()
.registerEvents(new DeathMessageCustomiser(), this);
XrayDetector xrayDetector = new XrayDetector(); XrayDetector xrayDetector = new XrayDetector();
getServer().getPluginManager().registerEvents(xrayDetector, this); getServer().getPluginManager().registerEvents(xrayDetector, this);
@@ -55,4 +76,18 @@ public final class Fantasysmp extends JavaPlugin {
e.printStackTrace(); e.printStackTrace();
} }
} }
public static void registerItems(CustomItem... customItems) {
Arrays.asList(customItems).forEach(ci-> customItemMap.put(ci.getId(), ci));
}
private void registerListeners(Listener... listeners) {
Arrays.asList(listeners).forEach(l-> Bukkit.getPluginManager().registerEvents(l, this));
}
public static JavaPlugin getPlugin(){
return plugin;
}
} }
@@ -20,11 +20,7 @@ public class DeathMessageCustomiser implements Listener {
"%p thought the ravine was a boulder problem", "%p thought the ravine was a boulder problem",
"%p's fingers were not cut out for crack climbing", "%p's fingers were not cut out for crack climbing",
"%p got a leg cramp", "%p got a leg cramp",
"%p forgot to check their harness", "%p forgot to check their harness"
"%p didn't send the dyno",
"%p tried to static a 4 block jump",
"%p's climbing shoes didn't fit",
"%p wasn't flexible enough"
}; };
@EventHandler @EventHandler
@@ -3,6 +3,7 @@ package dev.zxq5.fantasysmp.events;
import org.bukkit.*; import org.bukkit.*;
import org.bukkit.entity.Chicken; import org.bukkit.entity.Chicken;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Item;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@@ -10,6 +11,7 @@ import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.player.PlayerItemConsumeEvent; import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@@ -1,20 +1,6 @@
package dev.zxq5.fantasysmp.events; package dev.zxq5.fantasysmp.events;
import static org.bukkit.Bukkit.*;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -23,14 +9,26 @@ import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
public class XrayDetector implements Listener { import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.net.URI;
import java.net.URL;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
private final HashMap<Player, HashMap<Material, Integer>> players = import static org.bukkit.Bukkit.*;
new HashMap<>();
public class XrayDetector implements Listener {
private final HashMap<Player, HashMap<Material, Integer>> players = new HashMap<>();
private String token; private String token;
private final ArrayList<Material> trackedBlocks = new ArrayList<>( private final ArrayList<Material> trackedBlocks = new ArrayList<>(Arrays.asList(
Arrays.asList(
Material.ANCIENT_DEBRIS, Material.ANCIENT_DEBRIS,
Material.DIAMOND_ORE, Material.DIAMOND_ORE,
Material.EMERALD_ORE, Material.EMERALD_ORE,
@@ -38,8 +36,7 @@ public class XrayDetector implements Listener {
Material.IRON_ORE, Material.IRON_ORE,
Material.LAPIS_ORE, Material.LAPIS_ORE,
Material.REDSTONE_ORE Material.REDSTONE_ORE
) ));
);
@EventHandler @EventHandler
public void onBlockBreak(BlockBreakEvent event) { public void onBlockBreak(BlockBreakEvent event) {
@@ -48,84 +45,80 @@ public class XrayDetector implements Listener {
Material block = event.getBlock().getType(); Material block = event.getBlock().getType();
Plugin plugin = getPluginManager().getPlugin("fantasysmp"); Plugin plugin = getPluginManager().getPlugin("fantasysmp");
if (!this.players.containsKey(player)) this.players.put( if (!this.players.containsKey(player)) this.players.put(player, new HashMap<>());
player,
new HashMap<>()
);
blocks = this.players.get(player); blocks = this.players.get(player);
if (this.trackedBlocks.contains(block)) { if (this.trackedBlocks.contains(block)) {
if (!(blocks.containsKey(block))) blocks.put(block, 0); if (!(blocks.containsKey(block))) blocks.put(block, 0);
blocks.put(block, blocks.get(block) + 1); blocks.put(block, blocks.get(block) + 1);
Bukkit.getScheduler().runTaskLater( Bukkit.getScheduler().runTaskLater(plugin, () -> {
plugin,
() -> {
blocks.put(block, blocks.get(block) - 1); blocks.put(block, blocks.get(block) - 1);
}, }, 1200);
1200
);
} }
} }
private void uploadData() { private void uploadData() {
HashMap<String, HashMap<String, Integer>> data = new HashMap<>(); HashMap<String, HashMap<String, Integer>> data = new HashMap<>();
for (Map.Entry< for (Map.Entry<Player, HashMap<Material, Integer>> entry : players.entrySet()) {
Player,
HashMap<Material, Integer>
> entry : players.entrySet()) {
HashMap<String, Integer> materials = new HashMap<>(); HashMap<String, Integer> materials = new HashMap<>();
for (Map.Entry<Material, Integer> materialEntry : entry for (Map.Entry<Material, Integer> materialEntry : entry.getValue().entrySet()) {
.getValue() materials.put(materialEntry.getKey().toString(), materialEntry.getValue());
.entrySet()) {
materials.put(
materialEntry.getKey().toString(),
materialEntry.getValue()
);
} }
data.put(entry.getKey().getName(), materials); data.put(entry.getKey().getName(), materials);
} }
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
HttpClient client = HttpClient.newHttpClient(); HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder( HttpRequest request = HttpRequest.newBuilder(URI.create("https://mcapi.zxq5.dev/xray?token=" + token))
URI.create("https://mcapi.zxq5.dev/xray?token=" + token)
)
.header("Content-Type", "application/json") .header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(gson.toJson(data))) .POST(HttpRequest.BodyPublishers.ofString(gson.toJson(data)))
.build(); .build();
client client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body) .thenApply(HttpResponse::body)
.join(); .join();
} }
public XrayDetector() { public XrayDetector() {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, "token.txt"); File file = new File(dataFolder, "token.txt");
BufferedReader reader; BufferedReader reader;
try { try {
reader = new BufferedReader(new FileReader(file)); reader = new BufferedReader(new FileReader(file));
this.token = reader.readLine(); this.token = reader.readLine();
reader.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
return; return;
} }
Bukkit.getScheduler().runTaskTimerAsynchronously( Bukkit.getScheduler().runTaskTimerAsynchronously(getPluginManager().getPlugin("fantasysmp"), this::uploadData, 0, 20 * 60);
getPluginManager().getPlugin("fantasysmp"),
this::uploadData,
0,
20 * 60
);
} }
} }
@@ -1,30 +1,31 @@
package dev.zxq5.fantasysmp.groups; package dev.zxq5.fantasysmp.groups;
import static org.bukkit.Bukkit.getServer;
import dev.zxq5.fantasysmp.chatutils.Chat; import dev.zxq5.fantasysmp.chatutils.Chat;
import dev.zxq5.fantasysmp.warps.Warp; import dev.zxq5.fantasysmp.warps.Warp;
import dev.zxq5.fantasysmp.warps.WarpType; import dev.zxq5.fantasysmp.warps.WarpType;
import java.util.ArrayList;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.ArrayList;
import static org.bukkit.Bukkit.getServer;
/* /*
* Commands: * Commands:
* *
* ** PLAYER ** * ** PLAYER **
* *
* team list => DONE * team list => TODO
* team create <name> => DONE * team create <name> => TODO
* team rename <new name> => TODO TEST * team rename <new name> => TODO
* team transfer <player> => TODO * team transfer <player> => TODO
* team join <name> => TODO * team join <name> => TODO
* team invite <player> => TODO * team invite <player> => TODO
* team leave => TODO * team leave => TODO
* team disband => DONE * team disband => TODO
* team setwarp => DONE * team setwarp => TODO
* team delwarp => TODO * team delwarp => TODO
* team warp <name> => TODO TEST * team warp <name> => TODO
* team kick => TODO * team kick => TODO
* team log => TODO * team log => TODO
* *
@@ -40,12 +41,7 @@ import org.bukkit.entity.Player;
public class Commands implements CommandExecutor { public class Commands implements CommandExecutor {
@Override @Override
public boolean onCommand( public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
if (!(sender instanceof Player player)) return false; if (!(sender instanceof Player player)) return false;
if (command.getName().equals("team")) handleTeamCommands(player, args); if (command.getName().equals("team")) handleTeamCommands(player, args);
@@ -76,10 +72,7 @@ public class Commands implements CommandExecutor {
public void handleRankCommands(Player player, String[] args) { public void handleRankCommands(Player player, String[] args) {
// check perms // check perms
if (!(player.hasPermission("fantasysmp.ranks"))) { if (!(player.hasPermission("fantasysmp.ranks"))) {
Chat.error( Chat.error(player, "You do not have permission to use this command.");
player,
"You do not have permission to use this command."
);
return; return;
} }
@@ -94,181 +87,167 @@ public class Commands implements CommandExecutor {
public void handleList(Player player, String[] args) { public void handleList(Player player, String[] args) {
String[] teams = Team.getTeams(); String[] teams = Team.getTeams();
Chat.info(player, String.join(" ", teams)); String result = "Teams: [\n " + String.join("\n ", teams) + "\n]";
Chat.info(player, result);
} }
public void handleCreate(Player caller, String[] args) { public void handleCreate(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team create <name>"); Chat.error(player, "Usage: /team create <name>");
return; return;
} }
Team.createTeam(caller, args[1]); Team.createTeam(player, args[1]);
} }
public void handleSetColour(Player caller, String[] args) { public void handleSetColour(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team colour <color>"); Chat.error(player, "Usage: /team colour <color>");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.setColour(caller, args[1]); team.setColour(player, args[1]);
} }
public void handleRename(Player caller, String[] args) { public void handleRename(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team rename <new name>"); Chat.error(player, "Usage: /team rename <new name>");
return; return;
} }
if ( if (args[1].isEmpty() || args[1].contains(" ") || args[1].contains("\t")) {
args[1].isEmpty() || args[1].contains(" ") || args[1].contains("\t") Chat.error(player, "Invalid name!");
) {
Chat.error(caller, "Invalid name!");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.renameTeam(caller, args[1]); team.renameTeam(player, args[1]);
} }
public void handleSetTag(Player caller, String[] args) { public void handleSetTag(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team tag <tag>"); Chat.error(player, "Usage: /team tag <tag>");
return; return;
} }
if ( if (args[1].length() < 3 || args[1].contains(" ") || args[1].contains("\t") || args[1].length() > 8) {
args[1].length() < 3 || Chat.error(player, "Invalid tag!");
args[1].contains(" ") || Chat.error(player, "tags should be 3-8 chars, alphanumeric and have no spaces");
args[1].contains("\t") ||
args[1].length() > 8
) {
Chat.error(caller, "Invalid tag!");
Chat.error(
caller,
"tags should be 3-8 chars, alphanumeric and have no spaces"
);
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.changeTeamTag(caller, args[1]); team.changeTeamTag(player, args[1]);
Chat.success(caller, "Changed tag to " + args[1] + "!");
} }
public void handleTransfer(Player caller, String[] args) { public void handleTransfer(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team transfer <player>"); Chat.error(player, "Usage: /team transfer <player>");
return; return;
} }
Team.fromMember(caller).transferTeam(caller, args[1]);
// Chat.success(caller, "Transferred ownership to: " + args[1] + "!");
} }
public void handleJoin(Player caller, String[] args) { public void handleJoin(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team join <name>"); Chat.error(player, "Usage: /team join <name>");
return; return;
} }
// Chat.success(caller, "Joined team: " + args[1] + "!");
} }
public void handleInvite(Player caller, String[] args) { public void handleInvite(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team invite <player>"); Chat.error(player, "Usage: /team invite <player>");
return; return;
} }
// Chat.success(caller, "Changed tag to: " + args[1] + "!");
} }
public void handleLeave(Player caller, String[] args) { public void handleLeave(Player player, String[] args) {
if (args.length != 1) { if (args.length != 1) {
Chat.error(caller, "Usage: /team leave"); Chat.error(player, "Usage: /team leave");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.leaveTeam(caller); team.leaveTeam(player);
} }
public void handleDisband(Player caller, String[] args) { public void handleDisband(Player player, String[] args) {
if (args.length != 1) { if (args.length != 1) {
Chat.error(caller, "Usage: /team disband"); Chat.error(player, "Usage: /team disband");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.disbandTeam(caller); team.disbandTeam(player);
} }
public void handleSetWarp(Player caller, String[] args) { public void handleSetWarp(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team setwarp <name>"); Chat.error(player, "Usage: /team setwarp <name>");
return; return;
} }
Warp.setWarp(args[1], caller, WarpType.TEAM); Warp.setWarp(args[1], player, WarpType.TEAM);
} }
public void handleDelWarp(Player caller, String[] args) {} public void handleDelWarp(Player player, String[] args) {
public void handleWarp(Player caller, String[] args) { }
public void handleWarp(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team warp <name>"); Chat.error(player, "Usage: /team warp <name>");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
Warp warp = Warp.getTeamWarp(team, caller, args[1]); Warp warp = Warp.getTeamWarp(team, args[1]);
warp.execute(caller);
} }
public void handleKick(Player caller, String[] args) { public void handleKick(Player player, String[] args) {
if (args.length != 2) { if (args.length != 2) {
Chat.error(caller, "Usage: /team kick <player>"); Chat.error(player, "Usage: /team kick <player>");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
team.removePlayer(caller, args[1]); team.removePlayer(player, args[1]);
} }
public void handleLog(Player caller, String[] args) { public void handleLog(Player player, String[] args) {
if (args.length != 1) { if (args.length != 1) {
Chat.error(caller, "Usage: /team log"); Chat.error(player, "Usage: /team log");
return; return;
} }
Team team = Team.fromMember(caller); Team team = Team.fromMember(player);
if (team == null) return; if (team == null) return;
ArrayList<String> logs = team.getLogs(caller); ArrayList<String> logs = team.getLogs(player);
String result = "Logs: [\n " + String.join("\n ", logs) + "\n]"; String result = "Logs: [\n " + String.join("\n ", logs) + "\n]";
Chat.info(caller, result); Chat.info(player, result);
} }
public void handleCreateRank(Player caller, String[] args) {} public void handleCreateRank(Player player, String[] args) {}
public void handleRenameRank(Player caller, String[] args) {} public void handleRenameRank(Player player, String[] args) {}
public void handleDeleteRank(Player caller, String[] args) {} public void handleDeleteRank(Player player, String[] args) {}
public void handleAddRank(Player caller, String[] args) {} public void handleAddRank(Player player, String[] args) {}
public void handleRemoveRank(Player caller, String[] args) {} public void handleRemoveRank(Player player, String[] args) {}
public Commands() {} public Commands() {}
} }
@@ -1,31 +1,28 @@
package dev.zxq5.fantasysmp.groups; package dev.zxq5.fantasysmp.groups;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import dev.zxq5.fantasysmp.chatutils.Chat;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.io.*;
import java.util.ArrayList;
import java.util.UUID;
import static org.bukkit.Bukkit.broadcastMessage; import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getServer;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
import dev.zxq5.fantasysmp.chatutils.Chat;
import java.io.*;
import java.util.ArrayList;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
public class Team { public class Team {
private static ArrayList<Team> teams; private static ArrayList<Team> teams;
private static final String FILENAME = "teams.json"; private final static String FILENAME = "teams.json";
private String name; private String name;
private String ownerUUID; private String ownerUUID;
private ArrayList<String> members; private ArrayList<String> members;
private ArrayList<String> invites;
private ArrayList<String> logs; private ArrayList<String> logs;
private String teamUUID; private String teamUUID;
private String tag; private String tag;
private ChatColor color;
public Team(Player creator, String name, String tag) { public Team(Player creator, String name, String tag) {
this.name = name; this.name = name;
@@ -53,9 +50,7 @@ public class Team {
public static Team fromMember(Player member) { public static Team fromMember(Player member) {
for (Team team : teams) { for (Team team : teams) {
if ( if (team.members.contains(member.getUniqueId().toString())) return team;
team.members.contains(member.getUniqueId().toString())
) return team;
} }
Team.error(member, Error.TEAM_NOT_FOUND); Team.error(member, Error.TEAM_NOT_FOUND);
@@ -92,10 +87,7 @@ public class Team {
this.tag = newTag; this.tag = newTag;
this.log(player.getName() + " changed the team tag to " + newTag + "."); this.log(player.getName() + " changed the team tag to " + newTag + ".");
Chat.success( Chat.success(player, "You changed the tag of " + this.name + " to " + newTag + ".");
player,
"You changed the tag of " + this.name + " to " + newTag + "."
);
} }
public void setColour (Player player, String colour) { public void setColour (Player player, String colour) {
@@ -104,32 +96,26 @@ public class Team {
return; return;
} }
this.color = switch (colour) { switch (colour) {
case "red" -> ChatColor.RED; case "red" -> this.tag = ChatColor.RED + this.tag;
case "green" -> ChatColor.GREEN; case "green" -> this.tag = ChatColor.GREEN + this.tag;
case "blue" -> ChatColor.BLUE; case "blue" -> this.tag = ChatColor.BLUE + this.tag;
case "yellow" -> ChatColor.YELLOW; case "yellow" -> this.tag = ChatColor.YELLOW + this.tag;
case "aqua" -> ChatColor.AQUA; case "aqua" -> this.tag = ChatColor.AQUA + this.tag;
case "dark_aqua" -> ChatColor.DARK_AQUA; case "dark_aqua" -> this.tag = ChatColor.DARK_AQUA + this.tag;
case "dark_blue" -> ChatColor.DARK_BLUE; case "dark_blue" -> this.tag = ChatColor.DARK_BLUE + this.tag;
case "dark_gray" -> ChatColor.DARK_GRAY; case "dark_gray" -> this.tag = ChatColor.DARK_GRAY + this.tag;
case "dark_green" -> ChatColor.DARK_GREEN; case "dark_green" -> this.tag = ChatColor.DARK_GREEN + this.tag;
case "dark_purple" -> ChatColor.DARK_PURPLE; case "dark_purple" -> this.tag = ChatColor.DARK_PURPLE + this.tag;
case "gold" -> ChatColor.GOLD; case "gold" -> this.tag = ChatColor.GOLD + this.tag;
case "gray" -> ChatColor.GRAY; case "gray" -> this.tag = ChatColor.GRAY + this.tag;
case "light_purple" -> ChatColor.LIGHT_PURPLE; case "light_purple" -> this.tag = ChatColor.LIGHT_PURPLE + this.tag;
case "white" -> ChatColor.WHITE; case "white" -> this.tag = ChatColor.WHITE + this.tag;
case "black" -> ChatColor.BLACK; case "black" -> this.tag = ChatColor.BLACK + this.tag;
default -> ChatColor.WHITE; }
};
this.log( this.log(player.getName() + " changed the team colour to " + colour + ".");
player.getName() + " changed the team colour to " + colour + "." Chat.success(player, "You changed the colour of " + this.name + " to " + colour + ".");
);
Chat.success(
player,
"You changed the colour of " + this.name + " to " + colour + "."
);
} }
public void transferTeam(Player player, String playerName) { public void transferTeam(Player player, String playerName) {
@@ -151,21 +137,9 @@ public class Team {
} }
this.ownerUUID = newUUID; this.ownerUUID = newUUID;
this.log( this.log(player.getName() + " transferred ownership to " + newOwner.getName() + ".");
player.getName() +
" transferred ownership to " +
newOwner.getName() +
"."
);
Chat.success( Chat.success(player, "You transferred ownership of " + this.name + " to " + newOwner.getName() + ".");
player,
"You transferred ownership of " +
this.name +
" to " +
newOwner.getName() +
"."
);
} }
public void removePlayer(Player remover, String playerName) { public void removePlayer(Player remover, String playerName) {
@@ -195,21 +169,9 @@ public class Team {
} }
this.members.remove(removedPlayerUUID); this.members.remove(removedPlayerUUID);
this.log( this.log(remover.getName() + " removed " + removedPlayer.getName() + " from the team.");
remover.getName() +
" removed " +
removedPlayer.getName() +
" from the team."
);
Chat.success( Chat.success(remover, "You removed " + removedPlayer.getName() + " from " + this.name + ".");
remover,
"You removed " +
removedPlayer.getName() +
" from " +
this.name +
"."
);
} }
public void leaveTeam(Player member) { public void leaveTeam(Player member) {
@@ -249,9 +211,7 @@ public class Team {
} }
public ArrayList<String> getLogs(Player member) { public ArrayList<String> getLogs(Player member) {
if ( if (this.ownerUUID.equals(member.getUniqueId().toString())) return this.logs;
this.ownerUUID.equals(member.getUniqueId().toString())
) return this.logs;
Team.error(member, Error.NO_PERMISSION); Team.error(member, Error.NO_PERMISSION);
return null; return null;
@@ -263,10 +223,7 @@ public class Team {
} }
public static void loadTeams() throws Exception { public static void loadTeams() throws Exception {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
if (!file.exists()) { if (!file.exists()) {
@@ -276,23 +233,17 @@ public class Team {
BufferedReader reader; BufferedReader reader;
reader = new BufferedReader(new FileReader(file)); reader = new BufferedReader(new FileReader(file));
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
teams = gson.fromJson( teams = gson.fromJson(reader, new TypeToken<ArrayList<Team>>(){}.getType());
reader,
new TypeToken<ArrayList<Team>>() {}.getType()
);
reader.close(); reader.close();
} }
public static void saveTeams() { public static void saveTeams() {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
String json = gson.toJson(teams); String json = gson.toJson(teams);
try { try {
@@ -306,16 +257,13 @@ public class Team {
} }
public static void createTeamsFile() { public static void createTeamsFile() {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
if (!file.exists()) { if (!file.exists()) {
try { try {
Team[] t = new Team[0]; Team[] t = new Team[0];
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
String json = gson.toJson(t); String json = gson.toJson(t);
Writer writer = new FileWriter(file); Writer writer = new FileWriter(file);
writer.write(json); writer.write(json);
@@ -326,27 +274,16 @@ public class Team {
} }
} }
// utility methods
public boolean hasMember(Player player) {
for (String uuid : this.members) {
if (player.getUniqueId().toString() == uuid) return true;
}
return false;
}
public String getUUID() { public String getUUID() {
return this.teamUUID; return this.teamUUID;
} }
public String getTag() { public String getTag() {
return this.color + this.tag; return this.tag;
} }
public static void error(Player player, Error error) { public static void error(Player player, Error error) {
Chat.error( Chat.error(player, switch (error) {
player,
switch (error) {
case NO_PERMISSION -> "You do not have permission to do that!"; case NO_PERMISSION -> "You do not have permission to do that!";
case SELF_IN_TEAM -> "You are already in a team!"; case SELF_IN_TEAM -> "You are already in a team!";
case NOT_IN_TEAM -> "You are not in a team!"; case NOT_IN_TEAM -> "You are not in a team!";
@@ -355,8 +292,7 @@ public class Team {
case ALREADY_TAKEN -> "That name is already taken!"; case ALREADY_TAKEN -> "That name is already taken!";
case PLAYER_IN_TEAM -> "That player is already in a team!"; case PLAYER_IN_TEAM -> "That player is already in a team!";
case TEAM_OWNER -> "You cannot do this to/as the owner!"; case TEAM_OWNER -> "You cannot do this to/as the owner!";
} });
);
} }
} }
@@ -1,357 +0,0 @@
package dev.zxq5.fantasysmp.items;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.inventory.*;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.EquippableComponent;
import org.bukkit.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
public abstract class GenericGearSet implements HasRecipes, Listener {
protected ItemStats sword = new ItemStats();
protected ItemStats helmet = new ItemStats();
protected ItemStats chestplate = new ItemStats();
protected ItemStats leggings = new ItemStats();
protected ItemStats boots = new ItemStats();
protected static RecipeChoice NETHERITE_UPGRADE = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
protected static RecipeChoice WITHER_SKULL = new RecipeChoice.MaterialChoice(Material.WITHER_SKELETON_SKULL);
public void registerEvents(Plugin plugin) {
Bukkit.getServer().getPluginManager().registerEvents(this, plugin);
}
public void setTier1() {
sword.setMaterial(Material.WOODEN_SWORD);
helmet.setMaterial(Material.LEATHER_HELMET);
chestplate.setMaterial(Material.LEATHER_CHESTPLATE);
leggings.setMaterial(Material.LEATHER_LEGGINGS);
boots.setMaterial(Material.LEATHER_BOOTS);
}
public void setTier3() {
helmet.setMaterial(Material.IRON_HELMET);
chestplate.setMaterial(Material.IRON_CHESTPLATE);
leggings.setMaterial(Material.IRON_LEGGINGS);
boots.setMaterial(Material.IRON_BOOTS);
sword.setMaterial(Material.IRON_SWORD);
sword.attackDamage = 6;
sword.attackSpeed = 1.6f;
helmet.armour = 2;
helmet.armourToughness = 0;
chestplate.armour = 6;
chestplate.armourToughness = 0;
leggings.armour = 5;
leggings.armourToughness = 0;
boots.armour = 2;
boots.armourToughness = 0;
}
public void setTier4() {
helmet.setMaterial(Material.DIAMOND_HELMET);
chestplate.setMaterial(Material.DIAMOND_CHESTPLATE);
leggings.setMaterial(Material.DIAMOND_LEGGINGS);
boots.setMaterial(Material.DIAMOND_BOOTS);
sword.setMaterial(Material.DIAMOND_SWORD);
sword.attackDamage = 7;
sword.attackSpeed = 1.6f;
helmet.armour = 3;
helmet.armourToughness = 2;
chestplate.armour = 8;
chestplate.armourToughness = 2;
leggings.armour = 6;
leggings.armourToughness = 2;
boots.armour = 3;
boots.armourToughness = 2;
}
public void setTier5() {
helmet.setMaterial(Material.NETHERITE_HELMET);
chestplate.setMaterial(Material.NETHERITE_CHESTPLATE);
leggings.setMaterial(Material.NETHERITE_LEGGINGS);
boots.setMaterial(Material.NETHERITE_BOOTS);
sword.setMaterial(Material.NETHERITE_SWORD);
sword.attackDamage = 8;
sword.attackSpeed = 1.6f;
helmet.armour = 3;
helmet.armourToughness = 3;
helmet.knockbackResistance = 0.1;
chestplate.armour = 8;
chestplate.armourToughness = 3;
chestplate.knockbackResistance = 0.1;
leggings.armour = 6;
leggings.armourToughness = 3;
leggings.knockbackResistance = 0.1;
boots.armour = 3;
boots.armourToughness = 3;
boots.knockbackResistance = 0.1;
}
public void setTier6() {
helmet.setMaterial(Material.NETHERITE_HELMET);
chestplate.setMaterial(Material.NETHERITE_CHESTPLATE);
leggings.setMaterial(Material.NETHERITE_LEGGINGS);
boots.setMaterial(Material.NETHERITE_BOOTS);
sword.setMaterial(Material.NETHERITE_SWORD);
sword.attackDamage = 10;
sword.attackSpeed = 1.6f;
helmet.armour = 3;
helmet.armourToughness = 5;
helmet.knockbackResistance = 0.1;
chestplate.armour = 8;
chestplate.armourToughness = 5;
chestplate.knockbackResistance = 0.1;
leggings.armour = 6;
leggings.armourToughness = 5;
leggings.knockbackResistance = 0.1;
boots.armour = 3;
boots.armourToughness = 5;
boots.knockbackResistance = 0.1;
}
public boolean hasGear(Player player) {
return (LoreChecker.itemLoreContains(player.getInventory().getHelmet(), this.helmet.lore)
&& LoreChecker.itemLoreContains(player.getInventory().getChestplate(), this.chestplate.lore)
&& LoreChecker.itemLoreContains(player.getInventory().getLeggings(), this.leggings.lore)
&& LoreChecker.itemLoreContains(player.getInventory().getBoots(), this.boots.lore)
);
}
// this must be overridden by the child class.
public static void init() {}
public ItemStack getSword() {
ItemStack item = sword.material;
ItemMeta meta = item.getItemMeta();
meta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_damage"),
sword.attackDamage,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
meta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_speed"),
sword.attackSpeed - 4,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
meta.setDisplayName(sword.name);
if (!sword.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + sword.customItemModel));
ArrayList<String> lore = new ArrayList<>(List.of(sword.lore));
lore.add("\n");
lore.add(ChatColor.GRAY + "When in Main Hand:" + ChatColor.RESET);
if (sword.attackDamage > 0) lore.add(ChatColor.GREEN + String.format(" %.1f Attack Damage", sword.attackDamage) + ChatColor.RESET);
if (sword.attackSpeed > 0) lore.add(ChatColor.GREEN + String.format(" %.1f Attack Speed", sword.attackSpeed) + ChatColor.RESET);
meta.setLore(lore);
item.setItemMeta(meta);
return item;
}
public ItemStack getHelmet() {
ItemStack item = helmet.material;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(helmet.name);
meta.setLore(new ArrayList<>(List.of(helmet.lore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
(double) helmet.armour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
helmet.armourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
if (helmet.knockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
helmet.knockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
}
if (!helmet.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + helmet.customItemModel));
EquippableComponent equippable = meta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + helmet.customEquipmentModel));
equippable.setSlot(EquipmentSlot.HEAD);
meta.setEquippable(equippable);
item.setItemMeta(meta);
return item;
}
public ItemStack getChestplate() {
ItemStack item = chestplate.material;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(chestplate.name);
meta.setLore(new ArrayList<>(List.of(chestplate.lore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
(double) chestplate.armour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
chestplate.armourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
if (chestplate.knockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
chestplate.knockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
}
if (!chestplate.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + chestplate.customItemModel));
EquippableComponent equippable = meta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + chestplate.customEquipmentModel));
equippable.setSlot(EquipmentSlot.CHEST);
meta.setEquippable(equippable);
item.setItemMeta(meta);
return item;
}
public ItemStack getLeggings() {
ItemStack item = leggings.material;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(leggings.name);
meta.setLore(new ArrayList<>(List.of(leggings.lore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
(double) leggings.armour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
leggings.armourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
if (leggings.knockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
leggings.knockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
}
if (!leggings.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + leggings.customItemModel));
EquippableComponent equippable = meta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + leggings.customEquipmentModel));
equippable.setSlot(EquipmentSlot.LEGS);
meta.setEquippable(equippable);
item.setItemMeta(meta);
return item;
}
public ItemStack getBoots() {
ItemStack item = boots.material;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(boots.name);
meta.setLore(new ArrayList<>(List.of(boots.lore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
(double) boots.armour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
boots.armourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
if (boots.knockbackResistance != 0) {
meta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
boots.knockbackResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
}
if (!boots.customItemModel.isEmpty()) meta.setItemModel(NamespacedKey.fromString("fantasysmp:" + boots.customItemModel));
EquippableComponent equippable = meta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + boots.customEquipmentModel));
equippable.setSlot(EquipmentSlot.FEET);
meta.setEquippable(equippable);
item.setItemMeta(meta);
return item;
}
}
@@ -1,36 +0,0 @@
package dev.zxq5.fantasysmp.items;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
public class ItemStats {
public double attackDamage;
public double attackSpeed;
public int durability;
public int armour;
public int armourToughness;
public double knockbackResistance ;
public String name;
public String lore;
public String customItemModel;
public String customEquipmentModel;
public ItemStack material;
public ItemStats() {
this.attackDamage = 0;
this.attackSpeed = 0;
this.durability = 0;
this.armour = 0;
this.armourToughness = 0;
this.knockbackResistance = 0;
this.name = "";
this.lore = "";
this.customItemModel = "";
this.customEquipmentModel = "";
this.material = new ItemStack(Material.AIR);
}
public void setMaterial(Material material) {
this.material = new ItemStack(material);
}
}
@@ -1,13 +1,18 @@
package dev.zxq5.fantasysmp.items; package dev.zxq5.fantasysmp.items;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.food.AppleCider; import dev.zxq5.fantasysmp.items.food.AppleCider;
import dev.zxq5.fantasysmp.items.food.AppleJuice; import dev.zxq5.fantasysmp.items.food.AppleJuice;
import dev.zxq5.fantasysmp.items.gear.*; import dev.zxq5.fantasysmp.items.gear.*;
import dev.zxq5.fantasysmp.items.presets.CustomSet;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.HashMap;
import java.util.Map;
public class Items implements CommandExecutor { public class Items implements CommandExecutor {
private static Map<String, CustomSet> commandHandlers = new HashMap<>();
@Override @Override
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) { public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
@@ -32,17 +37,11 @@ public class Items implements CommandExecutor {
} }
CommandExecutor handler; CommandExecutor handler;
switch (args[0]) {
case "witherite" -> handler = new WitheriteGear(); if(commandHandlers.containsKey(args[0])) {
case "lightning" -> handler = new LightningSword(); handler = commandHandlers.get(args[0]);
case "steven" -> handler = new StevensWrath(); } else {
case "blazing" -> handler = new BlazingGear(); return false;
case "dragon" -> handler = new DragonGear();
case "trueneth" -> handler = new TrueNetheriteGear();
case "ender" -> handler = new EnderGear();
case "poseidon" -> handler = new PoseidonGear();
case "crimson" -> handler = new CrimsonGear();
default -> { return false; }
} }
handler.onCommand(sender, command, label, args); handler.onCommand(sender, command, label, args);
@@ -50,48 +49,26 @@ public class Items implements CommandExecutor {
return true; return true;
} }
public Items(JavaPlugin plugin) { public Items() {
new Witherite();
WitheriteGear witherite = new WitheriteGear(); new Blazing();
witherite.registerRecipes(); new Dragon();
witherite.registerEvents(plugin); new TrueNetherite();
new Crimson();
LightningSword lightning = new LightningSword(); new Poseidon();
lightning.registerRecipes(); new Ender();
lightning.registerEvents(plugin); new StevensWrath();
new LightningSword();
StevensWrath stevensWrath = new StevensWrath(); new Crown();
stevensWrath.registerRecipes();
stevensWrath.registerEvents(plugin);
BlazingGear blazing = new BlazingGear();
blazing.registerRecipes();
blazing.registerEvents(plugin);
DragonGear dragon = new DragonGear();
dragon.registerRecipes();
dragon.registerEvents(plugin);
EnderGear ender = new EnderGear();
ender.registerRecipes();
ender.registerEvents(plugin);
TrueNetheriteGear trueNetherite = new TrueNetheriteGear();
trueNetherite.registerRecipes();
trueNetherite.registerEvents(plugin);
PoseidonGear poseidon = new PoseidonGear();
poseidon.registerRecipes();
poseidon.registerEvents(plugin);
CrimsonGear crimson = new CrimsonGear();
crimson.registerRecipes();
crimson.registerEvents(plugin);
AppleJuice appleJuice = new AppleJuice(); AppleJuice appleJuice = new AppleJuice();
appleJuice.registerEvents(plugin); appleJuice.registerEvents(Fantasysmp.getPlugin());
AppleCider appleCider = new AppleCider(); AppleCider appleCider = new AppleCider();
appleCider.registerEvents(plugin); appleCider.registerEvents(Fantasysmp.getPlugin());
}
public static void registerHandler(String command, CustomSet customSet) {
commandHandlers.put(command,customSet);
} }
} }
@@ -0,0 +1,161 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.*;
import org.bukkit.damage.DamageType;
import org.bukkit.entity.Player;
import org.bukkit.entity.SmallFireball;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.bukkit.Bukkit.getServer;
public class Blazing extends CustomSet {
private ArrayList<Player> cooldown = new ArrayList<>();
public static Blazing instance;
public static int tier = 5;
private final ArrayList<DamageType> damageTypes = new ArrayList<>(List.of(
DamageType.HOT_FLOOR,
DamageType.ON_FIRE,
DamageType.IN_FIRE,
DamageType.LAVA
));
public Blazing() {
super(tier);
instance = this;
this.swordId = "BlazingSword";
this.swordName = "&6Blazing Sword";
this.swordLore = new ArrayList<>(Arrays.asList("A sword forged from molten lava and the essence of blazes.", "Applies &6flame effect" + ChatColor.RESET + "for 12 seconds."));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14306;
this.helmetId = "BlazingHelmet";
this.helmetName = "&6Blazing Helmet";
this.helmetLore = List.of("A helmet forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity");
this.helmetModel = 14307;
this.chestplateId = "BlazingChestplate";
this.chestplateName = "&6Blazing Chestplate";
this.chestplateLore = List.of("A chestplate forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity");
this.chestplateModel = 14308;
this.leggingsId = "BlazingLeggings";
this.leggingsName = "&6Blazing Leggings";
this.leggingsLore = List.of("Leggings forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity");
this.leggingsModel = 14309;
this.bootsId = "BlazingBoots";
this.bootsName = "&6Blazing boots";
this.bootsLore = List.of("Boots forged from molten lava and the essence of blazes", "&6Set Bonus: Fire Immunity");
this.bootsModel = 14310;
this.equipmentModel = "blazing";
registerItems();
registerRecipes();
registerHandler();
}
public static Blazing getInstance() {
if (instance == null) {
instance = new Blazing();
}
return instance;
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.BLAZE_ROD);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
JavaPlugin plugin = Fantasysmp.getPlugin();
cooldown.add(player);
Bukkit.getScheduler().runTaskLater(plugin, () -> cooldown.remove(player), 25);
shootFireball(player);
Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 4);
Bukkit.getScheduler().runTaskLater(plugin, () -> shootFireball(player), 8);
}
public void shootFireball(Player player) {
Location location = player.getLocation();
World world = player.getWorld();
SmallFireball fireball = player.launchProjectile(SmallFireball.class);
fireball.setIsIncendiary(false);
player.playSound(location, Sound.ENTITY_BLAZE_SHOOT, 1.0f, 1.0f);
world.spawnParticle(Particle.FLAME, location, 1);
}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {}
@Override
public void onHit(Player player, ItemStack heldItem, EntityDamageByEntityEvent event) {
if (event.getEntity().getFireTicks() < 240) event.getEntity().setFireTicks(240);
}
@Override
public void onDamage(EntityDamageEvent event) {
if (damageTypes.contains(event.getDamageSource().getDamageType())) event.setCancelled(true);
event.getEntity().setFireTicks(0);
}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,184 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import static org.bukkit.Bukkit.*;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.*;
import org.bukkit.command.CommandExecutor;
import org.bukkit.damage.DamageType;
import org.bukkit.entity.Player;
import org.bukkit.entity.SmallFireball;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
public class BlazingGear extends GenericGearSet implements CommandExecutor {
private ArrayList<Player> cooldown = new ArrayList<>();
private final ArrayList<DamageType> damageTypes = new ArrayList<>(
List.of(
DamageType.HOT_FLOOR,
DamageType.ON_FIRE,
DamageType.IN_FIRE,
DamageType.LAVA
)
);
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@Override
public void registerRecipes() {}
@EventHandler
public void onPlayerSetOnFire(
org.bukkit.event.entity.EntityDamageEvent event
) {
if (!(event.getEntity() instanceof Player player)) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getHelmet(),
this.helmet.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getChestplate(),
this.chestplate.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getLeggings(),
this.leggings.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getBoots(),
this.boots.lore
))
) return;
if (
damageTypes.contains(event.getDamageSource().getDamageType())
) event.setCancelled(true);
player.setFireTicks(0);
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItem(); // Get the item the player interacted with
if (
!(event.getAction() == Action.RIGHT_CLICK_AIR ||
event.getAction() == Action.RIGHT_CLICK_BLOCK)
) {
return;
}
if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return;
if (cooldown.contains(player)) return;
Plugin plugin = getPluginManager().getPlugin("fantasysmp");
cooldown.add(player);
Bukkit.getScheduler().runTaskLater(
plugin,
() -> cooldown.remove(player),
25
);
shootFireball(player);
Bukkit.getScheduler().runTaskLater(
plugin,
() -> shootFireball(player),
4
);
Bukkit.getScheduler().runTaskLater(
plugin,
() -> shootFireball(player),
8
);
}
@EventHandler
public void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Player player)) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
))
) return;
if (event.getEntity().getFireTicks() < 240) event
.getEntity()
.setFireTicks(240);
}
public void shootFireball(Player player) {
Location location = player.getLocation();
World world = player.getWorld();
player.launchProjectile(SmallFireball.class);
player.playSound(location, Sound.ENTITY_BLAZE_SHOOT, 1.0f, 1.0f);
world.spawnParticle(Particle.FLAME, location, 1);
}
public static void init() {}
public BlazingGear() {
this.setTier4();
this.sword.name = ChatColor.GOLD + "Blazing Sword" + ChatColor.RESET;
this.sword.customItemModel = "blazing_sword";
this.helmet.name = ChatColor.GOLD + "Blazing Helmet" + ChatColor.RESET;
this.helmet.customItemModel = "blazing_helmet";
this.helmet.customEquipmentModel = "blazing";
this.chestplate.name =
ChatColor.GOLD + "Blazing Chestplate" + ChatColor.RESET;
this.chestplate.customItemModel = "blazing_chestplate";
this.chestplate.customEquipmentModel = "blazing";
this.leggings.name =
ChatColor.GOLD + "Blazing Leggings" + ChatColor.RESET;
this.leggings.customItemModel = "blazing_leggings";
this.leggings.customEquipmentModel = "blazing";
this.boots.name = ChatColor.GOLD + "Blazing Boots" + ChatColor.RESET;
this.boots.customItemModel = "blazing_boots";
this.boots.customEquipmentModel = "blazing";
this.sword.lore = "Forged from molten lava and the essence of blazes";
this.helmet.lore = "Forged from molten lava and the essence of blazes";
this.chestplate.lore =
"Forged from molten lava and the essence of blazes";
this.leggings.lore =
"Forged from molten lava and the essence of blazes";
this.boots.lore = "Forged from molten lava and the essence of blazes";
}
}
@@ -0,0 +1,138 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.bukkit.Bukkit.getServer;
public class Crimson extends CustomSet {
public static Crimson instance;
public static int tier = 5;
private boolean setBonus = false;
public Crimson() {
super(tier);
instance = this;
this.swordId = "CrimsonSword";
this.swordName = "&4Bloodlust";
this.swordLore = new ArrayList<>(Arrays.asList("Live off the &4blood" + ChatColor.RESET + " of your enemies.", "Heal &41HP" + ChatColor.RESET + " after each hit."));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14321;
this.helmetId = "CrimsonHelmet";
this.helmetName = "&4Crimson Helmet";
this.helmetLore = List.of("A helmet that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust");
this.helmetModel = 14322;
this.chestplateId = "CrimsonChestplate";
this.chestplateName = "&4Crimson Chestplate";
this.chestplateLore = List.of("A chestplate that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust");
this.chestplateModel = 14323;
this.leggingsId = "CrimsonLeggings";
this.leggingsName = "&4Crimson Leggings";
this.leggingsLore = List.of("Leggings that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust");
this.leggingsModel = 14324;
this.bootsId = "CrimsonBoots";
this.bootsName = "&4Crimson boots";
this.bootsLore = List.of("Boots that grants its wearer &4vampiric senses.","&4Set Bonus: Heal +1HP With Bloodlust");
this.bootsModel = 14325;
this.equipmentModel = "crimson";
registerItems();
registerRecipes();
registerHandler();
}
public static Crimson getInstance() {
if (instance == null) {
instance = new Crimson();
}
return instance;
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.ENCHANTED_GOLDEN_APPLE);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
player.setHealth(Math.min(player.getHealth() + 1, player.getMaxHealth()));
if(setBonus) {
player.setHealth( Math.min(player.getHealth() + 1, player.getMaxHealth()) );
player.setFoodLevel( Math.min(player.getFoodLevel() + 1, 20) );
}
}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {
setBonus = active;
}
@Override
public void onDamage(EntityDamageEvent event) {}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,112 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
public class CrimsonGear extends GenericGearSet implements CommandExecutor {
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@EventHandler
public void onEntityDamageByEntity(
org.bukkit.event.entity.EntityDamageByEntityEvent event
) {
if (!(event.getDamager() instanceof Player player)) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
))
) return;
player.setHealth(
Math.min(player.getHealth() + 1, player.getMaxHealth())
);
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getHelmet(),
this.helmet.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getChestplate(),
this.chestplate.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getLeggings(),
this.leggings.lore
))
) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getBoots(),
this.boots.lore
))
) return;
player.setHealth(
Math.min(player.getHealth() + 1, player.getMaxHealth())
);
player.setFoodLevel(Math.min(player.getFoodLevel() + 1, 20));
}
@Override
public void registerRecipes() {}
public CrimsonGear() {
this.setTier5();
this.sword.name = ChatColor.DARK_RED + "Bloodlust" + ChatColor.RESET;
this.sword.customItemModel = "crimson_sword";
this.sword.lore = "Live off the blood of your enemies.";
this.helmet.name =
ChatColor.DARK_RED + "Crimson Helmet" + ChatColor.RESET;
this.helmet.customItemModel = "crimson_helmet";
this.helmet.customEquipmentModel = "crimson";
this.helmet.lore = "A helmet that grants its wearer vampiric senses.";
this.chestplate.name =
ChatColor.DARK_RED + "Crimson Chestplate" + ChatColor.RESET;
this.chestplate.customItemModel = "crimson_chestplate";
this.chestplate.customEquipmentModel = "crimson";
this.chestplate.lore =
"A chestplate that strengthens the heart of the wearer.";
this.leggings.name =
ChatColor.DARK_RED + "Crimson Leggings" + ChatColor.RESET;
this.leggings.customItemModel = "crimson_leggings";
this.leggings.customEquipmentModel = "crimson";
this.leggings.lore =
"Leggings that enhance the wearer's speed and agility.";
this.boots.name =
ChatColor.DARK_RED + "Crimson Boots" + ChatColor.RESET;
this.boots.customItemModel = "crimson_boots";
this.boots.customEquipmentModel = "crimson";
this.boots.lore =
"Boots that allow the wearer to move silently and swiftly.";
}
}
@@ -0,0 +1,83 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.*;
public class Crown extends CustomSet {
public static Crown instance;
public static int tier = 5;
public Crown() {
super(tier);
instance = this;
this.helmetId = "Crown";
this.helmetName = "&eCrown";
this.helmetLore = List.of("Harness the power of a &eking.", "Gain permanent &cregeneration" + ChatColor.RESET + " and &fspeed" + ChatColor.RESET + " as your health decreases.");
this.helmetModel = 14338;
this.equipmentModel = "crown";
registerItems();
registerRecipes();
registerHandler();
}
public static Crown getInstance() {
if (instance == null) {
instance = new Crown();
}
return instance;
}
@Override
public void registerRecipes() {}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {
if(active) {
player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, Integer.MAX_VALUE, 0));
onHealthChange(player);
}else {
player.removePotionEffect(PotionEffectType.REGENERATION);
player.setWalkSpeed(0.2f);
}
}
@Override
public void onDamage(EntityDamageEvent event) {
Player player = (Player) event.getEntity();
onHealthChange(player);
}
public void onHealthChange(Player player) {
player.setWalkSpeed((float) (0.2f * (1 + (Math.min(20 - player.getHealth(), 16.0) / 16))));
}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomHelmet(instance, getInstance().helmetId));
}
}
@@ -0,0 +1,214 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.*;
import org.bukkit.damage.DamageType;
import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
import java.util.*;
import static org.bukkit.Bukkit.getServer;
public class Dragon extends CustomSet {
private Map<Player, ItemStack> gliding = new HashMap<>();
private ArrayList<Player> cooldown = new ArrayList<>();
public static Dragon instance;
public static int tier = 5;
public Dragon() {
super(tier);
instance = this;
this.swordId = "DragonSword";
this.swordName = "&5Dragon Sword";
this.swordMaterial = Material.NETHERITE_SWORD;
this.swordLore = new ArrayList<>(Arrays.asList(""));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14311;
this.helmetId = "DragonHelmet";
this.helmetName = "&5Dragon Helmet";
this.helmetLore = List.of("&5Set Bonus: ");
this.helmetModel = 14312;
this.chestplateId = "DragonChestplate";
this.chestplateName = "&5Dragon Chestplate";
this.chestplateLore = List.of("&5Set Bonus: ");
this.chestplateModel = 14313;
this.leggingsId = "DragonLeggings";
this.leggingsName = "&5Dragon Leggings";
this.leggingsLore = List.of("&5Set Bonus: ");
this.leggingsModel = 14314;
this.bootsId = "DragonBoots";
this.bootsName = "&5Dragon boots";
this.bootsLore = List.of("&5Set Bonus: ");
this.bootsModel = 14315;
this.equipmentModel = "dragon";
registerItems();
registerRecipes();
registerHandler();
}
public static Dragon getInstance() {
if (instance == null) {
instance = new Dragon();
}
return instance;
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.ELYTRA);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
if (cooldown.contains(player)) return;
Location location = player.getLocation();
Vector direction = location.getDirection();
player.setVelocity(direction.multiply(2.0));
player.playSound(location, Sound.ENTITY_ENDER_DRAGON_FLAP, 1.0f, 1.0f);
World world = player.getWorld();
world.spawnParticle(Particle.DRAGON_BREATH, location, 100);
cooldown.add(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(
Objects.requireNonNull(Fantasysmp.getPlugin()),
() -> cooldown.remove(player),
25
);
}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
if (!(player.isFlying() || player.isGliding())) return;
double baseDamage = event.getDamage();
double newDamage = baseDamage * Math.min(Math.max(player.getVelocity().length(), 1.0), 2.0);
event.setDamage(newDamage);
}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {
if(active) {
ItemMeta itemMeta = item.getItemMeta();
itemMeta.setGlider(true);
item.setItemMeta(itemMeta);
gliding.put(player, item);
}else if (gliding.containsKey(player)) {
item = gliding.get(player);
gliding.remove(player);
if(item.hasItemMeta()) {
ItemMeta itemMeta = item.getItemMeta();
itemMeta.setGlider(false);
item.setItemMeta(itemMeta);
}
}
}
@Override
public void onDamage(EntityDamageEvent event) {
if (!(event.getDamageSource().getDamageType() == DamageType.FLY_INTO_WALL || event.getDamageSource().getDamageType() == DamageType.FALL)) return;
event.setDamage(event.getDamage() * 0.5);
Player player = (Player) event.getEntity();
double radius = 5.0;
double damage = 8.0;
double kb = 0.5;
if (event.getDamageSource().getDamageType() == DamageType.FLY_INTO_WALL) {
event.setDamage(event.getDamage() * 0.4);
radius = 3.0;
damage = 5.0;
kb = 0.3;
}
for (Entity entity : player.getNearbyEntities(radius, radius, radius)) {
if (entity instanceof LivingEntity target && entity != player) {
target.damage(damage, player);
Vector knockback = target.getLocation().toVector().subtract(player.getLocation().toVector()).normalize();
knockback.multiply(kb);
knockback.setY(0.5);
target.setVelocity(knockback);
}
}
player.getWorld().playSound(player.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1f, 1f);
player.getWorld().spawnParticle(Particle.EXPLOSION, player.getLocation(), 30, 1, 1, 1, 0.1);
}
@Override
public void onEffect(EntityPotionEffectEvent event) {
if (event.getNewEffect() == null) return;
if (event.getNewEffect().getType() != PotionEffectType.LEVITATION) {
return;
}
try {
event.setCancelled(true);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,221 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import static org.bukkit.Bukkit.broadcastMessage;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import java.util.ArrayList;
import java.util.Objects;
import org.bukkit.*;
import org.bukkit.command.CommandExecutor;
import org.bukkit.damage.DamageType;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.*;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.util.Vector;
public class DragonGear extends GenericGearSet implements CommandExecutor {
private ArrayList<Player> cooldown = new ArrayList<>();
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@Override
public void registerRecipes() {}
@EventHandler
public void onEntityPotionEffectEvent(
org.bukkit.event.entity.EntityPotionEffectEvent event
) {
if (event.getEntity() instanceof Player player) {
if (event.getNewEffect() == null) return;
if (event.getNewEffect().getType() != PotionEffectType.LEVITATION) {
return;
}
try {
if (
LoreChecker.itemLoreContains(
player.getInventory().getHelmet(),
this.helmet.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getChestplate(),
this.chestplate.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getLeggings(),
this.leggings.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getBoots(),
this.boots.lore
)
) {
event.setCancelled(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@EventHandler
public void onEntityDamage(
org.bukkit.event.entity.EntityDamageEvent event
) {
// check if fall damage
if (!(event.getEntity() instanceof Player player)) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getHelmet(),
this.helmet.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getChestplate(),
this.chestplate.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getLeggings(),
this.leggings.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getBoots(),
this.boots.lore
))
) return;
if (
!(event.getDamageSource().getDamageType() ==
DamageType.FLY_INTO_WALL)
) return;
event.setCancelled(true);
}
@EventHandler
public void onEntityDamageByEntity(
org.bukkit.event.entity.EntityDamageByEntityEvent event
) {
if (!(event.getDamager() instanceof Player player)) return;
if (
!(LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
))
) return;
if (!(player.isFlying() || player.isGliding())) return;
double baseDamage = event.getDamage();
double newDamage =
baseDamage *
Math.min(Math.max(player.getVelocity().length(), 1.0), 2.0);
broadcastMessage("damage " + baseDamage);
broadcastMessage("velocity " + player.getVelocity().length());
broadcastMessage("new damage " + newDamage);
event.setDamage(newDamage);
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItem(); // Get the item the player interacted with
if (
!(event.getAction() == Action.RIGHT_CLICK_AIR ||
event.getAction() == Action.RIGHT_CLICK_BLOCK)
) {
return;
}
if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return;
if (cooldown.contains(player)) return;
Location location = player.getLocation();
Vector direction = location.getDirection();
player.setVelocity(direction.multiply(2.0));
player.playSound(location, Sound.ENTITY_ENDER_DRAGON_FLAP, 1.0f, 1.0f);
World world = player.getWorld();
world.spawnParticle(Particle.DRAGON_BREATH, location, 100);
cooldown.add(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(
Objects.requireNonNull(
Bukkit.getPluginManager().getPlugin("fantasysmp")
),
() -> cooldown.remove(player),
25
);
}
@Override
public ItemStack getHelmet() {
// helmet.setMaterial(Material.DRAGON_HEAD);
return super.getHelmet();
}
@Override
public ItemStack getChestplate() {
chestplate.setMaterial(Material.ELYTRA);
ItemStack item = super.getChestplate();
item.addUnsafeEnchantment(Enchantment.PROTECTION, 4);
return item;
}
public static void init() {}
public DragonGear() {
this.setTier5();
this.sword.name =
ChatColor.DARK_PURPLE + "Dragon Sword" + ChatColor.RESET;
this.sword.customItemModel = "dragon_sword";
this.helmet.name =
ChatColor.DARK_PURPLE + "Dragon Helmet" + ChatColor.RESET;
this.helmet.customItemModel = "dragon_helmet";
this.helmet.customEquipmentModel = "dragon";
this.chestplate.name =
ChatColor.DARK_PURPLE + "Dragon Chestplate" + ChatColor.RESET;
this.chestplate.customItemModel = "dragon_chestplate";
this.chestplate.customEquipmentModel = "dragon";
this.leggings.name =
ChatColor.DARK_PURPLE + "Dragon Leggings" + ChatColor.RESET;
this.leggings.customItemModel = "dragon_leggings";
this.leggings.customEquipmentModel = "dragon";
this.boots.name =
ChatColor.DARK_PURPLE + "Dragon Boots" + ChatColor.RESET;
this.boots.customItemModel = "dragon_boots";
this.boots.customEquipmentModel = "dragon";
this.sword.lore = "A blade forged from dragon scales and chorus fruit";
this.helmet.lore = "Forged from dragon scales and chorus fruit";
this.chestplate.lore = "Forged from dragon scales and chorus fruit";
this.leggings.lore = "Forged from dragon scales and chorus fruit";
this.boots.lore = "Forged from dragon scales and chorus fruit";
}
}
@@ -0,0 +1,123 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
public class Ender extends CustomSet {
private ArrayList<Player> cooldown = new ArrayList<>();
public static Ender instance;
public static int tier = 4;
public Ender() {
super(tier);
instance = this;
this.swordId = "EnderSword";
this.swordName = "&3Ender Sword";
this.swordLore = new ArrayList<>(Arrays.asList("A sword forged from the essence of ender pearls,"));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14331;
this.helmetId = "EnderHelmet";
this.helmetName = "&3Ender Helmet";
this.helmetLore = List.of("A helmet forged from the essence of ender pearls,", "&3Set Bonus: ");
this.helmetModel = 14332;
this.chestplateId = "EnderChestplate";
this.chestplateName = "&3Ender Chestplate";
this.chestplateLore = List.of("A chestplate forged from the essence of ender pearls,", "&3Set Bonus: ");
this.chestplateModel = 14333;
this.leggingsId = "PoseidonLeggings";
this.leggingsName = "&3Ender Leggings";
this.leggingsLore = List.of("Leggings forged from the essence of ender pearls,", "&3Set Bonus: ");
this.leggingsModel = 14334;
this.bootsId = "EnderBoots";
this.bootsName = "&3Ender boots";
this.bootsLore = List.of("Boots forged from the essence of ender pearls,", "&3Set Bonus: ");
this.bootsModel = 14335;
this.equipmentModel = "ender";
registerItems();
registerRecipes();
registerHandler();
}
public static Ender getInstance() {
if (instance == null) {
instance = new Ender();
}
return instance;
}
@Override
public void registerRecipes() {}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
if (cooldown.contains(player)) return;
Location old_location = player.getLocation();
World world = player.getWorld();
Vector direction = old_location.getDirection();
Block block = player.getTargetBlock(null, 64);
if (block.getType() == Material.AIR || block.getType() == Material.CAVE_AIR) {
return;
}
player.playSound(old_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f);
world.spawnParticle(Particle.PORTAL, old_location, 100);
Location new_location = block.getLocation();
new_location.setPitch(old_location.getPitch());
new_location.setYaw(old_location.getYaw());
player.setVelocity(new Vector(player.getVelocity().getX(), 0, player.getVelocity().getZ()));
player.teleport(new_location);
player.playSound(new_location, Sound.ENTITY_ENDERMAN_TELEPORT, 1.0f, 1.0f);
world.spawnParticle(Particle.PORTAL, new_location, 100);
cooldown.add(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(
Objects.requireNonNull(Fantasysmp.getPlugin()),
() -> cooldown.remove(player),
25
);
}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {}
@Override
public void onDamage(EntityDamageEvent event) {}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,141 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import java.util.ArrayList;
import java.util.Objects;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.*;
import org.bukkit.util.Vector;
public class EnderGear extends GenericGearSet implements CommandExecutor {
private ArrayList<Player> cooldown = new ArrayList<>();
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@Override
public void registerRecipes() {}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItem(); // Get the item the player interacted with
if (
!(event.getAction() == Action.RIGHT_CLICK_AIR ||
event.getAction() == Action.RIGHT_CLICK_BLOCK)
) {
return;
}
if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return;
if (cooldown.contains(player)) return;
Location old_location = player.getLocation();
World world = player.getWorld();
// find nearest block in that direction
Block block = player.getTargetBlock(null, 64);
if (
block.getType() == Material.AIR ||
block.getType() == Material.CAVE_AIR
) {
return;
}
player.playSound(
old_location,
Sound.ENTITY_ENDERMAN_TELEPORT,
1.0f,
1.0f
);
world.spawnParticle(Particle.PORTAL, old_location, 100);
Location new_location = block.getLocation();
new_location.setPitch(old_location.getPitch());
new_location.setYaw(old_location.getYaw());
player.setVelocity(
new Vector(
player.getVelocity().getX(),
0,
player.getVelocity().getZ()
)
);
player.teleport(new_location);
player.playSound(
new_location,
Sound.ENTITY_ENDERMAN_TELEPORT,
1.0f,
1.0f
);
world.spawnParticle(Particle.PORTAL, new_location, 100);
cooldown.add(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(
Objects.requireNonNull(
Bukkit.getPluginManager().getPlugin("fantasysmp")
),
() -> cooldown.remove(player),
25
);
}
public static void init() {}
public EnderGear() {
this.setTier4();
this.sword.name = ChatColor.DARK_AQUA + "Ender Sword" + ChatColor.RESET;
this.sword.customItemModel = "ender_sword";
this.helmet.name =
ChatColor.DARK_AQUA + "Ender Helmet" + ChatColor.RESET;
this.helmet.customItemModel = "ender_helmet";
this.helmet.customEquipmentModel = "ender";
this.chestplate.name =
ChatColor.DARK_AQUA + "Ender Chestplate" + ChatColor.RESET;
this.chestplate.customItemModel = "ender_chestplate";
this.chestplate.customEquipmentModel = "ender";
this.leggings.name =
ChatColor.DARK_AQUA + "Ender Leggings" + ChatColor.RESET;
this.leggings.customItemModel = "ender_leggings";
this.leggings.customEquipmentModel = "ender";
this.boots.name = ChatColor.DARK_AQUA + "Ender Boots" + ChatColor.RESET;
this.boots.customItemModel = "ender_boots";
this.boots.customEquipmentModel = "ender";
this.sword.lore = "A sword forged from the essence of ender pearls,";
this.helmet.lore = "A helmet forged from the essence of ender pearls,";
this.chestplate.lore =
"A chestplate forged from the essence of ender pearls,";
this.leggings.lore =
"Leggings forged from the essence of ender pearls,";
this.boots.lore = "Boots forged from the essence of ender pearls,";
}
}
@@ -1,41 +1,55 @@
package dev.zxq5.fantasysmp.items.gear; package dev.zxq5.fantasysmp.items.gear;
import static org.bukkit.Bukkit.getServer; import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.NamespacedKey; import org.bukkit.NamespacedKey;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.CommandExecutor; import org.bukkit.entity.Player;
import org.bukkit.entity.*; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.ShapedRecipe; import org.bukkit.inventory.ShapedRecipe;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
public class LightningSword extends GenericGearSet implements CommandExecutor { import java.util.ArrayList;
import java.util.Arrays;
@Override import static org.bukkit.Bukkit.getServer;
public boolean onCommand(
org.bukkit.command.CommandSender sender, public class LightningSword extends CustomSet {
org.bukkit.command.Command command, public static LightningSword instance;
String label, public static int tier = 6;
String[] args
) { public LightningSword() {
Player player = (Player) sender; super(tier);
player.getInventory().addItem(this.getSword()); instance = this;
return true;
this.swordId = "LightningSword";
this.swordName = "&1Lightning Sword";
this.swordLore = new ArrayList<>(Arrays.asList("&1All who oppose shall be smitten."));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14337;
registerItems();
registerRecipes();
registerHandler();
}
public static LightningSword getInstance() {
if (instance == null) {
instance = new LightningSword();
}
return instance;
} }
@Override @Override
public void registerRecipes() { public void registerRecipes() {
ItemStack sword = this.getSword(); ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey( NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
"fantasysmp.items",
"lightning_sword"
);
ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword); ShapedRecipe swordRecipe = new ShapedRecipe(swordKey, sword);
swordRecipe.shape(" N ", " N ", " R "); swordRecipe.shape(" N ", " N ", " R ");
swordRecipe.setIngredient('N', Material.NETHER_STAR); swordRecipe.setIngredient('N', Material.NETHER_STAR);
@@ -43,30 +57,17 @@ public class LightningSword extends GenericGearSet implements CommandExecutor {
getServer().addRecipe(swordRecipe); getServer().addRecipe(swordRecipe);
} }
@EventHandler @Override
public void onEntityDamageByEntity( public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
org.bukkit.event.entity.EntityDamageByEntityEvent event
) {
// checks that it is a player that is performing the attack.
if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) {
return;
}
if ( @Override
!(LoreChecker.itemLoreContains( public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
player.getInventory().getItemInMainHand(),
this.sword.lore @Override
)) public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
if (player.isOnGround() || player.getVelocity().getY() >= 0 || player.isClimbing() || player.isInWater() || player.isInsideVehicle() || player.hasPotionEffect(PotionEffectType.BLINDNESS)
) return; ) return;
if (
player.isOnGround() ||
player.getVelocity().getY() >= 0 ||
player.isClimbing() ||
player.isInWater() ||
player.isInsideVehicle() ||
player.hasPotionEffect(PotionEffectType.BLINDNESS)
) return;
Location location = event.getEntity().getLocation(); Location location = event.getEntity().getLocation();
World world = location.getWorld(); World world = location.getWorld();
@@ -76,67 +77,26 @@ public class LightningSword extends GenericGearSet implements CommandExecutor {
world.strikeLightning(location); world.strikeLightning(location);
} }
@EventHandler @Override
public void onEntityDamage( public void onArmourChange(Player player, ItemStack item, boolean active) {}
org.bukkit.event.entity.EntityDamageEvent event
) { @Override
if (event.getEntity() instanceof Player player) { public void onDamage(EntityDamageEvent event) {
if ( if (!(event
!(event
.getDamageSource() .getDamageSource()
.getDamageType() .getDamageType()
.getKey() .getKey()
.toString() .toString()
.equals("minecraft:lightning_bolt")) .equals("minecraft:lightning_bolt")
) return; )) return;
if (
LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
)
) {
event.setCancelled(true); event.setCancelled(true);
return;
}
}
} }
@EventHandler @Override
public void onEntityDeath(org.bukkit.event.entity.EntityDeathEvent event) { public void onEffect(EntityPotionEffectEvent event) {}
if (event.getEntity() instanceof Mob) {
if (
event
.getDamageSource()
.getDamageType()
.getKey()
.toString()
.equals("minecraft:lightning_bolt") ||
event
.getDamageSource()
.getDamageType()
.getKey()
.toString()
.equals("minecraft:on_fire")
) {
Entity e = event.getEntity();
((ExperienceOrb) e
.getLocation()
.getWorld()
.spawn(
e.getLocation(),
ExperienceOrb.class
)).setExperience(10);
}
}
}
public static void init() {} private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId));
public LightningSword() {
this.setTier5();
this.sword.name = "Lightning Sword";
this.sword.customItemModel = "lightning_sword";
this.sword.lore = "All who oppose shall be smitten.";
} }
} }
@@ -0,0 +1,146 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.bukkit.Bukkit.getServer;
public class Poseidon extends CustomSet {
public static Poseidon instance;
public static int tier = 5;
public Poseidon() {
super(tier);
instance = this;
this.swordId = "PoseidonSword";
this.swordName = "&4Poseidon's Fury";
this.swordMaterial = Material.TRIDENT;
this.swordLore = new ArrayList<>(Arrays.asList("A powerful trident imbued with the power of the &4ocean."));
this.swordAttackDamage = 10;
this.swordAttackSpeed = 1.2f;
this.swordLore.addAll(getSwordStats());
this.swordModel = 14326;
this.swordEnchants.put(Enchantment.RIPTIDE, 5);
this.helmetId = "PoseidonHelmet";
this.helmetName = "&bPoseidon's Crown";
this.helmetLore = List.of("A helmet granted to those who harness the &bpower of the ocean.","&bSet Bonus: ");
this.helmetModel = 14327;
this.helmetEnchants.put(Enchantment.AQUA_AFFINITY, 3);
this.chestplateId = "PoseidonChestplate";
this.chestplateName = "&bPoseidon's Chestplate";
this.chestplateLore = List.of("A chestplate granted to those who harness the &bpower of the ocean.","&bSet Bonus: ");
this.chestplateModel = 14328;
this.leggingsId = "PoseidonLeggings";
this.leggingsName = "&bPoseidon's Leggings";
this.leggingsLore = List.of("Leggings granted to those who harness the &bpower of the ocean.","&bSet Bonus: ");
this.leggingsModel = 14329;
this.bootsId = "PoseidonBoots";
this.bootsName = "&bPoseidon's boots";
this.bootsLore = List.of("Boots granted to those who harness the &bpower of the ocean.","&bSet Bonus: ");
this.bootsModel = 14330;
this.bootsEnchants.put(Enchantment.DEPTH_STRIDER, 5);
this.equipmentModel = "poseidon";
Bukkit.getScheduler().scheduleSyncRepeatingTask(Fantasysmp.getPlugin(), this::checkPlayerAir, 0, 20);
registerItems();
registerRecipes();
registerHandler();
}
public static Poseidon getInstance() {
if (instance == null) {
instance = new Poseidon();
}
return instance;
}
public void checkPlayerAir() {
for (Player player : Bukkit.getOnlinePlayers()) {
if (CustomItemHandler.getSet(player) == this) {
if (player.getRemainingAir() < player.getMaximumAir()) {
player.setRemainingAir(player.getMaximumAir());
}
}
}
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.HEART_OF_THE_SEA);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {}
@Override
public void onDamage(EntityDamageEvent event) {}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,109 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import static org.bukkit.Bukkit.getPluginManager;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.CommandExecutor;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
public class PoseidonGear extends GenericGearSet implements CommandExecutor {
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getTrident());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
public ItemStack getTrident() {
ItemStack item = super.getSword();
item.addUnsafeEnchantment(Enchantment.RIPTIDE, 5);
return item;
}
public ItemStack getHelmet() {
ItemStack item = super.getHelmet();
item.addUnsafeEnchantment(Enchantment.AQUA_AFFINITY, 3);
return item;
}
public ItemStack getBoots() {
ItemStack item = super.getBoots();
item.addUnsafeEnchantment(Enchantment.DEPTH_STRIDER, 5);
return item;
}
@Override
public void registerRecipes() {
Bukkit.getScheduler().scheduleSyncRepeatingTask(
getPluginManager().getPlugin("fantasysmp"),
this::checkPlayerAir,
0,
20
);
}
public void checkPlayerAir() {
// any players wearing the armour will never run out of breath
for (Player player : Bukkit.getOnlinePlayers()) {
if (this.hasGear(player)) {
if (player.getRemainingAir() < player.getMaximumAir()) {
player.setRemainingAir(player.getMaximumAir());
}
}
}
}
public PoseidonGear() {
this.setTier5();
this.sword.setMaterial(Material.TRIDENT);
this.sword.attackDamage = 10;
this.sword.attackSpeed = 1.2f;
this.sword.name = ChatColor.AQUA + "Poseidon's Fury" + ChatColor.RESET;
this.sword.lore =
"A powerful trident imbued with the power of the ocean.";
this.sword.customItemModel = "poseidons_trident";
this.helmet.name =
ChatColor.AQUA + "Poseidon's Crown" + ChatColor.RESET;
this.helmet.lore =
"A helmet granted to those who harness the power of the ocean.";
this.helmet.customItemModel = "poseidons_helmet";
this.helmet.customEquipmentModel = "poseidon";
this.chestplate.name =
ChatColor.AQUA + "Poseidon's Chestplate" + ChatColor.RESET;
this.chestplate.lore =
"A chestplate granted to those who harness the power of the ocean.";
this.chestplate.customItemModel = "poseidons_chestplate";
this.chestplate.customEquipmentModel = "poseidon";
this.leggings.name =
ChatColor.AQUA + "Poseidon's Leggings" + ChatColor.RESET;
this.leggings.lore =
"Leggings granted to those who harness the power of the ocean.";
this.leggings.customItemModel = "poseidons_leggings";
this.leggings.customEquipmentModel = "poseidon";
this.boots.name = ChatColor.AQUA + "Poseidon's Boots" + ChatColor.RESET;
this.boots.lore =
"Boots granted to those who harness the power of the ocean.";
this.boots.customItemModel = "poseidons_boots";
this.boots.customEquipmentModel = "poseidon";
}
}
@@ -1,60 +1,72 @@
package dev.zxq5.fantasysmp.items.gear; package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.items.GenericGearSet; import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.util.LoreChecker; import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.*; import org.bukkit.Location;
import org.bukkit.command.CommandExecutor; import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
public class StevensWrath extends GenericGearSet implements CommandExecutor { import java.util.ArrayList;
import java.util.Arrays;
@Override import static org.bukkit.Bukkit.getServer;
public boolean onCommand(
org.bukkit.command.CommandSender sender, public class StevensWrath extends CustomSet {
org.bukkit.command.Command command, public static StevensWrath instance;
String label, public static int tier = 6;
String[] args
) { public StevensWrath() {
Player player = (Player) sender; super(tier);
player.getInventory().addItem(this.getSword()); instance = this;
return true;
this.swordId = "StevensWrath";
this.swordName = "&5Steven's Wrath";
this.swordLore = new ArrayList<>(Arrays.asList("All who oppose the mighty Steven shall face his wrath of lightning."));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14336;
registerItems();
registerRecipes();
registerHandler();
} }
@EventHandler public static StevensWrath getInstance() {
public void onCraft( if (instance == null) {
org.bukkit.event.inventory.PrepareItemCraftEvent event instance = new StevensWrath();
) { }
if (!event.getInventory().contains(Material.NETHERITE_BLOCK)) return; return instance;
if (
!event.getInventory().contains(new LightningSword().getSword())
) return;
event.getInventory().setResult(new StevensWrath().getSword());
} }
@Override @Override
public void registerRecipes() {} public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.NETHERITE_BLOCK);
@EventHandler RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
public void onEntityDamageByEntity(
org.bukkit.event.entity.EntityDamageByEntityEvent event ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
) { NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
// checks that it is a player that is performing the attack. SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) { getServer().addRecipe(swordRecipe);
return;
} }
if ( @Override
!(LoreChecker.itemLoreContains( public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
player.getInventory().getItemInMainHand(),
this.sword.lore
) ||
LoreChecker.itemLoreContains(
player.getInventory().getItemInOffHand(),
this.sword.lore
))
) return;
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
Location location = event.getEntity().getLocation(); Location location = event.getEntity().getLocation();
World world = location.getWorld(); World world = location.getWorld();
@@ -63,44 +75,26 @@ public class StevensWrath extends GenericGearSet implements CommandExecutor {
world.strikeLightning(location); world.strikeLightning(location);
} }
@EventHandler @Override
public void onEntityDamage( public void onArmourChange(Player player, ItemStack item, boolean active) {}
org.bukkit.event.entity.EntityDamageEvent event
) { @Override
if (event.getEntity() instanceof Player player) { public void onDamage(EntityDamageEvent event) {
if ( if (!(event
!(event
.getDamageSource() .getDamageSource()
.getDamageType() .getDamageType()
.getKey() .getKey()
.toString() .toString()
.equals("minecraft:lightning_bolt")) .equals("minecraft:lightning_bolt")
) return; )) return;
if (
LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
) ||
LoreChecker.itemLoreContains(
player.getInventory().getItemInOffHand(),
this.sword.lore
)
) {
event.setCancelled(true); event.setCancelled(true);
} }
}
}
public static void init() {} @Override
public void onEffect(EntityPotionEffectEvent event) {}
public StevensWrath() { private static void registerItems() {
this.setTier6(); Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId));
this.sword.name =
ChatColor.LIGHT_PURPLE + "Stevens Wrath" + ChatColor.RESET;
this.sword.customItemModel = "stevens_wrath";
this.sword.lore =
ChatColor.LIGHT_PURPLE +
"All who oppose the mighty Steven shall face his wrath of lightning.";
} }
} }
@@ -0,0 +1,127 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.bukkit.Bukkit.getServer;
public class TrueNetherite extends CustomSet {
public static TrueNetherite instance;
public static int tier = 6;
public TrueNetherite() {
super(tier);
instance = this;
this.swordId = "TrueNetheriteSword";
this.swordName = "&fTrue Netherite Sword";
this.swordLore = new ArrayList<>(Arrays.asList(""));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14316;
this.helmetId = "TrueNetheriteHelmet";
this.helmetName = "&fTrue Netherite Helmet";
this.helmetLore = List.of("&fSet Bonus: ");
this.helmetModel = 14317;
this.chestplateId = "TrueNetheriteChestplate";
this.chestplateName = "&fTrueNetherite Chestplate";
this.chestplateLore = List.of("&fSet Bonus: ");
this.chestplateModel = 14318;
this.leggingsId = "TrueNetheriteLeggings";
this.leggingsName = "&fTrueNetherite Leggings";
this.leggingsLore = List.of("&fSet Bonus: ");
this.leggingsModel = 14319;
this.bootsId = "TrueNetheriteBoots";
this.bootsName = "&fTrue Netherite boots";
this.bootsLore = List.of("&fSet Bonus: ");
this.bootsModel = 14320;
this.equipmentModel = "true_netherite";
registerItems();
registerRecipes();
registerHandler();
}
public static TrueNetherite getInstance() {
if (instance == null) {
instance = new TrueNetherite();
}
return instance;
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.NETHER_STAR);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {}
@Override
public void onDamage(EntityDamageEvent event) {}
@Override
public void onEffect(EntityPotionEffectEvent event) {}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,67 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player;
public class TrueNetheriteGear
extends GenericGearSet
implements CommandExecutor {
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@Override
public void registerRecipes() {}
public TrueNetheriteGear() {
this.setTier6();
this.sword.name =
ChatColor.WHITE + "True Netherite Sword" + ChatColor.RESET;
this.sword.lore = "A sword forged with the skulls of wither skeletons.";
this.sword.customItemModel = "true_netherite_sword";
this.sword.lore = "Destruction awaits.";
this.helmet.name =
ChatColor.WHITE + "True Netherite Helmet" + ChatColor.RESET;
this.helmet.lore =
"A helmet forged with the skulls of wither skeletons.";
this.helmet.customItemModel = "true_netherite_helmet";
this.helmet.customEquipmentModel = "true_netherite";
this.chestplate.name =
ChatColor.WHITE + "True Netherite Chestplate" + ChatColor.RESET;
this.chestplate.lore =
"A chestplate forged with the skulls of wither skeletons.";
this.chestplate.customItemModel = "true_netherite_chestplate";
this.chestplate.customEquipmentModel = "true_netherite";
this.leggings.name =
ChatColor.WHITE + "True Netherite Leggings" + ChatColor.RESET;
this.leggings.lore =
"Leggings forged with the skulls of wither skeletons.";
this.leggings.customItemModel = "true_netherite_leggings";
this.leggings.customEquipmentModel = "true_netherite";
this.boots.name =
ChatColor.WHITE + "True Netherite Boots" + ChatColor.RESET;
this.boots.lore = "Boots forged with the skulls of wither skeletons.";
this.boots.customItemModel = "true_netherite_boots";
this.boots.customEquipmentModel = "true_netherite";
}
}
@@ -0,0 +1,151 @@
package dev.zxq5.fantasysmp.items.gear;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.presets.*;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static org.bukkit.Bukkit.getServer;
public class Witherite extends CustomSet {
public static Witherite instance;
public static int tier = 5;
public Witherite() {
super(tier);
instance = this;
this.swordId = "WitheriteSword";
this.swordName = "&0Witherite Sword";
this.swordLore = new ArrayList<>(Arrays.asList("A sword forged with the skulls of wither skeletons.", "Applies &0wither effect" + ChatColor.RESET + "for 5 seconds."));
this.swordLore.addAll(getSwordStats());
this.swordModel = 14301;
this.helmetId = "WitheriteHelmet";
this.helmetName = "&0Witherite Helmet";
this.helmetLore = List.of("A helmet forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity");
this.helmetModel = 14302;
this.chestplateId = "WitheriteChestplate";
this.chestplateName = "&0Witherite Chestplate";
this.chestplateLore = List.of("A chestplate forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity");
this.chestplateModel = 14303;
this.leggingsId = "WitheriteLeggings";
this.leggingsName = "&0Witherite Leggings";
this.leggingsLore = List.of("Leggings forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity");
this.leggingsModel = 14304;
this.bootsId = "WitheriteBoots";
this.bootsName = "&0Witherite boots";
this.bootsLore = List.of("Boots forged with the skulls of wither skeletons.", "&0Set Bonus: Wither Immunity");
this.bootsModel = 14305;
this.equipmentModel = "witherite";
registerItems();
registerRecipes();
registerHandler();
}
public static Witherite getInstance() {
if (instance == null) {
instance = new Witherite();
}
return instance;
}
@Override
public void registerRecipes() {
RecipeChoice template = new RecipeChoice.MaterialChoice(Material.NETHERITE_UPGRADE_SMITHING_TEMPLATE);
RecipeChoice resource = new RecipeChoice.MaterialChoice(Material.WITHER_SKELETON_SKULL);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_SWORD);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_HELMET);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_CHESTPLATE);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_LEGGINGS);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(Material.NETHERITE_BOOTS);
ItemStack sword = Fantasysmp.customItemMap.get(swordId).getItem();
NamespacedKey swordKey = new NamespacedKey("fantasysmp.items", swordId.toLowerCase());
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(swordKey, sword, template, swordChoice, resource);
getServer().addRecipe(swordRecipe);
ItemStack helmet = Fantasysmp.customItemMap.get(helmetId).getItem();
NamespacedKey helmetKey = new NamespacedKey("fantasysmp.items", helmetId.toLowerCase());
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(helmetKey, helmet, template, helmetChoice, resource);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = Fantasysmp.customItemMap.get(chestplateId).getItem();
NamespacedKey chestplateKey = new NamespacedKey("fantasysmp.items", chestplateId.toLowerCase());
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(chestplateKey, chestplate, template, chestplateChoice, resource);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = Fantasysmp.customItemMap.get(leggingsId).getItem();
NamespacedKey leggingsKey = new NamespacedKey("fantasysmp.items", leggingsId.toLowerCase());
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(leggingsKey, leggings, template, leggingsChoice, resource);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = Fantasysmp.customItemMap.get(bootsId).getItem();
NamespacedKey bootsKey = new NamespacedKey("fantasysmp.items", bootsId.toLowerCase());
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(bootsKey, boots, template, bootsChoice, resource);
getServer().addRecipe(bootsRecipe);
}
@Override
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {}
@Override
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
}
@Override
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
PotionEffect effect = new PotionEffect(
PotionEffectType.WITHER,
20 * 5,
1
);
effect.apply((LivingEntity) event.getEntity());
}
@Override
public void onArmourChange(Player player, ItemStack item, boolean active) {}
@Override
public void onDamage(EntityDamageEvent event) {}
@Override
public void onEffect(EntityPotionEffectEvent event) {
if (event.getNewEffect() == null) return;
if (event.getNewEffect().getType() != PotionEffectType.WITHER) {
return;
}
try {
event.setCancelled(true);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void registerItems() {
Fantasysmp.registerItems(new CustomSword(instance, getInstance().swordId), new CustomHelmet(instance, getInstance().helmetId), new CustomChestplate(instance, getInstance().chestplateId), new CustomLeggings(instance, getInstance().leggingsId), new CustomBoots(instance, getInstance().bootsId));
}
}
@@ -1,263 +0,0 @@
package dev.zxq5.fantasysmp.items.gear;
import static org.bukkit.Bukkit.getServer;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.util.LoreChecker;
import java.util.ArrayList;
import java.util.Objects;
import org.bukkit.*;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.WitherSkull;
import org.bukkit.event.EventHandler;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.potion.PotionEffect;
public class WitheriteGear extends GenericGearSet implements CommandExecutor {
private ArrayList<Player> cooldown = new ArrayList<>();
@Override
public boolean onCommand(
org.bukkit.command.CommandSender sender,
org.bukkit.command.Command command,
String label,
String[] args
) {
Player player = (Player) sender;
player.getInventory().addItem(this.getSword());
player.getInventory().addItem(this.getHelmet());
player.getInventory().addItem(this.getChestplate());
player.getInventory().addItem(this.getLeggings());
player.getInventory().addItem(this.getBoots());
return true;
}
@Override
public void registerRecipes() {
ItemStack sword = this.getSword();
NamespacedKey swordKey = new NamespacedKey(
"fantasysmp.items",
"witherite_sword"
);
RecipeChoice swordChoice = new RecipeChoice.MaterialChoice(
Material.NETHERITE_SWORD
);
SmithingTransformRecipe swordRecipe = new SmithingTransformRecipe(
swordKey,
sword,
NETHERITE_UPGRADE,
swordChoice,
WITHER_SKULL
);
getServer().addRecipe(swordRecipe);
ItemStack helmet = this.getHelmet();
NamespacedKey helmetKey = new NamespacedKey(
"fantasysmp.items",
"witherite_helmet"
);
RecipeChoice helmetChoice = new RecipeChoice.MaterialChoice(
Material.NETHERITE_HELMET
);
SmithingTransformRecipe helmetRecipe = new SmithingTransformRecipe(
helmetKey,
helmet,
NETHERITE_UPGRADE,
helmetChoice,
WITHER_SKULL
);
getServer().addRecipe(helmetRecipe);
ItemStack chestplate = this.getChestplate();
NamespacedKey chestplateKey = new NamespacedKey(
"fantasysmp.items",
"witherite_chestplate"
);
RecipeChoice chestplateChoice = new RecipeChoice.MaterialChoice(
Material.NETHERITE_CHESTPLATE
);
SmithingTransformRecipe chestplateRecipe = new SmithingTransformRecipe(
chestplateKey,
chestplate,
NETHERITE_UPGRADE,
chestplateChoice,
WITHER_SKULL
);
getServer().addRecipe(chestplateRecipe);
ItemStack leggings = this.getLeggings();
NamespacedKey leggingsKey = new NamespacedKey(
"fantasysmp.items",
"witherite_leggings"
);
RecipeChoice leggingsChoice = new RecipeChoice.MaterialChoice(
Material.NETHERITE_LEGGINGS
);
SmithingTransformRecipe leggingsRecipe = new SmithingTransformRecipe(
leggingsKey,
leggings,
NETHERITE_UPGRADE,
leggingsChoice,
WITHER_SKULL
);
getServer().addRecipe(leggingsRecipe);
ItemStack boots = this.getBoots();
NamespacedKey bootsKey = new NamespacedKey(
"fantasysmp.items",
"witherite_boots"
);
RecipeChoice bootsChoice = new RecipeChoice.MaterialChoice(
Material.NETHERITE_BOOTS
);
SmithingTransformRecipe bootsRecipe = new SmithingTransformRecipe(
bootsKey,
boots,
NETHERITE_UPGRADE,
bootsChoice,
WITHER_SKULL
);
getServer().addRecipe(bootsRecipe);
}
@EventHandler
public void onEntityDamageByEntity(
org.bukkit.event.entity.EntityDamageByEntityEvent event
) {
// checks that it is a player that is performing the attack.
if (!(event.getDamager() instanceof org.bukkit.entity.Player player)) {
return;
}
if (
!LoreChecker.itemLoreContains(
player.getInventory().getItemInMainHand(),
this.sword.lore
)
) {
return;
}
PotionEffect effect = new PotionEffect(
org.bukkit.potion.PotionEffectType.WITHER,
20 * 5,
1
);
effect.apply((LivingEntity) event.getEntity());
}
@EventHandler
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack item = event.getItem(); // Get the item the player interacted with
if (
!(event.getAction() == Action.RIGHT_CLICK_AIR ||
event.getAction() == Action.RIGHT_CLICK_BLOCK)
) {
return;
}
if (!(LoreChecker.itemLoreContains(item, this.sword.lore))) return;
if (cooldown.contains(player)) return;
Location location = player.getLocation();
player.launchProjectile(WitherSkull.class);
player.playSound(location, Sound.ENTITY_WITHER_SHOOT, 1.0f, 1.0f);
World world = player.getWorld();
world.spawnParticle(Particle.SOUL_FIRE_FLAME, location, 1);
cooldown.add(player);
Bukkit.getScheduler().scheduleSyncDelayedTask(
Objects.requireNonNull(
Bukkit.getPluginManager().getPlugin("fantasysmp")
),
() -> cooldown.remove(player),
25
);
}
@EventHandler
public void onEntityPotionEffectEvent(
org.bukkit.event.entity.EntityPotionEffectEvent event
) {
if (event.getEntity() instanceof Player player) {
if (event.getNewEffect() == null) return;
if (
event.getNewEffect().getType() !=
org.bukkit.potion.PotionEffectType.WITHER
) {
return;
}
try {
if (
LoreChecker.itemLoreContains(
player.getInventory().getHelmet(),
this.helmet.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getChestplate(),
this.chestplate.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getLeggings(),
this.leggings.lore
) &&
LoreChecker.itemLoreContains(
player.getInventory().getBoots(),
this.boots.lore
)
) {
event.setCancelled(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void init() {}
public WitheriteGear() {
this.setTier5();
this.sword.name = ChatColor.BLACK + "Witherite Sword" + ChatColor.RESET;
this.sword.lore = "A sword forged with the skulls of wither skeletons.";
this.sword.customItemModel = "witherite_sword";
this.helmet.name =
ChatColor.BLACK + "Witherite Helmet" + ChatColor.RESET;
this.helmet.lore =
"A helmet forged with the skulls of wither skeletons.";
this.helmet.customItemModel = "witherite_helmet";
this.helmet.customEquipmentModel = "witherite";
this.chestplate.name =
ChatColor.BLACK + "Witherite Chestplate" + ChatColor.RESET;
this.chestplate.lore =
"A chestplate forged with the skulls of wither skeletons.";
this.chestplate.customItemModel = "witherite_chestplate";
this.chestplate.customEquipmentModel = "witherite";
this.leggings.name =
ChatColor.BLACK + "Witherite Leggings" + ChatColor.RESET;
this.leggings.lore =
"Leggings forged with the skulls of wither skeletons.";
this.leggings.customItemModel = "witherite_leggings";
this.leggings.customEquipmentModel = "witherite";
this.boots.name = ChatColor.BLACK + "Witherite Boots" + ChatColor.RESET;
this.boots.lore = "Boots forged with the skulls of wither skeletons.";
this.boots.customItemModel = "witherite_boots";
this.boots.customEquipmentModel = "witherite";
}
}
@@ -0,0 +1,90 @@
package dev.zxq5.fantasysmp.items.presets;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.EquippableComponent;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class CustomBoots extends CustomItem {
public CustomSet customSet;
public CustomBoots(CustomSet customSet, String id) {
super(id);
this.customSet = customSet;
}
@Override
public String getName() {
return customSet.bootsName;
}
@Override
public Material getMaterial() {
return customSet.bootsMaterial;
}
@Override
public List<String> getLore() {
return customSet.bootsLore;
}
public CustomSet getSet() {
return customSet;
}
@Override
public int getCustomModel() {
return customSet.bootsModel;
}
@Override
public Map<Enchantment, Integer> getEnchants() {
return customSet.bootsEnchants;
}
public ItemMeta setStats(ItemMeta itemMeta) {
itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
customSet.bootsArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
customSet.bootsToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
if (customSet.bootsResistance != 0) {
itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
customSet.bootsResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
));
}
if(customSet.equipmentModel != null) {
EquippableComponent equippable = itemMeta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel));
equippable.setSlot(EquipmentSlot.FEET);
itemMeta.setEquippable(equippable);
}
return itemMeta;
}
}
@@ -0,0 +1,90 @@
package dev.zxq5.fantasysmp.items.presets;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.EquippableComponent;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class CustomChestplate extends CustomItem {
public CustomSet customSet;
public CustomChestplate(CustomSet customSet, String id) {
super(id);
this.customSet = customSet;
}
@Override
public String getName() {
return customSet.chestplateName;
}
@Override
public Material getMaterial() {
return customSet.chestplateMaterial;
}
@Override
public List<String> getLore() {
return customSet.chestplateLore;
}
public CustomSet getSet() {
return customSet;
}
@Override
public int getCustomModel() {
return customSet.chestplateModel;
}
@Override
public Map<Enchantment, Integer> getEnchants() {
return customSet.chestplateEnchants;
}
public ItemMeta setStats(ItemMeta itemMeta) {
itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
customSet.chestplateArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
customSet.chestplateToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
if (customSet.chestplateResistance != 0) {
itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
customSet.chestplateResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
));
}
if(customSet.equipmentModel != null) {
EquippableComponent equippable = itemMeta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel));
equippable.setSlot(EquipmentSlot.CHEST);
itemMeta.setEquippable(equippable);
}
return itemMeta;
}
}
@@ -0,0 +1,90 @@
package dev.zxq5.fantasysmp.items.presets;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.EquippableComponent;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class CustomHelmet extends CustomItem {
public CustomSet customSet;
public CustomHelmet(CustomSet customSet, String id) {
super(id);
this.customSet = customSet;
}
@Override
public String getName() {
return customSet.helmetName;
}
@Override
public Material getMaterial() {
return customSet.helmetMaterial;
}
@Override
public List<String> getLore() {
return customSet.helmetLore;
}
public CustomSet getSet() {
return customSet;
}
@Override
public int getCustomModel() {
return customSet.helmetModel;
}
@Override
public Map<Enchantment, Integer> getEnchants() {
return customSet.helmetEnchants;
}
public ItemMeta setStats(ItemMeta itemMeta) {
itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
customSet.helmetArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
customSet.helmetToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
if (customSet.helmetResistance != 0) {
itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
customSet.helmetResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
));
}
if(customSet.equipmentModel != null) {
EquippableComponent equippable = itemMeta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel));
equippable.setSlot(EquipmentSlot.HEAD);
itemMeta.setEquippable(equippable);
}
return itemMeta;
}
}
@@ -0,0 +1,69 @@
package dev.zxq5.fantasysmp.items.presets;
import dev.zxq5.fantasysmp.Fantasysmp;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public abstract class CustomItem {
private final String id;
public CustomItem(String id) {
this.id = id;
}
public abstract String getName();
public abstract Material getMaterial();
public abstract List<String> getLore();
public abstract int getCustomModel();
public abstract Map<Enchantment, Integer> getEnchants();
public abstract ItemMeta setStats(ItemMeta itemMeta);
public String getId() {
return this.id;
};
public ItemStack getItem() {
ItemStack itemStack = new ItemStack(getMaterial(), 1);
ItemMeta itemMeta = itemStack.getItemMeta();
PersistentDataContainer container = itemMeta.getPersistentDataContainer();
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', getName()));
List<String> lore = new ArrayList<>();
getLore().forEach(l-> lore.add(ChatColor.translateAlternateColorCodes('&', l)));
itemMeta.setLore(lore);
itemMeta = setStats(itemMeta);
int customModel = getCustomModel();
if(customModel != 0) {
itemMeta.setCustomModelData(customModel);
}
container.set(Fantasysmp.customItemKey, PersistentDataType.STRING, getId());
itemStack.setItemMeta(itemMeta);
Map<Enchantment, Integer> enchants = getEnchants();
enchants.forEach((en, lvl)-> {
itemStack.addUnsafeEnchantment(en, lvl);
});
return itemStack;
}
}
@@ -0,0 +1,210 @@
package dev.zxq5.fantasysmp.items.presets;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.gear.Crown;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.entity.*;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.persistence.PersistentDataType;
import java.util.Arrays;
import java.util.List;
public class CustomItemHandler implements Listener {
private List<Material> ArmourPieces = Arrays.asList(
Material.LEATHER_HELMET, Material.CHAINMAIL_HELMET, Material.IRON_HELMET, Material.GOLDEN_HELMET, Material.DIAMOND_HELMET, Material.NETHERITE_HELMET,
Material.CARVED_PUMPKIN, Material.PLAYER_HEAD, Material.SKELETON_SKULL, Material.ZOMBIE_HEAD, Material.CREEPER_HEAD, Material.WITHER_SKELETON_SKULL, Material.TURTLE_HELMET, Material.DRAGON_HEAD, Material.PIGLIN_HEAD,
Material.LEATHER_CHESTPLATE, Material.CHAINMAIL_CHESTPLATE, Material.IRON_CHESTPLATE, Material.GOLDEN_CHESTPLATE, Material.DIAMOND_CHESTPLATE, Material.NETHERITE_CHESTPLATE, Material.ELYTRA,
Material.LEATHER_LEGGINGS, Material.CHAINMAIL_LEGGINGS, Material.IRON_LEGGINGS, Material.GOLDEN_LEGGINGS, Material.DIAMOND_LEGGINGS, Material.NETHERITE_LEGGINGS,
Material.LEATHER_BOOTS, Material.CHAINMAIL_BOOTS, Material.IRON_BOOTS, Material.GOLDEN_BOOTS, Material.DIAMOND_BOOTS, Material.NETHERITE_BOOTS
);
private static CustomSet active = null;
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerInteract(PlayerInteractEvent event) {
Player player = event.getPlayer();
ItemStack heldItem = player.getInventory().getItemInMainHand();
if ((event.getAction().equals(Action.LEFT_CLICK_BLOCK) || event.getAction().equals(Action.LEFT_CLICK_AIR)) && isCustomItem(heldItem)) {
CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem));
if(customItem instanceof CustomSword customSword) {
customSword.handleLeftClick(player, heldItem, event);
}
}
if ((event.getAction().equals(Action.RIGHT_CLICK_BLOCK) || event.getAction().equals(Action.RIGHT_CLICK_AIR)) && isCustomItem(heldItem)) {
CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem));
if(customItem instanceof CustomSword customSword) {
customSword.handleRightClick(player, heldItem, event);
}
if(ArmourPieces.contains(heldItem.getType())) {
Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0);
}
}
}
@EventHandler
public void onHit(EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Player player)) return;
if (!(event.getEntity() instanceof LivingEntity target)) return;
ItemStack heldItem = player.getInventory().getItemInMainHand();
if (isCustomItem(heldItem)){
CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem));
if(customItem instanceof CustomSword customSword) {
customSword.onHit(player, heldItem, event);
}
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
int slot = event.getSlot();
HumanEntity humanEntity = event.getWhoClicked();
if(humanEntity instanceof Player player) {
if (slot >= 36 && slot <= 39) {
Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0);
return;
}
ItemStack item = event.getCurrentItem();
if (isCustomItem(item)) {
CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(item));
if (customItem instanceof CustomHelmet || customItem instanceof CustomChestplate || customItem instanceof CustomLeggings || customItem instanceof CustomBoots) {
Bukkit.getScheduler().runTaskLater(Fantasysmp.getPlugin(), () -> onArmourChange(player), 0);
}
}
}
}
public void onArmourChange(Player player) {
if (getItemId(player.getInventory().getHelmet()).equals("Crown")) {
Crown.getInstance().onArmourChange(player, null, true);
} else {
Crown.getInstance().onArmourChange(player, null, false);
}
CustomSet customSet = getSet(player);
if(customSet == null && active != null) {
active.onArmourChange(player, null, false);
active = null;
}
if(customSet != null) {
active = customSet;
active.onArmourChange(player, player.getInventory().getChestplate(), true);
}
}
@EventHandler
public void onDamage(EntityDamageEvent event) {
if (!(event.getEntity() instanceof Player player)) return;
ItemStack heldItem = player.getInventory().getItemInMainHand();
if (isCustomItem(heldItem)) {
if (getItemId(heldItem).equals("StevensWrath") || getItemId(heldItem).equals("LightningSword")) {
CustomItem customItem = Fantasysmp.customItemMap.get(getItemId(heldItem));
if (customItem instanceof CustomSword customSword) {
CustomSet customSet = customSword.getSet();
customSet.onDamage(event);
}
}
}
CustomSet customSet = getSet(player);
if (customSet == null) return;
customSet.onDamage(event);
}
@EventHandler
public void onEffect(EntityPotionEffectEvent event) {
if (!(event.getEntity() instanceof Player player)) return;
CustomSet customSet = getSet(player);
if (customSet == null) return;
customSet.onEffect(event);
}
@EventHandler
public void onPlayerHeal(EntityRegainHealthEvent event) {
if (!(event.getEntity() instanceof Player player)) return;
if (getItemId(player.getInventory().getHelmet()).equals("Crown")) {
Crown.getInstance().onHealthChange(player);
}
}
@EventHandler
public void onDeath(EntityDeathEvent event) {
if (event.getEntity() instanceof Mob mob) {
if (event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:lightning_bolt") || event.getDamageSource().getDamageType().getKey().toString().equals("minecraft:on_fire")) {
Entity e = event.getEntity();
((ExperienceOrb) e.getLocation().getWorld().spawn(e.getLocation(), ExperienceOrb.class)).setExperience(10);
}
}
}
private static boolean isCustomItem(ItemStack itemStack) {
if(itemStack == null){
return false;
}
return (itemStack.hasItemMeta() && itemStack.getItemMeta().getPersistentDataContainer().has(Fantasysmp.customItemKey, PersistentDataType.STRING));
}
private static String getItemId(ItemStack itemStack) {
if(itemStack == null || !itemStack.hasItemMeta()){
return "";
}
return itemStack.getItemMeta().getPersistentDataContainer().get(Fantasysmp.customItemKey, PersistentDataType.STRING);
}
public static CustomSet getSet(Player player) {
ItemStack helmet = player.getInventory().getHelmet();
ItemStack chestplate = player.getInventory().getChestplate();
ItemStack leggings = player.getInventory().getLeggings();
ItemStack boots = player.getInventory().getBoots();
if (isCustomItem(helmet) && isCustomItem(chestplate) && isCustomItem(leggings) && isCustomItem(boots)) {
CustomItem customHelmet = Fantasysmp.customItemMap.get(getItemId(helmet));
CustomItem customChestplate = Fantasysmp.customItemMap.get(getItemId(chestplate));
CustomItem customLeggings = Fantasysmp.customItemMap.get(getItemId(leggings));
CustomItem customBoots = Fantasysmp.customItemMap.get(getItemId(boots));
if ((customHelmet instanceof CustomHelmet custHelmet) && (customChestplate instanceof CustomChestplate custChestplate) && (customLeggings instanceof CustomLeggings custLeggings) && (customBoots instanceof CustomBoots custBoots)) {
CustomSet customSet = custHelmet.getSet();
if (getItemId(helmet).equals("Crown")) {
customSet = custChestplate.getSet();
}
if(customSet.equals(custChestplate.getSet()) && customSet.equals(custLeggings.getSet()) && customSet.equals(custBoots.getSet())) {
return customSet;
}
}
}
return null;
}
}
@@ -0,0 +1,90 @@
package dev.zxq5.fantasysmp.items.presets;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.components.EquippableComponent;
import java.util.List;
import java.util.Map;
import java.util.UUID;
public class CustomLeggings extends CustomItem {
public CustomSet customSet;
public CustomLeggings(CustomSet customSet, String id) {
super(id);
this.customSet = customSet;
}
@Override
public String getName() {
return customSet.leggingsName;
}
@Override
public Material getMaterial() {
return customSet.leggingsMaterial;
}
@Override
public List<String> getLore() {
return customSet.leggingsLore;
}
public CustomSet getSet() {
return customSet;
}
@Override
public int getCustomModel() {
return customSet.leggingsModel;
}
@Override
public Map<Enchantment, Integer> getEnchants() {
return customSet.leggingsEnchants;
}
public ItemMeta setStats(ItemMeta itemMeta) {
itemMeta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
UUID.randomUUID(),
"armour",
customSet.leggingsArmour,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
itemMeta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
UUID.randomUUID(),
"armour_toughness",
customSet.leggingsToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
if (customSet.leggingsResistance != 0) {
itemMeta.addAttributeModifier(Attribute.KNOCKBACK_RESISTANCE, new AttributeModifier(
UUID.randomUUID(),
"knockback_resistance",
customSet.leggingsResistance,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
));
}
if(customSet.equipmentModel != null) {
EquippableComponent equippable = itemMeta.getEquippable();
equippable.setModel(NamespacedKey.fromString("fantasysmp:" + customSet.equipmentModel));
equippable.setSlot(EquipmentSlot.LEGS);
itemMeta.setEquippable(equippable);
}
return itemMeta;
}
}
@@ -0,0 +1,241 @@
package dev.zxq5.fantasysmp.items.presets;
import dev.zxq5.fantasysmp.Fantasysmp;
import dev.zxq5.fantasysmp.items.Items;
import org.bukkit.Material;
import org.bukkit.command.CommandExecutor;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityPotionEffectEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public abstract class CustomSet implements CommandExecutor {
protected double swordAttackDamage;
protected double swordAttackSpeed;
protected String equipmentModel;
protected double helmetArmour;
protected double helmetToughness;
protected double helmetResistance;
protected double chestplateArmour;
protected double chestplateToughness;
protected double chestplateResistance;
protected double leggingsArmour;
protected double leggingsToughness;
protected double leggingsResistance;
protected double bootsArmour;
protected double bootsToughness;
protected double bootsResistance;
protected String swordId;
protected String swordName;
protected Material swordMaterial;
protected List<String> swordLore;
protected int swordModel;
protected String helmetId;
protected String helmetName;
protected Material helmetMaterial;
protected List<String> helmetLore;
protected int helmetModel;
protected String chestplateId;
protected String chestplateName;
protected Material chestplateMaterial;
protected List<String> chestplateLore;
protected int chestplateModel;
protected String leggingsId;
protected String leggingsName;
protected Material leggingsMaterial;
protected List<String> leggingsLore;
protected int leggingsModel;
protected String bootsId;
protected String bootsName;
protected Material bootsMaterial;
protected List<String> bootsLore;
protected int bootsModel;
protected Map<Enchantment, Integer> swordEnchants = new HashMap<>();
protected Map<Enchantment, Integer> helmetEnchants = new HashMap<>();
protected Map<Enchantment, Integer> chestplateEnchants = new HashMap<>();
protected Map<Enchantment, Integer> leggingsEnchants = new HashMap<>();
protected Map<Enchantment, Integer> bootsEnchants = new HashMap<>();
public boolean onCommand(org.bukkit.command.CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
Player player = (Player) sender;
if(swordId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(swordId).getItem());
if(helmetId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(helmetId).getItem());
if(chestplateId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(chestplateId).getItem());
if(leggingsId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(leggingsId).getItem());
if(bootsId != null) player.getInventory().addItem(Fantasysmp.customItemMap.get(bootsId).getItem());
return true;
}
public abstract void registerRecipes();
public abstract void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event);
public abstract void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event);
public abstract void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event);
public abstract void onArmourChange(Player player, ItemStack item, boolean active);
public abstract void onDamage(EntityDamageEvent event);
public abstract void onEffect(EntityPotionEffectEvent event);
public CustomSet(int tier) {
switch (tier) {
case 2:
tier2();
break;
case 3:
tier3();
break;
case 4:
tier4();
break;
case 5:
tier5();
break;
case 6:
tier6();
break;
default:
tier1();
break;
}
}
public void tier1() {}
public void tier2() {}
public void tier3() {
swordAttackDamage = 6;
swordAttackSpeed = 1.6f;
helmetArmour = 2;
helmetToughness = 0;
chestplateArmour = 6;
chestplateToughness = 0;
leggingsArmour = 5;
leggingsToughness = 0;
bootsArmour = 2;
bootsToughness = 0;
swordMaterial = Material.IRON_SWORD;
helmetMaterial = Material.IRON_HELMET;
chestplateMaterial = Material.IRON_CHESTPLATE;
leggingsMaterial = Material.IRON_LEGGINGS;
bootsMaterial = Material.IRON_BOOTS;
}
public void tier4() {
swordAttackDamage = 8;
swordAttackSpeed = 1.6;
helmetArmour = 3;
helmetToughness = 2;
chestplateArmour = 8;
chestplateToughness = 2;
leggingsArmour = 6;
leggingsToughness = 2;
bootsArmour = 3;
bootsToughness = 2;
swordMaterial = Material.DIAMOND_SWORD;
helmetMaterial = Material.DIAMOND_HELMET;
chestplateMaterial = Material.DIAMOND_CHESTPLATE;
leggingsMaterial = Material.DIAMOND_LEGGINGS;
bootsMaterial = Material.DIAMOND_BOOTS;
}
public void tier5() {
swordAttackDamage = 8;
swordAttackSpeed = 1.6f;
helmetArmour = 3;
helmetToughness = 3;
helmetResistance = 0.1;
chestplateArmour = 8;
chestplateToughness = 3;
chestplateResistance = 0.1;
leggingsArmour = 6;
leggingsToughness = 3;
leggingsResistance = 0.1;
bootsArmour = 3;
bootsToughness = 3;
bootsResistance = 0.1;
swordMaterial = Material.NETHERITE_SWORD;
helmetMaterial = Material.NETHERITE_HELMET;
chestplateMaterial = Material.NETHERITE_CHESTPLATE;
leggingsMaterial = Material.NETHERITE_LEGGINGS;
bootsMaterial = Material.NETHERITE_BOOTS;
}
public void tier6() {
swordAttackDamage = 10;
swordAttackSpeed = 1.6f;
helmetArmour = 3;
helmetToughness = 5;
helmetResistance = 0.1;
chestplateArmour = 8;
chestplateToughness = 5;
chestplateResistance = 0.1;
leggingsArmour = 6;
leggingsToughness = 5;
leggingsResistance = 0.1;
bootsArmour = 3;
bootsToughness = 5;
bootsResistance = 0.1;
swordMaterial = Material.NETHERITE_SWORD;
helmetMaterial = Material.NETHERITE_HELMET;
chestplateMaterial = Material.NETHERITE_CHESTPLATE;
leggingsMaterial = Material.NETHERITE_LEGGINGS;
bootsMaterial = Material.NETHERITE_BOOTS;
}
public List<String> getSwordStats () {
List<String> swordStats = new ArrayList<>();
swordStats.add("\n");
swordStats.add("&7When in Main Hand:");
swordStats.add(String.format("&2 %.1f Attack Damage", swordAttackDamage));
swordStats.add(String.format("&2 %.1f Attack Speed", swordAttackSpeed));
return swordStats;
}
public void registerHandler() {
Items.registerHandler(getClass().getSimpleName().toLowerCase(), this);
}
}
@@ -0,0 +1,87 @@
package dev.zxq5.fantasysmp.items.presets;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.List;
import java.util.Map;
public class CustomSword extends CustomItem {
public CustomSet customSet;
public CustomSword(CustomSet customSet, String id) {
super(id);
this.customSet = customSet;
}
@Override
public String getName() {
return customSet.swordName;
}
@Override
public Material getMaterial() {
return customSet.swordMaterial;
}
@Override
public List<String> getLore() {
return customSet.swordLore;
}
public CustomSet getSet() {
return customSet;
}
@Override
public int getCustomModel() {
return customSet.swordModel;
}
@Override
public Map<Enchantment, Integer> getEnchants() {
return customSet.swordEnchants;
}
public void handleLeftClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
customSet.handleLeftClick(player, itemStack, event);
}
public void handleRightClick(Player player, ItemStack itemStack, PlayerInteractEvent event) {
customSet.handleRightClick(player, itemStack, event);
}
public void onHit(Player player, ItemStack itemStack, EntityDamageByEntityEvent event) {
customSet.onHit(player,itemStack, event);
}
public ItemMeta setStats(ItemMeta itemMeta) {
itemMeta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_damage"),
customSet.swordAttackDamage - 1,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
itemMeta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier(
NamespacedKey.minecraft("generic.attack_speed"),
customSet.swordAttackSpeed - 4,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
itemMeta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES);
return itemMeta;
}
}
@@ -1,16 +1,20 @@
package dev.zxq5.fantasysmp.warps; package dev.zxq5.fantasysmp.warps;
import static org.bukkit.Bukkit.getServer;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import dev.zxq5.fantasysmp.groups.Team; import dev.zxq5.fantasysmp.groups.Team;
import java.io.*;
import java.util.UUID;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.io.*;
import java.util.UUID;
import static org.bukkit.Bukkit.broadcastMessage;
import static org.bukkit.Bukkit.getServer;
public class Warp { public class Warp {
private static final String FILENAME = "warps.json"; private static final String FILENAME = "warps.json";
@@ -26,12 +30,7 @@ public class Warp {
private int z; private int z;
public boolean execute(Player player) { public boolean execute(Player player) {
Location location = new Location( Location location = new Location(getServer().getWorld(world), this.x, this.y, this.z);
getServer().getWorld(world),
this.x,
this.y,
this.z
);
location.setPitch(player.getLocation().getPitch()); location.setPitch(player.getLocation().getPitch());
location.setYaw(player.getLocation().getYaw()); location.setYaw(player.getLocation().getYaw());
player.teleport(location); player.teleport(location);
@@ -39,10 +38,7 @@ public class Warp {
} }
public static void loadWarps() throws Exception { public static void loadWarps() throws Exception {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
if (!file.exists()) { if (!file.exists()) {
@@ -52,20 +48,17 @@ public class Warp {
BufferedReader reader; BufferedReader reader;
reader = new BufferedReader(new FileReader(file)); reader = new BufferedReader(new FileReader(file));
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
warps = gson.fromJson(reader, Warp[].class); warps = gson.fromJson(reader, Warp[].class);
reader.close(); reader.close();
} }
public static void saveWarps() throws Exception { public static void saveWarps() throws Exception {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
String json = gson.toJson(warps); String json = gson.toJson(warps);
Writer writer = new FileWriter(file); Writer writer = new FileWriter(file);
writer.write(json); writer.write(json);
@@ -73,16 +66,13 @@ public class Warp {
} }
public static void createWarpFile() { public static void createWarpFile() {
File dataFolder = getServer() File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
.getPluginManager()
.getPlugin("Fantasysmp")
.getDataFolder();
File file = new File(dataFolder, FILENAME); File file = new File(dataFolder, FILENAME);
if (!file.exists()) { if (!file.exists()) {
try { try {
Warp[] w = new Warp[0]; Warp[] w = new Warp[0];
Gson gson = new GsonBuilder().setPrettyPrinting().create(); Gson gson = new Gson();
String json = gson.toJson(w); String json = gson.toJson(w);
Writer writer = new FileWriter(file); Writer writer = new FileWriter(file);
writer.write(json); writer.write(json);
@@ -118,13 +108,10 @@ public class Warp {
return null; return null;
} }
public static Warp getTeamWarp(Team team, Player player, String name) { public static Warp getTeamWarp(Team team, String name) {
for (Warp warp : warps) { for (Warp warp : warps) {
if (warp.type.equals(WarpType.TEAM)) { if (warp.type.equals(WarpType.TEAM)) {
if ( if (warp.name.equals(name) && warp.setby.equals(team.getUUID())) {
warp.name.equals(name) &&
warp.setby.equals(player.getUniqueId().toString())
) {
return warp; return warp;
} }
} }
@@ -136,10 +123,7 @@ public class Warp {
String message = ChatColor.WHITE + "All Warps: [\n" + ChatColor.GREEN; String message = ChatColor.WHITE + "All Warps: [\n" + ChatColor.GREEN;
for (Warp warp : warps) { for (Warp warp : warps) {
if ( if (warp.type.equals(WarpType.PUBLIC) || warp.setby.equals(player.toString())) {
warp.type.equals(WarpType.PUBLIC) ||
warp.setby.equals(player.toString())
) {
message += " " + warp.name + "\n"; message += " " + warp.name + "\n";
} }
} }
@@ -191,3 +175,16 @@ public class Warp {
} }
} }
} }