geforkt von Mirrors/FastAsyncWorldEdit
fix WNA
Dieser Commit ist enthalten in:
Ursprung
3c5041ddb7
Commit
6e49427b26
@ -58,7 +58,7 @@ public class FAWEWorldNativeAccess_1_15_2 implements WorldNativeAccess<Chunk, IB
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockData toNative(com.sk89q.worldedit.world.block.BlockState state) {
|
public IBlockData toNative(com.sk89q.worldedit.world.block.BlockState state) {
|
||||||
int stateId = BlockStateIdAccess.getBlockStateId(state);
|
int stateId = adapter.ordinalToIbdID(state.getOrdinalChar());
|
||||||
return BlockStateIdAccess.isValidInternalId(stateId)
|
return BlockStateIdAccess.isValidInternalId(stateId)
|
||||||
? Block.getByCombinedId(stateId)
|
? Block.getByCombinedId(stateId)
|
||||||
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
||||||
@ -72,7 +72,8 @@ public class FAWEWorldNativeAccess_1_15_2 implements WorldNativeAccess<Chunk, IB
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
||||||
return chunk.setType(position, state, false);
|
return chunk.setType(position, state,
|
||||||
|
this.sideEffectSet != null && this.sideEffectSet.shouldApply(SideEffect.UPDATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -166,9 +167,4 @@ public class FAWEWorldNativeAccess_1_15_2 implements WorldNativeAccess<Chunk, IB
|
|||||||
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
||||||
getWorld().a(pos, oldState, newState);
|
getWorld().a(pos, oldState, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B block, SideEffectSet sideEffects) throws WorldEditException {
|
|
||||||
return this.adapter.setBlock(this.getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4).bukkitChunk, position.getBlockX(), position.getBlockY(), position.getBlockZ(), block, sideEffectSet.shouldApply(SideEffect.LIGHTING));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockData toNative(BlockState state) {
|
public IBlockData toNative(BlockState state) {
|
||||||
int stateId = BlockStateIdAccess.getBlockStateId(state);
|
int stateId = adapter.ordinalToIbdID(state.getOrdinalChar());
|
||||||
return BlockStateIdAccess.isValidInternalId(stateId)
|
return BlockStateIdAccess.isValidInternalId(stateId)
|
||||||
? Block.getByCombinedId(stateId)
|
? Block.getByCombinedId(stateId)
|
||||||
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
||||||
@ -73,7 +73,8 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
||||||
return chunk.setType(position, state, false);
|
return chunk.setType(position, state,
|
||||||
|
this.sideEffectSet != null && this.sideEffectSet.shouldApply(SideEffect.UPDATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,9 +168,4 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
||||||
getWorld().a(pos, oldState, newState);
|
getWorld().a(pos, oldState, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B block, SideEffectSet sideEffects) throws WorldEditException {
|
|
||||||
return this.adapter.setBlock(this.getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4).bukkitChunk, position.getBlockX(), position.getBlockY(), position.getBlockZ(), block, sideEffectSet.shouldApply(SideEffect.LIGHTING));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockData toNative(BlockState state) {
|
public IBlockData toNative(BlockState state) {
|
||||||
int stateId = BlockStateIdAccess.getBlockStateId(state);
|
int stateId = adapter.ordinalToIbdID(state.getOrdinalChar());
|
||||||
return BlockStateIdAccess.isValidInternalId(stateId)
|
return BlockStateIdAccess.isValidInternalId(stateId)
|
||||||
? Block.getByCombinedId(stateId)
|
? Block.getByCombinedId(stateId)
|
||||||
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
||||||
@ -73,7 +73,8 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
||||||
return chunk.setType(position, state, false);
|
return chunk.setType(position, state,
|
||||||
|
this.sideEffectSet != null && this.sideEffectSet.shouldApply(SideEffect.UPDATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,9 +168,4 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
||||||
getWorld().a(pos, oldState, newState);
|
getWorld().a(pos, oldState, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B block, SideEffectSet sideEffects) throws WorldEditException {
|
|
||||||
return this.adapter.setBlock(this.getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4).bukkitChunk, position.getBlockX(), position.getBlockY(), position.getBlockZ(), block, sideEffectSet.shouldApply(SideEffect.LIGHTING));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBlockData toNative(BlockState state) {
|
public IBlockData toNative(BlockState state) {
|
||||||
int stateId = BlockStateIdAccess.getBlockStateId(state);
|
int stateId = adapter.ordinalToIbdID(state.getOrdinalChar());
|
||||||
return BlockStateIdAccess.isValidInternalId(stateId)
|
return BlockStateIdAccess.isValidInternalId(stateId)
|
||||||
? Block.getByCombinedId(stateId)
|
? Block.getByCombinedId(stateId)
|
||||||
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
: ((CraftBlockData) BukkitAdapter.adapt(state)).getState();
|
||||||
@ -74,7 +74,8 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
public IBlockData setBlockState(Chunk chunk, BlockPosition position, IBlockData state) {
|
||||||
return chunk.setType(position, state, false);
|
return chunk.setType(position, state,
|
||||||
|
this.sideEffectSet != null && this.sideEffectSet.shouldApply(SideEffect.UPDATE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -168,9 +169,4 @@ public class FAWEWorldNativeAccess_1_16 implements WorldNativeAccess<Chunk, IBlo
|
|||||||
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
public void onBlockStateChange(BlockPosition pos, IBlockData oldState, IBlockData newState) {
|
||||||
getWorld().a(pos, oldState, newState);
|
getWorld().a(pos, oldState, newState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <B extends BlockStateHolder<B>> boolean setBlock(BlockVector3 position, B block, SideEffectSet sideEffects) throws WorldEditException {
|
|
||||||
return this.adapter.setBlock(this.getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4).bukkitChunk, position.getBlockX(), position.getBlockY(), position.getBlockZ(), block, sideEffectSet.shouldApply(SideEffect.LIGHTING));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -107,6 +107,7 @@ import static org.slf4j.LoggerFactory.getLogger;
|
|||||||
public final class FAWE_Spigot_v1_15_R2 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
public final class FAWE_Spigot_v1_15_R2 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
||||||
private final Spigot_v1_15_R2 parent;
|
private final Spigot_v1_15_R2 parent;
|
||||||
private char[] ibdToStateOrdinal;
|
private char[] ibdToStateOrdinal;
|
||||||
|
private int[] ordinalToIbdID;
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Code that may break between versions of Minecraft
|
// Code that may break between versions of Minecraft
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@ -125,11 +126,14 @@ public final class FAWE_Spigot_v1_15_R2 extends CachedBukkitAdapter implements I
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
||||||
|
ordinalToIbdID = new int[ibdToStateOrdinal.length]; // size
|
||||||
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
||||||
BlockState state = BlockTypesCache.states[i];
|
BlockState state = BlockTypesCache.states[i];
|
||||||
BlockMaterial_1_15_2 material = (BlockMaterial_1_15_2) state.getMaterial();
|
BlockMaterial_1_15_2 material = (BlockMaterial_1_15_2) state.getMaterial();
|
||||||
int id = Block.REGISTRY_ID.getId(material.getState());
|
int id = Block.REGISTRY_ID.getId(material.getState());
|
||||||
ibdToStateOrdinal[id] = state.getOrdinalChar();
|
char ordinal = state.getOrdinalChar();
|
||||||
|
ibdToStateOrdinal[id] = ordinal;
|
||||||
|
ordinalToIbdID[ordinal] = id;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -348,6 +352,17 @@ public final class FAWE_Spigot_v1_15_R2 extends CachedBukkitAdapter implements I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ordinalToIbdID(char ordinal) {
|
||||||
|
synchronized (this) {
|
||||||
|
try {
|
||||||
|
return ordinalToIbdID[ordinal];
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
init();
|
||||||
|
return ordinalToIbdID(ordinal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
||||||
BlockMaterial_1_15_2 material = (BlockMaterial_1_15_2) state.getMaterial();
|
BlockMaterial_1_15_2 material = (BlockMaterial_1_15_2) state.getMaterial();
|
||||||
|
@ -106,6 +106,7 @@ import static org.slf4j.LoggerFactory.getLogger;
|
|||||||
public final class FAWE_Spigot_v1_16_R1 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
public final class FAWE_Spigot_v1_16_R1 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
||||||
private final Spigot_v1_16_R1 parent;
|
private final Spigot_v1_16_R1 parent;
|
||||||
private char[] ibdToStateOrdinal;
|
private char[] ibdToStateOrdinal;
|
||||||
|
private int[] ordinalToIbdID;
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Code that may break between versions of Minecraft
|
// Code that may break between versions of Minecraft
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
@ -124,11 +125,14 @@ public final class FAWE_Spigot_v1_16_R1 extends CachedBukkitAdapter implements I
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
||||||
|
ordinalToIbdID = new int[ibdToStateOrdinal.length]; // size
|
||||||
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
||||||
BlockState state = BlockTypesCache.states[i];
|
BlockState state = BlockTypesCache.states[i];
|
||||||
BlockMaterial_1_16_1 material = (BlockMaterial_1_16_1) state.getMaterial();
|
BlockMaterial_1_16_1 material = (BlockMaterial_1_16_1) state.getMaterial();
|
||||||
int id = Block.REGISTRY_ID.getId(material.getState());
|
int id = Block.REGISTRY_ID.getId(material.getState());
|
||||||
ibdToStateOrdinal[id] = state.getOrdinalChar();
|
char ordinal = state.getOrdinalChar();
|
||||||
|
ibdToStateOrdinal[id] = ordinal;
|
||||||
|
ordinalToIbdID[ordinal] = id;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -347,6 +351,17 @@ public final class FAWE_Spigot_v1_16_R1 extends CachedBukkitAdapter implements I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ordinalToIbdID(char ordinal) {
|
||||||
|
synchronized (this) {
|
||||||
|
try {
|
||||||
|
return ordinalToIbdID[ordinal];
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
init();
|
||||||
|
return ordinalToIbdID(ordinal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
||||||
BlockMaterial_1_16_1 material = (BlockMaterial_1_16_1) state.getMaterial();
|
BlockMaterial_1_16_1 material = (BlockMaterial_1_16_1) state.getMaterial();
|
||||||
|
@ -106,6 +106,7 @@ import static org.slf4j.LoggerFactory.getLogger;
|
|||||||
public final class FAWE_Spigot_v1_16_R2 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
public final class FAWE_Spigot_v1_16_R2 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
||||||
private final Spigot_v1_16_R2 parent;
|
private final Spigot_v1_16_R2 parent;
|
||||||
private char[] ibdToStateOrdinal;
|
private char[] ibdToStateOrdinal;
|
||||||
|
private int[] ordinalToIbdID;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Code that may break between versions of Minecraft
|
// Code that may break between versions of Minecraft
|
||||||
@ -125,11 +126,14 @@ public final class FAWE_Spigot_v1_16_R2 extends CachedBukkitAdapter implements I
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
||||||
|
ordinalToIbdID = new int[ibdToStateOrdinal.length]; // size
|
||||||
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
||||||
BlockState state = BlockTypesCache.states[i];
|
BlockState state = BlockTypesCache.states[i];
|
||||||
BlockMaterial_1_16_2 material = (BlockMaterial_1_16_2) state.getMaterial();
|
BlockMaterial_1_16_2 material = (BlockMaterial_1_16_2) state.getMaterial();
|
||||||
int id = Block.REGISTRY_ID.getId(material.getState());
|
int id = Block.REGISTRY_ID.getId(material.getState());
|
||||||
ibdToStateOrdinal[id] = state.getOrdinalChar();
|
char ordinal = state.getOrdinalChar();
|
||||||
|
ibdToStateOrdinal[id] = ordinal;
|
||||||
|
ordinalToIbdID[ordinal] = id;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -348,6 +352,17 @@ public final class FAWE_Spigot_v1_16_R2 extends CachedBukkitAdapter implements I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ordinalToIbdID(char ordinal) {
|
||||||
|
synchronized (this) {
|
||||||
|
try {
|
||||||
|
return ordinalToIbdID[ordinal];
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
init();
|
||||||
|
return ordinalToIbdID(ordinal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
||||||
BlockMaterial_1_16_2 material = (BlockMaterial_1_16_2) state.getMaterial();
|
BlockMaterial_1_16_2 material = (BlockMaterial_1_16_2) state.getMaterial();
|
||||||
|
@ -107,6 +107,7 @@ import static org.slf4j.LoggerFactory.getLogger;
|
|||||||
public final class FAWE_Spigot_v1_16_R3 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
public final class FAWE_Spigot_v1_16_R3 extends CachedBukkitAdapter implements IDelegateBukkitImplAdapter<NBTBase> {
|
||||||
private final Spigot_v1_16_R3 parent;
|
private final Spigot_v1_16_R3 parent;
|
||||||
private char[] ibdToStateOrdinal;
|
private char[] ibdToStateOrdinal;
|
||||||
|
private int[] ordinalToIbdID;
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
// Code that may break between versions of Minecraft
|
// Code that may break between versions of Minecraft
|
||||||
@ -126,11 +127,14 @@ public final class FAWE_Spigot_v1_16_R3 extends CachedBukkitAdapter implements I
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
ibdToStateOrdinal = new char[BlockTypesCache.states.length]; // size
|
||||||
|
ordinalToIbdID = new int[ibdToStateOrdinal.length]; // size
|
||||||
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
for (int i = 0; i < ibdToStateOrdinal.length; i++) {
|
||||||
BlockState state = BlockTypesCache.states[i];
|
BlockState state = BlockTypesCache.states[i];
|
||||||
BlockMaterial_1_16_4 material = (BlockMaterial_1_16_4) state.getMaterial();
|
BlockMaterial_1_16_4 material = (BlockMaterial_1_16_4) state.getMaterial();
|
||||||
int id = Block.REGISTRY_ID.getId(material.getState());
|
int id = Block.REGISTRY_ID.getId(material.getState());
|
||||||
ibdToStateOrdinal[id] = state.getOrdinalChar();
|
char ordinal = state.getOrdinalChar();
|
||||||
|
ibdToStateOrdinal[id] = ordinal;
|
||||||
|
ordinalToIbdID[ordinal] = id;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -349,6 +353,17 @@ public final class FAWE_Spigot_v1_16_R3 extends CachedBukkitAdapter implements I
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int ordinalToIbdID(char ordinal) {
|
||||||
|
synchronized (this) {
|
||||||
|
try {
|
||||||
|
return ordinalToIbdID[ordinal];
|
||||||
|
} catch (NullPointerException e) {
|
||||||
|
init();
|
||||||
|
return ordinalToIbdID(ordinal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
public <B extends BlockStateHolder<B>> BlockData adapt(B state) {
|
||||||
BlockMaterial_1_16_4 material = (BlockMaterial_1_16_4) state.getMaterial();
|
BlockMaterial_1_16_4 material = (BlockMaterial_1_16_4) state.getMaterial();
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren