diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitAdapter.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitAdapter.java index 6070ec87d..d04725160 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitAdapter.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitAdapter.java @@ -33,6 +33,8 @@ import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockTypes; +import com.sk89q.worldedit.world.entity.EntityType; +import com.sk89q.worldedit.world.entity.EntityTypes; import com.sk89q.worldedit.world.gamemode.GameMode; import com.sk89q.worldedit.world.gamemode.GameModes; import com.sk89q.worldedit.world.item.ItemType; @@ -218,7 +220,7 @@ public class BukkitAdapter { if (!itemType.getId().startsWith("minecraft:")) { throw new IllegalArgumentException("Bukkit only supports Minecraft items"); } - return Material.getMaterial(itemType.getId().replace("minecraft:", "").toUpperCase()); + return Material.getMaterial(itemType.getId().substring(10).toUpperCase()); } /** @@ -247,6 +249,23 @@ public class BukkitAdapter { return GameModes.get(gameMode.name().toLowerCase()); } + /** + * Create a WorldEdit EntityType from a Bukkit one. + * + * @param entityType Bukkit EntityType + * @return WorldEdit EntityType + */ + public static EntityType adapt(org.bukkit.entity.EntityType entityType) { + return EntityTypes.get(entityType.getName().toLowerCase()); + } + + public static org.bukkit.entity.EntityType adapt(EntityType entityType) { + if (!entityType.getId().startsWith("minecraft:")) { + throw new IllegalArgumentException("Bukkit only supports vanilla entities"); + } + return org.bukkit.entity.EntityType.fromName(entityType.getId().substring(10).toLowerCase()); + } + /** * Converts a Material to a BlockType * diff --git a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SignBlock.java b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SignBlock.java index dce851c0d..8855c3491 100644 --- a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SignBlock.java +++ b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SignBlock.java @@ -32,7 +32,7 @@ import java.util.Map; /** * Represents a sign block. */ -public class SignBlock extends BaseBlock implements TileEntityBlock { +public class SignBlock extends BaseBlock { private String[] text; diff --git a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SkullBlock.java b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SkullBlock.java index e63d88310..338ca103f 100644 --- a/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SkullBlock.java +++ b/worldedit-core/src/legacy/java/com/sk89q/worldedit/blocks/SkullBlock.java @@ -31,7 +31,7 @@ import java.util.Map; /** * A skull block. */ -public class SkullBlock extends BaseBlock implements TileEntityBlock { +public class SkullBlock extends BaseBlock { private String owner = ""; // notchian diff --git a/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLProcessor.java b/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLProcessor.java index 219e2cf44..1296733a6 100644 --- a/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLProcessor.java +++ b/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLProcessor.java @@ -83,7 +83,7 @@ public class YAMLProcessor extends YAMLNode { super(new LinkedHashMap<>(), writeDefaults); this.format = format; - DumperOptions options = new FancyDumperOptions(); + DumperOptions options = new DumperOptions(); options.setIndent(4); options.setDefaultFlowStyle(format.getStyle()); Representer representer = new FancyRepresenter(); @@ -289,19 +289,6 @@ public class YAMLProcessor extends YAMLNode { return new YAMLNode(new LinkedHashMap<>(), writeDefaults); } - // This will be included in snakeyaml 1.10, but until then we have to do it manually. - private class FancyDumperOptions extends DumperOptions { -// @Override -// public DumperOptions.ScalarStyle calculateScalarStyle(ScalarAnalysis analysis, -// DumperOptions.ScalarStyle style) { -// if (format == YAMLFormat.EXTENDED && (analysis.scalar.contains("\n") || analysis.scalar.contains("\r"))) { -// return ScalarStyle.LITERAL; -// } else { -// return super.calculateScalarStyle(analysis, style); -// } -// } - } - private static class FancyRepresenter extends Representer { private FancyRepresenter() { this.nullRepresenter = o -> representScalar(Tag.NULL, ""); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java index 51f5c5a1e..3373ed9b8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/ToolCommands.java @@ -46,6 +46,10 @@ import com.sk89q.worldedit.util.HandSide; import com.sk89q.worldedit.util.TreeGenerator; import com.sk89q.worldedit.util.command.parametric.Optional; import com.sk89q.worldedit.world.block.BlockStateHolder; +import com.sk89q.worldedit.function.pattern.BlockPattern; +import com.sk89q.worldedit.function.pattern.Pattern; +import com.sk89q.worldedit.util.HandSide; +import com.sk89q.worldedit.util.TreeGenerator; @Command(aliases = {"brush", "br", "tool"}, desc = "Bind functions to held items: [More Info](https://goo.gl/xPnPxj)") public class ToolCommands { @@ -133,13 +137,13 @@ public class ToolCommands { max = 2 ) @CommandPermissions("worldedit.tool.flood-fill") - public void floodFill(Player player, EditSession editSession, LocalSession session, Pattern pattern, double range) throws WorldEditException { + public void floodFill(Player player, EditSession editSession, LocalSession session, Pattern pattern, int range) throws WorldEditException { LocalConfiguration config = we.getConfiguration(); if (range > config.maxSuperPickaxeSize) { BBC.TOOL_RANGE_ERROR.send(player, config.maxSuperPickaxeSize); return; } - session.setTool(new FloodFillTool((int) range, pattern), player); + session.setTool(new FloodFillTool(range, pattern), player); BBC.TOOL_FLOOD_FILL.send(player, player.getItemInHand(HandSide.MAIN_HAND).getType().getName()); } @@ -184,4 +188,4 @@ public class ToolCommands { } -} \ No newline at end of file +} diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java index b115a64f3..e7f71a915 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BlockReplacer.java @@ -25,10 +25,18 @@ import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockType; +import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.LocalConfiguration; +import com.sk89q.worldedit.LocalSession; +import com.sk89q.worldedit.MaxChangedBlocksException; +import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Platform; import com.sk89q.worldedit.extent.inventory.BlockBag; +import com.sk89q.worldedit.function.pattern.BlockPattern; +import com.sk89q.worldedit.function.pattern.Pattern; +import com.sk89q.worldedit.world.block.BlockStateHolder; /** * A mode that replaces one block. diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java index 982f1e121..31020914a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/LongRangeBuildTool.java @@ -23,6 +23,7 @@ import com.boydti.fawe.config.BBC; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalSession; +import com.sk89q.worldedit.MaxChangedBlocksException; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Platform; @@ -30,6 +31,7 @@ import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; +import com.sk89q.worldedit.world.block.BlockTypes; /** * A tool that can place (or remove) blocks at a distance. @@ -39,7 +41,7 @@ public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTo private Pattern primary; private Pattern secondary; - public LongRangeBuildTool(Pattern primary, Pattern secondary) { + public LongRangeBuildTool(Pattern secondary, Pattern primary) { super("worldedit.tool.lrbuild"); this.primary = primary; this.secondary = secondary; @@ -55,7 +57,9 @@ public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTo Location pos = getTargetFace(player); if (pos == null) return false; EditSession eS = session.createEditSession(player); - if (secondary instanceof BlockStateHolder && ((BlockStateHolder) secondary).getBlockType().getMaterial().isAir()) { + + BlockStateHolder applied = secondary.apply(pos.toVector()); + if (applied.getBlockType().getMaterial().isAir()) { eS.setBlock(pos.toVector(), secondary); } else { eS.setBlock(pos.getDirection(), secondary); @@ -68,7 +72,8 @@ public class LongRangeBuildTool extends BrushTool implements DoubleActionTraceTo Location pos = getTargetFace(player); if (pos == null) return false; EditSession eS = session.createEditSession(player); - if (primary instanceof BlockStateHolder && ((BlockStateHolder) primary).getBlockType().getMaterial().isAir()) { + BlockStateHolder applied = primary.apply(pos.toVector()); + if (applied.getBlockType().getMaterial().isAir()) { eS.setBlock(pos.toVector(), primary); } else { eS.setBlock(pos.getDirection(), primary); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java index 7fe67cea0..3c0a1c8fc 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/reorder/MultiStageReorder.java @@ -21,10 +21,8 @@ package com.sk89q.worldedit.extent.reorder; import com.google.common.collect.Iterators; import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldedit.PlayerDirection; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.blocks.BlockType; import com.sk89q.worldedit.blocks.Blocks; import com.sk89q.worldedit.extent.AbstractDelegateExtent; import com.sk89q.worldedit.extent.Extent; @@ -181,12 +179,12 @@ public class MultiStageReorder extends AbstractDelegateExtent implements Reorder } // current = current.add(attachment.vector()).toBlockVector(); - - if (!blocks.contains(current)) { - // We ran outside the remaining set => assume we can place blocks on this - break; - } - +// +// if (!blocks.contains(current)) { +// // We ran outside the remaining set => assume we can place blocks on this +// break; +// } +// if (walked.contains(current)) { // Cycle detected => This will most likely go wrong, but there's nothing we can do about it. break; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/Category.java b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/Category.java index ee077cd70..0f7f256a8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/Category.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/Category.java @@ -59,4 +59,9 @@ public abstract class Category { this.set.clear(); this.empty = true; } + + @Override + public String toString() { + return getId(); + } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/entity/EntityType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/entity/EntityType.java index 1f7cb5925..71779e953 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/entity/EntityType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/entity/EntityType.java @@ -48,6 +48,11 @@ public class EntityType { return getId(); } + @Override + public String toString() { + return getId(); + } + @Override public int hashCode() { return this.id.hashCode(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/fluid/FluidType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/fluid/FluidType.java index 3207619ca..5b94015e1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/fluid/FluidType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/fluid/FluidType.java @@ -44,6 +44,11 @@ public class FluidType { return this.id; } + @Override + public String toString() { + return getId(); + } + @Override public int hashCode() { return this.id.hashCode(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/gamemode/GameMode.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/gamemode/GameMode.java index bb0d0d6cf..9cfd4b111 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/gamemode/GameMode.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/gamemode/GameMode.java @@ -44,6 +44,11 @@ public class GameMode { return getId(); } + @Override + public String toString() { + return getId(); + } + @Override public int hashCode() { return this.id.hashCode(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemType.java index 6603b63d0..829c62f5a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/item/ItemType.java @@ -59,7 +59,7 @@ public interface ItemType { * @return The block representation */ @Nullable - default BlockType getBlockType() { + default BlockTypes getBlockType() { return BlockTypes.get(getId()); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/weather/WeatherType.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/weather/WeatherType.java index dac65115f..c44392df0 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/weather/WeatherType.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/weather/WeatherType.java @@ -44,6 +44,11 @@ public class WeatherType { return getId(); } + @Override + public String toString() { + return getId(); + } + @Override public int hashCode() { return this.id.hashCode(); diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java index c35684059..b7bf6cd76 100644 --- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -386,7 +386,7 @@ public class ForgeWorld extends AbstractWorld { TileEntity tile = getWorld().getTileEntity(pos); if (tile != null) { - return new TileEntityBaseBlock(getBlock(position), tile); + return getBlock(position).toBaseBlock(NBTConverter.fromNative(TileEntityUtils.copyNbtData(tile))); } else { return getBlock(position).toBaseBlock(); } diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityBaseBlock.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityBaseBlock.java deleted file mode 100644 index c1700150f..000000000 --- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityBaseBlock.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * WorldEdit, a Minecraft world manipulation toolkit - * Copyright (C) sk89q - * Copyright (C) WorldEdit team and contributors - * - * This program is free software: you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as published by the - * Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . - */ - -package com.sk89q.worldedit.forge; - -import com.sk89q.worldedit.world.block.BaseBlock; -import com.sk89q.worldedit.blocks.TileEntityBlock; -import com.sk89q.worldedit.world.block.BlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; - -public class TileEntityBaseBlock extends BaseBlock implements TileEntityBlock { - - public TileEntityBaseBlock(BlockState state, TileEntity tile) { - super(state, NBTConverter.fromNative(copyNbtData(tile))); - } - - private static NBTTagCompound copyNbtData(TileEntity tile) { - NBTTagCompound tag = new NBTTagCompound(); - tile.writeToNBT(tag); - return tag; - } - -} \ No newline at end of file diff --git a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityUtils.java b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityUtils.java index 803407766..f87293db8 100644 --- a/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityUtils.java +++ b/worldedit-forge/src/main/java/com/sk89q/worldedit/forge/TileEntityUtils.java @@ -140,4 +140,9 @@ final class TileEntityUtils { return genericTE; } + public static NBTTagCompound copyNbtData(TileEntity tile) { + NBTTagCompound tag = new NBTTagCompound(); + tile.writeToNBT(tag); + return tag; + } } diff --git a/worldedit-forge/src/main/resources/mcmod.info b/worldedit-forge/src/main/resources/mcmod.info index 599e2f5e1..bcee1cd4a 100644 --- a/worldedit-forge/src/main/resources/mcmod.info +++ b/worldedit-forge/src/main/resources/mcmod.info @@ -6,7 +6,7 @@ "mcversion": "${mcVersion}", "url": "http://wiki.sk89q.com/wiki/WorldEdit", "updateUrl": "", - "authors": [ "sk89q", "wizjany", "TomyLobo", "kenzierocks" ], + "authors": [ "sk89q", "wizjany", "TomyLobo", "kenzierocks", "Me4502" ], "credits": "", "logoFile": "", "screenshots": [],