Skip to content

Commit

Permalink
More work on /power and enchantment system
Browse files Browse the repository at this point in the history
  • Loading branch information
Dueris committed Jan 2, 2024
1 parent 1bf45aa commit cf06b5b
Show file tree
Hide file tree
Showing 16 changed files with 327 additions and 149 deletions.
40 changes: 16 additions & 24 deletions src/main/java/me/dueris/genesismc/GenesisMC.java
Original file line number Diff line number Diff line change
@@ -1,30 +1,24 @@
package me.dueris.genesismc;

import io.papermc.paper.event.player.PlayerFailMoveEvent;
import io.papermc.paper.threadedregions.scheduler.GlobalRegionScheduler;
import javassist.bytecode.Descriptor.Iterator;
import me.dueris.genesismc.choosing.ChoosingCORE;
import me.dueris.genesismc.choosing.ChoosingCUSTOM;
import me.dueris.genesismc.choosing.ChoosingGUI;
import me.dueris.genesismc.commands.OriginCommand;
import me.dueris.genesismc.commands.PlayerSelector;
import me.dueris.genesismc.commands.PowerCommand;
import me.dueris.genesismc.commands.ResourceCommand;
import me.dueris.genesismc.commands.TabAutoComplete;
import me.dueris.genesismc.commands.subcommands.origin.Info.InInfoCheck;
import me.dueris.genesismc.commands.subcommands.origin.Info.Info;
import me.dueris.genesismc.commands.subcommands.origin.Recipe;
import me.dueris.genesismc.enchantments.Anvil;
import me.dueris.genesismc.enchantments.EnchantTable;
import me.dueris.genesismc.enchantments.WaterProtection;
import me.dueris.genesismc.enchantments.WaterProtectionNMSImpl;
import me.dueris.genesismc.entity.InventorySerializer;
import me.dueris.genesismc.entity.OriginPlayerUtils;
import me.dueris.genesismc.events.EventListeners;
import me.dueris.genesismc.events.RegisterPowersEvent;
import me.dueris.genesismc.factory.CraftApoli;
import me.dueris.genesismc.factory.TagRegistry;
import me.dueris.genesismc.factory.conditions.Condition;
import me.dueris.genesismc.factory.conditions.ConditionExecutor;
import me.dueris.genesismc.factory.conditions.CraftCondition;
import me.dueris.genesismc.factory.conditions.biEntity.BiEntityCondition;
Expand All @@ -36,13 +30,14 @@
import me.dueris.genesismc.factory.conditions.item.ItemCondition;
import me.dueris.genesismc.factory.powers.CraftPower;
import me.dueris.genesismc.factory.powers.block.WaterBreathe;
import me.dueris.genesismc.factory.powers.player.FlightElytra;
import me.dueris.genesismc.factory.powers.player.PlayerRender;
import me.dueris.genesismc.factory.powers.player.inventory.Inventory;
import me.dueris.genesismc.factory.powers.simple.BounceSlimeBlock;
import me.dueris.genesismc.factory.powers.simple.MimicWarden;
import me.dueris.genesismc.factory.powers.world.EntityGroupManager;
import me.dueris.genesismc.files.GenesisDataFiles;
import me.dueris.genesismc.files.TempStorageContainer;
import me.dueris.genesismc.generation.VillagerTradeHook;
import me.dueris.genesismc.generation.WaterProtBookGen;
import me.dueris.genesismc.hooks.papi.PlaceholderApiExtension;
import me.dueris.genesismc.items.GenesisItems;
Expand All @@ -53,39 +48,28 @@
import me.dueris.genesismc.utils.translation.LangConfig;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.TextColor;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.thread.NamedThreadFactory;
import net.minecraft.world.damagesource.DamageType;

import org.bukkit.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.craftbukkit.v1_20_R3.CraftRegistry;
import org.bukkit.craftbukkit.v1_20_R3.enchantments.CraftEnchantment;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
import org.bukkit.event.player.PlayerCommandSendEvent;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scoreboard.Team;
import org.jetbrains.annotations.NotNull;
import org.spigotmc.WatchdogThread;

