mirror of
https://github.com/boy0001/FastAsyncWorldedit.git
synced 2024-11-28 05:35:37 +01:00
Various minor
Fixes #620 Fixes VS pattern region restrictions Fix some bukkit 1.7.10 issues tweak debugpaste formatting
This commit is contained in:
parent
a79003f2a3
commit
65c6702d94
@ -1,21 +1,19 @@
|
||||
# Bug report template
|
||||
<!--- In order to create a valid issue report you have to follow this template. -->
|
||||
<!--- You may remove it if you are posting a feature request. -->
|
||||
# Bug report
|
||||
<!--- Follow this template if reporting an issue. -->
|
||||
<!--- Remove this template if making a suggestion or asking a question. -->
|
||||
<!--- Please comment or react to an existing ticket if it exists -->
|
||||
**Debug paste link**:
|
||||
<!--- Enter /fawe debugpaste in game or in your console and copy the output here -->
|
||||
|
||||
**Description of the problem:**
|
||||
|
||||
<!--- Include relevant info like errors or a picture of the problem -->
|
||||
|
||||
**How to replicate**:
|
||||
<!--- If you can reproduce the issue please tell us as detailed as possible step by step how to do that -->
|
||||
|
||||
**Checklist**:
|
||||
<!-- Make sure you've completed the following steps (put an "X" between of brackets): -->
|
||||
<!--- Make sure you've completed the following steps (put an "X" between of brackets): -->
|
||||
- [] I included a `/fawe debugpaste` link
|
||||
- [] I made sure there aren't duplicates of this report [(Use Search)](https://github.com/boy0001/FastAsyncWorldedit/issues?utf8=%E2%9C%93&q=is%3Aissue)
|
||||
- [] I made sure I am using an up-to-date version of FAWE
|
||||
- [] I Made sure the bug/error is not caused by any other plugin
|
||||
|
||||
|
||||
|
||||
- [] I Made sure the bug/error is not caused by any other plugin
|
@ -29,7 +29,6 @@ import com.boydti.fawe.object.FaweQueue;
|
||||
import com.boydti.fawe.regions.FaweMaskManager;
|
||||
import com.boydti.fawe.util.MainUtil;
|
||||
import com.boydti.fawe.util.ReflectionUtils;
|
||||
import com.boydti.fawe.util.StringMan;
|
||||
import com.boydti.fawe.util.TaskManager;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.bukkit.EditSessionBlockChangeDelegate;
|
||||
@ -183,11 +182,11 @@ public class FaweBukkit implements IFawe, Listener {
|
||||
public String getDebugInfo() {
|
||||
StringBuilder msg = new StringBuilder();
|
||||
List<String> pl = new ArrayList<>();
|
||||
msg.append("server.plugins: \n");
|
||||
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
||||
pl.add(p.getName());
|
||||
msg.append(" - " + p.getName() + ": " + p.getDescription().getVersion() + "\n");
|
||||
}
|
||||
msg.append("server.plugins: \n - " + StringMan.join(pl, " - ") + "\n");
|
||||
msg.append("server.version: " + Bukkit.getVersion() + " / " + Bukkit.getBukkitVersion());
|
||||
msg.append("server.version: " + Bukkit.getVersion() + " / " + Bukkit.getBukkitVersion() + "\n");
|
||||
return msg.toString();
|
||||
}
|
||||
|
||||
|
@ -13,6 +13,7 @@ import com.sk89q.jnbt.StringTag;
|
||||
import com.sk89q.jnbt.Tag;
|
||||
import com.sk89q.worldedit.internal.Constants;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
@ -305,8 +306,10 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
||||
continue;
|
||||
}
|
||||
sections[j] = section = new ChunkSection(j << 4, flag);
|
||||
section.setIdArray(null);
|
||||
section.setIdArray(newIdArray);
|
||||
getParent().setCount(0, count - this.getAir(j), section);
|
||||
section.setDataArray(null);
|
||||
if (newDataArray != null) {
|
||||
section.setDataArray(newDataArray);
|
||||
}
|
||||
@ -317,26 +320,73 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
||||
sections[j] = null;
|
||||
continue;
|
||||
}
|
||||
section.setIdArray(null);
|
||||
section.setIdArray(newIdArray);
|
||||
getParent().setCount(0, count - this.getAir(j), section);
|
||||
section.setDataArray(null);
|
||||
if (newDataArray != null) {
|
||||
section.setDataArray(newDataArray);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
char[] charArray = this.getIdArray(j);
|
||||
byte[] currentIdArray = (byte[]) BukkitQueue17.fieldIds.get(section);
|
||||
NibbleArray currentDataArray = (NibbleArray) BukkitQueue17.fieldData.get(section);
|
||||
boolean data = currentDataArray != null && newDataArray != null;
|
||||
if (currentDataArray == null && newDataArray != null) {
|
||||
section.setDataArray(newDataArray);
|
||||
if (currentDataArray == null) {
|
||||
byte compactData = (byte) section.getData(0, 0, 0);
|
||||
if (compactData != 0 && newDataArray == null) {
|
||||
newDataArray = new NibbleArray(new byte[2048], 4);
|
||||
byte full = (byte) ((compactData << 4) + compactData);
|
||||
Arrays.fill(newDataArray.a, full);
|
||||
for (int i = 0; i < newDataArray.a.length; i++) {
|
||||
int i2 = i << 1;
|
||||
int i3 = i2 + 1;
|
||||
byte val = newDataArray.a[i];
|
||||
if (FaweCache.hasData(charArray[i3] >> 4)) {
|
||||
newDataArray.a[i] = (byte) (val & 15);
|
||||
}
|
||||
if (FaweCache.hasData(charArray[i2] >> 4)) {
|
||||
newDataArray.a[i] = (byte) (val & 240);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (newDataArray != null) {
|
||||
if (compactData != 0) {
|
||||
byte full = (byte) ((compactData << 4) + compactData);
|
||||
for (int i = 0; i < newDataArray.a.length; i++) {
|
||||
int i2 = i << 1;
|
||||
int i3 = i2 + 1;
|
||||
byte val = newDataArray.a[i];
|
||||
if (charArray[i3] != 0) {
|
||||
if (charArray[i2] != 0) continue;
|
||||
newDataArray.a[i] = (byte) (val & 240 | compactData);
|
||||
continue;
|
||||
}
|
||||
if (charArray[i2] != 0) {
|
||||
if (charArray[i3] != 0) continue;
|
||||
newDataArray.a[i] = (byte) (val & 15 | (compactData) << 4);
|
||||
continue;
|
||||
}
|
||||
newDataArray.a[i] = full;
|
||||
}
|
||||
}
|
||||
section.setDataArray(null);
|
||||
section.setDataArray(newDataArray);
|
||||
}
|
||||
}
|
||||
if (currentIdArray == null) {
|
||||
section.setIdArray(newIdArray);
|
||||
getParent().setCount(0, count - this.getAir(j), section);
|
||||
continue;
|
||||
if (currentIdArray == null && newIdArray != null) {
|
||||
int id = (int) BukkitQueue17.fieldCompactId.get(section);
|
||||
if (id == 0) {
|
||||
section.setIdArray(null);
|
||||
section.setIdArray(newIdArray);
|
||||
getParent().setCount(0, count - this.getAir(j), section);
|
||||
continue;
|
||||
} else {
|
||||
currentIdArray = section.getIdArray();
|
||||
}
|
||||
}
|
||||
int nonEmptyBlockCount = 0;
|
||||
char[] charArray = this.getIdArray(j);
|
||||
for (int k = 0; k < newIdArray.length; k++) {
|
||||
char combined = charArray[k];
|
||||
switch (combined) {
|
||||
@ -360,11 +410,11 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
||||
currentIdArray[k] = newIdArray[k];
|
||||
if (data) {
|
||||
int dataByte = FaweCache.getData(combined);
|
||||
int x = FaweCache.CACHE_X[0][k];
|
||||
int y = FaweCache.CACHE_Y[0][k];
|
||||
int z = FaweCache.CACHE_Z[0][k];
|
||||
int newData = newDataArray.a(x, y, z);
|
||||
currentDataArray.a(x, y, z, newData);
|
||||
if ((k & 1) == 0) {
|
||||
currentDataArray.a[k] = (byte) (currentDataArray.a[k] & 240 | dataByte);
|
||||
} else {
|
||||
currentDataArray.a[k] = (byte) (currentDataArray.a[k] & 15 | (dataByte) << 4);
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -69,6 +69,7 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
||||
|
||||
protected static Field fieldData;
|
||||
protected static Field fieldIds;
|
||||
protected static Field fieldCompactId;
|
||||
protected static Field fieldTickingBlockCount;
|
||||
protected static Field fieldNonEmptyBlockCount;
|
||||
protected static Field fieldBiomes;
|
||||
@ -88,6 +89,8 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
||||
fieldData.setAccessible(true);
|
||||
fieldIds = ChunkSection.class.getDeclaredField("blockIds");
|
||||
fieldIds.setAccessible(true);
|
||||
fieldCompactId = ChunkSection.class.getDeclaredField("compactId");
|
||||
fieldCompactId.setAccessible(true);
|
||||
fieldTickingBlockCount = ChunkSection.class.getDeclaredField("tickingBlockCount");
|
||||
fieldNonEmptyBlockCount = ChunkSection.class.getDeclaredField("nonEmptyBlockCount");
|
||||
fieldTickingBlockCount.setAccessible(true);
|
||||
@ -397,7 +400,7 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
||||
@Override
|
||||
public CompoundTag getTileEntity(net.minecraft.server.v1_7_R4.Chunk chunk, int x, int y, int z) {
|
||||
Map<ChunkPosition, TileEntity> tiles = chunk.tileEntities;
|
||||
ChunkPosition pos = new ChunkPosition(x, y, z);
|
||||
ChunkPosition pos = new ChunkPosition(x & 15, y, z & 15);
|
||||
TileEntity tile = tiles.get(pos);
|
||||
return tile != null ? getTag(tile) : null;
|
||||
}
|
||||
|
@ -39,6 +39,14 @@ public class MaskedFaweQueue extends DelegateFaweQueue {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setBlock(int x, int y, int z, int id, int data, CompoundTag nbt) {
|
||||
if (WEManager.IMP.maskContains(mask, x, z)) {
|
||||
return super.setBlock(x, y, z, id, data, nbt);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setBiome(int x, int z, BaseBiome biome) {
|
||||
if (WEManager.IMP.maskContains(mask, x, z)) {
|
||||
|
@ -297,7 +297,7 @@ public class SchematicCommands {
|
||||
player.printError("Deletion of " + filename + " failed! Maybe it is read-only.");
|
||||
return;
|
||||
}
|
||||
BBC.SCHEMATIC_DELETE.send(player, filename);
|
||||
BBC.FILE_DELETED.send(player, filename);
|
||||
}
|
||||
|
||||
@Command(aliases = {"formats", "listformats", "f"}, desc = "List available formats", max = 0)
|
||||
|
@ -198,7 +198,8 @@ public class BlockTransformExtent extends ResettableExtent {
|
||||
return changedBlock;
|
||||
}
|
||||
|
||||
for (State state : states.values()) {
|
||||
for (Map.Entry<String, ? extends State> entry : states.entrySet()) {
|
||||
State state = entry.getValue();
|
||||
if (state.hasDirection()) {
|
||||
StateValue value = state.getValue(block);
|
||||
if (value != null && value.getDirection() != null) {
|
||||
@ -231,7 +232,8 @@ public class BlockTransformExtent extends ResettableExtent {
|
||||
double closest = -2;
|
||||
boolean found = false;
|
||||
|
||||
for (StateValue v : state.valueMap().values()) {
|
||||
for (Map.Entry<String, ? extends StateValue> entry : state.valueMap().entrySet()) {
|
||||
StateValue v = entry.getValue();
|
||||
if (v.getDirection() != null) {
|
||||
double dot = v.getDirection().normalize().dot(newDirection);
|
||||
if (dot >= closest) {
|
||||
|
@ -33,6 +33,9 @@ import com.sk89q.worldedit.Vector;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||
import com.sk89q.worldedit.blocks.BlockMaterial;
|
||||
import com.sk89q.worldedit.extent.transform.BlockTransformExtent;
|
||||
import com.sk89q.worldedit.math.transform.AffineTransform;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Type;
|
||||
import java.net.URL;
|
||||
@ -168,15 +171,37 @@ public class BundledBlockData {
|
||||
return true;
|
||||
}
|
||||
for (Map.Entry<String, FaweState> stateEntry : entry.states.entrySet()) {
|
||||
for (Map.Entry<String, FaweStateValue> valueEntry : stateEntry.getValue().valueMap().entrySet()) {
|
||||
FaweState faweState = stateEntry.getValue();
|
||||
for (Map.Entry<String, FaweStateValue> valueEntry : faweState.valueMap().entrySet()) {
|
||||
String key = valueEntry.getKey();
|
||||
FaweStateValue faweStateValue = valueEntry.getValue();
|
||||
if (key.equals("true")) {
|
||||
key = stateEntry.getKey();
|
||||
}
|
||||
stateMap.put(entry.id + ":" + key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().data));
|
||||
stateMap.put(id + ":" + key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().data));
|
||||
stateMap.putIfAbsent(modId + ":" + key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().data));
|
||||
stateMap.putIfAbsent(key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().data));
|
||||
stateMap.put(entry.id + ":" + key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||
stateMap.put(id + ":" + key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||
stateMap.putIfAbsent(modId + ":" + key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||
stateMap.putIfAbsent(key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||
}
|
||||
}
|
||||
if (!entry.states.isEmpty()) { // Fix vine direction 2
|
||||
String[] states = new String[] {"north", "east", "south", "west", "up", "down"};
|
||||
Vector[] dirs = new Vector[] {
|
||||
new Vector(0, 0, -1),
|
||||
new Vector(1, 0, 0),
|
||||
new Vector(0, 0, 1),
|
||||
new Vector(-1, 0, 0),
|
||||
new Vector(0, 1, 0),
|
||||
new Vector(0, -1, 0),
|
||||
};
|
||||
for (int i = 0; i < states.length; i++) {
|
||||
FaweState state = entry.states.get(states[i]);
|
||||
if (state != null && !state.hasDirection()) {
|
||||
FaweStateValue active = state.valueMap().get("true");
|
||||
if (active != null) {
|
||||
entry.fixDirection(dirs[i], states[i], null, active.data);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
FaweState half = entry.states.get("half");
|
||||
@ -370,8 +395,27 @@ public class BundledBlockData {
|
||||
state.postDeserialization();
|
||||
}
|
||||
}
|
||||
|
||||
protected void fixDirection(Vector direction, String key, Byte mask, int data) {
|
||||
FaweState state = states.remove(key);
|
||||
if (state != null && !state.hasDirection()) {
|
||||
FaweState facing = states.get("facing");
|
||||
if (facing == null) {
|
||||
facing = BundledBlockData.getInstance().new FaweState();
|
||||
facing.values = new HashMap<>();
|
||||
states.put("facing", facing);
|
||||
}
|
||||
if (mask != null) facing.dataMask = (byte) (facing.getDataMask() | mask);
|
||||
FaweStateValue value = BundledBlockData.getInstance().new FaweStateValue();
|
||||
value.state = facing;
|
||||
value.data = (byte) data;
|
||||
value.direction = direction;
|
||||
facing.values.put(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static Class<?> inject() {
|
||||
return BundledBlockData.class;
|
||||
}
|
||||
@ -414,7 +458,7 @@ public class BundledBlockData {
|
||||
|
||||
@Override
|
||||
public boolean isSet(BaseBlock block) {
|
||||
return data != null && (block.getData() & state.getDataMask()) == data;
|
||||
return data != null && ((state.dataMask == null && block.getData() == data) || (block.getData() & state.getDataMask()) == data);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -35,7 +35,6 @@ public class Favs extends JavaPlugin {
|
||||
String name = file.getName().toLowerCase();
|
||||
if (name.endsWith(".jar") && name.contains("voxelsniper") && !name.contains("fastasyncvoxelsniper")) {
|
||||
output = file;
|
||||
System.out.println("File " + file + " | " + thisName);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user