ItemFrame support in BlockState
Reworked DocComments for plib-1.1
This commit is contained in:
parent
cdcf18cda5
commit
4d7507c557
17 changed files with 218 additions and 50 deletions
4
TODO.txt
4
TODO.txt
|
@ -1,4 +0,0 @@
|
|||
- cleanup localize-messages
|
||||
- region command descriptions
|
||||
- rework german localization
|
||||
- fix DocComment formatting for config and permissions
|
4
pom.xml
4
pom.xml
|
@ -8,7 +8,7 @@
|
|||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<plib.version>1.0-SNAPSHOT</plib.version>
|
||||
<plib.version>1.1-SNAPSHOT</plib.version>
|
||||
</properties>
|
||||
|
||||
<scm>
|
||||
|
@ -72,7 +72,7 @@
|
|||
<!-- http://dl.bukkit.org/ -->
|
||||
<groupId>org.bukkit</groupId>
|
||||
<artifactId>bukkit</artifactId>
|
||||
<version>1.6.2-R0.1-SNAPSHOT</version>
|
||||
<version>1.6.2-R0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<!-- http://dev.bukkit.org/server-mods/worldguard/ -->
|
||||
|
|
|
@ -27,18 +27,30 @@ public class FeatureBlockItemSpawn extends CoreModule<LimitedCreative> implement
|
|||
|
||||
public boolean isBlocked(Location l, Material type) {
|
||||
cleanup();
|
||||
if (isDebug())
|
||||
getLog().debug("Checking ItemBlocked: " + l.toString() + " - " + type.toString());
|
||||
for (BlockItemDrop block : list) {
|
||||
if (block.getLocation().equals(l) && (block.getType() == null || block.getType().equals(type)))
|
||||
if (isDebug())
|
||||
getLog().debug(" - " + block.toString());
|
||||
if (block.getLocation().equals(l) && (block.getType() == null || block.getType().equals(type))) {
|
||||
if (isDebug())
|
||||
getLog().debug(" blocked!");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (isDebug());
|
||||
getLog().debug(" allowed");
|
||||
return false;
|
||||
}
|
||||
private void cleanup() {
|
||||
Iterator<BlockItemDrop> i = list.iterator();
|
||||
while (i.hasNext()) {
|
||||
BlockItemDrop block = i.next();
|
||||
if (block.getTimestamp() < System.currentTimeMillis() - TIME_OFFSET)
|
||||
if (block.getTimestamp() < System.currentTimeMillis() - TIME_OFFSET) {
|
||||
if (isDebug())
|
||||
getLog().debug("Removing outdated BlokItemDrop: " + block.toString());
|
||||
i.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,6 +72,9 @@ public class FeatureBlockItemSpawn extends CoreModule<LimitedCreative> implement
|
|||
public long getTimestamp() {
|
||||
return timestamp;
|
||||
}
|
||||
public String toString() {
|
||||
return Long.toString(timestamp) + ": " + l.toString() + (type != null ? " - " + type.toString() : "");
|
||||
}
|
||||
}
|
||||
|
||||
public void block(Block block, Player player) {
|
||||
|
@ -76,6 +91,9 @@ public class FeatureBlockItemSpawn extends CoreModule<LimitedCreative> implement
|
|||
public void block(Block block) {
|
||||
block(block, null);
|
||||
}
|
||||
public void block(Location l) {
|
||||
list.add(new BlockItemDrop(l, null));
|
||||
}
|
||||
public void block(Location l, Material type) {
|
||||
list.add(new BlockItemDrop(l, type));
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import de.jaschastarke.I18n;
|
|||
import de.jaschastarke.bukkit.lib.Core;
|
||||
import de.jaschastarke.bukkit.lib.PluginLang;
|
||||
import de.jaschastarke.bukkit.lib.configuration.command.ConfigCommand;
|
||||
import de.jaschastarke.utils.ClassDescriptorStorage;
|
||||
|
||||
public class LimitedCreative extends Core {
|
||||
protected Config config = null;
|
||||
|
@ -42,6 +43,15 @@ public class LimitedCreative extends Core {
|
|||
new Backdoor().install();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassDescriptorStorage getDocCommentStorage() {
|
||||
if (cds == null) {
|
||||
cds = new ClassDescriptorStorage();
|
||||
cds.getResourceBundle().addResourceBundle("lang.doccomments");
|
||||
}
|
||||
return cds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebug() {
|
||||
return config.getDebug();
|
||||
|
|
|
@ -7,6 +7,7 @@ import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockStateCommand;
|
|||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockStateConfig;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DBQueries;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.DependencyListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.HangingListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.PlayerListener;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.worldedit.LCEditSessionFactory;
|
||||
import de.jaschastarke.modularize.IModule;
|
||||
|
@ -39,6 +40,7 @@ public class ModBlockStates extends CoreModule<LimitedCreative> {
|
|||
plugin.getPluginConfig().registerSection(config);
|
||||
|
||||
listeners.addListener(new BlockListener(this));
|
||||
listeners.addListener(new HangingListener(this));
|
||||
listeners.addListener(new PlayerListener(this));
|
||||
listeners.addListener(new DependencyListener(this));
|
||||
|
||||
|
@ -63,7 +65,6 @@ public class ModBlockStates extends CoreModule<LimitedCreative> {
|
|||
getLog().warn(plugin.getLocale().trans("block_state.warning.worldedit_sessionfactory_failed", e.getMessage()));
|
||||
}
|
||||
|
||||
|
||||
plugin.getCommandHandler().registerCommand(command);
|
||||
plugin.getMainCommand().registerCommand(new AliasHelpedCommand<BlockStateCommand>(command, "blockstate", new String[]{"bs"}));
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ public class BlockStateConfig extends Configuration implements IConfigurationSub
|
|||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public BlockStateConfig(ModBlockStates mod, ModuleEntry<IModule> modEntry) {
|
||||
super(mod.getPlugin());
|
||||
this.mod = mod;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
package de.jaschastarke.minecraft.limitedcreative.blockstate;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.Date;
|
||||
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
|
||||
import de.jaschastarke.minecraft.limitedcreative.ModBlockStates;
|
||||
import de.jaschastarke.minecraft.limitedcreative.blockstate.BlockState.Source;
|
||||
|
||||
public class HangingListener implements Listener {
|
||||
private ModBlockStates mod;
|
||||
public HangingListener(ModBlockStates mod) {
|
||||
this.mod = mod;
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
||||
if (event.getRightClicked() instanceof ItemFrame) {
|
||||
try {
|
||||
BlockState s = mod.getQueries().find(event.getRightClicked().getLocation());
|
||||
if (s != null) {
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("Modifying hanging: " + s.toString());
|
||||
|
||||
if ((s.getGameMode() == GameMode.CREATIVE || s.getSource() == Source.EDIT) && event.getPlayer().getGameMode() != GameMode.CREATIVE) {
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("... was placed by creative. Modify prevented");
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
} else {
|
||||
s.setPlayer(event.getPlayer());
|
||||
s.setDate(new Date());
|
||||
mod.getQueries().update(s);
|
||||
}
|
||||
} else {
|
||||
s = new BlockState();
|
||||
s.setLocation(event.getRightClicked().getLocation().getBlock().getLocation());
|
||||
s.setPlayer(event.getPlayer());
|
||||
s.setDate(new Date());
|
||||
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("Saving BlockState: " + s.toString());
|
||||
|
||||
mod.getQueries().insert(s);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
mod.getLog().warn("DB-Error while onHangingInteract: "+e.getMessage());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onHangingBreak(HangingBreakEvent event) {
|
||||
if (event.getEntity() instanceof ItemFrame) {
|
||||
try {
|
||||
BlockState s = mod.getQueries().find(event.getEntity().getLocation());
|
||||
if (s != null) {
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("Breaking hanging: " + s.toString());
|
||||
|
||||
if (s.getGameMode() == GameMode.CREATIVE || s.getSource() == Source.EDIT) {
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("... was placed by creative. Drop prevented");
|
||||
//mod.getBlockSpawn().block(event.getEntity().getLocation().getBlock().getLocation());
|
||||
mod.getBlockSpawn().block(event.getEntity().getLocation().getBlock().getLocation(), Material.ITEM_FRAME);
|
||||
mod.getBlockSpawn().block(event.getEntity().getLocation().getBlock().getLocation(), ((ItemFrame) event.getEntity()).getItem().getType());
|
||||
}
|
||||
|
||||
mod.getQueries().delete(s);
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
mod.getLog().warn("DB-Error while onHangingBreak: "+e.getMessage());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
public void onHangingPlace(HangingPlaceEvent event) {
|
||||
if (event.getEntity() instanceof ItemFrame) {
|
||||
try {
|
||||
BlockState s = mod.getQueries().find(event.getEntity().getLocation());
|
||||
boolean update = false;
|
||||
if (s != null) {
|
||||
// This shouldn't happen
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("Replacing current BlockState: " + s.toString());
|
||||
update = true;
|
||||
} else {
|
||||
s = new BlockState();
|
||||
s.setLocation(event.getEntity().getLocation().getBlock().getLocation());
|
||||
}
|
||||
s.setPlayer(event.getPlayer());
|
||||
s.setDate(new Date());
|
||||
if (mod.isDebug())
|
||||
mod.getLog().debug("Saving BlockState: " + s.toString());
|
||||
|
||||
if (update)
|
||||
mod.getQueries().update(s);
|
||||
else
|
||||
mod.getQueries().insert(s);
|
||||
} catch (SQLException e) {
|
||||
mod.getLog().warn("DB-Error while onHangingPlace: "+e.getMessage());
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,11 +3,17 @@ package de.jaschastarke.minecraft.limitedcreative.blockstate;
|
|||
import java.sql.SQLException;
|
||||
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.ItemFrame;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
|
||||
import de.jaschastarke.bukkit.lib.chat.ChatFormattings;
|
||||
|
@ -26,37 +32,49 @@ public class PlayerListener implements Listener {
|
|||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
Block b = event.getClickedBlock();
|
||||
if (b != null && event.getPlayer().getItemInHand().getType().equals(mod.getConfig().getTool()) && mod.getPlugin().getPermManager().hasPermission(event.getPlayer(), BlockStatePermissions.TOOL)) {
|
||||
try {
|
||||
BlockState s = mod.getQueries().find(b.getLocation());
|
||||
InGameFormatter f = new InGameFormatter(mod.getPlugin().getLang());
|
||||
String ret = null;
|
||||
if (s == null || s.getSource() == Source.UNKNOWN) {
|
||||
ret = f.formatString(ChatFormattings.ERROR, f.getString("block_state.tool_info.unknown", b.getType().toString()));
|
||||
} else {
|
||||
String k = "block_state.tool_info." + s.getSource().name().toLowerCase();
|
||||
String gm = s.getGameMode().toString().toLowerCase();
|
||||
switch (s.getGameMode()) {
|
||||
case CREATIVE:
|
||||
gm = ChatColor.GOLD + gm + ChatColor.RESET;
|
||||
case SURVIVAL:
|
||||
gm = ChatColor.GREEN + gm + ChatColor.RESET;
|
||||
case ADVENTURE:
|
||||
gm = ChatColor.DARK_GREEN + gm + ChatColor.RESET;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = f.formatString(ChatFormattings.INFO, f.getString(k, b.getType().toString(),
|
||||
s.getPlayerName(),
|
||||
gm,
|
||||
s.getDate()));
|
||||
}
|
||||
if (ret != null)
|
||||
event.getPlayer().sendMessage(ret);
|
||||
} catch (SQLException e) {
|
||||
mod.getLog().warn("DB-Error while onPlayerInteract: "+e.getMessage());
|
||||
}
|
||||
showInfo(event.getPlayer(), b.getLocation(), b.getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
@EventHandler(priority = EventPriority.HIGH)
|
||||
public void onInteractEntity(PlayerInteractEntityEvent event) {
|
||||
Entity e = event.getRightClicked();
|
||||
if (e != null && e instanceof ItemFrame && event.getPlayer().getItemInHand().getType().equals(mod.getConfig().getTool()) && mod.getPlugin().getPermManager().hasPermission(event.getPlayer(), BlockStatePermissions.TOOL)) {
|
||||
showInfo(event.getPlayer(), e.getLocation(), Material.ITEM_FRAME);
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void showInfo(Player pl, Location loc, Material type) {
|
||||
try {
|
||||
BlockState s = mod.getQueries().find(loc);
|
||||
InGameFormatter f = new InGameFormatter(mod.getPlugin().getLang());
|
||||
String ret = null;
|
||||
if (s == null || s.getSource() == Source.UNKNOWN) {
|
||||
ret = f.formatString(ChatFormattings.ERROR, f.getString("block_state.tool_info.unknown", type.toString()));
|
||||
} else {
|
||||
String k = "block_state.tool_info." + s.getSource().name().toLowerCase();
|
||||
String gm = s.getGameMode().toString().toLowerCase();
|
||||
switch (s.getGameMode()) {
|
||||
case CREATIVE:
|
||||
gm = ChatColor.GOLD + gm + ChatColor.RESET;
|
||||
case SURVIVAL:
|
||||
gm = ChatColor.GREEN + gm + ChatColor.RESET;
|
||||
case ADVENTURE:
|
||||
gm = ChatColor.DARK_GREEN + gm + ChatColor.RESET;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
ret = f.formatString(ChatFormattings.INFO, f.getString(k, type.toString(),
|
||||
s.getPlayerName(),
|
||||
gm,
|
||||
s.getDate()));
|
||||
}
|
||||
if (ret != null)
|
||||
pl.sendMessage(ret);
|
||||
} catch (SQLException e) {
|
||||
mod.getLog().warn("DB-Error while onPlayerInteract: "+e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,11 +12,11 @@ public class CmdBlockList extends ArrayList<ICmdBlockEntry> implements Configura
|
|||
private static final long serialVersionUID = -125544131527849084L;
|
||||
|
||||
@Override
|
||||
public void add(String cmd) throws InvalidValueException {
|
||||
public boolean add(String cmd) throws InvalidValueException {
|
||||
if (cmd.startsWith("^")) {
|
||||
add(new RegexpBlockEntry(cmd));
|
||||
return add(new RegexpBlockEntry(cmd));
|
||||
} else {
|
||||
add(new StringBlockEntry(cmd));
|
||||
return add(new StringBlockEntry(cmd));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ public class CmdBlockerConfig extends Configuration implements IConfigurationSub
|
|||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public CmdBlockerConfig(ModCmdBlocker modCmdBlocker, ModuleEntry<IModule> modEntry) {
|
||||
super(modCmdBlocker.getPlugin());
|
||||
mod = modCmdBlocker;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ public class GMPermConfig extends Configuration implements IConfigurationSubGrou
|
|||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public GMPermConfig(ModGameModePerm modGameModePerm, ModuleEntry<IModule> modEntry) {
|
||||
super(modGameModePerm.getPlugin());
|
||||
mod = modGameModePerm;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import de.jaschastarke.minecraft.limitedcreative.ModInventories;
|
|||
public class ArmoryConfig extends Configuration implements IConfigurationSubGroup {
|
||||
protected ModInventories mod;
|
||||
public ArmoryConfig(ModInventories modInventories) {
|
||||
super(modInventories.getPlugin());
|
||||
mod = modInventories;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,11 +20,11 @@ import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
|||
*/
|
||||
@ArchiveDocComments
|
||||
public class InventoryConfig extends Configuration implements IConfigurationSubGroup {
|
||||
|
||||
protected ModInventories mod;
|
||||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public InventoryConfig(ModInventories modInventories, ModuleEntry<IModule> modEntry) {
|
||||
super(modInventories.getPlugin());
|
||||
mod = modInventories;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
|
|
@ -108,10 +108,11 @@ public class BlackList extends ArrayList<BlackList.Blacklisted> implements Confi
|
|||
}
|
||||
|
||||
@Override // ConfigurableList, not List<E>
|
||||
public void add(String e) throws InvalidValueException {
|
||||
public boolean add(String e) throws InvalidValueException {
|
||||
if (!contains(e)) {
|
||||
add(new Blacklisted(e));
|
||||
return add(new Blacklisted(e));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override // ConfigurableList, not List<E>
|
||||
|
|
|
@ -100,10 +100,11 @@ public class BlackListEntity extends ArrayList<BlackListEntity.Blacklisted> impl
|
|||
}
|
||||
|
||||
@Override // ConfigurableList, not List<E>
|
||||
public void add(String e) throws InvalidValueException {
|
||||
public boolean add(String e) throws InvalidValueException {
|
||||
if (!contains(e)) {
|
||||
add(new Blacklisted(e));
|
||||
return add(new Blacklisted(e));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override // ConfigurableList, not List<E>
|
||||
|
|
|
@ -23,12 +23,12 @@ import de.jaschastarke.modularize.ModuleEntry.ModuleState;
|
|||
*/
|
||||
@ArchiveDocComments
|
||||
public class LimitConfig extends Configuration implements IConfigurationSubGroup {
|
||||
|
||||
protected ModCreativeLimits mod;
|
||||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public LimitConfig(ModCreativeLimits modInventories, ModuleEntry<IModule> modEntry) {
|
||||
mod = modInventories;
|
||||
public LimitConfig(ModCreativeLimits modCreativeLimits, ModuleEntry<IModule> modEntry) {
|
||||
super(modCreativeLimits.getPlugin());
|
||||
mod = modCreativeLimits;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ public class RegionConfig extends Configuration implements IConfigurationSubGrou
|
|||
protected ModuleEntry<IModule> entry;
|
||||
|
||||
public RegionConfig(ModRegions modRegions, ModuleEntry<IModule> modEntry) {
|
||||
super(modRegions.getPlugin());
|
||||
mod = modRegions;
|
||||
entry = modEntry;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue