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
|
# Bug report
|
||||||
<!--- In order to create a valid issue report you have to follow this template. -->
|
<!--- Follow this template if reporting an issue. -->
|
||||||
<!--- You may remove it if you are posting a feature request. -->
|
<!--- 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**:
|
**Debug paste link**:
|
||||||
<!--- Enter /fawe debugpaste in game or in your console and copy the output here -->
|
<!--- Enter /fawe debugpaste in game or in your console and copy the output here -->
|
||||||
|
|
||||||
**Description of the problem:**
|
**Description of the problem:**
|
||||||
|
<!--- Include relevant info like errors or a picture of the problem -->
|
||||||
|
|
||||||
**How to replicate**:
|
**How to replicate**:
|
||||||
<!--- If you can reproduce the issue please tell us as detailed as possible step by step how to do that -->
|
<!--- If you can reproduce the issue please tell us as detailed as possible step by step how to do that -->
|
||||||
|
|
||||||
**Checklist**:
|
**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 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 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 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.regions.FaweMaskManager;
|
||||||
import com.boydti.fawe.util.MainUtil;
|
import com.boydti.fawe.util.MainUtil;
|
||||||
import com.boydti.fawe.util.ReflectionUtils;
|
import com.boydti.fawe.util.ReflectionUtils;
|
||||||
import com.boydti.fawe.util.StringMan;
|
|
||||||
import com.boydti.fawe.util.TaskManager;
|
import com.boydti.fawe.util.TaskManager;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||||
import com.sk89q.worldedit.bukkit.EditSessionBlockChangeDelegate;
|
import com.sk89q.worldedit.bukkit.EditSessionBlockChangeDelegate;
|
||||||
@ -183,11 +182,11 @@ public class FaweBukkit implements IFawe, Listener {
|
|||||||
public String getDebugInfo() {
|
public String getDebugInfo() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
List<String> pl = new ArrayList<>();
|
List<String> pl = new ArrayList<>();
|
||||||
|
msg.append("server.plugins: \n");
|
||||||
for (Plugin p : Bukkit.getPluginManager().getPlugins()) {
|
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() + "\n");
|
||||||
msg.append("server.version: " + Bukkit.getVersion() + " / " + Bukkit.getBukkitVersion());
|
|
||||||
return msg.toString();
|
return msg.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ import com.sk89q.jnbt.StringTag;
|
|||||||
import com.sk89q.jnbt.Tag;
|
import com.sk89q.jnbt.Tag;
|
||||||
import com.sk89q.worldedit.internal.Constants;
|
import com.sk89q.worldedit.internal.Constants;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -305,8 +306,10 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
sections[j] = section = new ChunkSection(j << 4, flag);
|
sections[j] = section = new ChunkSection(j << 4, flag);
|
||||||
|
section.setIdArray(null);
|
||||||
section.setIdArray(newIdArray);
|
section.setIdArray(newIdArray);
|
||||||
getParent().setCount(0, count - this.getAir(j), section);
|
getParent().setCount(0, count - this.getAir(j), section);
|
||||||
|
section.setDataArray(null);
|
||||||
if (newDataArray != null) {
|
if (newDataArray != null) {
|
||||||
section.setDataArray(newDataArray);
|
section.setDataArray(newDataArray);
|
||||||
}
|
}
|
||||||
@ -317,26 +320,73 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
|||||||
sections[j] = null;
|
sections[j] = null;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
section.setIdArray(null);
|
||||||
section.setIdArray(newIdArray);
|
section.setIdArray(newIdArray);
|
||||||
getParent().setCount(0, count - this.getAir(j), section);
|
getParent().setCount(0, count - this.getAir(j), section);
|
||||||
|
section.setDataArray(null);
|
||||||
if (newDataArray != null) {
|
if (newDataArray != null) {
|
||||||
section.setDataArray(newDataArray);
|
section.setDataArray(newDataArray);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
char[] charArray = this.getIdArray(j);
|
||||||
byte[] currentIdArray = (byte[]) BukkitQueue17.fieldIds.get(section);
|
byte[] currentIdArray = (byte[]) BukkitQueue17.fieldIds.get(section);
|
||||||
NibbleArray currentDataArray = (NibbleArray) BukkitQueue17.fieldData.get(section);
|
NibbleArray currentDataArray = (NibbleArray) BukkitQueue17.fieldData.get(section);
|
||||||
boolean data = currentDataArray != null && newDataArray != null;
|
boolean data = currentDataArray != null && newDataArray != null;
|
||||||
if (currentDataArray == null && newDataArray != null) {
|
if (currentDataArray == null) {
|
||||||
section.setDataArray(newDataArray);
|
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) {
|
if (currentIdArray == null && newIdArray != null) {
|
||||||
section.setIdArray(newIdArray);
|
int id = (int) BukkitQueue17.fieldCompactId.get(section);
|
||||||
getParent().setCount(0, count - this.getAir(j), section);
|
if (id == 0) {
|
||||||
continue;
|
section.setIdArray(null);
|
||||||
|
section.setIdArray(newIdArray);
|
||||||
|
getParent().setCount(0, count - this.getAir(j), section);
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
currentIdArray = section.getIdArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int nonEmptyBlockCount = 0;
|
int nonEmptyBlockCount = 0;
|
||||||
char[] charArray = this.getIdArray(j);
|
|
||||||
for (int k = 0; k < newIdArray.length; k++) {
|
for (int k = 0; k < newIdArray.length; k++) {
|
||||||
char combined = charArray[k];
|
char combined = charArray[k];
|
||||||
switch (combined) {
|
switch (combined) {
|
||||||
@ -360,11 +410,11 @@ public class BukkitChunk_1_7 extends CharFaweChunk<Chunk, BukkitQueue17> {
|
|||||||
currentIdArray[k] = newIdArray[k];
|
currentIdArray[k] = newIdArray[k];
|
||||||
if (data) {
|
if (data) {
|
||||||
int dataByte = FaweCache.getData(combined);
|
int dataByte = FaweCache.getData(combined);
|
||||||
int x = FaweCache.CACHE_X[0][k];
|
if ((k & 1) == 0) {
|
||||||
int y = FaweCache.CACHE_Y[0][k];
|
currentDataArray.a[k] = (byte) (currentDataArray.a[k] & 240 | dataByte);
|
||||||
int z = FaweCache.CACHE_Z[0][k];
|
} else {
|
||||||
int newData = newDataArray.a(x, y, z);
|
currentDataArray.a[k] = (byte) (currentDataArray.a[k] & 15 | (dataByte) << 4);
|
||||||
currentDataArray.a(x, y, z, newData);
|
}
|
||||||
}
|
}
|
||||||
continue;
|
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 fieldData;
|
||||||
protected static Field fieldIds;
|
protected static Field fieldIds;
|
||||||
|
protected static Field fieldCompactId;
|
||||||
protected static Field fieldTickingBlockCount;
|
protected static Field fieldTickingBlockCount;
|
||||||
protected static Field fieldNonEmptyBlockCount;
|
protected static Field fieldNonEmptyBlockCount;
|
||||||
protected static Field fieldBiomes;
|
protected static Field fieldBiomes;
|
||||||
@ -88,6 +89,8 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
|||||||
fieldData.setAccessible(true);
|
fieldData.setAccessible(true);
|
||||||
fieldIds = ChunkSection.class.getDeclaredField("blockIds");
|
fieldIds = ChunkSection.class.getDeclaredField("blockIds");
|
||||||
fieldIds.setAccessible(true);
|
fieldIds.setAccessible(true);
|
||||||
|
fieldCompactId = ChunkSection.class.getDeclaredField("compactId");
|
||||||
|
fieldCompactId.setAccessible(true);
|
||||||
fieldTickingBlockCount = ChunkSection.class.getDeclaredField("tickingBlockCount");
|
fieldTickingBlockCount = ChunkSection.class.getDeclaredField("tickingBlockCount");
|
||||||
fieldNonEmptyBlockCount = ChunkSection.class.getDeclaredField("nonEmptyBlockCount");
|
fieldNonEmptyBlockCount = ChunkSection.class.getDeclaredField("nonEmptyBlockCount");
|
||||||
fieldTickingBlockCount.setAccessible(true);
|
fieldTickingBlockCount.setAccessible(true);
|
||||||
@ -397,7 +400,7 @@ public class BukkitQueue17 extends BukkitQueue_0<net.minecraft.server.v1_7_R4.Ch
|
|||||||
@Override
|
@Override
|
||||||
public CompoundTag getTileEntity(net.minecraft.server.v1_7_R4.Chunk chunk, int x, int y, int z) {
|
public CompoundTag getTileEntity(net.minecraft.server.v1_7_R4.Chunk chunk, int x, int y, int z) {
|
||||||
Map<ChunkPosition, TileEntity> tiles = chunk.tileEntities;
|
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);
|
TileEntity tile = tiles.get(pos);
|
||||||
return tile != null ? getTag(tile) : null;
|
return tile != null ? getTag(tile) : null;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,14 @@ public class MaskedFaweQueue extends DelegateFaweQueue {
|
|||||||
return false;
|
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
|
@Override
|
||||||
public boolean setBiome(int x, int z, BaseBiome biome) {
|
public boolean setBiome(int x, int z, BaseBiome biome) {
|
||||||
if (WEManager.IMP.maskContains(mask, x, z)) {
|
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.");
|
player.printError("Deletion of " + filename + " failed! Maybe it is read-only.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BBC.SCHEMATIC_DELETE.send(player, filename);
|
BBC.FILE_DELETED.send(player, filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(aliases = {"formats", "listformats", "f"}, desc = "List available formats", max = 0)
|
@Command(aliases = {"formats", "listformats", "f"}, desc = "List available formats", max = 0)
|
||||||
|
@ -198,7 +198,8 @@ public class BlockTransformExtent extends ResettableExtent {
|
|||||||
return changedBlock;
|
return changedBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (State state : states.values()) {
|
for (Map.Entry<String, ? extends State> entry : states.entrySet()) {
|
||||||
|
State state = entry.getValue();
|
||||||
if (state.hasDirection()) {
|
if (state.hasDirection()) {
|
||||||
StateValue value = state.getValue(block);
|
StateValue value = state.getValue(block);
|
||||||
if (value != null && value.getDirection() != null) {
|
if (value != null && value.getDirection() != null) {
|
||||||
@ -231,7 +232,8 @@ public class BlockTransformExtent extends ResettableExtent {
|
|||||||
double closest = -2;
|
double closest = -2;
|
||||||
boolean found = false;
|
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) {
|
if (v.getDirection() != null) {
|
||||||
double dot = v.getDirection().normalize().dot(newDirection);
|
double dot = v.getDirection().normalize().dot(newDirection);
|
||||||
if (dot >= closest) {
|
if (dot >= closest) {
|
||||||
|
@ -33,6 +33,9 @@ import com.sk89q.worldedit.Vector;
|
|||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.blocks.BaseBlock;
|
import com.sk89q.worldedit.blocks.BaseBlock;
|
||||||
import com.sk89q.worldedit.blocks.BlockMaterial;
|
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.io.IOException;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -168,15 +171,37 @@ public class BundledBlockData {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, FaweState> stateEntry : entry.states.entrySet()) {
|
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();
|
String key = valueEntry.getKey();
|
||||||
|
FaweStateValue faweStateValue = valueEntry.getValue();
|
||||||
if (key.equals("true")) {
|
if (key.equals("true")) {
|
||||||
key = stateEntry.getKey();
|
key = stateEntry.getKey();
|
||||||
}
|
}
|
||||||
stateMap.put(entry.id + ":" + 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, valueEntry.getValue().data));
|
stateMap.put(id + ":" + key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||||
stateMap.putIfAbsent(modId + ":" + key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().data));
|
stateMap.putIfAbsent(modId + ":" + key, FaweCache.getBlock(entry.legacyId, faweStateValue.data));
|
||||||
stateMap.putIfAbsent(key, FaweCache.getBlock(entry.legacyId, valueEntry.getValue().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");
|
FaweState half = entry.states.get("half");
|
||||||
@ -370,8 +395,27 @@ public class BundledBlockData {
|
|||||||
state.postDeserialization();
|
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() {
|
public static Class<?> inject() {
|
||||||
return BundledBlockData.class;
|
return BundledBlockData.class;
|
||||||
}
|
}
|
||||||
@ -414,7 +458,7 @@ public class BundledBlockData {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSet(BaseBlock block) {
|
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
|
@Override
|
||||||
|
@ -35,7 +35,6 @@ public class Favs extends JavaPlugin {
|
|||||||
String name = file.getName().toLowerCase();
|
String name = file.getName().toLowerCase();
|
||||||
if (name.endsWith(".jar") && name.contains("voxelsniper") && !name.contains("fastasyncvoxelsniper")) {
|
if (name.endsWith(".jar") && name.contains("voxelsniper") && !name.contains("fastasyncvoxelsniper")) {
|
||||||
output = file;
|
output = file;
|
||||||
System.out.println("File " + file + " | " + thisName);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user