import java.io.IOException;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
Expand Down Expand Up @@ -405,13 +389,13 @@ public static void sendDebug(Object string){
@EventHandler
public void chatEventTest(PlayerChatEvent e){
Player p = e.getPlayer();
if(e.getMessage().equals("./test attempt remove origins:elytra")){
PowerContainer power = CraftApoli.keyedPowerContainers.get("origins:elytra");
if(e.getMessage().equals("./test attempt remove origins:shulker_inventory")){
PowerContainer power = CraftApoli.keyedPowerContainers.get("origins:shulker_inventory");
if(OriginPlayerUtils.powerContainer.get(e.getPlayer()).get(CraftApoli.getLayerFromTag("origins:origin")).contains(power)){
OriginPlayerUtils.powerContainer.get(e.getPlayer()).get(CraftApoli.getLayerFromTag("origins:origin")).remove(power);
ArrayList<String> powerRemovedTypes = new ArrayList<>();
ArrayList<Class<? extends CraftPower>> powerRemovedClasses = new ArrayList<>();
Class<? extends CraftPower> c = FlightElytra.class;
Class<? extends CraftPower> c = Inventory.class;
CraftPower craftPower = null;
try {
craftPower = c.newInstance();
Expand All @@ -435,14 +419,14 @@ public void chatEventTest(PlayerChatEvent e){
}else{
e.getPlayer().sendMessage("power not contained");
}
} else if (e.getMessage().equals("./test attempt grant origins:elytra")) {
PowerContainer power = CraftApoli.keyedPowerContainers.get("origins:elytra");
} else if (e.getMessage().equals("./test attempt grant origins:shulker_inventory")) {
PowerContainer power = CraftApoli.keyedPowerContainers.get("origins:shulker_inventory");
try {
ArrayList<String> powerAppliedTypes = new ArrayList<>();
ArrayList<Class<? extends CraftPower>> powerAppliedClasses = new ArrayList<>();
if(!OriginPlayerUtils.powerContainer.get(e.getPlayer()).get(CraftApoli.getLayerFromTag("origins:origin")).contains(power)){
OriginPlayerUtils.powerContainer.get(e.getPlayer()).get(CraftApoli.getLayerFromTag("origins:origin")).add(power);
Class<? extends CraftPower> c = FlightElytra.class;
Class<? extends CraftPower> c = Inventory.class;
CraftPower craftPower = null;

try {
Expand Down Expand Up @@ -474,10 +458,17 @@ public void chatEventTest(PlayerChatEvent e){
} catch (IllegalAccessException ex) {
throw new RuntimeException(ex);
}
} else if(e.getMessage().equals("./test attempt dump origins:shulker_inventory")){
PowerContainer power = CraftApoli.keyedPowerContainers.get("origins:shulker_inventory");
for(int i = 0; i < power.getJsonData().length; i++){
System.out.println(power.getJsonData()[i]);
p.sendMessage(power.getJsonData()[i]);
}
}
p.getPersistentDataContainer().set(new NamespacedKey(GenesisMC.getPlugin(), "originLayer"), PersistentDataType.STRING, CraftApoli.toSaveFormat(OriginPlayerUtils.getOrigin(p), p));
}


private void start(){
getServer().getPluginManager().registerEvents(new InventorySerializer(), this);
getServer().getPluginManager().registerEvents(this, this);
Expand All @@ -498,6 +489,7 @@ private void start(){
getServer().getPluginManager().registerEvents(new MimicWarden(), this);
getServer().getPluginManager().registerEvents(new BounceSlimeBlock(), this);
getServer().getPluginManager().registerEvents(new LogoutBugWorkaround(), this);
getServer().getPluginManager().registerEvents(new VillagerTradeHook(), this);
getServer().getPluginManager().registerEvents(new FoliaOriginScheduler.OriginSchedulerTree(), this);
Bukkit.getServer().getPluginManager().registerEvents(new KeybindUtils(), GenesisMC.getPlugin());
if (getServer().getPluginManager().isPluginEnabled("SkinsRestorer")) {
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/me/dueris/genesismc/commands/PowerCommand.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package me.dueris.genesismc.commands;

import me.dueris.genesismc.commands.subcommands.SubCommand;
import me.dueris.genesismc.commands.subcommands.power.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;

Expand All @@ -13,7 +13,15 @@ public PowerCommand(){
super("power");
}

private final ArrayList<SubCommand> subCommands = new ArrayList<>();
private static final ArrayList<SubCommand> subCommands = new ArrayList<>();
static{
subCommands.add(new Clear());
subCommands.add(new Remove());
subCommands.add(new Has());
subCommands.add(new me.dueris.genesismc.commands.subcommands.power.List());
subCommands.add(new Dump());
subCommands.add(new Grant());
}

public ArrayList<SubCommand> getSubCommands() {
return subCommands;
Expand Down
85 changes: 44 additions & 41 deletions src/main/java/me/dueris/genesismc/commands/TabAutoComplete.java
Original file line number Diff line number Diff line change
Expand Up @@ -165,56 +165,59 @@ public class TabAutoComplete implements TabCompleter {
return new ArrayList<>();
}

} else if (command.getName().equalsIgnoreCase("power")) {
} else if (command.getName().equalsIgnoreCase("power")) { // /power<arg0> grant<arg1> Dueris<arg2> <powerFile><arg3>
if (args.length == 1) {
List<String> arguments = new ArrayList<>();
arguments.add("clear");
arguments.add("grant");
arguments.add("has");
arguments.add("list");
arguments.add("remove");
arguments.add("revoke");
arguments.add("revokeall");
arguments.add("sources");
arguments.add("dump");
return arguments;
} else if (args.length == 2) {
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
List<String> playernames = new ArrayList<>();
for (Player player : players) playernames.add(player.getName());
playernames.add("@a");
playernames.add("@s");
playernames.add("@e");
playernames.add("@p");
playernames.add("@r");
return playernames;
} else if (args.length == 3) {
List<String> argS = new ArrayList<>();
for (PowerContainer c : CraftApoli.getPowers()) {
if (args[1].equalsIgnoreCase("has")) {
argS.add(c.getTag());
}
if (args[1].equalsIgnoreCase("grant")) {
argS.add(c.getTag());
}
if (args[1].equalsIgnoreCase("remove")) {
argS.add(c.getTag());
}
if (args[1].equalsIgnoreCase("revoke")) {
argS.add(c.getTag());
if(!args[0].equalsIgnoreCase("dump")){
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
List<String> playernames = new ArrayList<>();
for (Player player : players) playernames.add(player.getName());
playernames.add("@a");
playernames.add("@s");
playernames.add("@e");
playernames.add("@p");
playernames.add("@r");
return playernames;
}else{
List<String> pows = new ArrayList<>();
for(String string : CraftApoli.keyedPowerContainers.keySet()){
pows.add(string);
}
return pows;
}

for (OriginContainer origin : CraftApoli.getOrigins()) {
if (args[1].equalsIgnoreCase("revokeall")) {
argS.add(origin.getTag());
} else if (args.length == 3) {
if(args[0].equalsIgnoreCase("grant")
|| args[0].equalsIgnoreCase("remove")
|| args[0].equalsIgnoreCase("has")){
List<String> pows = new ArrayList<>();
for(String string : CraftApoli.keyedPowerContainers.keySet()){
if(!CraftApoli.keyedPowerContainers.get(string).isOriginMultipleSubPower()){
pows.add(string);
}
}
return pows;
}

return argS;

} else if (args.length >= 4) {
List<String> ba = new ArrayList<>();
return ba;
if(args[0].equalsIgnoreCase("grant")
|| args[0].equalsIgnoreCase("remove")
|| args[0].equalsIgnoreCase("has")){
List<String> pows = new ArrayList<>();
for(LayerContainer layer : CraftApoli.getLayers()){
pows.add(layer.getTag());
}
return pows;
}else{
List<String> ba = new ArrayList<>();
return ba;
}
}
} else if(command.getName().equals("resource")){
if(args.length == 1){
Expand All @@ -237,13 +240,13 @@ public class TabAutoComplete implements TabCompleter {
return playernames;
}
if(args.length == 3){
List<String> ba = new ArrayList<>();
for(OriginContainer origin : CraftApoli.getOrigins()){
for(PowerContainer powerContainer : origin.getPowerContainers()){
ba.add(powerContainer.getTag());
List<String> pows = new ArrayList<>();
for(String string : CraftApoli.keyedPowerContainers.keySet()){
if(!CraftApoli.keyedPowerContainers.get(string).isOriginMultipleSubPower()){
pows.add(string);
}
}
return ba;
return pows;
}
if(args.length >= 4){
List<String> ba = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.dueris.genesismc.commands.subcommands.power;

import me.dueris.genesismc.commands.subcommands.SubCommand;
import org.bukkit.command.CommandSender;

public class Clear extends SubCommand {
@Override
public String getName() {
return "clear";
}

@Override
public String getDescription() {
return "clears a power";
}

@Override
public String getSyntax() {
return "/power clear <args>";
}

@Override
public void perform(CommandSender sender, String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.dueris.genesismc.commands.subcommands.power;

import me.dueris.genesismc.commands.subcommands.SubCommand;
import org.bukkit.command.CommandSender;

public class Dump extends SubCommand {
@Override
public String getName() {
return "dump";
}

@Override
public String getDescription() {
return "dumps the json data of a specified power";
}

@Override
public String getSyntax() {
return "/power dump <args>";
}

@Override
public void perform(CommandSender sender, String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.dueris.genesismc.commands.subcommands.power;

import me.dueris.genesismc.commands.subcommands.SubCommand;
import org.bukkit.command.CommandSender;

public class Grant extends SubCommand {
@Override
public String getName() {
return "grant";
}

@Override
public String getDescription() {
return "grants a power";
}

@Override
public String getSyntax() {
return "/power grant <args>";
}

@Override
public void perform(CommandSender sender, String[] args) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.dueris.genesismc.commands.subcommands.power;

import me.dueris.genesismc.commands.subcommands.SubCommand;
import org.bukkit.command.CommandSender;

public class Has extends SubCommand {
@Override
public String getName() {
return "has";
}

@Override
public String getDescription() {
return "returns if the player has that power";
}

@Override
public String getSyntax() {
return "/power has <args>";
}

@Override
public void perform(CommandSender sender, String[] args) {

}
}
Loading

0 comments on commit cf06b5b

Please sign in to comment.