diff --git a/plugin/src/main/java/com/alttd/cometskyblock/challenges/ChallengesGUI.java b/plugin/src/main/java/com/alttd/cometskyblock/challenges/ChallengesGUI.java index 6b613b3..29bd67e 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/challenges/ChallengesGUI.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/challenges/ChallengesGUI.java @@ -177,10 +177,9 @@ public class ChallengesGUI extends GUIInventory { lore.add(miniMessage.deserialize("Reward: " + StringUtil.splitMiniMessageString( (challenge.challengeType().equals(ChallengeType.ON_PLAYER) && challengeCount != 0) ? challenge.repeatRewardText() : challenge.rewardText()))); - // TODO -- Add glow for challenges that are completed -// if (challengeCount > 0 || challenge.repeatRewards() != null && !challenge.repeatRewards().isEmpty()) { -// meta.addEnchant(Enchantment.MENDING, 1, true); -// } + if (challengeCount > 0) { + meta.addEnchant(Enchantment.MENDING, 1, true); + } meta.addItemFlags(ItemFlag.values()); meta.lore(lore); diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/gui/IslandGUI.java b/plugin/src/main/java/com/alttd/cometskyblock/island/gui/IslandGUI.java index 065c2b4..ac8ff7e 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/gui/IslandGUI.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/gui/IslandGUI.java @@ -43,7 +43,7 @@ public class IslandGUI extends GUIInventory { player.closeInventory(); new SettingsGUI(island).open(player); })); - addButton(13, createMenuButton(Material.ENCHANTED_BOOK, "Challenes", new ArrayList<>(), event -> { + addButton(13, createMenuButton(Material.BOOKSHELF, "Challenges", new ArrayList<>(), event -> { player.closeInventory(); new ChallengesGUI(island).open(player); })); diff --git a/plugin/src/main/java/com/alttd/cometskyblock/island/oregenerator/GeneratorHandler.java b/plugin/src/main/java/com/alttd/cometskyblock/island/oregenerator/GeneratorHandler.java index 111477d..0a514f0 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/island/oregenerator/GeneratorHandler.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/island/oregenerator/GeneratorHandler.java @@ -32,6 +32,12 @@ public class GeneratorHandler { return deepslate ? deepslateVariant(ore) : ore; } + public Material generateOre(Island island, Material material) { + boolean deepslate = material == Material.DEEPSLATE; + Material ore = rollGenerator(island, material == Material.STONE || material == Material.COBBLESTONE || deepslate); + return deepslate ? deepslateVariant(ore) : ore; + } + private Material rollGenerator(Island island, boolean cobblestone) { double random = Math.random() * 100; double checkedChance = 0; diff --git a/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java b/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java index da2889c..f8d663b 100644 --- a/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java +++ b/plugin/src/main/java/com/alttd/cometskyblock/listeners/CobbestoneGeneratorListener.java @@ -2,70 +2,92 @@ package com.alttd.cometskyblock.listeners; import com.alttd.cometskyblock.CometSkyBlockPlugin; import com.alttd.cometskyblock.island.Island; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; -import org.bukkit.block.BlockFace; +import org.bukkit.block.BlockState; +import org.bukkit.entity.Item; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; -import org.bukkit.event.block.BlockFormEvent; +import org.bukkit.event.block.*; +import org.bukkit.metadata.FixedMetadataValue; +import org.jetbrains.annotations.NotNull; -import java.util.concurrent.TimeUnit; +import java.util.List; public class CobbestoneGeneratorListener implements Listener { + public static final @NotNull String GENERATOR_METADATA_KEY = "comet:oregenerator"; + private final CometSkyBlockPlugin plugin; -// public static Cache generatorCache = CacheBuilder.newBuilder() -// .maximumSize(1000) -// .expireAfterAccess(10, TimeUnit.MINUTES) -// .build(); public CobbestoneGeneratorListener(CometSkyBlockPlugin plugin) { this.plugin = plugin; } - @EventHandler + @EventHandler(ignoreCancelled = true) public void onBockForm(BlockFormEvent blockFormEvent) { Block block = blockFormEvent.getNewState().getBlock(); + if (block.getType() == Material.OBSIDIAN) + return; + Island island = Island.getIsland(block.getWorld().getUID()); if (island.worldName() == null || island.worldName().isEmpty()) // Worlds not generated by us will have this as null or empty return; - Material formedMaterial = blockFormEvent.getNewState().getType(); - boolean cobblestone; - switch (formedMaterial) { - case COBBLESTONE -> cobblestone = true; - case BASALT -> cobblestone = false; - default -> { - return; + BlockState blockState = blockFormEvent.getNewState(); + blockState.setMetadata(GENERATOR_METADATA_KEY, new CometMeta()); + if (blockFormEvent.getNewState().getType() == Material.COBBLESTONE && block.getLocation().getBlockY() <= 16) + blockFormEvent.getNewState().setType(Material.DEEPSLATE); + } + + @EventHandler(ignoreCancelled = true) + public void onBlockBreak(BlockBreakEvent event) { + Block block = event.getBlock(); + if(!block.hasMetadata(GENERATOR_METADATA_KEY)) { + return; + } + + Island island = Island.getIsland(block.getWorld().getUID()); + Material generatedMaterial = plugin.generatorHandler().generateOre(island, block.getType()); + block.setType(generatedMaterial); + } + + @EventHandler(ignoreCancelled = true) + public void onBlockDropItem(BlockDropItemEvent event) { + Block block = event.getBlock(); + if(!block.hasMetadata(GENERATOR_METADATA_KEY)) { + return; + } + + // At This point we can inject bonus items + block.removeMetadata(GENERATOR_METADATA_KEY, plugin); + for (Item item : event.getItems()) { + item.setFireInvulnerableTicks(100); + } + } + + @EventHandler(ignoreCancelled = true) + public void onBlockPistonExtend(BlockPistonExtendEvent event) { + cleanPistonBlocks(event.getBlocks()); + } + + @EventHandler(ignoreCancelled = true) + public void onBlockPistonRetract(BlockPistonRetractEvent event) { + cleanPistonBlocks(event.getBlocks()); + } + + private void cleanPistonBlocks(List blocks) { + for (Block block : blocks) { + if(block.hasMetadata(GENERATOR_METADATA_KEY)) { + block.removeMetadata(GENERATOR_METADATA_KEY, plugin); } } - Material generatedMaterial = plugin.generatorHandler().generateOre(island, cobblestone, blockFormEvent.getBlock().getLocation().getBlockY()); - blockFormEvent.getNewState().setType(generatedMaterial); - // TODO - set to infested variants - turn them into ore when breaking them? - // if infested block -> rollgenerator -> block::breaknaturally? } -// @EventHandler -// public void cobblestoneGeneratorDrops(BlockBreakEvent event) { -// // TODO - multiply drops from cobble gen? -// Block block = event.getBlock(); -// if (block.getType().equals(Material.COBBLESTONE)) { -// if (relativeEqualsMaterial(block, Material.LAVA)) { // any other way to detect if they are from cobble gen -// // set some data during blockform event? -// if (relativeEqualsMaterial(block, Material.WATER)) { -// -// } -// } -// } -// } + public class CometMeta extends FixedMetadataValue { - boolean relativeEqualsMaterial(Block block, Material material) { - return block.getRelative(BlockFace.NORTH).getType().equals(material) - || block.getRelative(BlockFace.EAST).getType().equals(material) - || block.getRelative(BlockFace.SOUTH).getType().equals(material) - || block.getRelative(BlockFace.WEST).getType().equals(material); + public CometMeta() { + super(plugin, true); + } } }