diff --git a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java index a104892..bbe2134 100644 --- a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java +++ b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java @@ -7,8 +7,6 @@ import com.thomas15v.noxray.event.ChunkEventListener; import com.thomas15v.noxray.event.PlayerEventListener; import com.thomas15v.noxray.modifications.OreUtil; -import com.thomas15v.noxray.modifier.GenerationModifier; -import com.thomas15v.noxray.modifier.PlayerGenerationModifier; import ninja.leaping.configurate.ConfigurationOptions; import ninja.leaping.configurate.commented.CommentedConfigurationNode; import ninja.leaping.configurate.loader.ConfigurationLoader; @@ -18,7 +16,8 @@ import org.spongepowered.api.Game; import org.spongepowered.api.config.DefaultConfig; import org.spongepowered.api.event.Listener; -import org.spongepowered.api.event.game.state.GameLoadCompleteEvent; +import org.spongepowered.api.event.game.state.GamePostInitializationEvent; +import org.spongepowered.api.event.game.state.GamePreInitializationEvent; import org.spongepowered.api.event.game.state.GameStartedServerEvent; import org.spongepowered.api.plugin.Plugin; @@ -50,9 +49,8 @@ public static NoXrayPlugin getInstance(){ private NoXrayConfig config; @Listener - public void onStart(GameLoadCompleteEvent event){ + public void onPreInit(GamePreInitializationEvent event){ loadConfig(); - blockModifier = new GenerationModifier(); instance = this; game.getEventManager().registerListeners(this, new ChunkEventListener()); game.getEventManager().registerListeners(this, new PlayerEventListener()); @@ -63,6 +61,11 @@ public void onStart(GameLoadCompleteEvent event){ } } + @Listener + public void onPreInit(GamePostInitializationEvent event){ + blockModifier = config.getModifier(); + } + @Listener public void onServerStarted(GameStartedServerEvent event) { this.logger.info("Loaded successfully."); @@ -73,7 +76,6 @@ public BlockModifier getBlockModifier() { } private void loadConfig(){ - try { CommentedConfigurationNode node = loader.load(ConfigurationOptions.defaults().setObjectMapperFactory(factory).setShouldCopyDefaults(true)); config = node.getValue(TypeToken.of(NoXrayConfig.class), new NoXrayConfig()); diff --git a/src/main/java/com/thomas15v/noxray/api/BlockModifier.java b/src/main/java/com/thomas15v/noxray/api/BlockModifier.java index b76f029..06bdfac 100644 --- a/src/main/java/com/thomas15v/noxray/api/BlockModifier.java +++ b/src/main/java/com/thomas15v/noxray/api/BlockModifier.java @@ -1,7 +1,6 @@ package com.thomas15v.noxray.api; import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; diff --git a/src/main/java/com/thomas15v/noxray/api/NetworkBlockContainer.java b/src/main/java/com/thomas15v/noxray/api/NetworkBlockContainer.java index c301ccb..fac310d 100644 --- a/src/main/java/com/thomas15v/noxray/api/NetworkBlockContainer.java +++ b/src/main/java/com/thomas15v/noxray/api/NetworkBlockContainer.java @@ -2,6 +2,7 @@ import com.flowpowered.math.vector.Vector3i; import com.thomas15v.noxray.NoXrayPlugin; +import com.thomas15v.noxray.modifications.OreUtil; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.network.PacketBuffer; @@ -148,8 +149,7 @@ private void obfuscateBlock(Predicate filter, Location locati } } - private final static Direction[] directions = new Direction[]{Direction.EAST, - Direction.NORTH, Direction.SOUTH, Direction.WEST}; + public List getSurrounding(Location location){ List blockStates = new ArrayList(){ @@ -168,7 +168,7 @@ public boolean add(BlockState blockState) { if (location.getY() != 0){ blockStates.add(location.getRelative(Direction.DOWN).getBlock()); } - for (Direction direction : directions) { + for (Direction direction : OreUtil.getOrdalDirections()) { blockStates.add(location.getRelative(direction).getBlock()); } if (blockStates.size() < 5){ @@ -176,5 +176,4 @@ public boolean add(BlockState blockState) { } return blockStates; } - } diff --git a/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java b/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java index 475dd06..9220c1e 100644 --- a/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java +++ b/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java @@ -1,5 +1,9 @@ package com.thomas15v.noxray.config; +import com.thomas15v.noxray.NoXrayPlugin; +import com.thomas15v.noxray.api.BlockModifier; +import com.thomas15v.noxray.modifier.ModifierRegistry; +import com.thomas15v.noxray.modifier.modifiers.EmptyModifier; import ninja.leaping.configurate.objectmapping.Setting; import ninja.leaping.configurate.objectmapping.serialize.ConfigSerializable; @@ -10,31 +14,22 @@ public class NoXrayConfig { @Setting(value = USE_ORE_DICT_KEY, comment = USE_ORE_DICT_COMMENT) private boolean useOreDict = true; - private static final String USE_CAVE = "cave.enabled"; - private static final String USE_CAVE_COMMENT = "Enable ore hiding in dark caves"; - @Setting(value = USE_CAVE, comment = USE_CAVE_COMMENT) - private boolean caveEnabled = false; - - private static final String CAVE_ENABLE_RANGE = "cave.enablerange"; - private static final String USE_CAVE_ENABLE_COMMENT = "Allow ores to be visible in the dark without potions when a player is close"; - @Setting(value = CAVE_ENABLE_RANGE, comment = USE_CAVE_ENABLE_COMMENT) - private boolean enableRange = false; - - private static final String CAVE_RANGE = "cave.range"; - private static final String CAVE_RANGE_COMMENT = "The distance a player has to be from the ore before it comes visible in the dark (-1: never)"; - @Setting(value = CAVE_RANGE, comment = CAVE_RANGE_COMMENT) - private int caveRange = 16; - + private static final String MODIFIER = "modifier"; + private static final String MODIFIER_COMMENT = "Different modifiers are obvious, allhidden, random and veinrandom"; + @Setting(value = MODIFIER, comment = MODIFIER_COMMENT) + private String modifier = "obvious"; public boolean isUseOreDict() { return useOreDict; } - public boolean isCaveEnabled() { - return caveEnabled; - } - - public int getCaveRange() { - return caveRange; + public BlockModifier getModifier() { + if (ModifierRegistry.exist(modifier)) { + NoXrayPlugin.getInstance().getLogger().info("Using modifier: " + modifier); + return ModifierRegistry.getModifier(modifier.toLowerCase()); + } else { + NoXrayPlugin.getInstance().getLogger().warn("Modifier " + modifier + " is not valid, using empty modifier"); + return new EmptyModifier(); + } } -} +} \ No newline at end of file diff --git a/src/main/java/com/thomas15v/noxray/event/ChunkEventListener.java b/src/main/java/com/thomas15v/noxray/event/ChunkEventListener.java index 9ba99fe..012bc62 100644 --- a/src/main/java/com/thomas15v/noxray/event/ChunkEventListener.java +++ b/src/main/java/com/thomas15v/noxray/event/ChunkEventListener.java @@ -1,10 +1,9 @@ package com.thomas15v.noxray.event; -import org.spongepowered.api.event.Listener; -import org.spongepowered.api.event.world.chunk.UnloadChunkEvent; - import com.thomas15v.noxray.api.NetworkWorld; import com.thomas15v.noxray.modifications.internal.InternalWorld; +import org.spongepowered.api.event.Listener; +import org.spongepowered.api.event.world.chunk.UnloadChunkEvent; public class ChunkEventListener { diff --git a/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java b/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java index 50425c3..b314336 100644 --- a/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java +++ b/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java @@ -1,33 +1,62 @@ package com.thomas15v.noxray.event; -import org.spongepowered.api.block.BlockSnapshot; +import com.thomas15v.noxray.modifications.OreUtil; +import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockTypes; -import org.spongepowered.api.data.Transaction; +import org.spongepowered.api.block.tileentity.Piston; import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.block.ChangeBlockEvent; +import org.spongepowered.api.event.block.InteractBlockEvent; +import org.spongepowered.api.event.world.ExplosionEvent; import org.spongepowered.api.util.Direction; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class PlayerEventListener { + private static List UPDATE_WHITELIST = Arrays.asList(BlockTypes.AIR, BlockTypes.PISTON, + BlockTypes.PISTON_EXTENSION, BlockTypes.PISTON_HEAD, BlockTypes.STICKY_PISTON); + @Listener - public void onBlockUpdate(ChangeBlockEvent.Break event){ - if (event.getCause().containsType(Player.class)) { - event.getTransactions().forEach(PlayerEventListener::updateBlocks); + public void onBlockUpdate(InteractBlockEvent event){ + //pre-block-update + if (event.getCause().containsType(Player.class) && event.getTargetBlock().getLocation().isPresent()) { + updateBlocks(event.getTargetBlock().getLocation().get()); } } - private static void updateBlocks(Transaction transaction){ - Location location = transaction.getOriginal().getLocation().get(); - for (Direction direction : Direction.values()) { - if (!direction.isSecondaryOrdinal()) { - updateBlock(location.getBlockRelative(direction)); + @Listener + public void onBlockUpdate(ChangeBlockEvent.Break event){ + event.getTransactions().forEach(transaction -> { + if (!UPDATE_WHITELIST.contains(transaction.getFinal().getState().getType())){ + updateBlocks(transaction.getFinal().getLocation().get()); + } + }); + } + + @Listener + public void onExplosion(ExplosionEvent.Detonate event){ + for (Location location : event.getAffectedLocations()){ + for (Direction direction : OreUtil.getOrdalDirections()){ + Location sideBlock = location.getBlockRelative(direction); + if (!event.getAffectedLocations().contains(sideBlock)) { + updateBlock(sideBlock); + } } } } + private static void updateBlocks(Location location){ + for (Direction direction : OreUtil.getOrdalDirections()){ + updateBlock(location.getBlockRelative(direction)); + } + } + private static void updateBlock(Location block){ if (block.getBlockType() == BlockTypes.AIR) return; diff --git a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java index a349f03..c580e63 100644 --- a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java +++ b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java @@ -4,19 +4,32 @@ import net.minecraft.block.BlockOre; import net.minecraft.item.ItemBlock; import net.minecraftforge.oredict.OreDictionary; +import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockTypes; +import org.spongepowered.api.data.property.block.FullBlockSelectionBoxProperty; +import org.spongepowered.api.util.Direction; -import java.util.HashSet; -import java.util.Set; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; public class OreUtil { - private static Set Ores = new HashSet<>(); + private static List Ores = new ArrayList<>(); + private final static Direction[] ordalDirections = new Direction[]{Direction.EAST, + Direction.NORTH, Direction.SOUTH, Direction.WEST, Direction.DOWN, Direction.UP}; static { addOre(BlockTypes.REDSTONE_ORE); addOre(BlockTypes.MONSTER_EGG); + addOre(BlockTypes.EMERALD_ORE); + addOre(BlockTypes.DIAMOND_ORE); + addOre(BlockTypes.COAL_ORE); + addOre(BlockTypes.IRON_ORE); + addOre(BlockTypes.LAPIS_ORE); + addOre(BlockTypes.GOLD_ORE); //other ores are covered by BlockOre class } @@ -25,9 +38,12 @@ public static boolean isOre(BlockType blockState){ } public static void addOre(BlockType blockType){ - Ores.add(blockType); + if (!Ores.contains(blockType)) { + Ores.add(blockType); + } } + public static void registerForgeOres(){ for (String s : OreDictionary.getOreNames()) { if (s.contains("ore")){ @@ -40,4 +56,16 @@ public static void registerForgeOres(){ } } } + + public static BlockType getRandomOre(){ + return Ores.get(ThreadLocalRandom.current().nextInt(0, Ores.size())); + } + + public static boolean isExposed(List surroundingBlocks){ + return surroundingBlocks.stream().anyMatch(blockState -> !blockState.getType().getProperty(FullBlockSelectionBoxProperty.class).get().getValue()); + } + + public static Direction[] getOrdalDirections() { + return ordalDirections; + } } diff --git a/src/main/java/com/thomas15v/noxray/modifications/mixins/MixinChunk.java b/src/main/java/com/thomas15v/noxray/modifications/mixins/MixinChunk.java index 7101f3e..cdc9ae2 100644 --- a/src/main/java/com/thomas15v/noxray/modifications/mixins/MixinChunk.java +++ b/src/main/java/com/thomas15v/noxray/modifications/mixins/MixinChunk.java @@ -29,18 +29,17 @@ public class MixinChunk implements InternalChunk { @Override public void obFuscate(){ - if (networkChunk == null) { - if (worldObj.getWorldType().getWorldTypeID() != -1 && worldObj.getWorldType().getWorldTypeID() != 1 && networkChunk == null) { + if (networkChunk == null && worldObj.getWorldType().getWorldTypeID() != -1 && worldObj.getWorldType().getWorldTypeID() != 1 && networkChunk == null) { NetworkBlockContainer[] blockContainers = new NetworkBlockContainer[storageArrays.length]; for (int i = 0; i < storageArrays.length; i++) { if (storageArrays[i] != null) { blockContainers[i] = ((InternalBlockStateContainer) storageArrays[i].getData()).getBlockContainer(); } } - networkChunk = new NetworkChunk(blockContainers, (org.spongepowered.api.world.Chunk) this); + this.networkChunk = new NetworkChunk(blockContainers, (org.spongepowered.api.world.Chunk) this); ((InternalWorld) worldObj).getNetworkWorld().addChunk(networkChunk); networkChunk.obfuscate(); } - } + } } diff --git a/src/main/java/com/thomas15v/noxray/modifier/GenerationModifier.java b/src/main/java/com/thomas15v/noxray/modifier/GenerationModifier.java deleted file mode 100644 index 67a438d..0000000 --- a/src/main/java/com/thomas15v/noxray/modifier/GenerationModifier.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.thomas15v.noxray.modifier; - -import com.thomas15v.noxray.api.BlockModifier; -import com.thomas15v.noxray.modifications.OreUtil; -import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.block.BlockType; -import org.spongepowered.api.block.BlockTypes; -import org.spongepowered.api.util.Direction; -import org.spongepowered.api.world.Location; -import org.spongepowered.api.world.World; - -import java.util.Arrays; -import java.util.List; -import java.util.function.Predicate; - -/** - * Only modifies the blocks on disk read and so async. Causing almost no lag, but might increase length on the chunkloading (not that that is a problem really) - */ -public class GenerationModifier implements BlockModifier { - - private static final List COMMON_BLOCKS = Arrays.asList(BlockTypes.AIR, BlockTypes.STONE, BlockTypes.NETHERRACK, BlockTypes.END_STONE, BlockTypes.BEDROCK); - private static final Predicate FILTER = blockState -> OreUtil.isOre(blockState.getType()); - - @Override - public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { - for (BlockState surroundingBlock : surroundingBlocks) { - if (surroundingBlock.getType().equals(BlockTypes.AIR)) { - if (surroundingBlock.getType().equals(BlockTypes.WATER)) { - return original; - } else { - return handlePlayerBlock(original, location); - } - } - } - return BlockTypes.STONE.getDefaultState(); - - } - - public BlockState handlePlayerBlock(BlockState original, Location location){ - return original; - } - - @Override - public Predicate getFilter() { - return FILTER; - } - - - public static boolean checkBlock(Location blockState, Direction direction) { - return !blockState.getBlockRelative(direction).getBlock().getType().equals(BlockTypes.AIR); - } -} diff --git a/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java new file mode 100644 index 0000000..f611756 --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java @@ -0,0 +1,41 @@ +package com.thomas15v.noxray.modifier; + +import com.thomas15v.noxray.api.BlockModifier; +import com.thomas15v.noxray.modifier.modifiers.ObviousModifier; +import com.thomas15v.noxray.modifier.modifiers.RandomModifier; +import com.thomas15v.noxray.modifier.modifiers.VeinRandomModifier; + +import java.util.HashMap; +import java.util.Map; + +public class ModifierRegistry { + + private static Map modifierMap = new HashMap<>(); + + static { + try { + registerModifier("obvious", new ObviousModifier()); + registerModifier("random", new RandomModifier()); + registerModifier("veinrandom", new VeinRandomModifier()); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static void registerModifier(String name, BlockModifier modifier) throws Exception { + if (!modifierMap.containsKey(name)){ + modifierMap.put(name, modifier); + } else { + throw new Exception("Modifier Already Exists"); + } + } + + public static BlockModifier getModifier(String name){ + return modifierMap.get(name); + } + + public static boolean exist(String name){ + return modifierMap.containsKey(name); + } + +} diff --git a/src/main/java/com/thomas15v/noxray/modifier/PlayerGenerationModifier.java b/src/main/java/com/thomas15v/noxray/modifier/PlayerGenerationModifier.java deleted file mode 100644 index eb6dd8b..0000000 --- a/src/main/java/com/thomas15v/noxray/modifier/PlayerGenerationModifier.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.thomas15v.noxray.modifier; - -import com.thomas15v.noxray.modifications.NMSUtil; -import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.block.BlockTypes; -import org.spongepowered.api.world.Location; -import org.spongepowered.api.world.World; - -public class PlayerGenerationModifier extends GenerationModifier { - - @Override - public BlockState handlePlayerBlock(BlockState original, Location location) { - if (NMSUtil.getLightLevel(location) == 0 && !NMSUtil.canSeeTheSky(location)) { - return BlockTypes.REDSTONE_BLOCK.getDefaultState(); - }else { - return super.handlePlayerBlock(original, location); - } - } - -} diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java new file mode 100644 index 0000000..ddacffe --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java @@ -0,0 +1,18 @@ +package com.thomas15v.noxray.modifier.modifiers; + + +import com.thomas15v.noxray.api.BlockModifier; +import com.thomas15v.noxray.modifications.OreUtil; +import org.spongepowered.api.block.BlockState; + +import java.util.function.Predicate; + +public abstract class AbstractModifier implements BlockModifier { + + private static final Predicate FILTER = blockState -> OreUtil.isOre(blockState.getType()); + + @Override + public Predicate getFilter() { + return FILTER; + } +} diff --git a/src/main/java/com/thomas15v/noxray/modifier/EmptyModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/EmptyModifier.java similarity index 85% rename from src/main/java/com/thomas15v/noxray/modifier/EmptyModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/EmptyModifier.java index fe4913a..075f189 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/EmptyModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/EmptyModifier.java @@ -1,8 +1,7 @@ -package com.thomas15v.noxray.modifier; +package com.thomas15v.noxray.modifier.modifiers; import com.thomas15v.noxray.api.BlockModifier; import org.spongepowered.api.block.BlockState; -import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java new file mode 100644 index 0000000..a1b4351 --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java @@ -0,0 +1,32 @@ +package com.thomas15v.noxray.modifier.modifiers; + +import com.thomas15v.noxray.modifications.OreUtil; +import org.spongepowered.api.block.BlockState; +import org.spongepowered.api.block.BlockType; +import org.spongepowered.api.block.BlockTypes; +import org.spongepowered.api.util.Direction; +import org.spongepowered.api.world.Location; +import org.spongepowered.api.world.World; + +import java.util.Arrays; +import java.util.List; + +/** + * Only modifies the obviously ore blocks, And is the less lagiest solution + */ +public class ObviousModifier extends AbstractModifier { + + @Override + public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { + + if (OreUtil.isExposed(surroundingBlocks)) { + return original; + } else { + return BlockTypes.STONE.getDefaultState(); + } + } + + public static boolean checkBlock(Location blockState, Direction direction) { + return !blockState.getBlockRelative(direction).getBlock().getType().equals(BlockTypes.AIR); + } +} diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java new file mode 100644 index 0000000..8b0a24a --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java @@ -0,0 +1,25 @@ +package com.thomas15v.noxray.modifier.modifiers; + + +import com.thomas15v.noxray.api.BlockModifier; +import com.thomas15v.noxray.modifications.OreUtil; +import org.spongepowered.api.block.BlockState; +import org.spongepowered.api.block.BlockTypes; +import org.spongepowered.api.world.Location; +import org.spongepowered.api.world.World; + +import java.util.List; +import java.util.function.Predicate; + +public class RandomModifier implements BlockModifier { + + @Override + public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { + return OreUtil.isExposed(surroundingBlocks) ? original : OreUtil.getRandomOre().getDefaultState(); + } + + @Override + public Predicate getFilter() { + return blockState -> blockState.getType().equals(BlockTypes.STONE); + } +} diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java new file mode 100644 index 0000000..c241e9c --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java @@ -0,0 +1,15 @@ +package com.thomas15v.noxray.modifier.modifiers; + +import org.spongepowered.api.block.BlockState; +import org.spongepowered.api.world.Location; +import org.spongepowered.api.world.World; + +import java.util.List; + +public class VeinRandomModifier extends RandomModifier { + + @Override + public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { + return super.handleBlock(original, location, surroundingBlocks); + } +}