tried to patch some bugs

This commit is contained in:
unurled 2024-07-03 15:42:21 +02:00
parent 92fd2242b3
commit ce0ffdbdfc
9 changed files with 128 additions and 89 deletions

View file

@ -13,9 +13,9 @@ group = "me.unurled.sacredrealms"
version = "0.1.0" version = "0.1.0"
description = "The main SR plugin." description = "The main SR plugin."
val mcVersion = "1.20.6-R0.1-SNAPSHOT" val mcVersion = "1.21-R0.1-SNAPSHOT"
val redisVersion = "5.2.0-beta2" val redisVersion = "5.2.0-beta2"
val invuiVersion = "1.30" val invuiVersion = "1.32"
val javaVersion = 21 val javaVersion = 21
@ -29,7 +29,8 @@ dependencies {
implementation("redis.clients:jedis:${redisVersion}") implementation("redis.clients:jedis:${redisVersion}")
implementation("xyz.xenondevs.invui:invui:${invuiVersion}") implementation("xyz.xenondevs.invui:invui-core:${invuiVersion}")
implementation("xyz.xenondevs.invui:inventory-access-r20:${invuiVersion}:remapped-mojang")
} }
java { java {

View file

@ -1,6 +1,7 @@
#Mon Apr 29 21:41:32 CEST 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View file

@ -6,6 +6,8 @@ import static me.unurled.sacredrealms.sr.utils.Component.textComp;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
import me.unurled.sacredrealms.sr.components.entity.EntityManager; import me.unurled.sacredrealms.sr.components.entity.EntityManager;
import me.unurled.sacredrealms.sr.components.entity.SREntityType; import me.unurled.sacredrealms.sr.components.entity.SREntityType;
import me.unurled.sacredrealms.sr.gui.entitytype.EntityTypeGUI; import me.unurled.sacredrealms.sr.gui.entitytype.EntityTypeGUI;
@ -21,37 +23,37 @@ import xyz.xenondevs.invui.window.Window;
public class EntityTypeCommand implements TabExecutor { public class EntityTypeCommand implements TabExecutor {
private static boolean list(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { private static void list(@NotNull CommandSender sender, @NotNull String @NotNull [] args) {
if (!(sender instanceof Player p)) { if (!(sender instanceof Player p)) {
sender.sendMessage(comp(NOT_PLAYER)); sender.sendMessage(comp(NOT_PLAYER));
return true; return;
} }
EntityManager em = Manager.getInstance(EntityManager.class); EntityManager em = Manager.getInstance(EntityManager.class);
if (em.getTypes().isEmpty()) { if (em.getTypes().isEmpty()) {
sender.sendMessage(textComp("There are no entity types to display.")); sender.sendMessage(textComp("There are no entity types to display."));
return false; return;
} }
Window window = Window window =
Window.single().setViewer(p).setTitle(args[1]).setGui(EntityTypeGUI.listGui()).build(); Window.single().setViewer(p).setTitle(args[1]).setGui(EntityTypeGUI.listGui()).build();
window.open(); window.open();
return false; return;
} }
private static boolean edit(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { private static void edit(@NotNull CommandSender sender, @NotNull String @NotNull [] args) {
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage("Usage: /entitytype edit <ID>"); sender.sendMessage("Usage: /entitytype edit <ID>");
return true; return;
} }
if (!(sender instanceof Player p)) { if (!(sender instanceof Player p)) {
sender.sendMessage(comp(NOT_PLAYER)); sender.sendMessage(comp(NOT_PLAYER));
return true; return;
} }
if (args.length < 3) { if (args.length < 3) {
EntityManager em = Manager.getInstance(EntityManager.class); EntityManager em = Manager.getInstance(EntityManager.class);
if (!em.getTypes().stream().map(SREntityType::getId).toList().contains(args[1])) { if (!em.getTypes().stream().map(SREntityType::getId).toList().contains(args[1])) {
sender.sendMessage("Invalid entity type."); sender.sendMessage("Invalid entity type.");
return true; return;
} }
SREntityType type = em.getType(args[1]); SREntityType type = em.getType(args[1]);
Window window = Window window =
@ -61,47 +63,64 @@ public class EntityTypeCommand implements TabExecutor {
.setGui(EntityTypeGUI.createGui(type)) .setGui(EntityTypeGUI.createGui(type))
.build(); .build();
window.open(); window.open();
return true; return;
} }
if (args.length < 4) { if (args.length < 4) {
sender.sendMessage("Usage: /entitytype edit <ID> <type|behavior|loot|item|stats|name|level>"); sender.sendMessage("Usage: /entitytype edit <ID> <type|behavior|loot|item|stats|name|level>");
return true; return;
} }
if (args[2].equalsIgnoreCase("type")) { if (args[2].equalsIgnoreCase("type")) {
if (args.length < 5) { if (args.length < 5) {
sender.sendMessage("Usage: /entitytype edit <ID> type <type>"); sender.sendMessage("Usage: /entitytype edit <ID> type <type>");
return true; return;
} }
try { try {
EntityType type = EntityType.valueOf(args[4]); EntityType type = EntityType.valueOf(args[4]);
EntityManager em = Manager.getInstance(EntityManager.class); EntityManager em = Manager.getInstance(EntityManager.class);
if (setType(sender, args, em, type)) return true; if (setType(sender, args, em, type)) return;
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
sender.sendMessage("Invalid entity type."); sender.sendMessage("Invalid entity type.");
return true; return;
} }
} }
return false;
} }
private static boolean delete(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { private static void delete(@NotNull CommandSender sender, @NotNull String @NotNull [] args) {
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage("Usage: /entitytype delete <ID>"); sender.sendMessage("Usage: /entitytype delete <ID>");
return true; return;
} }
return false; EntityManager em = Manager.getInstance(EntityManager.class);
if (!em.getTypes().stream().map(SREntityType::getId).toList().contains(args[1])) {
sender.sendMessage("Invalid entity type.");
return;
}
// em.removeEntityType(em.getType(args[1]));
} }
private static boolean create(@NotNull CommandSender sender, @NotNull String @NotNull [] args) { private static void create(@NotNull CommandSender sender, @NotNull String @NotNull [] args) {
if (args.length < 2) { if (args.length < 2) {
sender.sendMessage("Usage: /entitytype create <ID>"); sender.sendMessage("Usage: /entitytype create <Name>");
return true; return;
} }
if (!(sender instanceof Player)) { EntityManager em = Manager.getInstance(EntityManager.class);
sender.sendMessage(comp(NOT_PLAYER)); if (em.getTypes().stream().map(SREntityType::getId).toList().contains(args[1])) {
return true; sender.sendMessage("An entity type with that ID already exists.");
return;
}
SREntityType type = new SREntityType(args[1], args[1].toUpperCase());
em.addEntityType(type);
sender.sendMessage(textComp("<green>Entity type created successfully."));
if (sender instanceof Player p) {
// opens gui
Window window =
Window.single()
.setViewer(p)
.setTitle(args[1])
.setGui(EntityTypeGUI.createGui(type))
.build();
window.open();
} }
return false;
} }
private static boolean setType( private static boolean setType(
@ -147,17 +166,21 @@ public class EntityTypeCommand implements TabExecutor {
switch (args[0].toLowerCase()) { switch (args[0].toLowerCase()) {
case "create" -> { case "create" -> {
if (create(sender, args)) return true; create(sender, args);
return true;
} }
case "delete" -> { case "delete" -> {
if (delete(sender, args)) return true; delete(sender, args);
return true;
} }
case "edit" -> { case "edit" -> {
if (edit(sender, args)) return true; edit(sender, args);
return true;
} }
case "list" -> { case "list" -> {
if (list(sender, args)) return true; list(sender, args);
return true;
} }
default -> sender.sendMessage("Usage: /entitytype <create|delete|edit|list>"); default -> sender.sendMessage("Usage: /entitytype <create|delete|edit|list>");
} }

View file

@ -35,7 +35,9 @@ public class ItemCommand implements TabExecutor {
public static final String RARITY = "rarity"; public static final String RARITY = "rarity";
public static final String REMOVE = "remove"; public static final String REMOVE = "remove";
public static final String USAGE = public static final String USAGE =
"Usage: /item modify <id> <name|material|enchantments|attributes|abilities|custommodeldata|rarity|type|description> [value]"; "Usage: /item modify <id>"
+ " <name|material|enchantments|attributes|abilities|custommodeldata|rarity|type|description>"
+ " [value]";
private static void modify( private static void modify(
@NotNull CommandSender sender, @NotNull String @NotNull [] args, Player p) { @NotNull CommandSender sender, @NotNull String @NotNull [] args, Player p) {
@ -391,31 +393,29 @@ public class ItemCommand implements TabExecutor {
@Nullable @Nullable
private static List<String> modifyCompletion(@NotNull String @NotNull [] args) { private static List<String> modifyCompletion(@NotNull String @NotNull [] args) {
if (args.length == 4 && (args[0].equalsIgnoreCase(MODIFY))) { if (args[2].equalsIgnoreCase(RARITY)) {
if (args[2].equalsIgnoreCase(RARITY)) { return Arrays.stream(Rarity.values()).map(Enum::name).toList();
return Arrays.stream(Rarity.values()).map(Enum::name).toList(); } else if (args[2].equalsIgnoreCase("type")) {
} else if (args[2].equalsIgnoreCase("type")) { return Arrays.stream(ItemType.values()).map(Enum::name).toList();
return Arrays.stream(ItemType.values()).map(Enum::name).toList(); } else if (args[2].equalsIgnoreCase(MATERIAL)) {
} else if (args[2].equalsIgnoreCase(MATERIAL)) { return Arrays.stream(Material.values())
return Arrays.stream(Material.values()) .map(
.map( name -> {
name -> { if (name.name().startsWith(args[3].toUpperCase())) return name.name();
if (name.name().startsWith(args[3].toUpperCase())) return name.name(); return null;
return null; })
}) .toList();
.toList(); } else if (args[2].equalsIgnoreCase(ENCHANTMENTS)) {
} else if (args[2].equalsIgnoreCase(ENCHANTMENTS)) { return List.of("add", REMOVE);
return List.of("add", REMOVE); } else if (args[2].equalsIgnoreCase(ATTRIBUTES)) {
} else if (args[2].equalsIgnoreCase(ATTRIBUTES)) { return List.of("add", REMOVE);
return List.of("add", REMOVE); } else if (args[2].equalsIgnoreCase(ABILITIES)) {
} else if (args[2].equalsIgnoreCase(ABILITIES)) { return List.of("add", REMOVE);
return List.of("add", REMOVE); } else if (args[2].equalsIgnoreCase(CUSTOMMODELDATA)) {
} else if (args[2].equalsIgnoreCase(CUSTOMMODELDATA)) { try {
try { Integer.parseInt(args[3]);
Integer.parseInt(args[3]); } catch (NumberFormatException e) {
} catch (NumberFormatException e) { return List.of("1");
return List.of("1");
}
} }
} }
return null; return null;
@ -539,7 +539,8 @@ public class ItemCommand implements TabExecutor {
List<String> completions = argsLengthThree(args); List<String> completions = argsLengthThree(args);
if (completions != null) return completions; if (completions != null) return completions;
completions = modifyCompletion(args); if (args.length == 4 && (args[0].equalsIgnoreCase(MODIFY)))
completions = modifyCompletion(args);
if (completions != null) return completions; if (completions != null) return completions;
completions = modify(args); completions = modify(args);

View file

@ -20,6 +20,32 @@ public class SpawnEntityCommand implements TabExecutor {
private static final String USAGE = private static final String USAGE =
"Usage: /spawnentity <entityType> [amount] [x] [y] [z] " + "[world]"; "Usage: /spawnentity <entityType> [amount] [x] [y] [z] " + "[world]";
private void spawnEntity(
CommandSender sender, String type, int amount, double x, double y, double z, World world) {
EntityManager em = Manager.getInstance(EntityManager.class);
if (em == null) {
sender.sendMessage("EntityManager is null.");
return;
}
SREntityType eType = em.getType(type);
if (type == null) {
sender.sendMessage("Invalid entity type.");
return;
}
em.spawnEntity(eType, amount, x, y, z, world);
}
private int getAmount(CommandSender sender, String[] args) {
if (args.length > 1 && (args.length < 5 || args.length > 6)) {
try {
return Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage("Invalid amount.");
}
}
return 1;
}
/** /**
* Executes the given command, returning its success. <br> * Executes the given command, returning its success. <br>
* If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be * If false is returned, then the "usage" plugin.yml entry for this command (if defined) will be
@ -105,15 +131,7 @@ public class SpawnEntityCommand implements TabExecutor {
world = player.getWorld(); world = player.getWorld();
} }
int amount = 1; int amount = getAmount(sender, args);
if (args.length > 1 && (args.length < 5 || args.length > 6)) {
try {
amount = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage("Invalid amount.");
return true;
}
}
if (world == null) { if (world == null) {
sender.sendMessage("Invalid world."); sender.sendMessage("Invalid world.");
@ -121,17 +139,6 @@ public class SpawnEntityCommand implements TabExecutor {
} }
// spawn entity // spawn entity
EntityManager em = Manager.getInstance(EntityManager.class);
if (em == null) {
sender.sendMessage("EntityManager is null.");
return true;
}
SREntityType type = em.getType(args[0]);
if (type == null) {
sender.sendMessage("Invalid entity type.");
return true;
}
em.spawnEntity(type, amount, x, y, z, world);
return true; return true;
} }

View file

@ -110,6 +110,8 @@ public class EntityManager extends Manager {
public void addEntityType(@NotNull SREntityType type) { public void addEntityType(@NotNull SREntityType type) {
types.add(type); types.add(type);
// save to db type
saveType(type);
} }
public List<SREntityType> getTypes() { public List<SREntityType> getTypes() {

View file

@ -1,12 +1,9 @@
package me.unurled.sacredrealms.sr.components.entity; package me.unurled.sacredrealms.sr.components.entity;
import com.google.gson.annotations.Expose; import com.google.gson.annotations.Expose;
import java.util.ArrayList; import java.util.*;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.unurled.sacredrealms.sr.components.attributes.Attribute; import me.unurled.sacredrealms.sr.components.attributes.Attribute;
import org.bukkit.Material;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
@ -147,7 +144,7 @@ public class SREntityType {
} }
public ItemStack getItem() { public ItemStack getItem() {
return item; return item == null ? new ItemStack(Material.BONE) : item;
} }
public void setItem(ItemStack item) { public void setItem(ItemStack item) {
@ -155,6 +152,12 @@ public class SREntityType {
} }
public List<ItemStack> getArmor() { public List<ItemStack> getArmor() {
if (armor.isEmpty()) {
armor.add(new ItemStack(Material.AIR));
armor.add(new ItemStack(Material.AIR));
armor.add(new ItemStack(Material.AIR));
armor.add(new ItemStack(Material.AIR));
}
return armor; return armor;
} }
@ -164,7 +167,7 @@ public class SREntityType {
} }
public ItemStack getHandItem() { public ItemStack getHandItem() {
return handItem; return handItem == null ? new ItemStack(Material.AIR) : handItem;
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")
@ -173,7 +176,7 @@ public class SREntityType {
} }
public ItemStack getSecondHandItem() { public ItemStack getSecondHandItem() {
return secondHandItem; return secondHandItem == null ? new ItemStack(Material.AIR) : secondHandItem;
} }
@SuppressWarnings("unused") @SuppressWarnings("unused")

View file

@ -26,6 +26,8 @@ public enum Rarity {
private final Double weight; private final Double weight;
private final TextColor color; private final TextColor color;
private static final Random random = new Random();
Rarity(String name, String id, Double weight, TextColor color) { Rarity(String name, String id, Double weight, TextColor color) {
this.name = name; this.name = name;
this.id = id; this.id = id;
@ -46,7 +48,6 @@ public enum Rarity {
@NotNull @NotNull
public static Rarity getRandomRarity(double luck) { public static Rarity getRandomRarity(double luck) {
// more weight equals less chance to get it // more weight equals less chance to get it
Random random = new Random();
double randomValue = random.nextDouble() * (1.0 / (luck == 0 ? 1 : luck)); double randomValue = random.nextDouble() * (1.0 / (luck == 0 ? 1 : luck));
double cumulativeProbability = 0.0; double cumulativeProbability = 0.0;

View file

@ -17,7 +17,7 @@ public class EntityItemDisplay extends AbstractItem {
private final String name; private final String name;
public EntityItemDisplay(SREntityType type) { public EntityItemDisplay(@NotNull SREntityType type) {
name = type.getItem().getType().name(); name = type.getItem().getType().name();
} }