This commit is contained in:
FantasyPvP
2025-01-23 23:44:30 +00:00
parent b8f9b7749b
commit f671a07a4d
8 changed files with 257 additions and 69 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>dev.zxq5</groupId>
<artifactId>fantasysmp</artifactId>
<version>1.0-SNAPSHOT</version>
<version>1.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>fantasysmp</name>
@@ -1,8 +1,10 @@
package dev.zxq5.fantasysmp;
import dev.zxq5.fantasysmp.events.StevenKillCheck;
import dev.zxq5.fantasysmp.items.GenericGearSet;
import dev.zxq5.fantasysmp.items.Items;
import dev.zxq5.fantasysmp.items.Witherite;
import dev.zxq5.fantasysmp.warps.Warp;
import dev.zxq5.fantasysmp.warps.Warper;
import org.bukkit.plugin.java.JavaPlugin;
@@ -15,9 +17,25 @@ public final class Fantasysmp extends JavaPlugin {
getCommand("items").setExecutor(items);
// Plugin startup logic
try {
Warp.loadWarps();
} catch (Exception e) {
e.printStackTrace();
}
getCommand("home").setExecutor(new Warper());
getCommand("sethome").setExecutor(new Warper());
getCommand("setwarp").setExecutor(new Warper());
getCommand("warp").setExecutor(new Warper());
getCommand("reloadwarps").setExecutor(new Warper());
getServer().broadcastMessage("registered commands + \n /home \n /sethome \n /warp \n /setwarp");
GenericGearSet witherite = new Witherite();
witherite.registerRecipes();
getServer().getPluginManager().registerEvents(new StevenKillCheck(), this);
}
@@ -6,9 +6,13 @@ import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.inventory.EquipmentSlotGroup;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.meta.ItemMeta;
public abstract class GenericGearSet {
import java.util.ArrayList;
import java.util.List;
public abstract class GenericGearSet implements HasRecipes {
protected int swordAttackDamage = 0;
protected float swordAttackSpeed = 0;
protected int swordDurability = 0;
@@ -39,6 +43,15 @@ public abstract class GenericGearSet {
protected String bootsName = "leather boots";
protected String bootsLore = "";
protected ItemStack helmetMaterial = new ItemStack(Material.LEATHER_HELMET);
protected ItemStack chestplateMaterial = new ItemStack(Material.LEATHER_CHESTPLATE);
protected ItemStack leggingsMaterial = new ItemStack(Material.LEATHER_LEGGINGS);
protected ItemStack bootsMaterial = new ItemStack(Material.LEATHER_BOOTS);
protected ItemStack swordMaterial = new ItemStack(Material.WOODEN_SWORD);
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 setTier1() {
swordAttackDamage = 4;
swordAttackSpeed = 1.6f;
@@ -47,6 +60,12 @@ public abstract class GenericGearSet {
}
public void setTier3() {
helmetMaterial = new ItemStack(Material.IRON_HELMET);
chestplateMaterial = new ItemStack(Material.IRON_CHESTPLATE);
leggingsMaterial = new ItemStack(Material.IRON_LEGGINGS);
ItemStack bootsMaterial = new ItemStack(Material.IRON_BOOTS);
swordMaterial = new ItemStack(Material.IRON_SWORD);
swordAttackDamage = 6;
swordAttackSpeed = 1.6f;
helmetArmour = 2;
@@ -60,6 +79,12 @@ public abstract class GenericGearSet {
}
public void setTier4() {
helmetMaterial = new ItemStack(Material.DIAMOND_HELMET);
chestplateMaterial = new ItemStack(Material.DIAMOND_CHESTPLATE);
leggingsMaterial = new ItemStack(Material.DIAMOND_LEGGINGS);
bootsMaterial = new ItemStack(Material.DIAMOND_BOOTS);
swordMaterial = new ItemStack(Material.DIAMOND_SWORD);
swordAttackDamage = 7;
swordAttackSpeed = 1.6f;
helmetArmour = 3;
@@ -73,6 +98,12 @@ public abstract class GenericGearSet {
}
public void setTier5() {
helmetMaterial = new ItemStack(Material.NETHERITE_HELMET);
chestplateMaterial = new ItemStack(Material.NETHERITE_CHESTPLATE);
leggingsMaterial = new ItemStack(Material.NETHERITE_LEGGINGS);
bootsMaterial = new ItemStack(Material.NETHERITE_BOOTS);
swordMaterial = new ItemStack(Material.NETHERITE_SWORD);
swordAttackDamage = 8;
swordAttackSpeed = 1.6f;
helmetArmour = 3;
@@ -86,6 +117,12 @@ public abstract class GenericGearSet {
}
public void setTier6() {
helmetMaterial = new ItemStack(Material.NETHERITE_HELMET);
chestplateMaterial = new ItemStack(Material.NETHERITE_CHESTPLATE);
leggingsMaterial = new ItemStack(Material.NETHERITE_LEGGINGS);
bootsMaterial = new ItemStack(Material.NETHERITE_BOOTS);
swordMaterial = new ItemStack(Material.NETHERITE_SWORD);
swordAttackDamage = 10;
swordAttackSpeed = 1.6f;
helmetArmour = 3;
@@ -102,17 +139,21 @@ public abstract class GenericGearSet {
public static void init() {}
public ItemStack getSword() {
ItemStack item = new ItemStack(Material.WOODEN_SWORD, 1);
ItemStack item = swordMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.swordName);
meta.setLore(new ArrayList<>(List.of(this.swordLore)));
meta.addAttributeModifier(Attribute.ATTACK_DAMAGE, new AttributeModifier(
NamespacedKey.minecraft("generic.attackDamage"),
NamespacedKey.minecraft("generic.attack_damage"),
swordAttackDamage,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
));
meta.addAttributeModifier(Attribute.ATTACK_SPEED, new AttributeModifier(
NamespacedKey.minecraft("generic.attackSpeed"),
NamespacedKey.minecraft("generic.attack_speed"),
swordAttackSpeed,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HAND
@@ -123,8 +164,12 @@ public abstract class GenericGearSet {
}
public ItemStack getHelmet() {
ItemStack item = new ItemStack(Material.LEATHER_HELMET, 1);
ItemStack item = helmetMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.helmetName);
meta.setLore(new ArrayList<>(List.of(this.helmetLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
helmetArmour,
@@ -132,7 +177,7 @@ public abstract class GenericGearSet {
EquipmentSlotGroup.HEAD
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armorToughness"),
NamespacedKey.minecraft("generic.armor_toughness"),
helmetArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.HEAD
@@ -142,8 +187,12 @@ public abstract class GenericGearSet {
}
public ItemStack getChestplate() {
ItemStack item = new ItemStack(Material.LEATHER_CHESTPLATE, 1);
ItemStack item = chestplateMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.chestplateName);
meta.setLore(new ArrayList<>(List.of(this.chestplateLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
chestplateArmour,
@@ -151,7 +200,7 @@ public abstract class GenericGearSet {
EquipmentSlotGroup.CHEST
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armorToughness"),
NamespacedKey.minecraft("generic.armor_toughness"),
chestplateArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.CHEST
@@ -161,8 +210,12 @@ public abstract class GenericGearSet {
}
public ItemStack getLeggings() {
ItemStack item = new ItemStack(Material.LEATHER_LEGGINGS, 1);
ItemStack item = leggingsMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.leggingsName);
meta.setLore(new ArrayList<>(List.of(this.leggingsLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
leggingsArmour,
@@ -170,7 +223,7 @@ public abstract class GenericGearSet {
EquipmentSlotGroup.LEGS
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armorToughness"),
NamespacedKey.minecraft("generic.armor_toughness"),
leggingsArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.LEGS
@@ -180,8 +233,12 @@ public abstract class GenericGearSet {
}
public ItemStack getBoots() {
ItemStack item = new ItemStack(Material.LEATHER_BOOTS, 1);
ItemStack item = bootsMaterial;
ItemMeta meta = item.getItemMeta();
meta.setDisplayName(this.bootsName);
meta.setLore(new ArrayList<>(List.of(this.bootsLore)));
meta.addAttributeModifier(Attribute.ARMOR, new AttributeModifier(
NamespacedKey.minecraft("generic.armor"),
bootsArmour,
@@ -189,7 +246,7 @@ public abstract class GenericGearSet {
EquipmentSlotGroup.FEET
));
meta.addAttributeModifier(Attribute.ARMOR_TOUGHNESS, new AttributeModifier(
NamespacedKey.minecraft("generic.armorToughness"),
NamespacedKey.minecraft("generic.armor_toughness"),
bootsArmourToughness,
AttributeModifier.Operation.ADD_NUMBER,
EquipmentSlotGroup.FEET
@@ -0,0 +1,5 @@
package dev.zxq5.fantasysmp.items;
public interface HasRecipes {
void registerRecipes();
}
@@ -1,12 +1,19 @@
package dev.zxq5.fantasysmp.items;
import org.bukkit.Material;
import org.bukkit.NamespacedKey;
import org.bukkit.command.CommandExecutor;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.RecipeChoice;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.potion.PotionEffect;
import static org.bukkit.Bukkit.getServer;
public class Witherite extends GenericGearSet implements Listener, CommandExecutor {
@Override
@@ -26,6 +33,39 @@ public class Witherite extends GenericGearSet implements Listener, CommandExecut
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, WITHER_SKULL, swordChoice);
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, WITHER_SKULL, helmetChoice);
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, WITHER_SKULL, chestplateChoice);
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, WITHER_SKULL, leggingsChoice);
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, WITHER_SKULL, bootsChoice);
getServer().addRecipe(bootsRecipe);
}
@EventHandler
public void onEntityDamageByEntity(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
@@ -2,16 +2,22 @@ package dev.zxq5.fantasysmp.warps;
import com.google.gson.Gson;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.command.CommandExecutor;
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 {
private static Warp[] warps;
private String name;
private String setby;
private String world;
private WarpType type;
@@ -20,33 +26,31 @@ public class Warp {
private int z;
public boolean execute(Player player) {
Location location = new Location(player.getWorld(), this.x, this.y, this.z);
Location location = new Location(getServer().getWorld(world), this.x, this.y, this.z);
location.setPitch(player.getLocation().getPitch());
location.setYaw(player.getLocation().getYaw());
player.teleport(location);
return true;
}
public static Warp[] getWarps() throws Exception {
public static void loadWarps() throws Exception {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
if (!file.exists()) {
init();
createWarpFile();
}
BufferedReader reader;
reader = new BufferedReader(new FileReader(file));
Gson gson = new Gson();
Warp[] warps = gson.fromJson(reader, Warp[].class);
warps = gson.fromJson(reader, Warp[].class);
reader.close();
return warps;
}
public static void saveWarps(Warp[] warps) throws Exception {
public static void saveWarps() throws Exception {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
@@ -57,30 +61,7 @@ public class Warp {
writer.close();
}
public static Warp getHome(UUID uuid) {
String uuidString = uuid.toString();
Warp[] warps;
try {
warps = getWarps();
} catch (Exception e) {
e.printStackTrace();
return null;
}
for (Warp warp : warps) {
if (warp.setby.equals(uuidString)) {
if (warp.type.equals(WarpType.HOME)) {
return warp;
}
return warp;
}
}
return null;
}
public static void init() {
public static void createWarpFile() {
File dataFolder = getServer().getPluginManager().getPlugin("Fantasysmp").getDataFolder();
File file = new File(dataFolder, "warps.json");
@@ -98,52 +79,73 @@ public class Warp {
}
}
public static void setHome(Player player) {
String uuid = player.getUniqueId().toString();
public static Warp getHome(UUID uuid) {
String uuidString = uuid.toString();
Warp[] warps;
try {
warps = getWarps();
} catch (Exception e) {
e.printStackTrace();
return;
for (Warp warp : warps) {
if (warp.setby.equals(uuidString)) {
if (warp.type.equals(WarpType.HOME)) {
return warp;
}
}
}
int x, y, z;
x = (int) player.getLocation().getX();
y = (int) player.getLocation().getY();
z = (int) player.getLocation().getZ();
return null;
}
public static Warp getWarp(String name) {
for (Warp warp : warps) {
if (warp.type.equals(WarpType.PUBLIC)) {
if (warp.name.equals(name)) {
return warp;
}
}
}
return null;
}
public static void setHome(Player player) {
setWarp("Home (" + player.getName() + ")", player, WarpType.HOME);
}
public static void setWarp(String name, Player player, WarpType type) {
String uuid = player.getUniqueId().toString();
Location location = player.getLocation();
int x = (int) location.getX();
int y = (int) location.getY();
int z = (int) location.getZ();
Warp warp = null;
for (Warp w : warps) {
if (w.setby.equals(uuid)) {
if (w.name.equals(name)) {
warp = w;
break;
}
}
if (warp == null) {
Warp[] tempWarps = new Warp[warps.length + 1];
System.arraycopy(warps, 0, tempWarps, 0, tempWarps.length - 1);
warps = tempWarps;
warp = new Warp();
warps[warps.length - 1] = warp;
}
warp.type = WarpType.HOME;
warp.type = type;
warp.setby = uuid;
warp.world = player.getWorld().getName();
warp.x = x;
warp.y = y;
warp.z = z;
warp.name = name;
warps = new Warp[warps.length + 1];
System.arraycopy(warps, 0, warps, 0, warps.length - 1);
warps[warps.length - 1] = warp;
try {
saveWarps(warps);
saveWarps();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
}
@@ -152,4 +154,17 @@ enum WarpType {
PUBLIC,
DEATH,
TEAM,
}
}
@@ -10,6 +10,16 @@ public class Warper implements CommandExecutor {
return false;
}
if (command.getName().equals("reloadwarps")) {
// reply
try {
Warp.loadWarps();
} catch (Exception e) {
player.sendMessage("Failed to reload warps. please contact an admin.");
e.printStackTrace();
}
}
if (command.getName().equals("home")) {
if (args.length != 0) {
player.sendMessage("Usage: /home");
@@ -32,6 +42,32 @@ public class Warper implements CommandExecutor {
Warp.setHome(player);
}
if (command.getName().equals("warp")) {
if (args.length != 1) {
player.sendMessage("Usage: /warp <name>");
return true;
}
Warp warp = Warp.getWarp(args[0]);
if (warp != null) {
warp.execute(player);
}
}
if (command.getName().equals("setwarp")) {
if (!(player.hasPermission("fantasysmp.manage_warps"))) {
player.sendMessage("You do not have permission to use this command.");
return false;
}
if (args.length != 1) {
player.sendMessage("Usage: /setwarp <name>");
return true;
}
Warp.setWarp(args[0], player, WarpType.PUBLIC);
}
return true;
}
}
+21 -4
View File
@@ -1,5 +1,5 @@
name: fantasysmp
version: '1.0-SNAPSHOT'
version: '1.1-SNAPSHOT'
main: dev.zxq5.fantasysmp.Fantasysmp
api-version: '1.21'
authors: [ zxq5 ]
@@ -10,6 +10,7 @@ commands:
items:
description: create custom items from plugin
usage: /items <set name>
permission: fantasysmp.admin
home:
description: teleport to your home
@@ -21,6 +22,22 @@ commands:
usage: /sethome
permission: fantasysmp.home
setwarp:
description: set a warp
usage: /setwarp <warp name>
permission: fantasysmp.manage_warps
reloadwarps:
description: reload warps
usage: /reloadwarps
permission: fantasysmp.admin
warp:
description: teleport to a warp
usage: /warp <warp name>
permission: fantasysmp.warps
permissions:
fantasysmp.admin:
description: Manage plugin
@@ -33,12 +50,12 @@ permissions:
default: false
fantasysmp.warps:
description: create custom warps from plugin
default: false
description: teleport to custom warps
default: true
fantasysmp.manage_warps:
description: commands for managing warps
default: false
default: true
fantasysmp.home:
description: commands for teleporting home