mirror of
https://github.com/plexusorg/Plex-FAWE.git
synced 2025-07-02 03:16:41 +00:00
This commit is contained in:
@ -102,7 +102,7 @@ public class Settings extends Config {
|
||||
|
||||
public FaweLimit getLimit(Actor actor) {
|
||||
FaweLimit limit;
|
||||
if (actor.hasPermission("fawe.bypass") || actor.hasPermission("fawe.limit.unlimited")) {
|
||||
if (actor.hasPermission("fawe.limit.unlimited")) {
|
||||
return FaweLimit.MAX.copy();
|
||||
}
|
||||
limit = new FaweLimit();
|
||||
|
@ -159,15 +159,20 @@ public class RollbackDatabase extends AsyncNotifyQueue {
|
||||
Future<Integer> future = call(() -> {
|
||||
try {
|
||||
int count = 0;
|
||||
String stmtStr = ascending ? uuid == null ? "SELECT * FROM`" + this.prefix + "edits` WHERE `time`>? AND `x2`>=? AND" +
|
||||
" `x1`<=? AND `z2`>=? AND `z1`<=? AND `y2`>=? AND `y1`<=? ORDER BY `time` , `id`" :
|
||||
"SELECT * FROM`" + this.prefix + "edits` WHERE `time`>? AND" +
|
||||
" `x2`>=? AND `x1`<=? AND `z2`>=? AND `z1`<=? AND `y2`>=? AND `y1`<=? AND `player`=? ORDER BY `time` ASC, `id` ASC" :
|
||||
uuid == null ? "SELECT * FROM`" + this.prefix + "edits` WHERE `time`>? AND `x2`>=? AND `x1`<=? AND `z2`>=? " +
|
||||
"AND `z1`<=? AND `y2`>=? AND `y1`<=? ORDER BY `time` DESC, `id` DESC" :
|
||||
"SELECT * FROM`" + this.prefix + "edits` WHERE `time`>? AND `x2`>=? AND `x1`<=? AND" +
|
||||
" `z2`>=? AND `z1`<=? AND `y2`>=? AND `y1`<=? AND `player`=? ORDER BY `time` DESC, `id` DESC";
|
||||
try (PreparedStatement stmt = connection.prepareStatement(stmtStr)) {
|
||||
String stmtStr;
|
||||
if (ascending) {
|
||||
if (uuid == null) {
|
||||
stmtStr = "SELECT * FROM`%sedits` WHERE `time`>? AND `x2`>=? AND `x1`<=? AND `z2`>=? AND `z1`<=? AND " +
|
||||
"`y2`>=? AND `y1`<=? ORDER BY `time` , `id`";
|
||||
} else {
|
||||
stmtStr = "SELECT * FROM`%sedits` WHERE `time`>? AND `x2`>=? AND `x1`<=? AND `z2`>=? AND `z1`<=? AND " +
|
||||
"`y2`>=? AND `y1`<=? AND `player`=? ORDER BY `time` ASC, `id` ASC";
|
||||
}
|
||||
} else {
|
||||
stmtStr = "SELECT * FROM`%sedits` WHERE `time`>? AND `x2`>=? AND `x1`<=? AND `z2`>=? AND `z1`<=? AND " +
|
||||
"`y2`>=? AND `y1`<=? AND `player`=? ORDER BY `time` DESC, `id` DESC";
|
||||
}
|
||||
try (PreparedStatement stmt = connection.prepareStatement(stmtStr.formatted(this.prefix))) {
|
||||
stmt.setInt(1, (int) (minTime / 1000));
|
||||
stmt.setInt(2, pos1.getBlockX());
|
||||
stmt.setInt(3, pos2.getBlockX());
|
||||
@ -193,20 +198,20 @@ public class RollbackDatabase extends AsyncNotifyQueue {
|
||||
if (delete && uuid != null) {
|
||||
try (PreparedStatement stmt = connection.prepareStatement("DELETE FROM`" + this.prefix +
|
||||
"edits` WHERE `player`=? AND `time`>? AND `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=?")) {
|
||||
stmt.setInt(1, (int) (minTime / 1000));
|
||||
stmt.setInt(2, pos1.getBlockX());
|
||||
stmt.setInt(3, pos2.getBlockX());
|
||||
stmt.setInt(4, pos1.getBlockZ());
|
||||
stmt.setInt(5, pos2.getBlockZ());
|
||||
// Keep 128 offset for backwards-compatibility
|
||||
stmt.setInt(6, pos1.getBlockY() - 128);
|
||||
stmt.setInt(7, pos2.getBlockY() - 128);
|
||||
byte[] uuidBytes = ByteBuffer
|
||||
.allocate(16)
|
||||
.putLong(uuid.getMostSignificantBits())
|
||||
.putLong(uuid.getLeastSignificantBits())
|
||||
.array();
|
||||
stmt.setBytes(8, uuidBytes);
|
||||
stmt.setBytes(1, uuidBytes);
|
||||
stmt.setInt(2, (int) (minTime / 1000));
|
||||
stmt.setInt(3, pos1.getBlockX());
|
||||
stmt.setInt(4, pos2.getBlockX());
|
||||
stmt.setInt(5, pos1.getBlockZ());
|
||||
stmt.setInt(6, pos2.getBlockZ());
|
||||
// Keep 128 offset for backwards-compatibility
|
||||
stmt.setInt(7, pos1.getBlockY() - 128);
|
||||
stmt.setInt(8, pos2.getBlockY() - 128);
|
||||
}
|
||||
}
|
||||
return count;
|
||||
|
@ -15,8 +15,10 @@ import com.sk89q.jnbt.NBTOutputStream;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.function.operation.ChangeSetExecutor;
|
||||
import com.sk89q.worldedit.internal.util.LogManagerCompat;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
@ -35,6 +37,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
|
||||
private static final Logger LOGGER = LogManagerCompat.getLogger();
|
||||
private static final Map<String, Map<UUID, Integer>> NEXT_INDEX = new ConcurrentHashMap<>();
|
||||
|
||||
private UUID uuid;
|
||||
@ -141,9 +144,9 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
e.printStackTrace();
|
||||
return;
|
||||
}
|
||||
EditSession session = toEditSession(actor, regions);
|
||||
session.setBlocks(this, ChangeSetExecutor.Type.UNDO);
|
||||
deleteFiles();
|
||||
try (EditSession session = toEditSession(actor, regions)) {
|
||||
session.setBlocks(this, ChangeSetExecutor.Type.UNDO);
|
||||
}
|
||||
}
|
||||
|
||||
public void undo(Actor actor) {
|
||||
@ -371,9 +374,14 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!bdFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
FaweInputStream is = MainUtil.getCompressedIS(new FileInputStream(bdFile));
|
||||
readHeader(is);
|
||||
return is;
|
||||
try {
|
||||
FaweInputStream is = MainUtil.getCompressedIS(new FileInputStream(bdFile));
|
||||
readHeader(is);
|
||||
return is;
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load block history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -381,7 +389,12 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!bioFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
return MainUtil.getCompressedIS(new FileInputStream(bioFile));
|
||||
try {
|
||||
return MainUtil.getCompressedIS(new FileInputStream(bioFile));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load biome history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -389,7 +402,12 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!enttFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(enttFile)));
|
||||
try {
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(enttFile)));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load entity create history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -397,7 +415,12 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!entfFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(entfFile)));
|
||||
try {
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(entfFile)));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load entity remove history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -405,7 +428,12 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!nbttFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(nbttFile)));
|
||||
try {
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(nbttFile)));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load tile create history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -413,7 +441,12 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||
if (!nbtfFile.exists()) {
|
||||
return null;
|
||||
}
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(nbtfFile)));
|
||||
try {
|
||||
return new NBTInputStream(MainUtil.getCompressedIS(new FileInputStream(nbtfFile)));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Could not load tile remove history file {}", bdFile);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -7,6 +7,7 @@ import com.sk89q.worldedit.internal.util.LogManagerCompat;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||
import com.sk89q.worldedit.world.World;
|
||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -125,6 +126,26 @@ public class RollbackOptimizedHistory extends DiskStorageHistory {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBiomeChange(int x, int y, int z, BiomeType from, BiomeType to) {
|
||||
super.addBiomeChange(x, y, z, from, to);
|
||||
if (x < minX) {
|
||||
minX = x;
|
||||
} else if (x > maxX) {
|
||||
maxX = x;
|
||||
}
|
||||
if (y < minY) {
|
||||
minY = y;
|
||||
} else if (y > maxY) {
|
||||
maxY = y;
|
||||
}
|
||||
if (z < minZ) {
|
||||
minZ = z;
|
||||
} else if (z > maxZ) {
|
||||
maxZ = z;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeHeader(OutputStream os, int x, int y, int z) throws IOException {
|
||||
minX = x;
|
||||
|
@ -257,12 +257,14 @@ public abstract class AbstractChangeSet implements ChangeSet, IBatchProcessor {
|
||||
}
|
||||
|
||||
public EditSession toEditSession(Actor actor, Region[] regions) {
|
||||
EditSessionBuilder builder = WorldEdit.getInstance().newEditSessionBuilder().world(getWorld()).actor(actor).
|
||||
fastMode(false).checkMemory(false).changeSet(this).limitUnlimited();
|
||||
if (regions != null) {
|
||||
builder.allowedRegions(regions);
|
||||
} else {
|
||||
builder.allowedRegionsEverywhere();
|
||||
EditSessionBuilder builder = WorldEdit.getInstance().newEditSessionBuilder().world(world)
|
||||
.checkMemory(false)
|
||||
.changeSetNull()
|
||||
.fastMode(false)
|
||||
.limitUnprocessed(actor)
|
||||
.actor(actor);
|
||||
if (!actor.getLimit().RESTRICT_HISTORY_TO_REGIONS) {
|
||||
builder = builder.allowedRegionsEverywhere();
|
||||
}
|
||||
EditSession editSession = builder.build();
|
||||
editSession.setSize(1);
|
||||
|
@ -167,7 +167,7 @@ public abstract class FaweStreamChangeSet extends AbstractChangeSet {
|
||||
@Override
|
||||
public int readX(FaweInputStream in) throws IOException {
|
||||
in.readFully(buffer);
|
||||
return lx = lx + ((((buffer[1] & 0xFF) + ((MathMan.unpair16x(buffer[3])) << 8)) << 20) >> 20);
|
||||
return lx = lx + ((((buffer[1] & 0xFF) | ((MathMan.unpair16x(buffer[3])) << 8)) << 20) >> 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -177,7 +177,7 @@ public abstract class FaweStreamChangeSet extends AbstractChangeSet {
|
||||
|
||||
@Override
|
||||
public int readZ(FaweInputStream in) throws IOException {
|
||||
return lz = lz + ((((buffer[2] & 0xFF) + ((MathMan.unpair16y(buffer[3])) << 8)) << 20) >> 20);
|
||||
return lz = lz + ((((buffer[2] & 0xFF) | ((MathMan.unpair16y(buffer[3])) << 8)) << 20) >> 20);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
@ -203,17 +203,17 @@ public abstract class FaweStreamChangeSet extends AbstractChangeSet {
|
||||
@Override
|
||||
public int readX(FaweInputStream is) throws IOException {
|
||||
is.readFully(buffer);
|
||||
return lx = (lx + (buffer[0] & 0xFF) + (buffer[1] << 8));
|
||||
return lx = lx + ((buffer[0] & 0xFF) | (buffer[1] << 8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readY(FaweInputStream is) throws IOException {
|
||||
return ly = (ly + (buffer[4] & 0xFF) + (buffer[5] << 8));
|
||||
return ly = ly + ((buffer[4] & 0xFF) | (buffer[5]) << 8);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int readZ(FaweInputStream is) throws IOException {
|
||||
return lz = (lz + (buffer[2] & 0xFF) + (buffer[3] << 8));
|
||||
return lz = lz + ((buffer[2] & 0xFF) | (buffer[3]) << 8);
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -353,7 +353,7 @@ public abstract class FaweStreamChangeSet extends AbstractChangeSet {
|
||||
os.write((byte) (z));
|
||||
// only need to store biomes in the 4x4x4 chunks so only need one byte for y still (signed byte -128 -> 127)
|
||||
// means -512 -> 508. Add 128 to avoid negative value casting.
|
||||
os.write((byte) (y + 128));
|
||||
os.write((byte) (y + 32));
|
||||
os.writeVarInt(from.getInternalId());
|
||||
os.writeVarInt(to.getInternalId());
|
||||
} catch (IOException e) {
|
||||
|
@ -2,7 +2,6 @@ package com.fastasyncworldedit.core.queue;
|
||||
|
||||
import com.fastasyncworldedit.core.extent.filter.block.FilterBlock;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import org.jetbrains.annotations.Range;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@ -18,8 +17,8 @@ public interface Filter {
|
||||
* @param chunkZ the z coordinate in the chunk
|
||||
*/
|
||||
default boolean appliesChunk(
|
||||
@Range(from = 0, to = 15) int chunkX,
|
||||
@Range(from = 0, to = 15) int chunkZ
|
||||
int chunkX,
|
||||
int chunkZ
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ package com.fastasyncworldedit.core.queue;
|
||||
|
||||
import com.fastasyncworldedit.core.extent.filter.block.ChunkFilterBlock;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import org.jetbrains.annotations.Range;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
@ -25,7 +24,6 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet {
|
||||
*
|
||||
* @return the x coordinate of the chunk
|
||||
*/
|
||||
@Range(from = 0, to = 15)
|
||||
int getX();
|
||||
|
||||
/**
|
||||
@ -33,7 +31,6 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet {
|
||||
*
|
||||
* @return the z coordinate of the chunk
|
||||
*/
|
||||
@Range(from = 0, to = 15)
|
||||
int getZ();
|
||||
|
||||
/**
|
||||
|
@ -1,14 +1,12 @@
|
||||
package com.fastasyncworldedit.core.queue;
|
||||
|
||||
import org.jetbrains.annotations.Range;
|
||||
|
||||
/**
|
||||
* IGetBlocks may be cached by the WorldChunkCache so that it can be used between multiple
|
||||
* IQueueExtents - avoids conversion between a palette and raw data on every block get
|
||||
*/
|
||||
public interface IChunkCache<T> extends Trimable {
|
||||
|
||||
T get(@Range(from = 0, to = 15) int chunkX, @Range(from = 0, to = 15) int chunkZ);
|
||||
T get(int chunkX, int chunkZ);
|
||||
|
||||
@Override
|
||||
default boolean trim(boolean aggressive) {
|
||||
|
@ -7,7 +7,6 @@ import com.sk89q.worldedit.function.operation.Operation;
|
||||
import com.sk89q.worldedit.math.BlockVector2;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import org.jetbrains.annotations.Range;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.Flushable;
|
||||
@ -51,12 +50,12 @@ public interface IQueueExtent<T extends IChunk> extends Flushable, Trimable, ICh
|
||||
* Get the cached get object. This is faster than getting the object using NMS and allows for
|
||||
* wrapping.
|
||||
*/
|
||||
IChunkGet getCachedGet(@Range(from = 0, to = 15) int chunkX, @Range(from = 0, to = 15) int chunkZ);
|
||||
IChunkGet getCachedGet(int chunkX, int chunkZ);
|
||||
|
||||
/**
|
||||
* Get the cached chunk set object.
|
||||
*/
|
||||
IChunkSet getCachedSet(@Range(from = 0, to = 15) int chunkX, @Range(from = 0, to = 15) int chunkZ);
|
||||
IChunkSet getCachedSet(int chunkX, int chunkZ);
|
||||
|
||||
/**
|
||||
* Submit the chunk so that it's changes are applied to the world
|
||||
|
@ -13,20 +13,22 @@ import com.fastasyncworldedit.core.util.MainUtil;
|
||||
import com.fastasyncworldedit.core.util.StringMan;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.EditSessionBuilder;
|
||||
import com.sk89q.worldedit.LocalSession;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.WorldEditException;
|
||||
import com.sk89q.worldedit.command.argument.Arguments;
|
||||
import com.sk89q.worldedit.command.util.CommandPermissions;
|
||||
import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator;
|
||||
import com.sk89q.worldedit.command.util.annotation.AllowedRegion;
|
||||
import com.sk89q.worldedit.command.util.annotation.Confirm;
|
||||
import com.sk89q.worldedit.command.util.annotation.Time;
|
||||
import com.sk89q.worldedit.entity.Player;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.function.operation.ChangeSetExecutor;
|
||||
import com.sk89q.worldedit.history.changeset.ChangeSet;
|
||||
import com.sk89q.worldedit.math.BlockVector2;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.util.Countable;
|
||||
import com.sk89q.worldedit.util.Direction;
|
||||
import com.sk89q.worldedit.util.Identifiable;
|
||||
@ -80,7 +82,6 @@ public class HistorySubCommands {
|
||||
@Confirm
|
||||
public synchronized void rerun(
|
||||
Player player, World world, RollbackDatabase database,
|
||||
@AllowedRegion Region[] allowedRegions,
|
||||
@ArgFlag(name = 'u', desc = "String user", def = "me")
|
||||
UUID other,
|
||||
@ArgFlag(name = 'r', def = "0", desc = "radius")
|
||||
@ -90,7 +91,7 @@ public class HistorySubCommands {
|
||||
@Time
|
||||
long timeDiff
|
||||
) throws WorldEditException {
|
||||
rollback(player, world, database, allowedRegions, other, radius, timeDiff, true);
|
||||
rollback(player, world, database, other, radius, timeDiff, true);
|
||||
}
|
||||
|
||||
@Command(
|
||||
@ -102,7 +103,6 @@ public class HistorySubCommands {
|
||||
@Confirm
|
||||
public synchronized void rollback(
|
||||
Player player, World world, RollbackDatabase database,
|
||||
@AllowedRegion Region[] allowedRegions,
|
||||
@ArgFlag(name = 'u', desc = "String user", def = "")
|
||||
UUID other,
|
||||
@ArgFlag(name = 'r', def = "0", desc = "radius")
|
||||
@ -149,9 +149,9 @@ public class HistorySubCommands {
|
||||
count++;
|
||||
RollbackOptimizedHistory edit = supplier.get();
|
||||
if (restore) {
|
||||
edit.redo(player, allowedRegions);
|
||||
edit.redo(player);
|
||||
} else {
|
||||
edit.undo(player, allowedRegions);
|
||||
edit.undo(player);
|
||||
}
|
||||
String path = edit.getWorld().getName() + "/" + finalOther + "-" + edit.getIndex();
|
||||
player.print(Caption.of("fawe.worldedit.rollback.rollback.element", path));
|
||||
@ -201,8 +201,7 @@ public class HistorySubCommands {
|
||||
.at(summary.maxX, world.getMaxY(), summary.maxZ)
|
||||
);
|
||||
rollback.setTime(historyFile.lastModified());
|
||||
RollbackDatabase db = DBHandler.dbHandler()
|
||||
.getDatabase(world);
|
||||
RollbackDatabase db = DBHandler.dbHandler().getDatabase(world);
|
||||
db.logEdit(rollback);
|
||||
actor.print(TextComponent.of("Logging: " + historyFile));
|
||||
}
|
||||
|
@ -316,9 +316,10 @@ public class SchematicCommands {
|
||||
Actor actor, LocalSession session,
|
||||
@Arg(desc = "File name.")
|
||||
String filename,
|
||||
@Arg(desc = "Format name.", def = "fast")
|
||||
String formatName,
|
||||
|
||||
//FAWE start - random rotation
|
||||
@Arg(desc = "Format name.", def = "")
|
||||
String formatName,
|
||||
@Switch(name = 'r', desc = "Apply random rotation to the clipboard")
|
||||
boolean randomRotate
|
||||
//FAWE end
|
||||
@ -328,6 +329,11 @@ public class SchematicCommands {
|
||||
//FAWE start
|
||||
ClipboardFormat format;
|
||||
InputStream in = null;
|
||||
// if format is set explicitly, do not look up by extension!
|
||||
boolean noExplicitFormat = formatName == null;
|
||||
if (noExplicitFormat) {
|
||||
formatName = "fast";
|
||||
}
|
||||
try {
|
||||
URI uri;
|
||||
|
||||
@ -357,7 +363,7 @@ public class SchematicCommands {
|
||||
actor.print(Caption.of("fawe.error.no-perm", "worldedit.schematic.load.other"));
|
||||
return;
|
||||
}
|
||||
if (filename.matches(".*\\.[\\w].*")) {
|
||||
if (noExplicitFormat && filename.matches(".*\\.[\\w].*")) {
|
||||
format = ClipboardFormats
|
||||
.findByExtension(filename.substring(filename.lastIndexOf('.') + 1));
|
||||
} else {
|
||||
@ -387,7 +393,6 @@ public class SchematicCommands {
|
||||
|
||||
in = new FileInputStream(file);
|
||||
uri = file.toURI();
|
||||
|
||||
format.hold(actor, uri, in);
|
||||
if (randomRotate) {
|
||||
AffineTransform transform = new AffineTransform();
|
||||
|
@ -26,7 +26,6 @@ import com.fastasyncworldedit.core.extent.clipboard.MultiClipboardHolder;
|
||||
import com.fastasyncworldedit.core.extent.clipboard.URIClipboardHolder;
|
||||
import com.fastasyncworldedit.core.internal.io.FastByteArrayOutputStream;
|
||||
import com.fastasyncworldedit.core.util.MainUtil;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
import com.google.common.collect.Multimaps;
|
||||
import com.google.common.io.ByteSource;
|
||||
@ -51,6 +50,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@ -64,7 +64,9 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||
public class ClipboardFormats {
|
||||
|
||||
private static final Map<String, ClipboardFormat> aliasMap = new HashMap<>();
|
||||
private static final Multimap<String, ClipboardFormat> fileExtensionMap = HashMultimap.create();
|
||||
// FAWE start - keep order of ClipboardFormat entries -> prefer FAST over SPONGE_SCHEMATIC
|
||||
private static final Multimap<String, ClipboardFormat> fileExtensionMap = Multimaps.newMultimap(new HashMap<>(), LinkedHashSet::new);
|
||||
// FAWE end
|
||||
private static final List<ClipboardFormat> registeredFormats = new ArrayList<>();
|
||||
|
||||
public static void registerClipboardFormat(ClipboardFormat format) {
|
||||
|
@ -86,6 +86,11 @@ public class MultiStageReorder extends AbstractBufferingExtent implements Reorde
|
||||
priorityMap.put(BlockTypes.WHITE_BED, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.YELLOW_BED, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.GRASS, PlacementPriority.LAST);
|
||||
// Keep "grass" for <1.20.3 compat
|
||||
@SuppressWarnings("deprecation")
|
||||
BlockType grass = BlockTypes.GRASS;
|
||||
priorityMap.put(grass, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.SHORT_GRASS, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.TALL_GRASS, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.ROSE_BUSH, PlacementPriority.LAST);
|
||||
priorityMap.put(BlockTypes.DANDELION, PlacementPriority.LAST);
|
||||
|
@ -29,6 +29,7 @@ import com.sk89q.worldedit.function.pattern.RandomPattern;
|
||||
import com.sk89q.worldedit.internal.Constants;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.world.block.BlockState;
|
||||
import com.sk89q.worldedit.world.block.BlockType;
|
||||
import com.sk89q.worldedit.world.block.BlockTypes;
|
||||
|
||||
/**
|
||||
@ -103,7 +104,12 @@ public class FloraGenerator implements RegionFunction {
|
||||
*/
|
||||
public static Pattern getTemperatePattern() {
|
||||
RandomPattern pattern = new RandomPattern();
|
||||
pattern.add(BlockTypes.GRASS.getDefaultState(), 300);
|
||||
BlockType grass = BlockTypes.SHORT_GRASS;
|
||||
if (grass == null) {
|
||||
// Fallback for <1.20.3 compat
|
||||
grass = BlockTypes.GRASS;
|
||||
}
|
||||
pattern.add(grass.getDefaultState(), 300);
|
||||
pattern.add(BlockTypes.POPPY.getDefaultState(), 5);
|
||||
pattern.add(BlockTypes.DANDELION.getDefaultState(), 5);
|
||||
return pattern;
|
||||
|
@ -41,7 +41,7 @@ public class BoundedHeightMask extends AbstractMask {
|
||||
* @param maxY the maximum Y (must be equal to or greater than minY)
|
||||
*/
|
||||
public BoundedHeightMask(int minY, int maxY) {
|
||||
checkArgument(minY <= maxY, "minY <= maxY required");
|
||||
checkArgument(minY <= maxY, "minY <= maxY required. minY:" + minY + " and maxY:" + maxY + " were given.");
|
||||
this.minY = minY;
|
||||
this.maxY = maxY;
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ public final class BlockCategories {
|
||||
public static final BlockCategory BIG_DRIPLEAF_PLACEABLE = get("minecraft:big_dripleaf_placeable");
|
||||
public static final BlockCategory BIRCH_LOGS = get("minecraft:birch_logs");
|
||||
public static final BlockCategory BUTTONS = get("minecraft:buttons");
|
||||
public static final BlockCategory CAMEL_SAND_STEP_SOUND_BLOCKS = get("minecraft:camel_sand_step_sound_blocks");
|
||||
public static final BlockCategory CAMPFIRES = get("minecraft:campfires");
|
||||
public static final BlockCategory CANDLE_CAKES = get("minecraft:candle_cakes");
|
||||
public static final BlockCategory CANDLES = get("minecraft:candles");
|
||||
@ -60,6 +61,7 @@ public final class BlockCategories {
|
||||
public static final BlockCategory COAL_ORES = get("minecraft:coal_ores");
|
||||
public static final BlockCategory COMBINATION_STEP_SOUND_BLOCKS = get("minecraft:combination_step_sound_blocks");
|
||||
public static final BlockCategory COMPLETES_FIND_TREE_TUTORIAL = get("minecraft:completes_find_tree_tutorial");
|
||||
public static final BlockCategory CONCRETE_POWDER = get("minecraft:concrete_powder");
|
||||
public static final BlockCategory CONVERTABLE_TO_MUD = get("minecraft:convertable_to_mud");
|
||||
public static final BlockCategory COPPER_ORES = get("minecraft:copper_ores");
|
||||
public static final BlockCategory CORAL_BLOCKS = get("minecraft:coral_blocks");
|
||||
|
@ -415,6 +415,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_BOOKSHELF = init();
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_DEEPSLATE = init();
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_NETHER_BRICKS = init();
|
||||
@ -429,6 +431,10 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_STONE_BRICKS = init();
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_TUFF = init();
|
||||
@Nullable
|
||||
public static final BlockType CHISELED_TUFF_BRICKS = init();
|
||||
@Nullable
|
||||
public static final BlockType CHORUS_FLOWER = init();
|
||||
@Nullable
|
||||
public static final BlockType CHORUS_PLANT = init();
|
||||
@ -471,6 +477,12 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType COPPER_BLOCK = init();
|
||||
@Nullable
|
||||
public static final BlockType COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType CORNFLOWER = init();
|
||||
@Nullable
|
||||
public static final BlockType CRACKED_DEEPSLATE_BRICKS = init();
|
||||
@ -673,6 +685,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType DEEPSLATE_COPPER_ORE = init();
|
||||
@Nullable
|
||||
public static final BlockType COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType DEEPSLATE_DIAMOND_ORE = init();
|
||||
@Nullable
|
||||
public static final BlockType DEEPSLATE_EMERALD_ORE = init();
|
||||
@ -733,6 +747,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType ENDER_CHEST = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType END_GATEWAY = init();
|
||||
@Nullable
|
||||
public static final BlockType END_PORTAL = init();
|
||||
@ -753,6 +769,14 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType EXPOSED_CUT_COPPER_SLAB = init();
|
||||
@ -808,7 +832,7 @@ public final class BlockTypes {
|
||||
public static final BlockType GRANITE_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType GRANITE_WALL = init();
|
||||
@Nullable
|
||||
@Nullable @Deprecated
|
||||
public static final BlockType GRASS = init();
|
||||
@Nullable
|
||||
public static final BlockType GRASS_BLOCK = init();
|
||||
@ -901,6 +925,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType INFESTED_CRACKED_STONE_BRICKS = init();
|
||||
@Nullable
|
||||
public static final BlockType CRAFTER = init();
|
||||
@Nullable
|
||||
public static final BlockType INFESTED_DEEPSLATE = init();
|
||||
@Nullable
|
||||
public static final BlockType INFESTED_MOSSY_STONE_BRICKS = init();
|
||||
@ -1293,8 +1319,18 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType OXEYE_DAISY = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType OXIDIZED_CUT_COPPER_SLAB = init();
|
||||
@ -1411,6 +1447,14 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType POLISHED_GRANITE_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType POLISHED_TUFF = init();
|
||||
@Nullable
|
||||
public static final BlockType POLISHED_TUFF_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType POLISHED_TUFF_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType POLISHED_TUFF_WALL = init();
|
||||
@Nullable
|
||||
public static final BlockType POPPY = init();
|
||||
@Nullable
|
||||
public static final BlockType POTATOES = init();
|
||||
@ -1667,6 +1711,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType SEAGRASS = init();
|
||||
@Nullable
|
||||
public static final BlockType SHORT_GRASS = init();
|
||||
@Nullable
|
||||
public static final BlockType SEA_LANTERN = init();
|
||||
@Nullable
|
||||
public static final BlockType SEA_PICKLE = init();
|
||||
@ -1874,6 +1920,8 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType TRAPPED_CHEST = init();
|
||||
@Nullable
|
||||
public static final BlockType TRIAL_SPAWNER = init();
|
||||
@Nullable
|
||||
public static final BlockType TRIPWIRE = init();
|
||||
@Nullable
|
||||
public static final BlockType TRIPWIRE_HOOK = init();
|
||||
@ -1888,6 +1936,20 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType TUFF = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_BRICK_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_BRICK_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_BRICK_WALL = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_BRICKS = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType TUFF_WALL = init();
|
||||
@Nullable
|
||||
public static final BlockType TURTLE_EGG = init();
|
||||
@Nullable
|
||||
public static final BlockType TWISTING_VINES = init();
|
||||
@ -1947,16 +2009,36 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType WATER_CAULDRON = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_COPPER_BLOCK = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_CUT_COPPER_STAIRS = init();
|
||||
@ Nullable
|
||||
public static final BlockType WAXED_EXPOSED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_EXPOSED_CUT_COPPER_SLAB = init();
|
||||
@ -1965,22 +2047,52 @@ public final class BlockTypes {
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_OXIDIZED_CUT_COPPER_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final BlockType WAXED_WEATHERED_CUT_COPPER_STAIRS = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final BlockType WEATHERED_CUT_COPPER_SLAB = init();
|
||||
|
@ -51,6 +51,8 @@ public final class EntityTypes {
|
||||
@Nullable
|
||||
public static final EntityType BOAT = get("minecraft:boat");
|
||||
@Nullable
|
||||
public static final EntityType BREEZE = get("minecraft:breeze");
|
||||
@Nullable
|
||||
public static final EntityType CAMEL = get("minecraft:camel");
|
||||
@Nullable
|
||||
public static final EntityType CAT = get("minecraft:cat");
|
||||
@ -259,6 +261,8 @@ public final class EntityTypes {
|
||||
@Nullable
|
||||
public static final EntityType WARDEN = get("minecraft:warden");
|
||||
@Nullable
|
||||
public static final EntityType WIND_CHARGE = get("minecraft:wind_charge");
|
||||
@Nullable
|
||||
public static final EntityType WITCH = get("minecraft:witch");
|
||||
@Nullable
|
||||
public static final EntityType WITHER = get("minecraft:wither");
|
||||
|
@ -319,6 +319,8 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType BREAD = init();
|
||||
@Nullable
|
||||
public static final ItemType BREEZE_SPAWN_EGG = init();
|
||||
@Nullable
|
||||
public static final ItemType BREWER_POTTERY_SHERD = init();
|
||||
@Nullable
|
||||
public static final ItemType BREWING_STAND = init();
|
||||
@ -468,6 +470,8 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_BOOKSHELF = init();
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_DEEPSLATE = init();
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_NETHER_BRICKS = init();
|
||||
@ -482,6 +486,10 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_STONE_BRICKS = init();
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_TUFF = init();
|
||||
@Nullable
|
||||
public static final ItemType CHISELED_TUFF_BRICKS = init();
|
||||
@Nullable
|
||||
public static final ItemType CHORUS_FLOWER = init();
|
||||
@Nullable
|
||||
public static final ItemType CHORUS_FRUIT = init();
|
||||
@ -560,10 +568,18 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType COPPER_BLOCK = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_INGOT = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_ORE = init();
|
||||
@Nullable
|
||||
public static final ItemType COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType CORNFLOWER = init();
|
||||
@Nullable
|
||||
public static final ItemType COW_SPAWN_EGG = init();
|
||||
@ -578,6 +594,8 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType CRACKED_STONE_BRICKS = init();
|
||||
@Nullable
|
||||
public static final ItemType CRAFTER = init();
|
||||
@Nullable
|
||||
public static final ItemType CRAFTING_TABLE = init();
|
||||
@Nullable
|
||||
public static final ItemType CREEPER_BANNER_PATTERN = init();
|
||||
@ -903,8 +921,18 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType EXPLORER_POTTERY_SHERD = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType EXPOSED_CUT_COPPER_SLAB = init();
|
||||
@ -1036,7 +1064,7 @@ public final class ItemTypes {
|
||||
public static final ItemType GRANITE_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType GRANITE_WALL = init();
|
||||
@Nullable
|
||||
@Nullable @Deprecated
|
||||
public static final ItemType GRASS = init();
|
||||
@Nullable
|
||||
public static final ItemType GRASS_BLOCK = init();
|
||||
@ -1670,8 +1698,18 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType OXEYE_DAISY = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType OXIDIZED_CUT_COPPER_SLAB = init();
|
||||
@ -1808,6 +1846,14 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType POLISHED_GRANITE_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType POLISHED_TUFF = init();
|
||||
@Nullable
|
||||
public static final ItemType POLISHED_TUFF_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType POLISHED_TUFF_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType POLISHED_TUFF_WALL = init();
|
||||
@Nullable
|
||||
public static final ItemType POPPED_CHORUS_FRUIT = init();
|
||||
@Nullable
|
||||
public static final ItemType POPPY = init();
|
||||
@ -2061,6 +2107,8 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType SHIELD = init();
|
||||
@Nullable
|
||||
public static final ItemType SHORT_GRASS = init();
|
||||
@Nullable
|
||||
public static final ItemType SHROOMLIGHT = init();
|
||||
@Nullable
|
||||
public static final ItemType SHULKER_BOX = init();
|
||||
@ -2336,6 +2384,10 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType TRAPPED_CHEST = init();
|
||||
@Nullable
|
||||
public static final ItemType TRIAL_KEY = init();
|
||||
@Nullable
|
||||
public static final ItemType TRIAL_SPAWNER = init();
|
||||
@Nullable
|
||||
public static final ItemType TRIDENT = init();
|
||||
@Nullable
|
||||
public static final ItemType TRIPWIRE_HOOK = init();
|
||||
@ -2354,6 +2406,20 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType TUFF = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_BRICK_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_BRICK_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_BRICK_WALL = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_BRICKS = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType TUFF_WALL = init();
|
||||
@Nullable
|
||||
public static final ItemType TURTLE_EGG = init();
|
||||
@Nullable
|
||||
public static final ItemType TURTLE_HELMET = init();
|
||||
@ -2418,32 +2484,72 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType WATER_BUCKET = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_COPPER_BLOCK = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_CUT_COPPER_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_EXPOSED_CUT_COPPER_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_CUT_COPPER_SLAB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_OXIDIZED_CUT_COPPER_STAIRS = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WAXED_WEATHERED_CUT_COPPER_SLAB = init();
|
||||
@ -2452,8 +2558,18 @@ public final class ItemTypes {
|
||||
@Nullable
|
||||
public static final ItemType WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_CHISELED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_COPPER_BULB = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_COPPER_DOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_COPPER_GRATE = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_COPPER_TRAPDOOR = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_CUT_COPPER = init();
|
||||
@Nullable
|
||||
public static final ItemType WEATHERED_CUT_COPPER_SLAB = init();
|
||||
|
@ -54,7 +54,8 @@
|
||||
"fawe.worldedit.brush.brush.source.mask": "Brush source mask set",
|
||||
"fawe.worldedit.brush.brush.transform.disabled": "Brush transform disabled",
|
||||
"fawe.worldedit.brush.brush.transform": "Brush transform set",
|
||||
"fawe.worldedit.rollback.rollback.element": "Undoing {0}",
|
||||
"fawe.worldedit.rollback.rollingback.index": "Undoing {0} ...",
|
||||
"fawe.worldedit.rollback.rollback.element": "{0} undone.",
|
||||
"fawe.worldedit.tool.tool.inspect": "Inspect tool bound to {0}.",
|
||||
"fawe.worldedit.tool.tool.inspect.info": "{0} changed {1} to {2} {3} ago",
|
||||
"fawe.worldedit.tool.tool.inspect.info.footer": "Total: {0} changes",
|
||||
|
Reference in New Issue
Block a user