Update to 1.14pre5

This commit is contained in:
Brokkonaut
2019-04-24 17:45:34 +02:00
parent d4b127244e
commit 254c856b2f
17 changed files with 175 additions and 120 deletions

View File

@@ -4,7 +4,7 @@
<groupId>de.diddiz</groupId>
<artifactId>logblock</artifactId>
<version>1.13.2-SNAPSHOT</version>
<version>1.14-SNAPSHOT</version>
<packaging>jar</packaging>
<name>LogBlock</name>
@@ -42,7 +42,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.13.2-R0.1-SNAPSHOT</version>
<version>1.14-pre5-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>

View File

@@ -15,7 +15,9 @@ import org.bukkit.block.data.type.Comparator;
import org.bukkit.block.data.type.DaylightDetector;
import org.bukkit.block.data.type.NoteBlock;
import org.bukkit.block.data.type.Repeater;
import org.bukkit.block.data.type.Sign;
import org.bukkit.block.data.type.Switch;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.inventory.ItemStack;
import java.sql.ResultSet;
@@ -140,7 +142,7 @@ public class BlockChange implements LookupCacheElement {
msg.append("stepped on ").append(type.getMaterial().name());
} else if (type.getMaterial() == Material.TRIPWIRE) {
msg.append("ran into ").append(type.getMaterial().name());
} else if (type.getMaterial() == Material.SIGN || type.getMaterial() == Material.WALL_SIGN) {
} else if (type instanceof Sign || type instanceof WallSign) {
msg.append("edited a ").append(type.getMaterial().name()).append(" to ").append(typeDetails);
} else {
msg.append("replaced ").append(replaced.getMaterial().name()).append(replacedDetails).append(" with ").append(type.getMaterial().name()).append(typeDetails);

View File

@@ -34,8 +34,9 @@ import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.Sign;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@@ -325,34 +326,6 @@ public class Consumer extends Thread {
addQueueLast(new KillRow(location, killer == null ? null : killer, victim, weapon == null ? 0 : MaterialConverter.getOrAddMaterialId(weapon.getType().getKey().toString())));
}
/**
* Logs an actor breaking a sign along with its contents
*
* @param actor
* Actor responsible for breaking the sign
* @param loc
* Location of the broken sign
* @param type
* BlockData of the sign.
* @param typeState
* Serialized text data of the sign
*/
public void queueSignBreak(Actor actor, Location loc, BlockData type, YamlConfiguration typeState) {
queueBlock(actor, loc, type, null, typeState, null, null);
}
/**
* Logs an actor breaking a sign along with its contents
*
* @param actor
* Actor responsible for breaking the sign
* @param sign
* The sign being broken
*/
public void queueSignBreak(Actor actor, Sign sign) {
queueSignBreak(actor, new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ()), sign.getBlockData(), BlockStateCodecs.serialize(sign));
}
/**
* Logs an actor placing a sign along with its contents
*
@@ -365,25 +338,13 @@ public class Consumer extends Thread {
* @param lines
* The four lines on the sign.
*/
public void queueSignPlace(Actor actor, Location loc, BlockData type, String[] lines) {
if ((type.getMaterial() != Material.SIGN && type.getMaterial() != Material.WALL_SIGN) || lines == null || lines.length != 4) {
public void queueSignChange(Actor actor, Location loc, BlockData type, String[] lines) {
if ((!(type instanceof Sign) && !(type instanceof WallSign)) || lines == null || lines.length != 4) {
return;
}
queueBlock(actor, loc, type, type, null, BlockStateCodecSign.serialize(lines), null);
}
/**
* Logs an actor placing a sign along with its contents
*
* @param actor
* Actor placing the sign
* @param sign
* The palced sign object
*/
public void queueSignPlace(Actor actor, Sign sign) {
queueSignPlace(actor, new Location(sign.getWorld(), sign.getX(), sign.getY(), sign.getZ()), sign.getBlockData(), sign.getLines());
}
public void queueChat(Actor player, String message) {
if (!Config.ignoredChat.isEmpty()) {
String lowerCaseMessage = message.toLowerCase();

View File

@@ -88,6 +88,7 @@ public class LogBlock extends JavaPlugin {
conn.close();
Updater updater = new Updater(this);
updater.checkTables();
updater.updateMaterialsPost1_13();
MaterialConverter.initializeMaterials(getConnection());
MaterialConverter.getOrAddMaterialId(Material.AIR.getKey()); // AIR must be the first entry
EntityTypeConverter.initializeEntityTypes(getConnection());

View File

@@ -1,7 +1,7 @@
package de.diddiz.LogBlock;
public enum Logging {
BLOCKPLACE(true), BLOCKBREAK(true), SIGNTEXT, TNTEXPLOSION(true), CREEPEREXPLOSION(true),
BLOCKPLACE(true), BLOCKBREAK(true), SIGNTEXT(true), TNTEXPLOSION(true), CREEPEREXPLOSION(true),
GHASTFIREBALLEXPLOSION(true), ENDERDRAGON(true), MISCEXPLOSION(true), FIRE(true), LEAVESDECAY,
LAVAFLOW, WATERFLOW, CHESTACCESS, KILL, CHAT, SNOWFORM, SNOWFADE, DOORINTERACT,
SWITCHINTERACT, CAKEEAT, ENDERMEN, NOTEBLOCKINTERACT, DIODEINTERACT, COMPARATORINTERACT,

View File

@@ -5,6 +5,7 @@ import org.bukkit.Location;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Objects;
import static de.diddiz.util.Utils.spaces;
@@ -30,6 +31,6 @@ public class SummedBlockChanges implements LookupCacheElement {
@Override
public String getMessage() {
return created + spaces((int) ((10 - String.valueOf(created).length()) / spaceFactor)) + destroyed + spaces((int) ((10 - String.valueOf(destroyed).length()) / spaceFactor)) + (actor != null ? actor.getName() : MaterialConverter.getMaterial(type).toString());
return created + spaces((int) ((10 - String.valueOf(created).length()) / spaceFactor)) + destroyed + spaces((int) ((10 - String.valueOf(destroyed).length()) / spaceFactor)) + (actor != null ? actor.getName() : Objects.toString(MaterialConverter.getMaterial(type)));
}
}

View File

@@ -27,7 +27,6 @@ import static de.diddiz.LogBlock.config.Config.getLoggedWorlds;
import static de.diddiz.LogBlock.config.Config.isLogging;
import static de.diddiz.util.BukkitUtils.friendlyWorldname;
import de.diddiz.util.ComparableVersion;
import java.util.regex.Pattern;
class Updater {
private final LogBlock logblock;
@@ -42,11 +41,6 @@ class Updater {
boolean update() {
final ConfigurationSection config = logblock.getConfig();
String versionString = config.getString("version");
if (Pattern.matches("1\\.\\d{2}",versionString)) {
versionString = "1." + versionString.charAt(2) + "." + versionString.charAt(3);
config.set("version",versionString);
logblock.saveConfig();
}
ComparableVersion configVersion = new ComparableVersion(versionString);
// if (configVersion.compareTo(new ComparableVersion(logblock.getDescription().getVersion().replace(" (manually compiled)", ""))) >= 0) {
// return false;
@@ -686,8 +680,8 @@ class Updater {
Material replacedMaterial = MaterialConverter.getBlockData(replaced, -1).getMaterial();
Material typeMaterial = MaterialConverter.getBlockData(type, -1).getMaterial();
boolean wasSign = replacedMaterial == Material.SIGN || replacedMaterial == Material.WALL_SIGN;
boolean isSign = typeMaterial == Material.SIGN || typeMaterial == Material.WALL_SIGN;
boolean wasSign = replacedMaterial == Material.OAK_SIGN || replacedMaterial == Material.OAK_WALL_SIGN;
boolean isSign = typeMaterial == Material.OAK_SIGN || typeMaterial == Material.OAK_WALL_SIGN;
insertSignState.setInt(1, id);
insertSignState.setBytes(2, wasSign ? bytes : null);
@@ -739,6 +733,10 @@ class Updater {
config.set("version", "1.13.2");
}
if (configVersion.compareTo(new ComparableVersion("1.14.0")) < 0) {
config.set("version", "1.14.0");
}
// this can always be checked
try {
final Connection conn = logblock.getConnection();
@@ -837,6 +835,84 @@ class Updater {
}
}
/**
* Update materials that were renamed
*/
public void updateMaterialsPost1_13() {
final ConfigurationSection config = logblock.getConfig();
String previousMinecraftVersion = config.getString("previousMinecraftVersion");
if (previousMinecraftVersion == null) {
previousMinecraftVersion = "1.13";
}
ComparableVersion comparablePreviousMinecraftVersion = new ComparableVersion(previousMinecraftVersion);
String currentMinecraftVersion = logblock.getServer().getVersion();
currentMinecraftVersion = currentMinecraftVersion.substring(currentMinecraftVersion.indexOf("(MC: ") + 5);
currentMinecraftVersion = currentMinecraftVersion.substring(0, currentMinecraftVersion.indexOf(" "));
logblock.getLogger().info("[Updater] Current Minecraft Version: '" + currentMinecraftVersion + "'");
ComparableVersion comparableCurrentMinecraftVersion = new ComparableVersion(currentMinecraftVersion);
if (comparablePreviousMinecraftVersion.compareTo("1.14") < 0 && comparableCurrentMinecraftVersion.compareTo("1.14") >= 0) {
logblock.getLogger().info("[Updater] Upgrading Materials to 1.14");
renameMaterial("minecraft:sign", "minecraft:oak_sign", true);
renameMaterial("minecraft:wall_sign", "minecraft:oak_wall_sign", true);
renameMaterial("minecraft:stone_slab", "minecraft:smooth_stone_slab", false);
renameMaterial("minecraft:rose_red", "minecraft:red_dye", true);
renameMaterial("minecraft:dandelion_yellow", "minecraft:yellow_dye", true);
renameMaterial("minecraft:cactus_green", "minecraft:green_dye", true);
}
config.set("previousMinecraftVersion", currentMinecraftVersion);
logblock.saveConfig();
}
private void renameMaterial(String oldName, String newName, boolean mergeOnCollision) {
logblock.getLogger().info("[Updater] Renaming " + oldName + " to " + newName);
final Connection conn = logblock.getConnection();
try {
conn.setAutoCommit(false);
PreparedStatement stSelectMaterial = conn.prepareStatement("SELECT id FROM `lb-materials` WHERE name = ?");
stSelectMaterial.setString(1, oldName);
ResultSet rs = stSelectMaterial.executeQuery();
if (!rs.next()) {
logblock.getLogger().info("[Updater] Skipped because " + oldName + " does not exist..");
} else {
int oldId = rs.getInt(1);
stSelectMaterial.setString(1, newName);
rs = stSelectMaterial.executeQuery();
if (rs.next()) {
int newId = rs.getInt(1);
if (!mergeOnCollision) {
logblock.getLogger().info("[Updater] Skipped because " + newName + " already exists..");
} else {
Statement st = conn.createStatement();
int rows = 0;
for (final WorldConfig wcfg : getLoggedWorlds()) {
rows += st.executeUpdate("UPDATE `" + wcfg.table + "-blocks` SET replaced = " + newId + " WHERE replaced = " + oldId);
rows += st.executeUpdate("UPDATE `" + wcfg.table + "-blocks` SET type = " + newId + " WHERE type = " + oldId);
rows += st.executeUpdate("UPDATE `" + wcfg.table + "-chestdata` SET itemtype = " + newId + " WHERE itemtype = " + oldId);
}
st.execute("DELETE FROM `lb-materials` WHERE id = " + oldId);
st.close();
logblock.getLogger().info("[Updater] Successfully merged " + rows + " entries..");
}
} else {
PreparedStatement stRenameMaterial = conn.prepareStatement("UPDATE `lb-materials` SET name = ? WHERE id = ?");
stRenameMaterial.setString(1, newName);
stRenameMaterial.setInt(2, oldId);
if (stRenameMaterial.executeUpdate() > 0) {
logblock.getLogger().info("[Updater] Successfully renamed..");
}
stRenameMaterial.close();
}
}
stSelectMaterial.close();
conn.commit();
conn.close();
} catch (final SQLException ex) {
logblock.getLogger().log(Level.SEVERE, "[Updater] Error: " + ex.getMessage(), ex);
}
}
public static class PlayerCountChecker implements Runnable {
private LogBlock logblock;

View File

@@ -12,7 +12,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
public class BlockStateCodecSign implements BlockStateCodec {
@Override
public Material[] getApplicableMaterials() {
return new Material[] { Material.WALL_SIGN, Material.SIGN };
return new Material[] { Material.ACACIA_SIGN, Material.ACACIA_WALL_SIGN, Material.BIRCH_SIGN, Material.BIRCH_WALL_SIGN, Material.DARK_OAK_SIGN, Material.DARK_OAK_WALL_SIGN, Material.JUNGLE_SIGN, Material.JUNGLE_WALL_SIGN, Material.OAK_SIGN, Material.OAK_WALL_SIGN, Material.SPRUCE_SIGN, Material.SPRUCE_WALL_SIGN };
}
@Override

View File

@@ -10,7 +10,6 @@ import org.bukkit.Bukkit;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Waterlogged;
import org.bukkit.event.EventHandler;
@@ -40,9 +39,7 @@ public class BlockBreakLogging extends LoggingListener {
final Block origin = event.getBlock();
final Material type = origin.getType();
if (wcfg.isLogging(Logging.SIGNTEXT) && (type == Material.SIGN || type == Material.WALL_SIGN)) {
consumer.queueSignBreak(actor, (Sign) origin.getState());
} else if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.getContainerBlocks().contains(type)) {
if (wcfg.isLogging(Logging.CHESTACCESS) && BukkitUtils.getContainerBlocks().contains(type)) {
consumer.queueContainerBreak(actor, origin.getState());
} else if (type == Material.ICE) {
// When in creative mode ice doesn't form water

View File

@@ -11,7 +11,6 @@ import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.Sign;
import org.bukkit.entity.*;
import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.event.EventHandler;
@@ -114,9 +113,7 @@ public class ExplosionLogging extends LoggingListener {
}
for (final Block block : event.blockList()) {
final Material type = block.getType();
if (wcfg.isLogging(Logging.SIGNTEXT) & (type == Material.SIGN || type == Material.WALL_SIGN)) {
consumer.queueSignBreak(actor, (Sign) block.getState());
} else if (wcfg.isLogging(Logging.CHESTACCESS) && (getContainerBlocks().contains(type))) {
if (wcfg.isLogging(Logging.CHESTACCESS) && (getContainerBlocks().contains(type))) {
consumer.queueContainerBreak(actor, block.getState());
} else {
consumer.queueBlockBreak(actor, block.getState());
@@ -171,9 +168,7 @@ public class ExplosionLogging extends LoggingListener {
}
final Material type = block.getType();
if (wcfg.isLogging(Logging.SIGNTEXT) & (type == Material.SIGN || type == Material.WALL_SIGN)) {
consumer.queueSignBreak(actor, (Sign) block.getState());
} else if (wcfg.isLogging(Logging.CHESTACCESS) && (getContainerBlocks().contains(type))) {
if (wcfg.isLogging(Logging.CHESTACCESS) && (getContainerBlocks().contains(type))) {
consumer.queueContainerBreak(actor, block.getState());
} else {
consumer.queueBlockBreak(actor, block.getState());

View File

@@ -17,7 +17,7 @@ public class SignChangeLogging extends LoggingListener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onSignChange(SignChangeEvent event) {
if (isLogging(event.getBlock().getWorld(), Logging.SIGNTEXT)) {
consumer.queueSignPlace(Actor.actorFromEntity(event.getPlayer()), event.getBlock().getLocation(), event.getBlock().getBlockData(), event.getLines());
consumer.queueSignChange(Actor.actorFromEntity(event.getPlayer()), event.getBlock().getLocation(), event.getBlock().getBlockData(), event.getLines());
}
}
}

View File

@@ -164,7 +164,12 @@ public class BukkitUtils {
// Blocks that break when they are attached to a block
relativeBreakable = EnumSet.noneOf(Material.class);
relativeBreakable.add(Material.WALL_SIGN);
relativeBreakable.add(Material.ACACIA_WALL_SIGN);
relativeBreakable.add(Material.BIRCH_WALL_SIGN);
relativeBreakable.add(Material.DARK_OAK_WALL_SIGN);
relativeBreakable.add(Material.JUNGLE_WALL_SIGN);
relativeBreakable.add(Material.OAK_WALL_SIGN);
relativeBreakable.add(Material.SPRUCE_WALL_SIGN);
relativeBreakable.add(Material.LADDER);
relativeBreakable.addAll(buttons);
relativeBreakable.add(Material.REDSTONE_WALL_TORCH);
@@ -189,7 +194,12 @@ public class BukkitUtils {
relativeTopBreakable.add(Material.ACTIVATOR_RAIL);
relativeTopBreakable.add(Material.RAIL);
relativeTopBreakable.add(Material.REDSTONE_WIRE);
relativeTopBreakable.add(Material.SIGN);
relativeTopBreakable.add(Material.ACACIA_SIGN);
relativeTopBreakable.add(Material.BIRCH_SIGN);
relativeTopBreakable.add(Material.DARK_OAK_SIGN);
relativeTopBreakable.add(Material.JUNGLE_SIGN);
relativeTopBreakable.add(Material.OAK_SIGN);
relativeTopBreakable.add(Material.SPRUCE_SIGN);
relativeTopBreakable.addAll(pressurePlates);
relativeTopBreakable.add(Material.SNOW);
relativeTopBreakable.add(Material.REPEATER);
@@ -205,8 +215,18 @@ public class BukkitUtils {
// Blocks that break falling entities
fallingEntityKillers = EnumSet.noneOf(Material.class);
fallingEntityKillers.add(Material.SIGN);
fallingEntityKillers.add(Material.WALL_SIGN);
fallingEntityKillers.add(Material.ACACIA_SIGN);
fallingEntityKillers.add(Material.ACACIA_WALL_SIGN);
fallingEntityKillers.add(Material.BIRCH_SIGN);
fallingEntityKillers.add(Material.BIRCH_WALL_SIGN);
fallingEntityKillers.add(Material.DARK_OAK_SIGN);
fallingEntityKillers.add(Material.DARK_OAK_WALL_SIGN);
fallingEntityKillers.add(Material.JUNGLE_SIGN);
fallingEntityKillers.add(Material.JUNGLE_WALL_SIGN);
fallingEntityKillers.add(Material.OAK_SIGN);
fallingEntityKillers.add(Material.OAK_WALL_SIGN);
fallingEntityKillers.add(Material.SPRUCE_SIGN);
fallingEntityKillers.add(Material.SPRUCE_WALL_SIGN);
fallingEntityKillers.addAll(pressurePlates);
fallingEntityKillers.addAll(saplings);
fallingEntityKillers.add(Material.DANDELION);

View File

@@ -455,11 +455,21 @@ public class ComparableVersion
return items.compareTo( o.items );
}
public int compareTo( String version )
{
return compareTo(new ComparableVersion(version));
}
public String toString()
{
return value;
}
public String toCanonicalString()
{
return canonical;
}
public boolean equals( Object o )
{
return ( o instanceof ComparableVersion ) && canonical.equals( ( (ComparableVersion) o ).canonical );

View File

@@ -2,14 +2,12 @@ package de.diddiz.util;
import de.diddiz.LogBlock.Actor;
import de.diddiz.LogBlock.Consumer;
import de.diddiz.LogBlock.Logging;
import de.diddiz.LogBlock.config.WorldConfig;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Directional;
@@ -113,9 +111,7 @@ public class LoggingUtil {
Block checkBlock = origin.getRelative(BlockFace.UP);
if (BukkitUtils.getRelativeTopBreakabls().contains(checkBlock.getType())) {
if (wcfg.isLogging(Logging.SIGNTEXT) && checkBlock.getType() == Material.SIGN) {
consumer.queueSignBreak(actor, (Sign) checkBlock.getState());
} else if (checkBlock.getType() == Material.IRON_DOOR || BukkitUtils.isWoodenDoor(checkBlock.getType())) {
if (checkBlock.getType() == Material.IRON_DOOR || BukkitUtils.isWoodenDoor(checkBlock.getType())) {
Block doorBlock = checkBlock;
// If the doorBlock is the top half a door the player simply punched a door
// this will be handled later.
@@ -151,11 +147,7 @@ public class LoggingUtil {
BlockData blockData = block.getBlockData();
if (blockData instanceof Directional) {
if (block.getRelative(((Directional) blockData).getFacing().getOppositeFace()).equals(origin)) {
if (wcfg.isLogging(Logging.SIGNTEXT) && block.getType() == Material.WALL_SIGN) {
consumer.queueSignBreak(actor, (Sign) block.getState());
} else {
consumer.queueBlockBreak(actor, block.getState());
}
consumer.queueBlockBreak(actor, block.getState());
}
}
}

View File

@@ -309,7 +309,7 @@
43:13,minecraft:stone_brick_slab[type=double,waterlogged=false]
43:14,minecraft:nether_brick_slab[type=double,waterlogged=false]
43:15,minecraft:smooth_quartz
44:0,minecraft:stone_slab[type=bottom,waterlogged=false]
44:0,minecraft:smooth_stone_slab[type=bottom,waterlogged=false]
44:1,minecraft:sandstone_slab[type=bottom,waterlogged=false]
44:2,minecraft:petrified_oak_slab[type=bottom,waterlogged=false]
44:3,minecraft:cobblestone_slab[type=bottom,waterlogged=false]
@@ -317,7 +317,7 @@
44:5,minecraft:stone_brick_slab[type=bottom,waterlogged=false]
44:6,minecraft:nether_brick_slab[type=bottom,waterlogged=false]
44:7,minecraft:quartz_slab[type=bottom,waterlogged=false]
44:8,minecraft:stone_slab[type=top,waterlogged=false]
44:8,minecraft:smooth_stone_slab[type=top,waterlogged=false]
44:9,minecraft:sandstone_slab[type=top,waterlogged=false]
44:10,minecraft:petrified_oak_slab[type=top,waterlogged=false]
44:11,minecraft:cobblestone_slab[type=top,waterlogged=false]
@@ -440,22 +440,22 @@
62:10,minecraft:furnace[facing=west,lit=false]
62:11,minecraft:furnace[facing=east,lit=false]
62:15,minecraft:furnace[facing=south,lit=false]
63:0,minecraft:sign[rotation=0,waterlogged=false]
63:1,minecraft:sign[rotation=1,waterlogged=false]
63:2,minecraft:sign[rotation=2,waterlogged=false]
63:3,minecraft:sign[rotation=3,waterlogged=false]
63:4,minecraft:sign[rotation=4,waterlogged=false]
63:5,minecraft:sign[rotation=5,waterlogged=false]
63:6,minecraft:sign[rotation=6,waterlogged=false]
63:7,minecraft:sign[rotation=7,waterlogged=false]
63:8,minecraft:sign[rotation=8,waterlogged=false]
63:9,minecraft:sign[rotation=9,waterlogged=false]
63:10,minecraft:sign[rotation=10,waterlogged=false]
63:11,minecraft:sign[rotation=11,waterlogged=false]
63:12,minecraft:sign[rotation=12,waterlogged=false]
63:13,minecraft:sign[rotation=13,waterlogged=false]
63:14,minecraft:sign[rotation=14,waterlogged=false]
63:15,minecraft:sign[rotation=15,waterlogged=false]
63:0,minecraft:oak_sign[rotation=0,waterlogged=false]
63:1,minecraft:oak_sign[rotation=1,waterlogged=false]
63:2,minecraft:oak_sign[rotation=2,waterlogged=false]
63:3,minecraft:oak_sign[rotation=3,waterlogged=false]
63:4,minecraft:oak_sign[rotation=4,waterlogged=false]
63:5,minecraft:oak_sign[rotation=5,waterlogged=false]
63:6,minecraft:oak_sign[rotation=6,waterlogged=false]
63:7,minecraft:oak_sign[rotation=7,waterlogged=false]
63:8,minecraft:oak_sign[rotation=8,waterlogged=false]
63:9,minecraft:oak_sign[rotation=9,waterlogged=false]
63:10,minecraft:oak_sign[rotation=10,waterlogged=false]
63:11,minecraft:oak_sign[rotation=11,waterlogged=false]
63:12,minecraft:oak_sign[rotation=12,waterlogged=false]
63:13,minecraft:oak_sign[rotation=13,waterlogged=false]
63:14,minecraft:oak_sign[rotation=14,waterlogged=false]
63:15,minecraft:oak_sign[rotation=15,waterlogged=false]
64:0,minecraft:oak_door[facing=east,half=lower,hinge=right,open=false,powered=false]
64:1,minecraft:oak_door[facing=south,half=lower,hinge=right,open=false,powered=false]
64:2,minecraft:oak_door[facing=west,half=lower,hinge=right,open=false,powered=false]
@@ -496,14 +496,14 @@
67:13,minecraft:cobblestone_stairs[facing=west,half=top,shape=straight,waterlogged=false]
67:14,minecraft:cobblestone_stairs[facing=south,half=top,shape=straight,waterlogged=false]
67:15,minecraft:cobblestone_stairs[facing=north,half=top,shape=straight,waterlogged=false]
68:0,minecraft:wall_sign[facing=north,waterlogged=false]
68:3,minecraft:wall_sign[facing=south,waterlogged=false]
68:4,minecraft:wall_sign[facing=west,waterlogged=false]
68:5,minecraft:wall_sign[facing=east,waterlogged=false]
68:9,minecraft:wall_sign[facing=south,waterlogged=false]
68:10,minecraft:wall_sign[facing=west,waterlogged=false]
68:11,minecraft:wall_sign[facing=east,waterlogged=false]
68:15,minecraft:wall_sign[facing=south,waterlogged=false]
68:0,minecraft:oak_wall_sign[facing=north,waterlogged=false]
68:3,minecraft:oak_wall_sign[facing=south,waterlogged=false]
68:4,minecraft:oak_wall_sign[facing=west,waterlogged=false]
68:5,minecraft:oak_wall_sign[facing=east,waterlogged=false]
68:9,minecraft:oak_wall_sign[facing=south,waterlogged=false]
68:10,minecraft:oak_wall_sign[facing=west,waterlogged=false]
68:11,minecraft:oak_wall_sign[facing=east,waterlogged=false]
68:15,minecraft:oak_wall_sign[facing=south,waterlogged=false]
69:0,minecraft:lever[face=ceiling,facing=west,powered=false]
69:1,minecraft:lever[face=wall,facing=east,powered=false]
69:2,minecraft:lever[face=wall,facing=west,powered=false]

View File

@@ -114,7 +114,7 @@
40:0,minecraft:red_mushroom
41:0,minecraft:gold_block
42:0,minecraft:iron_block
43:0,minecraft:stone_slab
43:0,minecraft:smooth_stone_slab
43:1,minecraft:sandstone_slab
43:2,minecraft:petrified_oak_slab
43:3,minecraft:cobblestone_slab
@@ -171,16 +171,16 @@
62:3,minecraft:furnace
62:4,minecraft:furnace
62:5,minecraft:furnace
63:0,minecraft:sign
63:0,minecraft:oak_sign
64:0,minecraft:oak_door
65:0,minecraft:ladder
66:0,minecraft:rail
67:0,minecraft:cobblestone_stairs
68:0,minecraft:air
68:2,minecraft:wall_sign
68:3,minecraft:wall_sign
68:4,minecraft:wall_sign
68:5,minecraft:wall_sign
68:2,minecraft:oak_wall_sign
68:3,minecraft:oak_wall_sign
68:4,minecraft:oak_wall_sign
68:5,minecraft:oak_wall_sign
69:0,minecraft:lever
70:0,minecraft:stone_pressure_plate
71:0,minecraft:iron_door
@@ -599,7 +599,7 @@
321:0,minecraft:painting
322:0,minecraft:golden_apple
322:1,minecraft:enchanted_golden_apple
323:0,minecraft:sign
323:0,minecraft:oak_sign
324:0,minecraft:oak_door
325:0,minecraft:bucket
326:0,minecraft:water_bucket
@@ -632,8 +632,8 @@
350:0,minecraft:cooked_cod
350:1,minecraft:cooked_salmon
351:0,minecraft:ink_sac
351:1,minecraft:rose_red
351:2,minecraft:cactus_green
351:1,minecraft:red_dye
351:2,minecraft:green_dye
351:3,minecraft:cocoa_beans
351:4,minecraft:lapis_lazuli
351:5,minecraft:purple_dye
@@ -642,7 +642,7 @@
351:8,minecraft:gray_dye
351:9,minecraft:pink_dye
351:10,minecraft:lime_dye
351:11,minecraft:dandelion_yellow
351:11,minecraft:yellow_dye
351:12,minecraft:light_blue_dye
351:13,minecraft:magenta_dye
351:14,minecraft:orange_dye

View File

@@ -6,7 +6,7 @@ website: http://dev.bukkit.org/server-mods/logblock/
main: de.diddiz.LogBlock.LogBlock
description: ${project.description}
softdepend: [WorldEdit]
api-version: 1.13
api-version: 1.14
commands:
lb:
description: 'LogBlock plugin commands'