diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..e0f15db
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+ "java.configuration.updateBuildConfiguration": "automatic"
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..0d7d01c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+
+ be.thedrewen
+ endariel
+ 1.0-SNAPSHOT
+
+
+ 17
+ 17
+
+
+
+
+
+ spigot-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+
+
+
+
+ org.spigotmc
+ spigot-api
+ 1.21.7-R0.1-SNAPSHOT
+ provided
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/be/thedrewen/Main.java b/src/main/java/be/thedrewen/Main.java
new file mode 100644
index 0000000..59414b2
--- /dev/null
+++ b/src/main/java/be/thedrewen/Main.java
@@ -0,0 +1,52 @@
+package be.thedrewen;
+
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.plugin.java.JavaPlugin;
+
+import be.thedrewen.commands.Models;
+import be.thedrewen.src.ChestsManager;
+import be.thedrewen.src.EventManager;
+import be.thedrewen.src.Farm;
+
+
+public class Main extends JavaPlugin{
+
+ public static String prefix = "§b[§aEndariel§b]§a ";
+
+ // Custom
+ public Farm farm;
+ public Models models;
+ public ChestsManager chestsManager;
+
+ // set
+ public World world;
+
+ @Override
+ public void onEnable() {
+ this.getServer().getConsoleSender().sendMessage(prefix+"Plugin chargé !");
+
+ // Events
+ this.getServer().getPluginManager().registerEvents(new EventManager(), this);
+
+ // Custom
+ farm = new Farm(this);
+ this.getServer().getPluginManager().registerEvents(farm, this);
+ models = new Models(this);
+ this.getServer().getPluginManager().registerEvents(models, this);
+ this.getCommand("models").setExecutor(models);
+ chestsManager = new ChestsManager(this);
+ this.getServer().getPluginManager().registerEvents(chestsManager, this);
+
+ // set
+ world = Bukkit.getWorld("world");
+ }
+
+
+ @Override
+ public void onDisable() {
+ this.getServer().getConsoleSender().sendMessage(prefix+"Plugin déchargé !");
+ }
+}
+
+// e.getEntity().getWorld().spawnParticle(Particle.CLOUD, p, 1, 0, 0, 0,0);
\ No newline at end of file
diff --git a/src/main/java/be/thedrewen/commands/Models.java b/src/main/java/be/thedrewen/commands/Models.java
new file mode 100644
index 0000000..8a45f7e
--- /dev/null
+++ b/src/main/java/be/thedrewen/commands/Models.java
@@ -0,0 +1,111 @@
+package be.thedrewen.commands;
+
+import java.util.ArrayList;
+import java.util.Optional;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.block.BlockState;
+import org.bukkit.block.CommandBlock;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.command.Command;
+import org.bukkit.command.CommandExecutor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.ArmorStand;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.event.block.BlockPlaceEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import be.thedrewen.Main;
+import be.thedrewen.src.Utils;
+import be.thedrewen.src.custom.Model;
+
+public class Models implements CommandExecutor, Listener {
+
+ private ArrayList models = new ArrayList<>();
+ private Main main;
+
+ public Models(Main main) {
+ this.main = main;
+ models.add(new Model(
+ "Model#Crate",
+ "minecraft:player_head[minecraft:custom_name={\"text\":\"Oak Crate\",\"color\":\"gold\",\"underlined\":true,\"bold\":true,\"italic\":false},profile={id:[I;-1007994559,-1679604778,-1794762551,1728396796],properties:[{name:\"textures\",value:\"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYmUxZWMzYWFmZjJkYzhkODU5MTU3NGZlNjZhZGFjZjYyNzFhMGFkYWQ5ZmY4MGI0NjU0ZTIxN2YzOGQ5ZTM3ZiJ9fX0=\"}]}] 1",
+ "/summon block_display ~-0.5 ~-0.5 ~-0.5 {Passengers:[{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;435182028,652006285,1982265827,465576613],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE0NTU2NSwKICAicHJvZmlsZUlkIiA6ICIwNTAzNzZmZjAxY2I0OGVjOTUwM2NhMjhjMWU2MzlkMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJKb25haDU1OTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGI2MmVlZGM5MTBhOWM4NmUxNWU5MGUyYjkxZmIwZjI0ZmRjOTc1ZGM2YmUxNjI2ZmJmMDViMjk2OTQ5NTg0NiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.25f,0f,1f,0f,0.5f,0f,0f,1f,0.25f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;-1719494636,904447878,603764321,821904884],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE1MTI1MSwKICAicHJvZmlsZUlkIiA6ICIxNTUyNmU1OGZhOWE0NjBmODhhNmZhNjk1M2RlNjgzNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJQaWVkcml0YTE3IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzk2Zjg1Yzc4ODIzMWMxNjgwMDdjNTYxNjMyN2ZhOTdlZGM4MDBmNDY2MmQ0NDJmMDdlZjg5NTc3NTQ4NTI2MDEiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.75f,0f,1f,0f,0.5f,0f,0f,1f,0.25f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;-137103451,337023705,1861962498,1317402097],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE1NjczNSwKICAicHJvZmlsZUlkIiA6ICJiYzRlZGZiNWYzNmM0OGE3YWM5ZjFhMzlkYzIzZjRmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICI4YWNhNjgwYjIyNDYxMzQwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzFiNTQ5NTQzZWE2YWJlNTk2MmFlNDg4MDFlZDY4MzNiNWVkYmZhMDY1YWZlNGNmZDcxNTVkNmYwM2FjNDM2NzgiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.75f,0f,1f,0f,0.5f,0f,0f,1f,0.75f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;198318252,-1542825996,-2119735926,1667912998],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE2MjQ2MywKICAicHJvZmlsZUlkIiA6ICI3YTVkYmRlNDk0NWU0YTE4Yjg2OWY1MGY1NTJjNjlkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCdWtraXRBUEkiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTgwNGEyY2U2YzM2NmFlNDk1M2M1OWJkNDUyZjJlZmQyZWM1NTJmNTM1YmEyZTdmNzlhMzZhMzExYmFiNDE5YyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.25f,0f,1f,0f,0.5f,0f,0f,1f,0.75f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;-769559302,-931765044,-100238730,881291772],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE0NTU2NSwKICAicHJvZmlsZUlkIiA6ICIwNTAzNzZmZjAxY2I0OGVjOTUwM2NhMjhjMWU2MzlkMSIsCiAgInByb2ZpbGVOYW1lIiA6ICJKb25haDU1OTAiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGI2MmVlZGM5MTBhOWM4NmUxNWU5MGUyYjkxZmIwZjI0ZmRjOTc1ZGM2YmUxNjI2ZmJmMDViMjk2OTQ5NTg0NiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.75f,0f,1f,0f,1f,0f,0f,1f,0.75f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;-1925527033,1411148063,1286768516,145878837],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE1MTI1MSwKICAicHJvZmlsZUlkIiA6ICIxNTUyNmU1OGZhOWE0NjBmODhhNmZhNjk1M2RlNjgzNyIsCiAgInByb2ZpbGVOYW1lIiA6ICJQaWVkcml0YTE3IiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzk2Zjg1Yzc4ODIzMWMxNjgwMDdjNTYxNjMyN2ZhOTdlZGM4MDBmNDY2MmQ0NDJmMDdlZjg5NTc3NTQ4NTI2MDEiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.25f,0f,1f,0f,1f,0f,0f,1f,0.75f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;1839877433,1997432432,-456468224,-1488396023],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE1NjczNSwKICAicHJvZmlsZUlkIiA6ICJiYzRlZGZiNWYzNmM0OGE3YWM5ZjFhMzlkYzIzZjRmOCIsCiAgInByb2ZpbGVOYW1lIiA6ICI4YWNhNjgwYjIyNDYxMzQwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzFiNTQ5NTQzZWE2YWJlNTk2MmFlNDg4MDFlZDY4MzNiNWVkYmZhMDY1YWZlNGNmZDcxNTVkNmYwM2FjNDM2NzgiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.25f,0f,1f,0f,1f,0f,0f,1f,0.25f,0f,0f,0f,1f]},{id:\"minecraft:item_display\",item:{id:\"minecraft:player_head\",Count:1,components:{\"minecraft:profile\":{id:[I;36216811,1333781149,-1178409489,446297731],properties:[{name:\"textures\",value:\"ewogICJ0aW1lc3RhbXAiIDogMTc0NTA3MDE2MjQ2MywKICAicHJvZmlsZUlkIiA6ICI3YTVkYmRlNDk0NWU0YTE4Yjg2OWY1MGY1NTJjNjlkYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJCdWtraXRBUEkiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTgwNGEyY2U2YzM2NmFlNDk1M2M1OWJkNDUyZjJlZmQyZWM1NTJmNTM1YmEyZTdmNzlhMzZhMzExYmFiNDE5YyIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9\"}]}}},item_display:\"none\",transformation:[1f,0f,0f,0.75f,0f,1f,0f,1f,0f,0f,1f,0.25f,0f,0f,0f,1f]}]}"));
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+
+ if (sender instanceof Player) {
+ Player player = (Player) sender;
+
+ Inventory inv = Bukkit.createInventory(null, 9, "§aModels");
+
+ models.forEach(m -> {
+ ItemStack item = Bukkit.getItemFactory().createItemStack(m.cmd);
+ Utils.setItemName(item, m.name);
+ inv.addItem(item);
+ });
+ player.openInventory(inv);
+ }
+
+ return true;
+ }
+
+ @EventHandler
+ public void onBlockPlace(BlockPlaceEvent e) {
+
+ Player player = e.getPlayer();
+ Block block = e.getBlock();
+ Location location = e.getBlock().getLocation();
+ World world = e.getBlock().getWorld();
+
+ Optional model = models.stream().filter(m -> m.name.equals(e.getItemInHand().getItemMeta().getDisplayName())).findFirst();
+ if(model.isPresent()) {
+ Model modelI = model.get();
+
+ Block blockTop = location.clone().add(0, 1, 0).getBlock();
+ BlockState originalState = blockTop.getState();
+ BlockData originalData = blockTop.getBlockData();
+ block.setType(Material.COMMAND_BLOCK);
+ CommandBlock commandBlock = (CommandBlock) block.getState();
+ commandBlock.setCommand(modelI.cmds);
+ commandBlock.update();
+
+ blockTop.setType(Material.REDSTONE_BLOCK);
+ blockTop.setBlockData(originalData);
+ originalState.update(true, false);
+
+ new BukkitRunnable() {
+ public void run() {
+ location.getBlock().setType(Material.BARRIER);
+ };
+ }.runTaskLater(main, 5L);
+ }
+ }
+
+ @EventHandler
+ public void onBlockBreak(BlockBreakEvent e) {
+ Player player = e.getPlayer();
+ Block block = e.getBlock();
+ Location location = e.getBlock().getLocation();
+ World world = e.getBlock().getWorld();
+ if(block.getType() == Material.BARRIER) {
+ ArmorStand armorStand = (ArmorStand) world.spawnEntity(location, EntityType.ARMOR_STAND);
+ armorStand.setGravity(false);
+ armorStand.addScoreboardTag("delete_models");
+ Bukkit.dispatchCommand(player, "execute at @e[tag=delete_models] run kill @e[distance=..0.5,type=!player]");
+ armorStand.remove();
+ }
+ }
+}
diff --git a/src/main/java/be/thedrewen/src/ChestsManager.java b/src/main/java/be/thedrewen/src/ChestsManager.java
new file mode 100644
index 0000000..3a78da2
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/ChestsManager.java
@@ -0,0 +1,43 @@
+package be.thedrewen.src;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Material;
+import org.bukkit.block.Block;
+import org.bukkit.block.Chest;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.inventory.Inventory;
+
+import be.thedrewen.Main;
+
+public class ChestsManager implements Listener {
+
+ private Main main;
+
+ public ChestsManager(Main main) {
+ this.main = main;
+ }
+
+ @EventHandler
+ public void onPlayerInteract(PlayerInteractEvent e) {
+
+ if(e.getClickedBlock() != null) {
+ Block block = e.getClickedBlock();
+ Player player = e.getPlayer();
+ if(block.getType() == Material.CHEST) {
+ Chest chest = (Chest) block.getState();
+ if(chest.getCustomName() != null && chest.getCustomName().equalsIgnoreCase("chest_home")) {
+ e.setCancelled(true);
+
+ Inventory inv = Bukkit.createInventory(chest, 54);
+
+
+
+ player.openInventory(inv);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/be/thedrewen/src/CustomMaterial.java b/src/main/java/be/thedrewen/src/CustomMaterial.java
new file mode 100644
index 0000000..3a6a456
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/CustomMaterial.java
@@ -0,0 +1,22 @@
+
+package be.thedrewen.src;
+
+import org.bukkit.Material;
+
+public class CustomMaterial {
+
+ public Material type;
+ public String name;
+ private boolean replacable = true;
+
+ public CustomMaterial(Material type, String name, boolean replacable) {
+ this.type = type;
+ this.name = name;
+ this.replacable = replacable;
+ }
+
+ public boolean isReplacable() {
+ return replacable;
+ }
+
+}
diff --git a/src/main/java/be/thedrewen/src/EventManager.java b/src/main/java/be/thedrewen/src/EventManager.java
new file mode 100644
index 0000000..6841f7b
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/EventManager.java
@@ -0,0 +1,12 @@
+package be.thedrewen.src;
+
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
+
+public class EventManager implements Listener{
+
+ @EventHandler
+ public void onChatSend(AsyncPlayerChatEvent e) {
+ }
+}
diff --git a/src/main/java/be/thedrewen/src/Farm.java b/src/main/java/be/thedrewen/src/Farm.java
new file mode 100644
index 0000000..741536a
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/Farm.java
@@ -0,0 +1,93 @@
+package be.thedrewen.src;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Optional;
+import java.util.Random;
+
+import org.bukkit.Bukkit;
+import org.bukkit.GameMode;
+import org.bukkit.Location;
+import org.bukkit.Material;
+import org.bukkit.Sound;
+import org.bukkit.block.Block;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.TextDisplay;
+import org.bukkit.entity.Display.Billboard;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.block.BlockBreakEvent;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import be.thedrewen.Main;
+
+public class Farm implements Listener {
+
+ private Main main;
+ private ArrayList farmableBlock = new ArrayList<>();
+
+ public Farm(Main main) {
+ this.main = main;
+
+ farmableBlock.add(new CustomMaterial(Material.SPRUCE_LOG, "§6Spruce Log", false));
+
+ // Minerais
+ farmableBlock.add(new CustomMaterial(Material.COAL_ORE, "§8Coal ore", true));
+ farmableBlock.add(new CustomMaterial(Material.IRON_ORE, "§fIron ore", true));
+ farmableBlock.add(new CustomMaterial(Material.COPPER_ORE, "§6Copper ore", true));
+ farmableBlock.add(new CustomMaterial(Material.GOLD_ORE, "§eGold ore", true));
+ farmableBlock.add(new CustomMaterial(Material.REDSTONE_ORE, "§cRedstone", true));
+ farmableBlock.add(new CustomMaterial(Material.LAPIS_ORE, "§1Lapis", true));
+ farmableBlock.add(new CustomMaterial(Material.DIAMOND_ORE, "§bDiamond", true));
+ farmableBlock.add(new CustomMaterial(Material.EMERALD_ORE, "§2Emerald", true));
+ }
+
+ @EventHandler
+ public void onBlockBreak(BlockBreakEvent e) {
+
+ Player player = e.getPlayer();
+ Block block = e.getBlock();
+ Location location = block.getLocation();
+ Collection drops = block.getDrops(player.getInventory().getItemInMainHand());
+
+ if (player.getGameMode() == GameMode.SURVIVAL
+ && farmableBlock.stream().anyMatch(item -> item.type.equals(block.getType()))) {
+ e.setCancelled(true);
+ Optional customMaterial = farmableBlock.stream()
+ .filter(item -> item.type.equals(block.getType())).findFirst();
+ if (customMaterial.isPresent()) {
+ CustomMaterial item = customMaterial.get();
+ if (item.isReplacable()) {
+ block.setType(Material.BEDROCK);
+ } else {
+ block.setType(Material.AIR);
+ }
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ block.setType(item.type);
+ };
+ }.runTaskLater(main, (Utils.getRandolInteger(5, 20) * 20));
+
+ if (drops.size() > 0) {
+ TextDisplay t = location.getWorld().spawn(new Location(location.getWorld(),
+ location.getBlockX() + 0.5, location.getBlockY() + 0.5, location.getBlockZ() + 0.5),
+ TextDisplay.class);
+ t.setBillboard(Billboard.CENTER);
+ t.setSeeThrough(true);
+ ItemStack drop = drops.stream().findFirst().get();
+ t.setText("§a+" + drop.getAmount() + " " + item.name);
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ t.remove();
+ }
+ }.runTaskLater(main, 30L);
+ player.getInventory().addItem(drop);
+ player.playSound(location, Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1.0f, 1.0f);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/be/thedrewen/src/Utils.java b/src/main/java/be/thedrewen/src/Utils.java
new file mode 100644
index 0000000..a78ac5c
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/Utils.java
@@ -0,0 +1,67 @@
+package be.thedrewen.src;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Random;
+
+import org.bukkit.Location;
+import org.bukkit.block.Block;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.inventory.meta.components.CustomModelDataComponent;
+
+public class Utils {
+
+ private static final Random random = new Random();
+
+ public static T getRandomElement(ArrayList list) {
+
+ return list.get(random.nextInt(list.size()));
+ }
+
+ public static Integer getRandolInteger(Integer min, Integer max) {
+ return random.nextInt(max - min + 1) + min;
+ }
+
+ public static List getBlocksBetween(Location loc1, Location loc2) {
+ List blocks = new ArrayList<>();
+
+ int x1 = loc1.getBlockX();
+ int y1 = loc1.getBlockY();
+ int z1 = loc1.getBlockZ();
+
+ int x2 = loc2.getBlockX();
+ int y2 = loc2.getBlockY();
+ int z2 = loc2.getBlockZ();
+
+ for (int x = Math.min(x1, x2); x <= Math.max(x1, x2); x++) {
+ for (int y = Math.min(y1, y2); y <= Math.max(y1, y2); y++) {
+ for (int z = Math.min(z1, z2); z <= Math.max(z1, z2); z++) {
+ blocks.add(loc1.getWorld().getBlockAt(x, y, z));
+ }
+ }
+ }
+
+ return blocks;
+ }
+
+
+ public static void addCustomModelDataString(ItemStack item, String name) {
+ ItemMeta meta = item.getItemMeta();
+ CustomModelDataComponent componentSword = meta.getCustomModelDataComponent();
+ componentSword.setStrings(Arrays.asList(name));
+ meta.setCustomModelDataComponent(componentSword);
+ item.setItemMeta(meta);
+ }
+ public static void setItemName(ItemStack item, String name) {
+ ItemMeta meta = item.getItemMeta();
+ meta.setDisplayName(name);
+ item.setItemMeta(meta);
+ }
+ public static void setItemLore(ItemStack item, List lores) {
+ ItemMeta meta = item.getItemMeta();
+ meta.setLore(lores);
+ item.setItemMeta(meta);
+ }
+}
diff --git a/src/main/java/be/thedrewen/src/custom/Model.java b/src/main/java/be/thedrewen/src/custom/Model.java
new file mode 100644
index 0000000..a864766
--- /dev/null
+++ b/src/main/java/be/thedrewen/src/custom/Model.java
@@ -0,0 +1,13 @@
+package be.thedrewen.src.custom;
+
+public class Model {
+ public String name;
+ public String cmd;
+ public String cmds;
+
+ public Model(String name, String cmd, String cmds) {
+ this.name = name;
+ this.cmd = cmd;
+ this.cmds = cmds;
+ }
+}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
new file mode 100644
index 0000000..79b6298
--- /dev/null
+++ b/src/main/resources/plugin.yml
@@ -0,0 +1,18 @@
+name: Endariel
+main: be.thedrewen.Main
+version: 1.0.0
+api-version: '1.21'
+commands:
+ test:
+ description: "Tester les fonctions."
+ usage: /test
+ permission: be.thedrewen.op
+
+ models:
+ description: "Ui pour faire spawn des Models 3Ds."
+ usage: /models
+ permission: be.thedrewen.op
+
+permissions:
+ be.thedrewen.op:
+ default: op
\ No newline at end of file
diff --git a/target/classes/be/thedrewen/Main.class b/target/classes/be/thedrewen/Main.class
new file mode 100644
index 0000000..629e999
Binary files /dev/null and b/target/classes/be/thedrewen/Main.class differ
diff --git a/target/classes/be/thedrewen/commands/Models.class b/target/classes/be/thedrewen/commands/Models.class
new file mode 100644
index 0000000..6b1f6c3
Binary files /dev/null and b/target/classes/be/thedrewen/commands/Models.class differ
diff --git a/target/classes/be/thedrewen/src/ChestsManager.class b/target/classes/be/thedrewen/src/ChestsManager.class
new file mode 100644
index 0000000..7dae1fd
Binary files /dev/null and b/target/classes/be/thedrewen/src/ChestsManager.class differ
diff --git a/target/classes/be/thedrewen/src/CustomMaterial.class b/target/classes/be/thedrewen/src/CustomMaterial.class
new file mode 100644
index 0000000..d9fe497
Binary files /dev/null and b/target/classes/be/thedrewen/src/CustomMaterial.class differ
diff --git a/target/classes/be/thedrewen/src/EventManager.class b/target/classes/be/thedrewen/src/EventManager.class
new file mode 100644
index 0000000..ee1e0e5
Binary files /dev/null and b/target/classes/be/thedrewen/src/EventManager.class differ
diff --git a/target/classes/be/thedrewen/src/Farm.class b/target/classes/be/thedrewen/src/Farm.class
new file mode 100644
index 0000000..7524037
Binary files /dev/null and b/target/classes/be/thedrewen/src/Farm.class differ
diff --git a/target/classes/be/thedrewen/src/Utils.class b/target/classes/be/thedrewen/src/Utils.class
new file mode 100644
index 0000000..32b183e
Binary files /dev/null and b/target/classes/be/thedrewen/src/Utils.class differ
diff --git a/target/classes/be/thedrewen/src/custom/Model.class b/target/classes/be/thedrewen/src/custom/Model.class
new file mode 100644
index 0000000..585ca56
Binary files /dev/null and b/target/classes/be/thedrewen/src/custom/Model.class differ
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
new file mode 100644
index 0000000..79b6298
--- /dev/null
+++ b/target/classes/plugin.yml
@@ -0,0 +1,18 @@
+name: Endariel
+main: be.thedrewen.Main
+version: 1.0.0
+api-version: '1.21'
+commands:
+ test:
+ description: "Tester les fonctions."
+ usage: /test
+ permission: be.thedrewen.op
+
+ models:
+ description: "Ui pour faire spawn des Models 3Ds."
+ usage: /models
+ permission: be.thedrewen.op
+
+permissions:
+ be.thedrewen.op:
+ default: op
\ No newline at end of file