diff --git a/src/main/java/eu/mhsl/craftattack/spawn/Main.java b/src/main/java/eu/mhsl/craftattack/spawn/Main.java index 62eed16..56122d9 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/Main.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/Main.java @@ -14,6 +14,7 @@ import eu.mhsl.craftattack.spawn.appliances.kick.Kick; import eu.mhsl.craftattack.spawn.appliances.outlawed.Outlawed; import eu.mhsl.craftattack.spawn.appliances.panicBan.PanicBan; import eu.mhsl.craftattack.spawn.appliances.playerlimit.PlayerLimit; +import eu.mhsl.craftattack.spawn.appliances.portableCrafting.PortableCrafting; import eu.mhsl.craftattack.spawn.appliances.projectStart.ProjectStart; import eu.mhsl.craftattack.spawn.appliances.report.Report; import eu.mhsl.craftattack.spawn.appliances.restart.Restart; @@ -62,7 +63,8 @@ public final class Main extends JavaPlugin { new Debug(), new Fleischerchest(), new CustomAdvancements(), - new Settings() + new Settings(), + new PortableCrafting() ); Bukkit.getLogger().info("Loading appliances..."); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/OnCraftingTableUseListener.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/OnCraftingTableUseListener.java new file mode 100644 index 0000000..0363c78 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/OnCraftingTableUseListener.java @@ -0,0 +1,14 @@ +package eu.mhsl.craftattack.spawn.appliances.portableCrafting; + +import eu.mhsl.craftattack.spawn.appliance.ApplianceListener; +import org.bukkit.Material; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerInteractEvent; + +public class OnCraftingTableUseListener extends ApplianceListener { + @EventHandler + public void inInteract(PlayerInteractEvent event) { + if(!event.getMaterial().equals(Material.CRAFTING_TABLE)) return; + getAppliance().openFor(event.getPlayer()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java new file mode 100644 index 0000000..5b00283 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/portableCrafting/PortableCrafting.java @@ -0,0 +1,21 @@ +package eu.mhsl.craftattack.spawn.appliances.portableCrafting; + +import eu.mhsl.craftattack.spawn.appliance.Appliance; +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class PortableCrafting extends Appliance { + public void openFor(Player player) { + if(!Settings.instance().getSetting(player, Settings.Key.EnablePortableCrafting, Boolean.class)) return; + player.openWorkbench(null, true); + } + + @Override + protected @NotNull List eventHandlers() { + return List.of(new OnCraftingTableUseListener()); + } +} diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java index 7a7a3aa..eb28ab6 100644 --- a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/Settings.java @@ -4,6 +4,7 @@ import eu.mhsl.craftattack.spawn.Main; import eu.mhsl.craftattack.spawn.appliance.Appliance; import eu.mhsl.craftattack.spawn.appliance.ApplianceCommand; import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.Setting; +import eu.mhsl.craftattack.spawn.appliances.settings.settings.EnablePortableCraftingSetting; import eu.mhsl.craftattack.spawn.appliances.settings.settings.ShowJoinAndLeaveMessagesSetting; import eu.mhsl.craftattack.spawn.appliances.settings.settings.TechnicalTablistSetting; import net.kyori.adventure.text.Component; @@ -17,13 +18,19 @@ import java.util.List; import java.util.WeakHashMap; public class Settings extends Appliance { + private static Settings settingsInstance; + public enum Key { TechnicalTab, ShowJoinAndLeaveMessages, + EnablePortableCrafting, } public static Settings instance() { - return Main.instance().getAppliance(Settings.class); + if(settingsInstance != null) return settingsInstance; + Settings instance = Main.instance().getAppliance(Settings.class); + Settings.settingsInstance = instance; + return instance; } public record OpenSettingsInventory(Inventory inventory, List> settings) { @@ -37,7 +44,8 @@ public class Settings extends Appliance { List> settings = List.of( new TechnicalTablistSetting(), - new ShowJoinAndLeaveMessagesSetting() + new ShowJoinAndLeaveMessagesSetting(), + new EnablePortableCraftingSetting() ); settings.forEach(setting -> setting.initializeFromPlayer(player)); diff --git a/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java new file mode 100644 index 0000000..8097369 --- /dev/null +++ b/src/main/java/eu/mhsl/craftattack/spawn/appliances/settings/settings/EnablePortableCraftingSetting.java @@ -0,0 +1,31 @@ +package eu.mhsl.craftattack.spawn.appliances.settings.settings; + +import eu.mhsl.craftattack.spawn.appliances.settings.Settings; +import eu.mhsl.craftattack.spawn.appliances.settings.datatypes.BoolSetting; +import org.bukkit.Material; + +public class EnablePortableCraftingSetting extends BoolSetting { + public EnablePortableCraftingSetting() { + super(Settings.Key.EnablePortableCrafting); + } + + @Override + protected String title() { + return "Portables Crafting"; + } + + @Override + protected String description() { + return "Erlaubt das öffnen einer Werkbank in der Hand, ohne sie plazieren zu müssen"; + } + + @Override + protected Material icon() { + return Material.CRAFTING_TABLE; + } + + @Override + protected Boolean defaultValue() { + return true; + } +}