From 2e33459acae9c4eedf67c5958dc868bc1bb42412 Mon Sep 17 00:00:00 2001 From: thomas15v Date: Fri, 16 Dec 2016 19:24:50 +0100 Subject: [PATCH 1/5] Added spoofmodifier still need to edit config to make it configuratable (urgh spell) --- .../noxray/modifier/AbstractModifier.java | 18 ++++++++++ .../noxray/modifier/ObviousModifier.java | 36 +++++++++++++++++++ .../noxray/modifier/SpoofModifier.java | 25 +++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java create mode 100644 src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java create mode 100644 src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java diff --git a/src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java b/src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java new file mode 100644 index 0000000..1e74b74 --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java @@ -0,0 +1,18 @@ +package com.thomas15v.noxray.modifier; + + +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/ObviousModifier.java b/src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java new file mode 100644 index 0000000..24237dd --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java @@ -0,0 +1,36 @@ +package com.thomas15v.noxray.modifier; + +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 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 ObviousModifier extends AbstractModifier { + + private static final List COMMON_BLOCKS = Arrays.asList(BlockTypes.AIR, BlockTypes.STONE, BlockTypes.NETHERRACK, BlockTypes.END_STONE, BlockTypes.BEDROCK); + + @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/SpoofModifier.java b/src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java new file mode 100644 index 0000000..221cb67 --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java @@ -0,0 +1,25 @@ +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.BlockTypes; +import org.spongepowered.api.world.Location; +import org.spongepowered.api.world.World; + +import java.util.List; +import java.util.function.Predicate; + +public class SpoofModifier 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); + } +} From 091ceaff9f7f1fa9e257ac0a738bf3f5b8c504ac Mon Sep 17 00:00:00 2001 From: thomas15v Date: Fri, 16 Dec 2016 20:15:54 +0100 Subject: [PATCH 2/5] adding missing files --- .../com/thomas15v/noxray/NoXrayPlugin.java | 5 +- .../thomas15v/noxray/api/BlockModifier.java | 1 - .../thomas15v/noxray/config/NoXrayConfig.java | 25 ++------- .../noxray/event/ChunkEventListener.java | 5 +- .../noxray/event/PlayerEventListener.java | 13 ++--- .../noxray/modifications/OreUtil.java | 31 +++++++++-- .../modifications/mixins/MixinChunk.java | 7 ++- .../noxray/modifier/GenerationModifier.java | 52 ------------------- .../modifier/PlayerGenerationModifier.java | 20 ------- .../{ => modifiers}/EmptyModifier.java | 3 +- .../modifier/modifiers/ModifierRegistry.java | 7 +++ .../{ => modifiers}/ObviousModifier.java | 3 +- .../{ => modifiers}/SpoofModifier.java | 2 +- 13 files changed, 54 insertions(+), 120 deletions(-) delete mode 100644 src/main/java/com/thomas15v/noxray/modifier/GenerationModifier.java delete mode 100644 src/main/java/com/thomas15v/noxray/modifier/PlayerGenerationModifier.java rename src/main/java/com/thomas15v/noxray/modifier/{ => modifiers}/EmptyModifier.java (85%) create mode 100644 src/main/java/com/thomas15v/noxray/modifier/modifiers/ModifierRegistry.java rename src/main/java/com/thomas15v/noxray/modifier/{ => modifiers}/ObviousModifier.java (92%) rename src/main/java/com/thomas15v/noxray/modifier/{ => modifiers}/SpoofModifier.java (94%) diff --git a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java index a104892..d96e540 100644 --- a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java +++ b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java @@ -7,8 +7,7 @@ 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 com.thomas15v.noxray.modifier.modifiers.SpoofModifier; import ninja.leaping.configurate.ConfigurationOptions; import ninja.leaping.configurate.commented.CommentedConfigurationNode; import ninja.leaping.configurate.loader.ConfigurationLoader; @@ -52,7 +51,7 @@ public static NoXrayPlugin getInstance(){ @Listener public void onStart(GameLoadCompleteEvent event){ loadConfig(); - blockModifier = new GenerationModifier(); + blockModifier = new SpoofModifier(); instance = this; game.getEventManager().registerListeners(this, new ChunkEventListener()); game.getEventManager().registerListeners(this, new PlayerEventListener()); 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/config/NoXrayConfig.java b/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java index 475dd06..e706b99 100644 --- a/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java +++ b/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java @@ -10,31 +10,14 @@ 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 MODIFIER = "modifier"; + private static final String MODIFIER_COMMENT = ""; + @Setting(value = MODIFIER, comment = MODIFIER_COMMENT) + private String caveEnabled = "obvious"; - 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; public boolean isUseOreDict() { return useOreDict; } - - public boolean isCaveEnabled() { - return caveEnabled; - } - - public int getCaveRange() { - return caveRange; - } } 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..ac3567d 100644 --- a/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java +++ b/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java @@ -1,11 +1,9 @@ package com.thomas15v.noxray.event; -import org.spongepowered.api.block.BlockSnapshot; import org.spongepowered.api.block.BlockTypes; -import org.spongepowered.api.data.Transaction; 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.util.Direction; import org.spongepowered.api.world.Location; import org.spongepowered.api.world.World; @@ -13,14 +11,13 @@ public class PlayerEventListener { @Listener - public void onBlockUpdate(ChangeBlockEvent.Break event){ - if (event.getCause().containsType(Player.class)) { - event.getTransactions().forEach(PlayerEventListener::updateBlocks); + public void onBlockUpdate(InteractBlockEvent event){ + 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(); + private static void updateBlocks(Location location){ for (Direction direction : Direction.values()) { if (!direction.isSecondaryOrdinal()) { updateBlock(location.getBlockRelative(direction)); diff --git a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java index a349f03..baf941d 100644 --- a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java +++ b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java @@ -4,19 +4,28 @@ 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 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<>(); 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 +34,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 +52,15 @@ public static void registerForgeOres(){ } } } + + public static BlockType getRandomOre(){ + return Ores.get(ThreadLocalRandom.current().nextInt(0, Ores.size())); + } + + private static final List SEE_TROUGH = Arrays.asList(BlockTypes.AIR, BlockTypes.WATER, + BlockTypes.LEAVES, BlockTypes.LEAVES2, BlockTypes.WALL_SIGN, BlockTypes.STANDING_SIGN, BlockTypes.SNOW_LAYER); + + public static boolean isExposed(List surroundingBlocks){ + return surroundingBlocks.stream().anyMatch(blockState -> SEE_TROUGH.contains(blockState.getType())); + } } 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/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/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/ModifierRegistry.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ModifierRegistry.java new file mode 100644 index 0000000..b1399fc --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ModifierRegistry.java @@ -0,0 +1,7 @@ +package com.thomas15v.noxray.modifier.modifiers; + +/** + * Created by thomas15v on 16/12/16. + */ +public class ModifierRegistry { +} diff --git a/src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java similarity index 92% rename from src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java index 24237dd..4ff4d1c 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/ObviousModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java @@ -1,6 +1,7 @@ -package com.thomas15v.noxray.modifier; +package com.thomas15v.noxray.modifier.modifiers; import com.thomas15v.noxray.modifications.OreUtil; +import com.thomas15v.noxray.modifier.AbstractModifier; import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockTypes; diff --git a/src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java similarity index 94% rename from src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java index 221cb67..38a6715 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/SpoofModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java @@ -1,4 +1,4 @@ -package com.thomas15v.noxray.modifier; +package com.thomas15v.noxray.modifier.modifiers; import com.thomas15v.noxray.api.BlockModifier; From 82fab2095222325a75a7e05de405add74eba6ac9 Mon Sep 17 00:00:00 2001 From: thomas15v Date: Fri, 16 Dec 2016 20:52:24 +0100 Subject: [PATCH 3/5] Optimized the see trough detection --- .../java/com/thomas15v/noxray/modifications/OreUtil.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java index baf941d..4099de5 100644 --- a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java +++ b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java @@ -7,6 +7,7 @@ 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 java.util.ArrayList; import java.util.Arrays; @@ -57,10 +58,7 @@ public static BlockType getRandomOre(){ return Ores.get(ThreadLocalRandom.current().nextInt(0, Ores.size())); } - private static final List SEE_TROUGH = Arrays.asList(BlockTypes.AIR, BlockTypes.WATER, - BlockTypes.LEAVES, BlockTypes.LEAVES2, BlockTypes.WALL_SIGN, BlockTypes.STANDING_SIGN, BlockTypes.SNOW_LAYER); - public static boolean isExposed(List surroundingBlocks){ - return surroundingBlocks.stream().anyMatch(blockState -> SEE_TROUGH.contains(blockState.getType())); + return surroundingBlocks.stream().anyMatch(blockState -> !blockState.getType().getProperty(FullBlockSelectionBoxProperty.class).get().getValue()); } } From 4bd9cbb7481baa69b0bdb6d3db74c092933f23e7 Mon Sep 17 00:00:00 2001 From: thomas15v Date: Fri, 16 Dec 2016 23:22:00 +0100 Subject: [PATCH 4/5] Fixed various update issues --- .../com/thomas15v/noxray/NoXrayPlugin.java | 4 +- .../noxray/api/NetworkBlockContainer.java | 7 ++-- .../noxray/event/PlayerEventListener.java | 40 +++++++++++++++++-- .../noxray/modifications/OreUtil.java | 7 ++++ .../{modifiers => }/ModifierRegistry.java | 2 +- .../{ => modifiers}/AbstractModifier.java | 2 +- .../modifier/modifiers/ObviousModifier.java | 7 +--- ...fModifier.java => RandomizedModifier.java} | 2 +- .../modifier/modifiers/VeinModifier.java | 15 +++++++ 9 files changed, 67 insertions(+), 19 deletions(-) rename src/main/java/com/thomas15v/noxray/modifier/{modifiers => }/ModifierRegistry.java (62%) rename src/main/java/com/thomas15v/noxray/modifier/{ => modifiers}/AbstractModifier.java (90%) rename src/main/java/com/thomas15v/noxray/modifier/modifiers/{SpoofModifier.java => RandomizedModifier.java} (93%) create mode 100644 src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java diff --git a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java index d96e540..694f5f4 100644 --- a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java +++ b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java @@ -7,7 +7,7 @@ import com.thomas15v.noxray.event.ChunkEventListener; import com.thomas15v.noxray.event.PlayerEventListener; import com.thomas15v.noxray.modifications.OreUtil; -import com.thomas15v.noxray.modifier.modifiers.SpoofModifier; +import com.thomas15v.noxray.modifier.modifiers.RandomizedModifier; import ninja.leaping.configurate.ConfigurationOptions; import ninja.leaping.configurate.commented.CommentedConfigurationNode; import ninja.leaping.configurate.loader.ConfigurationLoader; @@ -51,7 +51,7 @@ public static NoXrayPlugin getInstance(){ @Listener public void onStart(GameLoadCompleteEvent event){ loadConfig(); - blockModifier = new SpoofModifier(); + blockModifier = new RandomizedModifier(); instance = this; game.getEventManager().registerListeners(this, new ChunkEventListener()); game.getEventManager().registerListeners(this, new PlayerEventListener()); 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/event/PlayerEventListener.java b/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java index ac3567d..b314336 100644 --- a/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java +++ b/src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java @@ -1,30 +1,62 @@ package com.thomas15v.noxray.event; +import com.thomas15v.noxray.modifications.OreUtil; +import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockTypes; +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(InteractBlockEvent event){ + //pre-block-update if (event.getCause().containsType(Player.class) && event.getTargetBlock().getLocation().isPresent()) { updateBlocks(event.getTargetBlock().getLocation().get()); } } - private static void updateBlocks(Location location){ - 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 4099de5..c580e63 100644 --- a/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java +++ b/src/main/java/com/thomas15v/noxray/modifications/OreUtil.java @@ -8,6 +8,7 @@ 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.ArrayList; import java.util.Arrays; @@ -17,6 +18,8 @@ public class OreUtil { 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); @@ -61,4 +64,8 @@ public static BlockType getRandomOre(){ 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/modifier/modifiers/ModifierRegistry.java b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java similarity index 62% rename from src/main/java/com/thomas15v/noxray/modifier/modifiers/ModifierRegistry.java rename to src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java index b1399fc..098d634 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/modifiers/ModifierRegistry.java +++ b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java @@ -1,4 +1,4 @@ -package com.thomas15v.noxray.modifier.modifiers; +package com.thomas15v.noxray.modifier; /** * Created by thomas15v on 16/12/16. diff --git a/src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java similarity index 90% rename from src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java index 1e74b74..ddacffe 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/AbstractModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/AbstractModifier.java @@ -1,4 +1,4 @@ -package com.thomas15v.noxray.modifier; +package com.thomas15v.noxray.modifier.modifiers; import com.thomas15v.noxray.api.BlockModifier; diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java index 4ff4d1c..a1b4351 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/ObviousModifier.java @@ -1,7 +1,6 @@ package com.thomas15v.noxray.modifier.modifiers; import com.thomas15v.noxray.modifications.OreUtil; -import com.thomas15v.noxray.modifier.AbstractModifier; import org.spongepowered.api.block.BlockState; import org.spongepowered.api.block.BlockType; import org.spongepowered.api.block.BlockTypes; @@ -13,12 +12,10 @@ import java.util.List; /** - * 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) + * Only modifies the obviously ore blocks, And is the less lagiest solution */ public class ObviousModifier extends AbstractModifier { - private static final List COMMON_BLOCKS = Arrays.asList(BlockTypes.AIR, BlockTypes.STONE, BlockTypes.NETHERRACK, BlockTypes.END_STONE, BlockTypes.BEDROCK); - @Override public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { @@ -27,8 +24,6 @@ public BlockState handleBlock(BlockState original, Location location, Lis } else { return BlockTypes.STONE.getDefaultState(); } - - } public static boolean checkBlock(Location blockState, Direction direction) { diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomizedModifier.java similarity index 93% rename from src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomizedModifier.java index 38a6715..d7fdf44 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/modifiers/SpoofModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomizedModifier.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.function.Predicate; -public class SpoofModifier implements BlockModifier { +public class RandomizedModifier implements BlockModifier { @Override public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java new file mode 100644 index 0000000..137bc05 --- /dev/null +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.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 VeinModifier extends RandomizedModifier { + + @Override + public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { + return super.handleBlock(original, location, surroundingBlocks); + } +} From 3b84876f2e5fafef94dd0d5d2e62760cfcc60166 Mon Sep 17 00:00:00 2001 From: thomas15v Date: Fri, 16 Dec 2016 23:50:35 +0100 Subject: [PATCH 5/5] Finished config --- .../com/thomas15v/noxray/NoXrayPlugin.java | 13 +++--- .../thomas15v/noxray/config/NoXrayConfig.java | 22 +++++++--- .../noxray/modifier/ModifierRegistry.java | 40 +++++++++++++++++-- ...mizedModifier.java => RandomModifier.java} | 2 +- ...nModifier.java => VeinRandomModifier.java} | 2 +- 5 files changed, 64 insertions(+), 15 deletions(-) rename src/main/java/com/thomas15v/noxray/modifier/modifiers/{RandomizedModifier.java => RandomModifier.java} (93%) rename src/main/java/com/thomas15v/noxray/modifier/modifiers/{VeinModifier.java => VeinRandomModifier.java} (88%) diff --git a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java index 694f5f4..bbe2134 100644 --- a/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java +++ b/src/main/java/com/thomas15v/noxray/NoXrayPlugin.java @@ -7,7 +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.modifiers.RandomizedModifier; import ninja.leaping.configurate.ConfigurationOptions; import ninja.leaping.configurate.commented.CommentedConfigurationNode; import ninja.leaping.configurate.loader.ConfigurationLoader; @@ -17,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; @@ -49,9 +49,8 @@ public static NoXrayPlugin getInstance(){ private NoXrayConfig config; @Listener - public void onStart(GameLoadCompleteEvent event){ + public void onPreInit(GamePreInitializationEvent event){ loadConfig(); - blockModifier = new RandomizedModifier(); instance = this; game.getEventManager().registerListeners(this, new ChunkEventListener()); game.getEventManager().registerListeners(this, new PlayerEventListener()); @@ -62,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."); @@ -72,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/config/NoXrayConfig.java b/src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java index e706b99..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; @@ -11,13 +15,21 @@ public class NoXrayConfig { private boolean useOreDict = true; private static final String MODIFIER = "modifier"; - private static final String MODIFIER_COMMENT = ""; + private static final String MODIFIER_COMMENT = "Different modifiers are obvious, allhidden, random and veinrandom"; @Setting(value = MODIFIER, comment = MODIFIER_COMMENT) - private String caveEnabled = "obvious"; - - + private String modifier = "obvious"; public boolean isUseOreDict() { return useOreDict; } -} + + 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/modifier/ModifierRegistry.java b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java index 098d634..f611756 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java +++ b/src/main/java/com/thomas15v/noxray/modifier/ModifierRegistry.java @@ -1,7 +1,41 @@ package com.thomas15v.noxray.modifier; -/** - * Created by thomas15v on 16/12/16. - */ +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/modifiers/RandomizedModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java similarity index 93% rename from src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomizedModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java index d7fdf44..8b0a24a 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomizedModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/RandomModifier.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.function.Predicate; -public class RandomizedModifier implements BlockModifier { +public class RandomModifier implements BlockModifier { @Override public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) { diff --git a/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java similarity index 88% rename from src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java rename to src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java index 137bc05..c241e9c 100644 --- a/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinModifier.java +++ b/src/main/java/com/thomas15v/noxray/modifier/modifiers/VeinRandomModifier.java @@ -6,7 +6,7 @@ import java.util.List; -public class VeinModifier extends RandomizedModifier { +public class VeinRandomModifier extends RandomModifier { @Override public BlockState handleBlock(BlockState original, Location location, List surroundingBlocks) {