Added a config option to disable trail visibility for the local player if they themselves have a trail

This commit is contained in:
Adubbz 2016-01-03 11:15:19 +11:00
parent f188396c99
commit 7eed85f66b
5 changed files with 60 additions and 10 deletions

View file

@ -10,8 +10,13 @@ package biomesoplenty.common.config;
import java.io.File; import java.io.File;
import biomesoplenty.common.remote.TrailManager;
import biomesoplenty.common.remote.TrailManager.TrailVisibilityMode;
import biomesoplenty.common.util.entity.PlayerUtil;
import biomesoplenty.core.BiomesOPlenty; import biomesoplenty.core.BiomesOPlenty;
import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.relauncher.Side;
public class MiscConfigurationHandler public class MiscConfigurationHandler
{ {
@ -20,6 +25,9 @@ public class MiscConfigurationHandler
public static boolean useBoPWorldTypeDefault; public static boolean useBoPWorldTypeDefault;
public static boolean overrideTitlePanorama; public static boolean overrideTitlePanorama;
//Client-side only
public static TrailVisibilityMode trailVisbilityMode;
public static void init(File configFile) public static void init(File configFile)
{ {
config = new Configuration(configFile); config = new Configuration(configFile);
@ -31,6 +39,16 @@ public class MiscConfigurationHandler
//TODO: Make this default to true once all biomes have been implemented //TODO: Make this default to true once all biomes have been implemented
useBoPWorldTypeDefault = config.getBoolean("Default to BoP World Type", "GUI Settings", false, "Use the Biomes O' Plenty World Type by default when selecting a world."); useBoPWorldTypeDefault = config.getBoolean("Default to BoP World Type", "GUI Settings", false, "Use the Biomes O' Plenty World Type by default when selecting a world.");
overrideTitlePanorama = config.getBoolean("Enable Biomes O\' Plenty Main Menu Panorama", "GUI Settings", true, "Override the main menu panorama and use ours instead (It\'s nicer!)"); overrideTitlePanorama = config.getBoolean("Enable Biomes O\' Plenty Main Menu Panorama", "GUI Settings", true, "Override the main menu panorama and use ours instead (It\'s nicer!)");
//Client-side only options
if (FMLCommonHandler.instance().getSide() == Side.CLIENT)
{
//Check if the player has a trail
if (TrailManager.trailsMap.containsKey(PlayerUtil.getClientPlayerUUID()))
{
trailVisbilityMode = TrailVisibilityMode.values()[config.getInt("Modify Trail Visibility", "Trail Settings", 0, 0, 1, "0 = All trails visble, 1 = Others can see your trail but you can'")];
}
}
} }
catch (Exception e) catch (Exception e)
{ {

View file

@ -9,8 +9,11 @@
package biomesoplenty.common.handler; package biomesoplenty.common.handler;
import biomesoplenty.api.particle.BOPParticleTypes; import biomesoplenty.api.particle.BOPParticleTypes;
import biomesoplenty.common.config.MiscConfigurationHandler;
import biomesoplenty.common.remote.TrailManager; import biomesoplenty.common.remote.TrailManager;
import biomesoplenty.common.remote.TrailManager.TrailVisibilityMode;
import biomesoplenty.core.BiomesOPlenty; import biomesoplenty.core.BiomesOPlenty;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.BlockPos; import net.minecraft.util.BlockPos;
import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumFacing;
@ -25,35 +28,39 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class TrailsEventHandler public class TrailsEventHandler
{ {
static
{
TrailManager.retrieveTrails();
}
@SubscribeEvent(receiveCanceled = true) @SubscribeEvent(receiveCanceled = true)
public void onEntityUpdate(PlayerTickEvent event) public void onEntityUpdate(PlayerTickEvent event)
{ {
if (event.phase == TickEvent.Phase.START) if (event.phase == TickEvent.Phase.START)
{ {
Minecraft minecraft = Minecraft.getMinecraft();
EntityPlayer player = (EntityPlayer)event.player; EntityPlayer player = (EntityPlayer)event.player;
//Check if the player has a trail //Check if the player has a trail
if (TrailManager.trailsMap.containsKey(player.getUniqueID())) if (TrailManager.trailsMap.containsKey(player.getUniqueID()))
{ {
//Don't display if the local player's trail if they have the visibility set to others
if (MiscConfigurationHandler.trailVisbilityMode == TrailVisibilityMode.OTHERS && minecraft.thePlayer.getUniqueID() == player.getUniqueID())
{
return;
}
String trailName = TrailManager.trailsMap.get(player.getUniqueID()); String trailName = TrailManager.trailsMap.get(player.getUniqueID());
World world = player.worldObj; World world = player.worldObj;
float groundYOffset = 0.015625F; //Prevents particles from z-fighting with the ground float groundYOffset = 0.015625F; //Prevents particles from z-fighting with the ground
BlockPos playerPos = player.getPosition(); BlockPos playerPos = player.getPosition();
if (world.getBlockState(playerPos.down()).getBlock().isSideSolid(world, playerPos.down(), EnumFacing.UP)) //Only place particles on blocks with a solid top
{
if (player.posX != player.prevPosX || player.posZ != player.prevPosZ) //Particles should only spawn if the player is moving
{
//Makes placement more interesting, scatter slightly on the x and z axis //Makes placement more interesting, scatter slightly on the x and z axis
double offsetX = 0.3 - world.rand.nextFloat() * 0.6; double offsetX = 0.3 - world.rand.nextFloat() * 0.6;
double offsetZ = 0.3 - world.rand.nextFloat() * 0.6; double offsetZ = 0.3 - world.rand.nextFloat() * 0.6;
BlockPos groundPos = playerPos.add(offsetX, -1, offsetZ);
if (!world.isAirBlock(groundPos) && world.getBlockState(groundPos).getBlock().isSideSolid(world, groundPos, EnumFacing.UP)) //Only place particles on blocks with a solid top
{
if (player.posX != player.prevPosX || player.posZ != player.prevPosZ) //Particles should only spawn if the player is moving
{
//Move the particle up by 0.01 on spawn to prevent z-fighting (the trail particles move down with time) //Move the particle up by 0.01 on spawn to prevent z-fighting (the trail particles move down with time)
BiomesOPlenty.proxy.spawnParticle(BOPParticleTypes.PLAYER_TRAIL, player.posX + offsetX, ((int)player.posY) + groundYOffset + 0.01, player.posZ + offsetZ, trailName); BiomesOPlenty.proxy.spawnParticle(BOPParticleTypes.PLAYER_TRAIL, player.posX + offsetX, ((int)player.posY) + groundYOffset + 0.01, player.posZ + offsetZ, trailName);
} }

View file

@ -55,4 +55,9 @@ public class TrailManager
BiomesOPlenty.logger.warn("There was an issue retrieving trail info from remote!"); BiomesOPlenty.logger.warn("There was an issue retrieving trail info from remote!");
} }
} }
public static enum TrailVisibilityMode
{
ALL, OTHERS, NOBODY; //TODO: Implement NOBODY mode
}
} }

View file

@ -0,0 +1,18 @@
package biomesoplenty.common.util.entity;
import java.util.UUID;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class PlayerUtil
{
@SideOnly(Side.CLIENT)
public static UUID getClientPlayerUUID()
{
Minecraft minecraft = Minecraft.getMinecraft();
return minecraft.getSession().getProfile().getId();
}
}

View file

@ -25,6 +25,7 @@ import biomesoplenty.common.init.ModGenerators;
import biomesoplenty.common.init.ModHandlers; import biomesoplenty.common.init.ModHandlers;
import biomesoplenty.common.init.ModItems; import biomesoplenty.common.init.ModItems;
import biomesoplenty.common.init.ModPotions; import biomesoplenty.common.init.ModPotions;
import biomesoplenty.common.remote.TrailManager;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.Mod.Instance;
@ -54,6 +55,7 @@ public class BiomesOPlenty
{ {
configDirectory = new File(event.getModConfigurationDirectory(), "biomesoplenty"); configDirectory = new File(event.getModConfigurationDirectory(), "biomesoplenty");
TrailManager.retrieveTrails();
ModConfiguration.init(configDirectory); ModConfiguration.init(configDirectory);
// setup blocks before items, because some items need to reference blocks in their constructors (eg seeds) // setup blocks before items, because some items need to reference blocks in their constructors (eg seeds)