Improved the seechunk command.
This commit is contained in:
parent
87dc76716e
commit
fafad0f590
@ -67,6 +67,7 @@ permissions:
|
||||
factions.power: true
|
||||
factions.power.any: true
|
||||
factions.relation: true
|
||||
factions.seechunk: true
|
||||
factions.sethome: true
|
||||
factions.show: true
|
||||
factions.tag: true
|
||||
@ -165,6 +166,8 @@ permissions:
|
||||
description: reload data file(s) from disk
|
||||
factions.save:
|
||||
description: save all data to disk
|
||||
factions.seechunk:
|
||||
description: see the chunk you stand in
|
||||
factions.sethome:
|
||||
description: set the faction home
|
||||
factions.show:
|
||||
|
@ -112,6 +112,7 @@ public class CmdHelp extends FCommand
|
||||
|
||||
pageLines = new ArrayList<String>();
|
||||
pageLines.add( p.cmdBase.cmdMap.getUseageTemplate(true) );
|
||||
pageLines.add( p.cmdBase.cmdSeeChunks.getUseageTemplate(true) );
|
||||
pageLines.add(p.txt.parse("<i>Claimed land with ownership set is further protected so"));
|
||||
pageLines.add(p.txt.parse("<i>that only the owner(s), faction admin, and possibly the"));
|
||||
pageLines.add(p.txt.parse("<i>faction moderators have full access."));
|
||||
|
@ -1,28 +1,21 @@
|
||||
package com.massivecraft.factions.cmd;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.massivecraft.factions.struct.Permission;
|
||||
import com.massivecraft.factions.util.VisualizeUtil;
|
||||
|
||||
// !!!! This is just an experiment.
|
||||
// Proof of concept. We could use fake block updates to visualize the territories.
|
||||
public class CmdSeeChunk extends FCommand
|
||||
{
|
||||
public CmdSeeChunk()
|
||||
{
|
||||
super();
|
||||
this.aliases.add("sc");
|
||||
this.aliases.add("seechunks");
|
||||
this.aliases.add("seechunk");
|
||||
|
||||
//this.requiredArgs.add("");
|
||||
//this.optionalArgs.put("", "");
|
||||
|
||||
this.permission = Permission.ADMIN.node;
|
||||
this.permission = Permission.SEE_CHUNK.node;
|
||||
this.disableOnLock = false;
|
||||
|
||||
senderMustBePlayer = true;
|
||||
@ -64,38 +57,12 @@ public class CmdSeeChunk extends FCommand
|
||||
public void showPillar(Player player, World world, int blockX, int blockZ)
|
||||
{
|
||||
Location loc = new Location(world, blockX, 0, blockZ);
|
||||
//Block block = loc.getBlock();
|
||||
for (int blockY = 0; blockY <=127; blockY++)
|
||||
{
|
||||
loc.setY(blockY);
|
||||
if (loc.getBlock().getTypeId() != 0) continue;
|
||||
player.sendBlockChange(loc, blockY % 5 == 0 ? Material.GLOWSTONE : Material.GLASS, (byte) 0);
|
||||
VisualizeUtil.addLocation(player, loc.clone(), blockY % 5 == 0 ? Material.GLOWSTONE.getId() : Material.GLASS.getId());
|
||||
}
|
||||
}
|
||||
|
||||
// DEV DIRT BELOW...
|
||||
|
||||
public ArrayList<Location> getChunkPillarLocations(int chunkX, int chunkZ)
|
||||
{
|
||||
ArrayList<Location> ret = new ArrayList<Location>();
|
||||
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public ArrayList<Location> getPillar(Block block)
|
||||
{
|
||||
ArrayList<Location> ret = new ArrayList<Location>();
|
||||
|
||||
// y 0-127
|
||||
|
||||
for (int i = 0; i <=127; i++)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerKickEvent;
|
||||
import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerPreLoginEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerRespawnEvent;
|
||||
|
||||
@ -34,6 +35,7 @@ import com.massivecraft.factions.integration.SpoutFeatures;
|
||||
import com.massivecraft.factions.struct.FFlag;
|
||||
import com.massivecraft.factions.struct.FPerm;
|
||||
import com.massivecraft.factions.struct.Rel;
|
||||
import com.massivecraft.factions.util.VisualizeUtil;
|
||||
|
||||
import java.util.logging.Level;
|
||||
|
||||
@ -452,4 +454,26 @@ public class FactionsPlayerListener implements Listener
|
||||
badGuy.detach();
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// VisualizeUtil
|
||||
// -------------------------------------------- //
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPlayerMoveClearVisualizations(PlayerMoveEvent event)
|
||||
{
|
||||
if (event.isCancelled()) return;
|
||||
|
||||
Block blockFrom = event.getFrom().getBlock();
|
||||
Block blockTo = event.getTo().getBlock();
|
||||
if (blockFrom.equals(blockTo)) return;
|
||||
|
||||
VisualizeUtil.clear(event.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
public void onPlayerPreLogin(PlayerPreLoginEvent event)
|
||||
{
|
||||
VisualizeUtil.onPlayerPreLogin(event.getName());
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ public enum Permission
|
||||
RELATION("relation"),
|
||||
RELOAD("reload"),
|
||||
SAVE("save"),
|
||||
SEE_CHUNK("seechunk"),
|
||||
SETHOME("sethome"),
|
||||
SHOW("show"),
|
||||
TAG("tag"),
|
||||
|
96
src/com/massivecraft/factions/util/VisualizeUtil.java
Normal file
96
src/com/massivecraft/factions/util/VisualizeUtil.java
Normal file
@ -0,0 +1,96 @@
|
||||
package com.massivecraft.factions.util;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.massivecraft.factions.P;
|
||||
|
||||
// TODO: Only send blocks in visual range
|
||||
// TODO: Only send blocks that where changed when clearing?
|
||||
// TODO: Create packed queue to avoid freezes.
|
||||
|
||||
public class VisualizeUtil
|
||||
{
|
||||
protected static Map<String, Set<Location>> playerLocations = new HashMap<String, Set<Location>>();
|
||||
|
||||
public static void onPlayerPreLogin(String name)
|
||||
{
|
||||
playerLocations.put(name, new HashSet<Location>());
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// SINGLE
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void addLocation(Player player, Location location, int typeId, byte data)
|
||||
{
|
||||
playerLocations.get(player.getName()).add(location);
|
||||
player.sendBlockChange(location, typeId, data);
|
||||
}
|
||||
|
||||
public static void addLocation(Player player, Location location, int typeId)
|
||||
{
|
||||
playerLocations.get(player.getName()).add(location);
|
||||
player.sendBlockChange(location, typeId, (byte) 0);
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// MANY
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void addLocations(Player player, Map<Location, Integer> locationMaterialIds)
|
||||
{
|
||||
Set<Location> ploc = playerLocations.get(player.getName());
|
||||
for (Entry<Location, Integer> entry : locationMaterialIds.entrySet())
|
||||
{
|
||||
ploc.add(entry.getKey());
|
||||
player.sendBlockChange(entry.getKey(), entry.getValue(), (byte) 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addLocations(Player player, Collection<Location> locations, int typeId)
|
||||
{
|
||||
Set<Location> ploc = playerLocations.get(player.getName());
|
||||
for (Location location : locations)
|
||||
{
|
||||
ploc.add(location);
|
||||
player.sendBlockChange(location, typeId, (byte) 0);
|
||||
}
|
||||
}
|
||||
|
||||
public static void addBlocks(Player player, Collection<Block> blocks, int typeId)
|
||||
{
|
||||
Set<Location> ploc = playerLocations.get(player.getName());
|
||||
for (Block block : blocks)
|
||||
{
|
||||
Location location = block.getLocation();
|
||||
ploc.add(location);
|
||||
player.sendBlockChange(location, typeId, (byte) 0);
|
||||
}
|
||||
}
|
||||
|
||||
// -------------------------------------------- //
|
||||
// CLEAR
|
||||
// -------------------------------------------- //
|
||||
|
||||
public static void clear(Player player)
|
||||
{
|
||||
Set<Location> locations = playerLocations.get(player.getName());
|
||||
if (locations == null) return;
|
||||
for (Location location : locations)
|
||||
{
|
||||
Block block = location.getWorld().getBlockAt(location);
|
||||
player.sendBlockChange(location, block.getTypeId(), block.getData());
|
||||
}
|
||||
playerLocations.remove(player);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user