Skip to content
This repository was archived by the owner on Mar 7, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions src/main/java/com/thomas15v/noxray/NoXrayPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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());
Expand All @@ -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.");
Expand All @@ -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());
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/thomas15v/noxray/api/BlockModifier.java
Original file line number Diff line number Diff line change
@@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -148,8 +149,7 @@ private void obfuscateBlock(Predicate<BlockState> filter, Location<World> locati
}
}

private final static Direction[] directions = new Direction[]{Direction.EAST,
Direction.NORTH, Direction.SOUTH, Direction.WEST};


public List<BlockState> getSurrounding(Location<World> location){
List<BlockState> blockStates = new ArrayList<BlockState>(){
Expand All @@ -168,13 +168,12 @@ 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){
System.out.println("WARNING FAULTY CODE: " + blockStates + " " + location);
}
return blockStates;
}

}
39 changes: 17 additions & 22 deletions src/main/java/com/thomas15v/noxray/config/NoXrayConfig.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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();
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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 {

Expand Down
49 changes: 39 additions & 10 deletions src/main/java/com/thomas15v/noxray/event/PlayerEventListener.java
Original file line number Diff line number Diff line change
@@ -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<BlockType> 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<BlockSnapshot> transaction){
Location<World> 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<World> 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<World> location){
for (Direction direction : OreUtil.getOrdalDirections()){
updateBlock(location.getBlockRelative(direction));
}
}

private static void updateBlock(Location<World> block){
if (block.getBlockType() == BlockTypes.AIR)
return;
Expand Down
36 changes: 32 additions & 4 deletions src/main/java/com/thomas15v/noxray/modifications/OreUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<BlockType> Ores = new HashSet<>();
private static List<BlockType> 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
}

Expand All @@ -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")){
Expand All @@ -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<BlockState> surroundingBlocks){
return surroundingBlocks.stream().anyMatch(blockState -> !blockState.getType().getProperty(FullBlockSelectionBoxProperty.class).get().getValue());
}

public static Direction[] getOrdalDirections() {
return ordalDirections;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
}
}

}
}

This file was deleted.

Loading