Merge pull request #482 from EngineHub/forge-1.14

Update to Forge 1.14.
This commit is contained in:
Kenzie Togami 2019-06-16 14:03:35 -07:00 committed by GitHub
commit c97071c0f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 533 additions and 569 deletions

View File

@ -58,8 +58,6 @@ public class SinglePickaxe implements BlockTool {
player.printError("Max blocks change limit reached.");
}
world.playEffect(clicked.toVector(), 2001, blockType.getLegacyId());
return true;
}

View File

@ -14,8 +14,8 @@ buildscript {
apply plugin: 'eclipse'
apply plugin: 'net.minecraftforge.gradle'
def minecraftVersion = "1.13.2"
def forgeVersion = "25.0.146"
def minecraftVersion = "1.14.2"
def forgeVersion = "26.0.25"
configurations.all { Configuration it ->
it.resolutionStrategy { ResolutionStrategy rs ->
@ -36,7 +36,7 @@ sourceCompatibility = 1.8
targetCompatibility = 1.8
minecraft {
mappings channel: 'snapshot', version: '20190415-1.13.2'
mappings channel: 'snapshot', version: "20190614-${minecraftVersion}"
runs {
client = {
@ -57,7 +57,6 @@ minecraft {
}
}
accessTransformer = file('worldedit_at.cfg')
}
project.archivesBaseName = "${project.archivesBaseName}-mc${minecraftVersion}"
@ -84,8 +83,7 @@ processResources {
jar {
manifest {
attributes("Class-Path": "truezip.jar WorldEdit/truezip.jar js.jar WorldEdit/js.jar",
"WorldEdit-Version": version,
"FMLAT": "worldedit_at.cfg")
"WorldEdit-Version": version)
}
}

View File

@ -36,7 +36,7 @@ import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.internal.util.Substring;
import net.minecraft.command.CommandSource;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import org.enginehub.piston.inject.InjectedValueStore;
import org.enginehub.piston.inject.Key;
import org.enginehub.piston.inject.MapBackedValueStore;
@ -78,8 +78,8 @@ public final class CommandWrapper {
private static Predicate<CommandSource> requirementsFor(org.enginehub.piston.Command mapping) {
return ctx -> {
final Entity entity = ctx.getEntity();
if (!(entity instanceof EntityPlayerMP)) return true;
final Actor actor = ForgeAdapter.adaptPlayer(((EntityPlayerMP) entity));
if (!(entity instanceof ServerPlayerEntity)) return true;
final Actor actor = ForgeAdapter.adaptPlayer(((ServerPlayerEntity) entity));
InjectedValueStore store = MapBackedValueStore.create();
store.injectValue(Key.of(Actor.class), context -> Optional.of(actor));
return mapping.getCondition().satisfied(store);

View File

@ -40,15 +40,13 @@ import com.sk89q.worldedit.world.block.BlockTypes;
import com.sk89q.worldedit.world.item.ItemType;
import com.sk89q.worldedit.world.item.ItemTypes;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.state.DirectionProperty;
import net.minecraft.state.IProperty;
import net.minecraft.state.StateContainer;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.IStringSerializable;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
@ -92,20 +90,20 @@ public final class ForgeAdapter {
return new Vec3d(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ());
}
public static EnumFacing adapt(Direction face) {
public static net.minecraft.util.Direction adapt(Direction face) {
switch (face) {
case NORTH: return EnumFacing.NORTH;
case SOUTH: return EnumFacing.SOUTH;
case WEST: return EnumFacing.WEST;
case EAST: return EnumFacing.EAST;
case DOWN: return EnumFacing.DOWN;
case NORTH: return net.minecraft.util.Direction.NORTH;
case SOUTH: return net.minecraft.util.Direction.SOUTH;
case WEST: return net.minecraft.util.Direction.WEST;
case EAST: return net.minecraft.util.Direction.EAST;
case DOWN: return net.minecraft.util.Direction.DOWN;
case UP:
default:
return EnumFacing.UP;
return net.minecraft.util.Direction.UP;
}
}
public static Direction adaptEnumFacing(EnumFacing face) {
public static Direction adaptEnumFacing(net.minecraft.util.Direction face) {
switch (face) {
case NORTH: return Direction.NORTH;
case SOUTH: return Direction.SOUTH;
@ -149,7 +147,7 @@ public final class ForgeAdapter {
for (Map.Entry<IProperty<?>, Comparable<?>> prop : mcProps.entrySet()) {
Object value = prop.getValue();
if (prop.getKey() instanceof DirectionProperty) {
value = adaptEnumFacing((EnumFacing) value);
value = adaptEnumFacing((net.minecraft.util.Direction) value);
} else if (prop.getKey() instanceof net.minecraft.state.EnumProperty) {
value = ((IStringSerializable) value).getName();
}
@ -158,14 +156,14 @@ public final class ForgeAdapter {
return props;
}
private static IBlockState applyProperties(StateContainer<Block, IBlockState> stateContainer, IBlockState newState, Map<Property<?>, Object> states) {
private static net.minecraft.block.BlockState applyProperties(StateContainer<Block, net.minecraft.block.BlockState> stateContainer, net.minecraft.block.BlockState newState, Map<Property<?>, Object> states) {
for (Map.Entry<Property<?>, Object> state : states.entrySet()) {
IProperty property = stateContainer.getProperty(state.getKey().getName());
Comparable value = (Comparable) state.getValue();
// we may need to adapt this value, depending on the source prop
if (property instanceof DirectionProperty) {
Direction dir = (Direction) value;
value = ForgeAdapter.adapt(dir);
value = adapt(dir);
} else if (property instanceof net.minecraft.state.EnumProperty) {
String enumName = (String) value;
value = ((net.minecraft.state.EnumProperty<?>) property).parseValue((String) value).orElseGet(() -> {
@ -178,16 +176,16 @@ public final class ForgeAdapter {
return newState;
}
public static IBlockState adapt(BlockState blockState) {
Block mcBlock = ForgeAdapter.adapt(blockState.getBlockType());
IBlockState newState = mcBlock.getDefaultState();
public static net.minecraft.block.BlockState adapt(BlockState blockState) {
Block mcBlock = adapt(blockState.getBlockType());
net.minecraft.block.BlockState newState = mcBlock.getDefaultState();
Map<Property<?>, Object> states = blockState.getStates();
return applyProperties(mcBlock.getStateContainer(), newState, states);
}
public static BlockState adapt(IBlockState blockState) {
public static BlockState adapt(net.minecraft.block.BlockState blockState) {
BlockType blockType = adapt(blockState.getBlock());
return blockType.getState(ForgeAdapter.adaptProperties(blockType, blockState.getValues()));
return blockType.getState(adaptProperties(blockType, blockState.getValues()));
}
public static Block adapt(BlockType blockType) {
@ -207,7 +205,7 @@ public final class ForgeAdapter {
}
public static ItemStack adapt(BaseItemStack baseItemStack) {
NBTTagCompound forgeCompound = null;
CompoundNBT forgeCompound = null;
if (baseItemStack.getNbtData() != null) {
forgeCompound = NBTConverter.toNative(baseItemStack.getNbtData());
}
@ -237,7 +235,7 @@ public final class ForgeAdapter {
* @param player the player
* @return the WorldEdit player
*/
public static ForgePlayer adaptPlayer(EntityPlayerMP player) {
public static ForgePlayer adaptPlayer(ServerPlayerEntity player) {
checkNotNull(player);
return new ForgePlayer(player);
}

View File

@ -22,7 +22,7 @@ package com.sk89q.worldedit.forge;
import com.sk89q.worldedit.world.registry.BlockMaterial;
import com.sk89q.worldedit.world.registry.PassthroughBlockMaterial;
import net.minecraft.block.material.EnumPushReaction;
import net.minecraft.block.material.PushReaction;
import net.minecraft.block.material.Material;
import javax.annotation.Nullable;
@ -63,12 +63,12 @@ public class ForgeBlockMaterial extends PassthroughBlockMaterial {
@Override
public boolean isFragileWhenPushed() {
return delegate.getPushReaction() == EnumPushReaction.DESTROY;
return delegate.getPushReaction() == PushReaction.DESTROY;
}
@Override
public boolean isUnpushable() {
return delegate.getPushReaction() == EnumPushReaction.BLOCK;
return delegate.getPushReaction() == PushReaction.BLOCK;
}
@Override

View File

@ -26,7 +26,6 @@ import com.sk89q.worldedit.world.registry.BlockMaterial;
import com.sk89q.worldedit.world.registry.BundledBlockRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.state.IProperty;
import net.minecraftforge.fml.loading.FMLLoader;
@ -77,7 +76,7 @@ public class ForgeBlockRegistry extends BundledBlockRegistry {
@Override
public OptionalInt getInternalBlockStateId(BlockState state) {
IBlockState equivalent = ForgeAdapter.adapt(state);
net.minecraft.block.BlockState equivalent = ForgeAdapter.adapt(state);
return OptionalInt.of(Block.getStateId(equivalent));
}
}

View File

@ -30,27 +30,26 @@ import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.mojang.datafixers.DSL.TypeReference;
import com.mojang.datafixers.DataFixTypes;
import com.mojang.datafixers.DataFixer;
import com.mojang.datafixers.DataFixerBuilder;
import com.mojang.datafixers.Dynamic;
import com.mojang.datafixers.schemas.Schema;
import com.sk89q.jnbt.CompoundTag;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.nbt.INBTBase;
import net.minecraft.item.DyeColor;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.nbt.NBTDynamicOps;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.nbt.NBTTagFloat;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.JsonUtils;
import net.minecraft.nbt.StringNBT;
import net.minecraft.nbt.FloatNBT;
import net.minecraft.util.Direction;
import net.minecraft.util.JSONUtils;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
import net.minecraft.util.datafix.DataFixesManager;
import net.minecraft.util.datafix.TypeReferences;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.StringTextComponent;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@ -104,50 +103,50 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
private CompoundTag fixChunk(CompoundTag originalChunk, int srcVer) {
NBTTagCompound tag = NBTConverter.toNative(originalChunk);
NBTTagCompound fixed = convert(LegacyType.CHUNK, tag, srcVer);
CompoundNBT tag = NBTConverter.toNative(originalChunk);
CompoundNBT fixed = convert(LegacyType.CHUNK, tag, srcVer);
return NBTConverter.fromNative(fixed);
}
private CompoundTag fixBlockEntity(CompoundTag origTileEnt, int srcVer) {
NBTTagCompound tag = NBTConverter.toNative(origTileEnt);
NBTTagCompound fixed = convert(LegacyType.BLOCK_ENTITY, tag, srcVer);
CompoundNBT tag = NBTConverter.toNative(origTileEnt);
CompoundNBT fixed = convert(LegacyType.BLOCK_ENTITY, tag, srcVer);
return NBTConverter.fromNative(fixed);
}
private CompoundTag fixEntity(CompoundTag origEnt, int srcVer) {
NBTTagCompound tag = NBTConverter.toNative(origEnt);
NBTTagCompound fixed = convert(LegacyType.ENTITY, tag, srcVer);
CompoundNBT tag = NBTConverter.toNative(origEnt);
CompoundNBT fixed = convert(LegacyType.ENTITY, tag, srcVer);
return NBTConverter.fromNative(fixed);
}
private String fixBlockState(String blockState, int srcVer) {
NBTTagCompound stateNBT = stateToNBT(blockState);
Dynamic<INBTBase> dynamic = new Dynamic<>(OPS_NBT, stateNBT);
NBTTagCompound fixed = (NBTTagCompound) INSTANCE.fixer.update(TypeReferences.BLOCK_STATE, dynamic, srcVer, DATA_VERSION).getValue();
CompoundNBT stateNBT = stateToNBT(blockState);
Dynamic<INBT> dynamic = new Dynamic<>(OPS_NBT, stateNBT);
CompoundNBT fixed = (CompoundNBT) INSTANCE.fixer.update(TypeReferences.BLOCK_STATE, dynamic, srcVer, DATA_VERSION).getValue();
return nbtToState(fixed);
}
private String nbtToState(NBTTagCompound tagCompound) {
private String nbtToState(CompoundNBT tagCompound) {
StringBuilder sb = new StringBuilder();
sb.append(tagCompound.getString("Name"));
if (tagCompound.contains("Properties", 10)) {
sb.append('[');
NBTTagCompound props = tagCompound.getCompound("Properties");
CompoundNBT props = tagCompound.getCompound("Properties");
sb.append(props.keySet().stream().map(k -> k + "=" + props.getString(k).replace("\"", "")).collect(Collectors.joining(",")));
sb.append(']');
}
return sb.toString();
}
private static NBTTagCompound stateToNBT(String blockState) {
private static CompoundNBT stateToNBT(String blockState) {
int propIdx = blockState.indexOf('[');
NBTTagCompound tag = new NBTTagCompound();
CompoundNBT tag = new CompoundNBT();
if (propIdx < 0) {
tag.putString("Name", blockState);
} else {
tag.putString("Name", blockState.substring(0, propIdx));
NBTTagCompound propTag = new NBTTagCompound();
CompoundNBT propTag = new CompoundNBT();
String props = blockState.substring(propIdx + 1, blockState.length() - 1);
String[] propArr = props.split(",");
for (String pair : propArr) {
@ -168,8 +167,8 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
private static String fixName(String key, int srcVer, TypeReference type) {
return INSTANCE.fixer.update(type, new Dynamic<>(OPS_NBT, new NBTTagString(key)), srcVer, DATA_VERSION)
.getStringValue().orElse(key);
return INSTANCE.fixer.update(type, new Dynamic<>(OPS_NBT, new StringNBT(key)), srcVer, DATA_VERSION)
.asString().orElse(key);
}
private static final NBTDynamicOps OPS_NBT = NBTDynamicOps.INSTANCE;
@ -185,14 +184,14 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static final Map<String, LegacyType> DFU_TO_LEGACY = new HashMap<>();
public enum LegacyType {
LEVEL(DataFixTypes.LEVEL),
PLAYER(DataFixTypes.PLAYER),
CHUNK(DataFixTypes.CHUNK),
LEVEL(TypeReferences.LEVEL),
PLAYER(TypeReferences.PLAYER),
CHUNK(TypeReferences.CHUNK),
BLOCK_ENTITY(TypeReferences.BLOCK_ENTITY),
ENTITY(TypeReferences.ENTITY),
ITEM_INSTANCE(TypeReferences.ITEM_STACK),
OPTIONS(DataFixTypes.OPTIONS),
STRUCTURE(DataFixTypes.STRUCTURE);
OPTIONS(TypeReferences.OPTIONS),
STRUCTURE(TypeReferences.STRUCTURE);
private final TypeReference type;
@ -206,7 +205,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
}
public ForgeDataFixer(int dataVersion) {
ForgeDataFixer(int dataVersion) {
super(dataVersion);
DATA_VERSION = dataVersion;
INSTANCE = this;
@ -215,8 +214,6 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
this.fixer = new WrappedDataFixer(DataFixesManager.getDataFixer());
}
// Called after fixers are built and ready for FIXING
@Override
public DataFixer build(final Executor executor) {
return fixer;
@ -233,7 +230,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
public <T> Dynamic<T> update(TypeReference type, Dynamic<T> dynamic, int sourceVer, int targetVer) {
LegacyType legacyType = DFU_TO_LEGACY.get(type.typeName());
if (sourceVer < LEGACY_VERSION && legacyType != null) {
NBTTagCompound cmp = (NBTTagCompound) dynamic.getValue();
CompoundNBT cmp = (CompoundNBT) dynamic.getValue();
int desiredVersion = Math.min(targetVer, LEGACY_VERSION);
cmp = convert(legacyType, cmp, sourceVer, desiredVersion);
@ -243,7 +240,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return realFixer.update(type, dynamic, sourceVer, targetVer);
}
private NBTTagCompound convert(LegacyType type, NBTTagCompound cmp, int sourceVer, int desiredVersion) {
private CompoundNBT convert(LegacyType type, CompoundNBT cmp, int sourceVer, int desiredVersion) {
List<DataConverter> converters = ForgeDataFixer.this.converters.get(type);
if (converters != null && !converters.isEmpty()) {
for (DataConverter converter : converters) {
@ -270,44 +267,44 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
}
public static NBTTagCompound convert(LegacyType type, NBTTagCompound cmp) {
public static CompoundNBT convert(LegacyType type, CompoundNBT cmp) {
return convert(type.getDFUType(), cmp);
}
public static NBTTagCompound convert(LegacyType type, NBTTagCompound cmp, int sourceVer) {
public static CompoundNBT convert(LegacyType type, CompoundNBT cmp, int sourceVer) {
return convert(type.getDFUType(), cmp, sourceVer);
}
public static NBTTagCompound convert(LegacyType type, NBTTagCompound cmp, int sourceVer, int targetVer) {
public static CompoundNBT convert(LegacyType type, CompoundNBT cmp, int sourceVer, int targetVer) {
return convert(type.getDFUType(), cmp, sourceVer, targetVer);
}
public static NBTTagCompound convert(TypeReference type, NBTTagCompound cmp) {
public static CompoundNBT convert(TypeReference type, CompoundNBT cmp) {
int i = cmp.contains("DataVersion", 99) ? cmp.getInt("DataVersion") : -1;
return convert(type, cmp, i);
}
public static NBTTagCompound convert(TypeReference type, NBTTagCompound cmp, int sourceVer) {
public static CompoundNBT convert(TypeReference type, CompoundNBT cmp, int sourceVer) {
return convert(type, cmp, sourceVer, DATA_VERSION);
}
public static NBTTagCompound convert(TypeReference type, NBTTagCompound cmp, int sourceVer, int targetVer) {
public static CompoundNBT convert(TypeReference type, CompoundNBT cmp, int sourceVer, int targetVer) {
if (sourceVer >= targetVer) {
return cmp;
}
return (NBTTagCompound) INSTANCE.fixer.update(type, new Dynamic<>(OPS_NBT, cmp), sourceVer, targetVer).getValue();
return (CompoundNBT) INSTANCE.fixer.update(type, new Dynamic<>(OPS_NBT, cmp), sourceVer, targetVer).getValue();
}
public interface DataInspector {
NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer);
CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer);
}
public interface DataConverter {
int getDataVersion();
NBTTagCompound convert(NBTTagCompound cmp);
CompoundNBT convert(CompoundNBT cmp);
}
@ -584,19 +581,19 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return key;
}
private static void convertCompound(LegacyType type, NBTTagCompound cmp, String key, int sourceVer, int targetVer) {
private static void convertCompound(LegacyType type, CompoundNBT cmp, String key, int sourceVer, int targetVer) {
cmp.put(key, convert(type, cmp.getCompound(key), sourceVer, targetVer));
}
private static void convertItem(NBTTagCompound nbttagcompound, String key, int sourceVer, int targetVer) {
private static void convertItem(CompoundNBT nbttagcompound, String key, int sourceVer, int targetVer) {
if (nbttagcompound.contains(key, 10)) {
convertCompound(LegacyType.ITEM_INSTANCE, nbttagcompound, key, sourceVer, targetVer);
}
}
private static void convertItems(NBTTagCompound nbttagcompound, String key, int sourceVer, int targetVer) {
private static void convertItems(CompoundNBT nbttagcompound, String key, int sourceVer, int targetVer) {
if (nbttagcompound.contains(key, 9)) {
NBTTagList nbttaglist = nbttagcompound.getList(key, 10);
ListNBT nbttaglist = nbttagcompound.getList(key, 10);
for (int j = 0; j < nbttaglist.size(); ++j) {
nbttaglist.add(j, convert(LegacyType.ITEM_INSTANCE, nbttaglist.getCompound(j), sourceVer, targetVer));
@ -615,19 +612,19 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
@Override
public NBTTagCompound convert(NBTTagCompound cmp) {
NBTTagList nbttaglist = cmp.getList("Equipment", 10);
NBTTagList nbttaglist1;
public CompoundNBT convert(CompoundNBT cmp) {
ListNBT nbttaglist = cmp.getList("Equipment", 10);
ListNBT nbttaglist1;
if (!nbttaglist.isEmpty() && !cmp.contains("HandItems", 10)) {
nbttaglist1 = new NBTTagList();
nbttaglist1 = new ListNBT();
nbttaglist1.add(nbttaglist.get(0));
nbttaglist1.add(new NBTTagCompound());
nbttaglist1.add(new CompoundNBT());
cmp.put("HandItems", nbttaglist1);
}
if (nbttaglist.size() > 1 && !cmp.contains("ArmorItem", 10)) {
nbttaglist1 = new NBTTagList();
nbttaglist1 = new ListNBT();
nbttaglist1.add(nbttaglist.get(1));
nbttaglist1.add(nbttaglist.get(2));
nbttaglist1.add(nbttaglist.get(3));
@ -638,21 +635,21 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
cmp.remove("Equipment");
if (cmp.contains("DropChances", 9)) {
nbttaglist1 = cmp.getList("DropChances", 5);
NBTTagList nbttaglist2;
ListNBT nbttaglist2;
if (!cmp.contains("HandDropChances", 10)) {
nbttaglist2 = new NBTTagList();
nbttaglist2.add(new NBTTagFloat(nbttaglist1.getFloat(0)));
nbttaglist2.add(new NBTTagFloat(0.0F));
nbttaglist2 = new ListNBT();
nbttaglist2.add(new FloatNBT(nbttaglist1.getFloat(0)));
nbttaglist2.add(new FloatNBT(0.0F));
cmp.put("HandDropChances", nbttaglist2);
}
if (!cmp.contains("ArmorDropChances", 10)) {
nbttaglist2 = new NBTTagList();
nbttaglist2.add(new NBTTagFloat(nbttaglist1.getFloat(1)));
nbttaglist2.add(new NBTTagFloat(nbttaglist1.getFloat(2)));
nbttaglist2.add(new NBTTagFloat(nbttaglist1.getFloat(3)));
nbttaglist2.add(new NBTTagFloat(nbttaglist1.getFloat(4)));
nbttaglist2 = new ListNBT();
nbttaglist2.add(new FloatNBT(nbttaglist1.getFloat(1)));
nbttaglist2.add(new FloatNBT(nbttaglist1.getFloat(2)));
nbttaglist2.add(new FloatNBT(nbttaglist1.getFloat(3)));
nbttaglist2.add(new FloatNBT(nbttaglist1.getFloat(4)));
cmp.put("ArmorDropChances", nbttaglist2);
}
@ -681,14 +678,14 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (!cmp.contains("tag", 10)) {
return cmp;
} else {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (nbttagcompound1.contains("BlockEntityTag", 10)) {
NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
CompoundNBT nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
String s = cmp.getString("id");
String s1 = convertEntityId(sourceVer, s);
boolean flag;
@ -812,11 +809,11 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
DataInspectorEntity() {}
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (nbttagcompound1.contains("EntityTag", 10)) {
NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompound("EntityTag");
CompoundNBT nbttagcompound2 = nbttagcompound1.getCompound("EntityTag");
String s = cmp.getString("id");
String s1;
@ -859,7 +856,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
this.key = getKey(type);
}
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (this.key.equals(new ResourceLocation(cmp.getString("id")))) {
cmp = this.inspectChecked(cmp, sourceVer, targetVer);
}
@ -867,7 +864,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return cmp;
}
abstract NBTTagCompound inspectChecked(NBTTagCompound nbttagcompound, int sourceVer, int targetVer);
abstract CompoundNBT inspectChecked(CompoundNBT nbttagcompound, int sourceVer, int targetVer);
}
private static class DataInspectorItemList extends DataInspectorTagged {
@ -879,7 +876,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
this.keys = astring;
}
NBTTagCompound inspectChecked(NBTTagCompound nbttagcompound, int sourceVer, int targetVer) {
CompoundNBT inspectChecked(CompoundNBT nbttagcompound, int sourceVer, int targetVer) {
for (String s : this.keys) {
ForgeDataFixer.convertItems(nbttagcompound, s, sourceVer, targetVer);
}
@ -896,7 +893,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
this.keys = astring;
}
NBTTagCompound inspectChecked(NBTTagCompound nbttagcompound, int sourceVer, int targetVer) {
CompoundNBT inspectChecked(CompoundNBT nbttagcompound, int sourceVer, int targetVer) {
for (String key : this.keys) {
ForgeDataFixer.convertItem(nbttagcompound, key, sourceVer, targetVer);
}
@ -915,7 +912,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 102;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (cmp.contains("id", 99)) {
short short0 = cmp.getShort("id");
@ -1254,7 +1251,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 147;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("ArmorStand".equals(cmp.getString("id")) && cmp.getBoolean("Silent") && !cmp.getBoolean("Marker")) {
cmp.remove("Silent");
}
@ -1271,20 +1268,20 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 804;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:banner".equals(cmp.getString("id")) && cmp.contains("tag", 10)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (nbttagcompound1.contains("BlockEntityTag", 10)) {
NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
CompoundNBT nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
if (nbttagcompound2.contains("Base", 99)) {
cmp.putShort("Damage", (short) (nbttagcompound2.getShort("Base") & 15));
if (nbttagcompound1.contains("display", 10)) {
NBTTagCompound nbttagcompound3 = nbttagcompound1.getCompound("display");
CompoundNBT nbttagcompound3 = nbttagcompound1.getCompound("display");
if (nbttagcompound3.contains("Lore", 9)) {
NBTTagList nbttaglist = nbttagcompound3.getList("Lore", 8);
ListNBT nbttaglist = nbttagcompound3.getList("Lore", 8);
if (nbttaglist.size() == 1 && "(+NBT)".equals(nbttaglist.getString(0))) {
return cmp;
@ -1318,9 +1315,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 102;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:potion".equals(cmp.getString("id"))) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
short short0 = cmp.getShort("Damage");
if (!nbttagcompound1.contains("Potion", 8)) {
@ -1483,10 +1480,10 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 105;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:spawn_egg".equals(cmp.getString("id"))) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompound("EntityTag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound2 = nbttagcompound1.getCompound("EntityTag");
short short0 = cmp.getShort("Damage");
if (!nbttagcompound2.contains("id", 8)) {
@ -1589,7 +1586,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 106;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("Minecart".equals(cmp.getString("id"))) {
String s = "MinecartRideable";
int i = cmp.getInt("Type");
@ -1614,13 +1611,13 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 107;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (!"MobSpawner".equals(cmp.getString("id"))) {
return cmp;
} else {
if (cmp.contains("EntityId", 8)) {
String s = cmp.getString("EntityId");
NBTTagCompound nbttagcompound1 = cmp.getCompound("SpawnData");
CompoundNBT nbttagcompound1 = cmp.getCompound("SpawnData");
nbttagcompound1.putString("id", s.isEmpty() ? "Pig" : s);
cmp.put("SpawnData", nbttagcompound1);
@ -1628,13 +1625,13 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
if (cmp.contains("SpawnPotentials", 9)) {
NBTTagList nbttaglist = cmp.getList("SpawnPotentials", 10);
ListNBT nbttaglist = cmp.getList("SpawnPotentials", 10);
for (int i = 0; i < nbttaglist.size(); ++i) {
NBTTagCompound nbttagcompound2 = nbttaglist.getCompound(i);
CompoundNBT nbttagcompound2 = nbttaglist.getCompound(i);
if (nbttagcompound2.contains("Type", 8)) {
NBTTagCompound nbttagcompound3 = nbttagcompound2.getCompound("Properties");
CompoundNBT nbttagcompound3 = nbttagcompound2.getCompound("Properties");
nbttagcompound3.putString("id", nbttagcompound2.getString("Type"));
nbttagcompound2.put("Entity", nbttagcompound3);
@ -1657,7 +1654,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 108;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (cmp.contains("UUID", 8)) {
cmp.putUniqueId("UUID", UUID.fromString(cmp.getString("UUID")));
}
@ -1676,7 +1673,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 109;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (DataConverterHealth.a.contains(cmp.getString("id"))) {
float f;
@ -1706,9 +1703,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 110;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("EntityHorse".equals(cmp.getString("id")) && !cmp.contains("SaddleItem", 10) && cmp.getBoolean("Saddle")) {
NBTTagCompound nbttagcompound1 = new NBTTagCompound();
CompoundNBT nbttagcompound1 = new CompoundNBT();
nbttagcompound1.putString("id", "minecraft:saddle");
nbttagcompound1.putByte("Count", (byte) 1);
@ -1729,16 +1726,16 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 111;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
String s = cmp.getString("id");
boolean flag = "Painting".equals(s);
boolean flag1 = "ItemFrame".equals(s);
if ((flag || flag1) && !cmp.contains("Facing", 99)) {
EnumFacing enumdirection;
Direction enumdirection;
if (cmp.contains("Direction", 99)) {
enumdirection = EnumFacing.byHorizontalIndex(cmp.getByte("Direction"));
enumdirection = Direction.byHorizontalIndex(cmp.getByte("Direction"));
cmp.putInt("TileX", cmp.getInt("TileX") + enumdirection.getXOffset());
cmp.putInt("TileY", cmp.getInt("TileY") + enumdirection.getYOffset());
cmp.putInt("TileZ", cmp.getInt("TileZ") + enumdirection.getZOffset());
@ -1747,7 +1744,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
cmp.putByte("ItemRotation", (byte) (cmp.getByte("ItemRotation") * 2));
}
} else {
enumdirection = EnumFacing.byHorizontalIndex(cmp.getByte("Dir"));
enumdirection = Direction.byHorizontalIndex(cmp.getByte("Dir"));
cmp.remove("Dir");
}
@ -1766,8 +1763,8 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 113;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
NBTTagList nbttaglist;
public CompoundNBT convert(CompoundNBT cmp) {
ListNBT nbttaglist;
if (cmp.contains("HandDropChances", 9)) {
nbttaglist = cmp.getList("HandDropChances", 5);
@ -1795,9 +1792,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 135;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
while (cmp.contains("Riding", 10)) {
NBTTagCompound nbttagcompound1 = this.b(cmp);
CompoundNBT nbttagcompound1 = this.b(cmp);
this.convert(cmp, nbttagcompound1);
cmp = nbttagcompound1;
@ -1806,15 +1803,15 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return cmp;
}
protected void convert(NBTTagCompound nbttagcompound, NBTTagCompound nbttagcompound1) {
NBTTagList nbttaglist = new NBTTagList();
protected void convert(CompoundNBT nbttagcompound, CompoundNBT nbttagcompound1) {
ListNBT nbttaglist = new ListNBT();
nbttaglist.add(nbttagcompound);
nbttagcompound1.put("Passengers", nbttaglist);
}
protected NBTTagCompound b(NBTTagCompound nbttagcompound) {
NBTTagCompound nbttagcompound1 = nbttagcompound.getCompound("Riding");
protected CompoundNBT b(CompoundNBT nbttagcompound) {
CompoundNBT nbttagcompound1 = nbttagcompound.getCompound("Riding");
nbttagcompound.remove("Riding");
return nbttagcompound1;
@ -1829,12 +1826,12 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 165;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:written_book".equals(cmp.getString("id"))) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (nbttagcompound1.contains("pages", 9)) {
NBTTagList nbttaglist = nbttagcompound1.getList("pages", 8);
ListNBT nbttaglist = nbttagcompound1.getList("pages", 8);
for (int i = 0; i < nbttaglist.size(); ++i) {
String s = nbttaglist.getString(i);
@ -1842,12 +1839,12 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
if (!"null".equals(s) && !StringUtils.isNullOrEmpty(s)) {
if ((s.charAt(0) != 34 || s.charAt(s.length() - 1) != 34) && (s.charAt(0) != 123 || s.charAt(s.length() - 1) != 125)) {
object = new TextComponentString(s);
object = new StringTextComponent(s);
} else {
try {
object = JsonUtils.fromJson(DataConverterSignText.a, s, ITextComponent.class, true);
object = JSONUtils.fromJson(DataConverterSignText.a, s, ITextComponent.class, true);
if (object == null) {
object = new TextComponentString("");
object = new StringTextComponent("");
}
} catch (JsonParseException jsonparseexception) {
;
@ -1870,14 +1867,14 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
if (object == null) {
object = new TextComponentString(s);
object = new StringTextComponent(s);
}
}
} else {
object = new TextComponentString("");
object = new StringTextComponent("");
}
nbttaglist.set(i, new NBTTagString(ITextComponent.Serializer.toJson((ITextComponent) object)));
nbttaglist.set(i, new StringNBT(ITextComponent.Serializer.toJson((ITextComponent) object)));
}
nbttagcompound1.put("pages", nbttaglist);
@ -1898,7 +1895,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 502;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (cmp.contains("id", 8) && DataConverterCookedFish.a.equals(new ResourceLocation(cmp.getString("id")))) {
cmp.putString("id", "minecraft:cooked_fish");
}
@ -1917,7 +1914,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 502;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("Zombie".equals(cmp.getString("id")) && cmp.getBoolean("IsVillager")) {
if (!cmp.contains("ZombieType", 99)) {
int i = -1;
@ -1956,7 +1953,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 505;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
cmp.putString("useVbo", "true");
return cmp;
}
@ -1970,7 +1967,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 700;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("Guardian".equals(cmp.getString("id"))) {
if (cmp.getBoolean("Elder")) {
cmp.putString("id", "ElderGuardian");
@ -1991,7 +1988,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 701;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
String s = cmp.getString("id");
if ("Skeleton".equals(s)) {
@ -2018,7 +2015,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 702;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("Zombie".equals(cmp.getString("id"))) {
int i = cmp.getInt("ZombieType");
@ -2053,7 +2050,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 703;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("EntityHorse".equals(cmp.getString("id"))) {
int i = cmp.getInt("Type");
@ -2097,7 +2094,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 704;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
String s = DataConverterTileEntity.a.get(cmp.getString("id"));
if (s != null) {
@ -2144,7 +2141,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 704;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
String s = DataConverterEntity.a.get(cmp.getString("id"));
if (s != null) {
@ -2241,11 +2238,11 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 806;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
String s = cmp.getString("id");
if ("minecraft:potion".equals(s) || "minecraft:splash_potion".equals(s) || "minecraft:lingering_potion".equals(s) || "minecraft:tipped_arrow".equals(s)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (!nbttagcompound1.contains("Potion", 8)) {
nbttagcompound1.putString("Potion", "minecraft:water");
@ -2268,7 +2265,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 808;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:shulker".equals(cmp.getString("id")) && !cmp.contains("Color", 99)) {
cmp.putByte("Color", (byte) 10);
}
@ -2287,12 +2284,12 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 813;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:shulker_box".equals(cmp.getString("id")) && cmp.contains("tag", 10)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("tag");
CompoundNBT nbttagcompound1 = cmp.getCompound("tag");
if (nbttagcompound1.contains("BlockEntityTag", 10)) {
NBTTagCompound nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
CompoundNBT nbttagcompound2 = nbttagcompound1.getCompound("BlockEntityTag");
if (nbttagcompound2.getList("Items", 10).isEmpty()) {
nbttagcompound2.remove("Items");
@ -2325,7 +2322,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 813;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:shulker".equals(cmp.getString("id"))) {
cmp.remove("Color");
}
@ -2342,7 +2339,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 816;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if (cmp.contains("lang", 8)) {
cmp.putString("lang", cmp.getString("lang").toLowerCase(Locale.ROOT));
}
@ -2359,7 +2356,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 820;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:totem".equals(cmp.getString("id"))) {
cmp.putString("id", "minecraft:totem_of_undying");
}
@ -2378,18 +2375,18 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 1125;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
boolean flag = true;
try {
NBTTagCompound nbttagcompound1 = cmp.getCompound("Level");
CompoundNBT nbttagcompound1 = cmp.getCompound("Level");
int i = nbttagcompound1.getInt("xPos");
int j = nbttagcompound1.getInt("zPos");
NBTTagList nbttaglist = nbttagcompound1.getList("TileEntities", 10);
NBTTagList nbttaglist1 = nbttagcompound1.getList("Sections", 10);
ListNBT nbttaglist = nbttagcompound1.getList("TileEntities", 10);
ListNBT nbttaglist1 = nbttagcompound1.getList("Sections", 10);
for (int k = 0; k < nbttaglist1.size(); ++k) {
NBTTagCompound nbttagcompound2 = nbttaglist1.getCompound(k);
CompoundNBT nbttagcompound2 = nbttaglist1.getCompound(k);
byte b0 = nbttagcompound2.getByte("Y");
byte[] abyte = nbttagcompound2.getByteArray("Blocks");
@ -2398,7 +2395,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
int i1 = l & 15;
int j1 = l >> 8 & 15;
int k1 = l >> 4 & 15;
NBTTagCompound nbttagcompound3 = new NBTTagCompound();
CompoundNBT nbttagcompound3 = new CompoundNBT();
nbttagcompound3.putString("id", "bed");
nbttagcompound3.putInt("x", i1 + (i << 4));
@ -2424,9 +2421,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 1125;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("minecraft:bed".equals(cmp.getString("id")) && cmp.getShort("Damage") == 0) {
cmp.putShort("Damage", (short) EnumDyeColor.RED.getId());
cmp.putShort("Damage", (short) DyeColor.RED.getId());
}
return cmp;
@ -2438,7 +2435,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
public static final Gson a = new GsonBuilder().registerTypeAdapter(ITextComponent.class, new JsonDeserializer() {
ITextComponent a(JsonElement jsonelement, Type type, JsonDeserializationContext jsondeserializationcontext) throws JsonParseException {
if (jsonelement.isJsonPrimitive()) {
return new TextComponentString(jsonelement.getAsString());
return new StringTextComponent(jsonelement.getAsString());
} else if (jsonelement.isJsonArray()) {
JsonArray jsonarray = jsonelement.getAsJsonArray();
ITextComponent iTextComponent = null;
@ -2472,7 +2469,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return 101;
}
public NBTTagCompound convert(NBTTagCompound cmp) {
public CompoundNBT convert(CompoundNBT cmp) {
if ("Sign".equals(cmp.getString("id"))) {
this.convert(cmp, "Text1");
this.convert(cmp, "Text2");
@ -2483,18 +2480,18 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
return cmp;
}
private void convert(NBTTagCompound nbttagcompound, String s) {
private void convert(CompoundNBT nbttagcompound, String s) {
String s1 = nbttagcompound.getString(s);
Object object = null;
if (!"null".equals(s1) && !StringUtils.isNullOrEmpty(s1)) {
if ((s1.charAt(0) != 34 || s1.charAt(s1.length() - 1) != 34) && (s1.charAt(0) != 123 || s1.charAt(s1.length() - 1) != 125)) {
object = new TextComponentString(s1);
object = new StringTextComponent(s1);
} else {
try {
object = JsonUtils.fromJson(DataConverterSignText.a, s1, ITextComponent.class, true);
object = JSONUtils.fromJson(DataConverterSignText.a, s1, ITextComponent.class, true);
if (object == null) {
object = new TextComponentString("");
object = new StringTextComponent("");
}
} catch (JsonParseException jsonparseexception) {
;
@ -2517,11 +2514,11 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
}
if (object == null) {
object = new TextComponentString(s1);
object = new StringTextComponent(s1);
}
}
} else {
object = new TextComponentString("");
object = new StringTextComponent("");
}
nbttagcompound.putString(s, ITextComponent.Serializer.toJson((ITextComponent) object));
@ -2530,9 +2527,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorPlayerVehicle implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (cmp.contains("RootVehicle", 10)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("RootVehicle");
CompoundNBT nbttagcompound1 = cmp.getCompound("RootVehicle");
if (nbttagcompound1.contains("Entity", 10)) {
convertCompound(LegacyType.ENTITY, nbttagcompound1, "Entity", sourceVer, targetVer);
@ -2545,7 +2542,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorLevelPlayer implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (cmp.contains("Player", 10)) {
convertCompound(LegacyType.PLAYER, cmp, "Player", sourceVer, targetVer);
}
@ -2556,16 +2553,16 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorStructure implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
NBTTagList nbttaglist;
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
ListNBT nbttaglist;
int j;
NBTTagCompound nbttagcompound1;
CompoundNBT nbttagcompound1;
if (cmp.contains("entities", 9)) {
nbttaglist = cmp.getList("entities", 10);
for (j = 0; j < nbttaglist.size(); ++j) {
nbttagcompound1 = (NBTTagCompound) nbttaglist.get(j);
nbttagcompound1 = (CompoundNBT) nbttaglist.get(j);
if (nbttagcompound1.contains("nbt", 10)) {
convertCompound(LegacyType.ENTITY, nbttagcompound1, "nbt", sourceVer, targetVer);
}
@ -2576,7 +2573,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
nbttaglist = cmp.getList("blocks", 10);
for (j = 0; j < nbttaglist.size(); ++j) {
nbttagcompound1 = (NBTTagCompound) nbttaglist.get(j);
nbttagcompound1 = (CompoundNBT) nbttaglist.get(j);
if (nbttagcompound1.contains("nbt", 10)) {
convertCompound(LegacyType.BLOCK_ENTITY, nbttagcompound1, "nbt", sourceVer, targetVer);
}
@ -2589,17 +2586,17 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorChunks implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (cmp.contains("Level", 10)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("Level");
NBTTagList nbttaglist;
CompoundNBT nbttagcompound1 = cmp.getCompound("Level");
ListNBT nbttaglist;
int j;
if (nbttagcompound1.contains("Entities", 9)) {
nbttaglist = nbttagcompound1.getList("Entities", 10);
for (j = 0; j < nbttaglist.size(); ++j) {
nbttaglist.set(j, convert(LegacyType.ENTITY, (NBTTagCompound) nbttaglist.get(j), sourceVer, targetVer));
nbttaglist.set(j, convert(LegacyType.ENTITY, (CompoundNBT) nbttaglist.get(j), sourceVer, targetVer));
}
}
@ -2607,7 +2604,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
nbttaglist = nbttagcompound1.getList("TileEntities", 10);
for (j = 0; j < nbttaglist.size(); ++j) {
nbttaglist.set(j, convert(LegacyType.BLOCK_ENTITY, (NBTTagCompound) nbttaglist.get(j), sourceVer, targetVer));
nbttaglist.set(j, convert(LegacyType.BLOCK_ENTITY, (CompoundNBT) nbttaglist.get(j), sourceVer, targetVer));
}
}
}
@ -2618,9 +2615,9 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorEntityPassengers implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (cmp.contains("Passengers", 9)) {
NBTTagList nbttaglist = cmp.getList("Passengers", 10);
ListNBT nbttaglist = cmp.getList("Passengers", 10);
for (int j = 0; j < nbttaglist.size(); ++j) {
nbttaglist.set(j, convert(LegacyType.ENTITY, nbttaglist.getCompound(j), sourceVer, targetVer));
@ -2633,7 +2630,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
private static class DataInspectorPlayer implements DataInspector {
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
convertItems(cmp, "Inventory", sourceVer, targetVer);
convertItems(cmp, "EnderItems", sourceVer, targetVer);
if (cmp.contains("ShoulderEntityLeft", 10)) {
@ -2652,15 +2649,15 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
ResourceLocation entityVillager = getKey("EntityVillager");
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (entityVillager.equals(new ResourceLocation(cmp.getString("id"))) && cmp.contains("Offers", 10)) {
NBTTagCompound nbttagcompound1 = cmp.getCompound("Offers");
CompoundNBT nbttagcompound1 = cmp.getCompound("Offers");
if (nbttagcompound1.contains("Recipes", 9)) {
NBTTagList nbttaglist = nbttagcompound1.getList("Recipes", 10);
ListNBT nbttaglist = nbttagcompound1.getList("Recipes", 10);
for (int j = 0; j < nbttaglist.size(); ++j) {
NBTTagCompound nbttagcompound2 = nbttaglist.getCompound(j);
CompoundNBT nbttagcompound2 = nbttaglist.getCompound(j);
convertItem(nbttagcompound2, "buy", sourceVer, targetVer);
convertItem(nbttagcompound2, "buyB", sourceVer, targetVer);
@ -2679,7 +2676,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
ResourceLocation tileEntityMobSpawner = getKey("TileEntityMobSpawner");
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
String s = cmp.getString("id");
if (entityMinecartMobSpawner.equals(new ResourceLocation(s))) {
cmp.putString("id", tileEntityMobSpawner.toString());
@ -2695,13 +2692,13 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
ResourceLocation tileEntityMobSpawner = getKey("TileEntityMobSpawner");
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (tileEntityMobSpawner.equals(new ResourceLocation(cmp.getString("id")))) {
if (cmp.contains("SpawnPotentials", 9)) {
NBTTagList nbttaglist = cmp.getList("SpawnPotentials", 10);
ListNBT nbttaglist = cmp.getList("SpawnPotentials", 10);
for (int j = 0; j < nbttaglist.size(); ++j) {
NBTTagCompound nbttagcompound1 = nbttaglist.getCompound(j);
CompoundNBT nbttagcompound1 = nbttaglist.getCompound(j);
convertCompound(LegacyType.ENTITY, nbttagcompound1, "Entity", sourceVer, targetVer);
}
@ -2718,7 +2715,7 @@ class ForgeDataFixer extends DataFixerBuilder implements com.sk89q.worldedit.wor
ResourceLocation tileEntityCommand = getKey("TileEntityCommand");
@Override
public NBTTagCompound inspect(NBTTagCompound cmp, int sourceVer, int targetVer) {
public CompoundNBT inspect(CompoundNBT cmp, int sourceVer, int targetVer) {
if (tileEntityCommand.equals(new ResourceLocation(cmp.getString("id")))) {
cmp.putString("id", "Control");
convert(LegacyType.BLOCK_ENTITY, cmp, sourceVer, targetVer);

View File

@ -29,7 +29,7 @@ import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.NullWorld;
import com.sk89q.worldedit.world.entity.EntityTypes;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.util.ResourceLocation;
import java.lang.ref.WeakReference;
@ -51,7 +51,7 @@ class ForgeEntity implements Entity {
if (entity != null) {
ResourceLocation id = entity.getType().getRegistryName();
if (id != null) {
NBTTagCompound tag = new NBTTagCompound();
CompoundNBT tag = new CompoundNBT();
entity.writeWithoutTypeId(tag);
return new BaseEntity(EntityTypes.get(id.toString()), NBTConverter.fromNative(tag));
} else {
@ -78,7 +78,7 @@ class ForgeEntity implements Entity {
@Override
public boolean setLocation(Location location) {
// TODO
// TODO unused atm
return false;
}

View File

@ -23,27 +23,27 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldedit.entity.metadata.EntityProperties;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.IMerchant;
import net.minecraft.entity.INpc;
import net.minecraft.entity.boss.dragon.EnderDragonPartEntity;
import net.minecraft.entity.item.ArmorStandEntity;
import net.minecraft.entity.item.ExperienceOrbEntity;
import net.minecraft.entity.item.PaintingEntity;
import net.minecraft.entity.item.TNTEntity;
import net.minecraft.entity.merchant.IMerchant;
import net.minecraft.entity.INPC;
import net.minecraft.entity.IProjectile;
import net.minecraft.entity.MultiPartEntityPart;
import net.minecraft.entity.item.EntityArmorStand;
import net.minecraft.entity.item.EntityBoat;
import net.minecraft.entity.item.EntityEnderEye;
import net.minecraft.entity.item.EntityFallingBlock;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.item.EntityItemFrame;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.item.EntityPainting;
import net.minecraft.entity.item.EntityTNTPrimed;
import net.minecraft.entity.item.EntityXPOrb;
import net.minecraft.entity.monster.EntityGolem;
import net.minecraft.entity.passive.EntityAmbientCreature;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityTameable;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.MobEntity;
import net.minecraft.entity.item.BoatEntity;
import net.minecraft.entity.item.EyeOfEnderEntity;
import net.minecraft.entity.item.FallingBlockEntity;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.entity.item.ItemFrameEntity;
import net.minecraft.entity.item.minecart.AbstractMinecartEntity;
import net.minecraft.entity.passive.AmbientEntity;
import net.minecraft.entity.passive.AnimalEntity;
import net.minecraft.entity.passive.TameableEntity;
import net.minecraft.entity.passive.GolemEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.player.ServerPlayerEntity;
public class ForgeEntityProperties implements EntityProperties {
@ -56,82 +56,82 @@ public class ForgeEntityProperties implements EntityProperties {
@Override
public boolean isPlayerDerived() {
return entity instanceof EntityPlayer;
return entity instanceof PlayerEntity;
}
@Override
public boolean isProjectile() {
return entity instanceof EntityEnderEye || entity instanceof IProjectile;
return entity instanceof EyeOfEnderEntity || entity instanceof IProjectile;
}
@Override
public boolean isItem() {
return entity instanceof EntityItem;
return entity instanceof ItemEntity;
}
@Override
public boolean isFallingBlock() {
return entity instanceof EntityFallingBlock;
return entity instanceof FallingBlockEntity;
}
@Override
public boolean isPainting() {
return entity instanceof EntityPainting;
return entity instanceof PaintingEntity;
}
@Override
public boolean isItemFrame() {
return entity instanceof EntityItemFrame;
return entity instanceof ItemFrameEntity;
}
@Override
public boolean isBoat() {
return entity instanceof EntityBoat;
return entity instanceof BoatEntity;
}
@Override
public boolean isMinecart() {
return entity instanceof EntityMinecart;
return entity instanceof AbstractMinecartEntity;
}
@Override
public boolean isTNT() {
return entity instanceof EntityTNTPrimed;
return entity instanceof TNTEntity;
}
@Override
public boolean isExperienceOrb() {
return entity instanceof EntityXPOrb;
return entity instanceof ExperienceOrbEntity;
}
@Override
public boolean isLiving() {
return entity instanceof EntityLiving;
return entity instanceof MobEntity;
}
@Override
public boolean isAnimal() {
return entity instanceof EntityAnimal;
return entity instanceof AnimalEntity;
}
@Override
public boolean isAmbient() {
return entity instanceof EntityAmbientCreature;
return entity instanceof AmbientEntity;
}
@Override
public boolean isNPC() {
return entity instanceof INpc || entity instanceof IMerchant;
return entity instanceof INPC || entity instanceof IMerchant;
}
@Override
public boolean isGolem() {
return entity instanceof EntityGolem;
return entity instanceof GolemEntity;
}
@Override
public boolean isTamed() {
return entity instanceof EntityTameable && ((EntityTameable) entity).isTamed();
return entity instanceof TameableEntity && ((TameableEntity) entity).isTamed();
}
@Override
@ -141,11 +141,11 @@ public class ForgeEntityProperties implements EntityProperties {
@Override
public boolean isArmorStand() {
return entity instanceof EntityArmorStand;
return entity instanceof ArmorStandEntity;
}
@Override
public boolean isPasteable() {
return !(entity instanceof EntityPlayerMP || entity instanceof MultiPartEntityPart);
return !(entity instanceof ServerPlayerEntity || entity instanceof EnderDragonPartEntity);
}
}

View File

@ -19,13 +19,13 @@
package com.sk89q.worldedit.forge;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.world.GameType;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
public interface ForgePermissionsProvider {
boolean hasPermission(EntityPlayerMP player, String permission);
boolean hasPermission(ServerPlayerEntity player, String permission);
void registerPermission(String permission);
@ -38,7 +38,7 @@ public interface ForgePermissionsProvider {
}
@Override
public boolean hasPermission(EntityPlayerMP player, String permission) {
public boolean hasPermission(ServerPlayerEntity player, String permission) {
ForgeConfiguration configuration = platform.getConfiguration();
return configuration.cheatMode ||
ServerLifecycleHooks.getCurrentServer().getPlayerList().canSendCommands(player.getGameProfile()) ||
@ -49,7 +49,7 @@ public interface ForgePermissionsProvider {
public void registerPermission(String permission) {}
}
// TODO Re-add when Sponge for 1.13 is out
// TODO Re-add when Sponge for 1.14 is out
// class SpongePermissionsProvider implements ForgePermissionsProvider {
//
// @Override

View File

@ -30,11 +30,12 @@ import com.sk89q.worldedit.world.DataFixer;
import com.sk89q.worldedit.world.World;
import com.sk89q.worldedit.world.registry.Registries;
import net.minecraft.command.Commands;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.management.PlayerList;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.WorldServer;
import net.minecraft.util.SharedConstants;
import net.minecraft.world.ServerWorld;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
import org.enginehub.piston.Command;
import org.enginehub.piston.CommandManager;
@ -74,8 +75,7 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
@Override
public int getDataVersion() {
// TODO switch to SharedConstants in 1.14
return 1631;
return SharedConstants.getVersion().getWorldVersion();
}
@Override
@ -99,10 +99,10 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
}
@Override
public List<? extends com.sk89q.worldedit.world.World> getWorlds() {
Iterable<WorldServer> worlds = server.getWorlds();
List<com.sk89q.worldedit.world.World> ret = new ArrayList<>();
for (WorldServer world : worlds) {
public List<? extends World> getWorlds() {
Iterable<ServerWorld> worlds = server.getWorlds();
List<World> ret = new ArrayList<>();
for (ServerWorld world : worlds) {
ret.add(new ForgeWorld(world));
}
return ret;
@ -114,7 +114,7 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
if (player instanceof ForgePlayer) {
return player;
} else {
EntityPlayerMP entity = server.getPlayerList().getPlayerByUsername(player.getName());
ServerPlayerEntity entity = server.getPlayerList().getPlayerByUsername(player.getName());
return entity != null ? new ForgePlayer(entity) : null;
}
}
@ -125,7 +125,7 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
if (world instanceof ForgeWorld) {
return world;
} else {
for (WorldServer ws : server.getWorlds()) {
for (ServerWorld ws : server.getWorlds()) {
if (ws.getWorldInfo().getWorldName().equals(world.getName())) {
return new ForgeWorld(ws);
}
@ -145,7 +145,7 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
Set<String> perms = command.getCondition().as(PermissionCondition.class)
.map(PermissionCondition::getPermissions)
.orElseGet(Collections::emptySet);
if (perms.size() > 0) {
if (!perms.isEmpty()) {
perms.forEach(ForgeWorldEdit.inst.getPermissionsProvider()::registerPermission);
}
}
@ -193,7 +193,7 @@ class ForgePlatform extends AbstractPlatform implements MultiUserPlatform {
public Collection<Actor> getConnectedUsers() {
List<Actor> users = new ArrayList<>();
PlayerList scm = server.getPlayerList();
for (EntityPlayerMP entity : scm.getPlayers()) {
for (ServerPlayerEntity entity : scm.getPlayers()) {
if (entity != null) {
users.add(new ForgePlayer(entity));
}

View File

@ -40,17 +40,17 @@ import com.sk89q.worldedit.world.block.BlockStateHolder;
import com.sk89q.worldedit.world.block.BlockTypes;
import io.netty.buffer.Unpooled;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketBuffer;
import net.minecraft.network.play.server.SPacketBlockChange;
import net.minecraft.network.play.server.SPacketCustomPayload;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.util.EnumHand;
import net.minecraft.network.play.server.SChangeBlockPacket;
import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.util.text.StringTextComponent;
import net.minecraft.util.text.TextFormatting;
import java.io.IOException;
@ -60,10 +60,11 @@ import javax.annotation.Nullable;
public class ForgePlayer extends AbstractPlayerActor {
// see ClientPlayNetHandler: search for "invalid update packet", lots of hardcoded consts
private static final int STRUCTURE_BLOCK_PACKET_ID = 7;
private final EntityPlayerMP player;
private final ServerPlayerEntity player;
protected ForgePlayer(EntityPlayerMP player) {
protected ForgePlayer(ServerPlayerEntity player) {
this.player = player;
ThreadSafeCache.getInstance().getOnlineIds().add(getUniqueId());
}
@ -75,7 +76,7 @@ public class ForgePlayer extends AbstractPlayerActor {
@Override
public BaseItemStack getItemInHand(HandSide handSide) {
ItemStack is = this.player.getHeldItem(handSide == HandSide.MAIN_HAND ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND);
ItemStack is = this.player.getHeldItem(handSide == HandSide.MAIN_HAND ? Hand.MAIN_HAND : Hand.OFF_HAND);
return ForgeAdapter.adapt(is);
}
@ -123,14 +124,14 @@ public class ForgePlayer extends AbstractPlayerActor {
send = send + "|" + StringUtil.joinString(params, "|");
}
PacketBuffer buffer = new PacketBuffer(Unpooled.copiedBuffer(send.getBytes(WECUIPacketHandler.UTF_8_CHARSET)));
SPacketCustomPayload packet = new SPacketCustomPayload(new ResourceLocation(ForgeWorldEdit.CUI_PLUGIN_CHANNEL), buffer);
SCustomPayloadPlayPacket packet = new SCustomPayloadPlayPacket(new ResourceLocation(ForgeWorldEdit.CUI_PLUGIN_CHANNEL), buffer);
this.player.connection.sendPacket(packet);
}
@Override
public void printRaw(String msg) {
for (String part : msg.split("\n")) {
this.player.sendMessage(new TextComponentString(part));
this.player.sendMessage(new StringTextComponent(part));
}
}
@ -156,7 +157,7 @@ public class ForgePlayer extends AbstractPlayerActor {
private void sendColorized(String msg, TextFormatting formatting) {
for (String part : msg.split("\n")) {
TextComponentString component = new TextComponentString(part);
StringTextComponent component = new StringTextComponent(part);
component.getStyle().setColor(formatting);
this.player.sendMessage(component);
}
@ -196,10 +197,10 @@ public class ForgePlayer extends AbstractPlayerActor {
}
BlockPos loc = ForgeAdapter.toBlockPos(pos);
if (block == null) {
final SPacketBlockChange packetOut = new SPacketBlockChange(((ForgeWorld) world).getWorld(), loc);
final SChangeBlockPacket packetOut = new SChangeBlockPacket(((ForgeWorld) world).getWorld(), loc);
player.connection.sendPacket(packetOut);
} else {
final SPacketBlockChange packetOut = new SPacketBlockChange();
final SChangeBlockPacket packetOut = new SChangeBlockPacket();
PacketBuffer buf = new PacketBuffer(Unpooled.buffer());
buf.writeBlockPos(loc);
buf.writeVarInt(Block.getStateId(ForgeAdapter.adapt(block.toImmutableState())));
@ -213,7 +214,7 @@ public class ForgePlayer extends AbstractPlayerActor {
final BaseBlock baseBlock = (BaseBlock) block;
final CompoundTag nbtData = baseBlock.getNbtData();
if (nbtData != null) {
player.connection.sendPacket(new SPacketUpdateTileEntity(
player.connection.sendPacket(new SUpdateTileEntityPacket(
new BlockPos(pos.getBlockX(), pos.getBlockY(), pos.getBlockZ()),
STRUCTURE_BLOCK_PACKET_ID,
NBTConverter.toNative(nbtData))

View File

@ -50,34 +50,37 @@ import com.sk89q.worldedit.world.item.ItemTypes;
import com.sk89q.worldedit.world.weather.WeatherType;
import com.sk89q.worldedit.world.weather.WeatherTypes;
import net.minecraft.block.Block;
import net.minecraft.block.BlockLeaves;
import net.minecraft.block.state.IBlockState;
import net.minecraft.block.Blocks;
import net.minecraft.block.LeavesBlock;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.init.Blocks;
import net.minecraft.entity.item.ItemEntity;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemUseContext;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.server.MinecraftServer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.ActionResultType;
import net.minecraft.util.Hand;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.BlockRayTraceResult;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.ServerWorld;
import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraft.world.chunk.AbstractChunkProvider;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.IChunkProvider;
import net.minecraft.world.chunk.storage.AnvilSaveHandler;
import net.minecraft.world.gen.ChunkProviderServer;
import net.minecraft.world.chunk.ChunkStatus;
import net.minecraft.world.chunk.IChunk;
import net.minecraft.world.chunk.ServerChunkProvider;
import net.minecraft.world.chunk.listener.IChunkStatusListener;
import net.minecraft.world.gen.feature.BigBrownMushroomFeature;
import net.minecraft.world.gen.feature.BigMushroomFeatureConfig;
import net.minecraft.world.gen.feature.BigRedMushroomFeature;
import net.minecraft.world.gen.feature.BigTreeFeature;
import net.minecraft.world.gen.feature.BirchTreeFeature;
import net.minecraft.world.gen.feature.CanopyTreeFeature;
import net.minecraft.world.gen.feature.DarkOakTreeFeature;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.IFeatureConfig;
import net.minecraft.world.gen.feature.JungleTreeFeature;
import net.minecraft.world.gen.feature.MegaJungleFeature;
import net.minecraft.world.gen.feature.MegaPineTree;
@ -88,17 +91,20 @@ import net.minecraft.world.gen.feature.ShrubFeature;
import net.minecraft.world.gen.feature.SwampTreeFeature;
import net.minecraft.world.gen.feature.TallTaigaTreeFeature;
import net.minecraft.world.gen.feature.TreeFeature;
import net.minecraft.world.storage.SaveHandler;
import net.minecraft.world.storage.WorldInfo;
import javax.annotation.Nullable;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkNotNull;
@ -110,9 +116,9 @@ public class ForgeWorld extends AbstractWorld {
private static final Random random = new Random();
private static final int UPDATE = 1, NOTIFY = 2;
private static final IBlockState JUNGLE_LOG = Blocks.JUNGLE_LOG.getDefaultState();
private static final IBlockState JUNGLE_LEAF = Blocks.JUNGLE_LEAVES.getDefaultState().with(BlockLeaves.PERSISTENT, Boolean.TRUE);
private static final IBlockState JUNGLE_SHRUB = Blocks.OAK_LEAVES.getDefaultState().with(BlockLeaves.PERSISTENT, Boolean.TRUE);
private static final net.minecraft.block.BlockState JUNGLE_LOG = Blocks.JUNGLE_LOG.getDefaultState();
private static final net.minecraft.block.BlockState JUNGLE_LEAF = Blocks.JUNGLE_LEAVES.getDefaultState().with(LeavesBlock.PERSISTENT, Boolean.TRUE);
private static final net.minecraft.block.BlockState JUNGLE_SHRUB = Blocks.OAK_LEAVES.getDefaultState().with(LeavesBlock.PERSISTENT, Boolean.TRUE);
private final WeakReference<World> worldRef;
@ -174,10 +180,10 @@ public class ForgeWorld extends AbstractWorld {
// First set the block
Chunk chunk = world.getChunk(x >> 4, z >> 4);
BlockPos pos = new BlockPos(x, y, z);
IBlockState old = chunk.getBlockState(pos);
net.minecraft.block.BlockState old = chunk.getBlockState(pos);
OptionalInt stateId = BlockStateIdAccess.getBlockStateId(block.toImmutableState());
IBlockState newState = stateId.isPresent() ? Block.getStateById(stateId.getAsInt()) : ForgeAdapter.adapt(block.toImmutableState());
IBlockState successState = chunk.setBlockState(pos, newState, false);
net.minecraft.block.BlockState newState = stateId.isPresent() ? Block.getStateById(stateId.getAsInt()) : ForgeAdapter.adapt(block.toImmutableState());
net.minecraft.block.BlockState successState = chunk.setBlockState(pos, newState, false);
boolean successful = successState != null;
// Create the TileEntity
@ -185,15 +191,16 @@ public class ForgeWorld extends AbstractWorld {
if (block instanceof BaseBlock) {
CompoundTag tag = ((BaseBlock) block).getNbtData();
if (tag != null) {
NBTTagCompound nativeTag = NBTConverter.toNative(tag);
CompoundNBT nativeTag = NBTConverter.toNative(tag);
nativeTag.putString("id", ((BaseBlock) block).getNbtId());
TileEntityUtils.setTileEntity(world, position, nativeTag);
successful = true; // update if TE changed as well
}
}
}
if (successful && notifyAndLight) {
world.checkLight(pos);
world.getChunkProvider().getLightManager().checkBlock(pos);
world.markAndNotifyBlock(pos, chunk, old, newState, UPDATE | NOTIFY);
}
@ -239,45 +246,44 @@ public class ForgeWorld extends AbstractWorld {
checkNotNull(position);
checkNotNull(biome);
Chunk chunk = getWorld().getChunk(new BlockPos(position.getBlockX(), 0, position.getBlockZ()));
if (chunk.isLoaded()) {
chunk.getBiomes()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = ForgeAdapter.adapt(biome);
return true;
IChunk chunk = getWorld().getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4, ChunkStatus.FULL, false);
if (chunk == null) {
return false;
}
return false;
chunk.getBiomes()[((position.getBlockZ() & 0xF) << 4 | position.getBlockX() & 0xF)] = ForgeAdapter.adapt(biome);
return true;
}
private static LoadingCache<WorldServer, WorldEditFakePlayer> fakePlayers
private static LoadingCache<ServerWorld, WorldEditFakePlayer> fakePlayers
= CacheBuilder.newBuilder().weakKeys().softValues().build(CacheLoader.from(WorldEditFakePlayer::new));
@Override
public boolean useItem(BlockVector3 position, BaseItem item, Direction face) {
ItemStack stack = ForgeAdapter.adapt(new BaseItemStack(item.getType(), item.getNbtData(), 1));
WorldServer world = (WorldServer) getWorld();
ServerWorld world = (ServerWorld) getWorld();
final WorldEditFakePlayer fakePlayer;
try {
fakePlayer = fakePlayers.get(world);
} catch (ExecutionException ignored) {
return false;
}
fakePlayer.setHeldItem(EnumHand.MAIN_HAND, stack);
fakePlayer.setHeldItem(Hand.MAIN_HAND, stack);
fakePlayer.setLocationAndAngles(position.getBlockX(), position.getBlockY(), position.getBlockZ(),
(float) face.toVector().toYaw(), (float) face.toVector().toPitch());
final BlockPos blockPos = ForgeAdapter.toBlockPos(position);
final EnumFacing enumFacing = ForgeAdapter.adapt(face);
ItemUseContext itemUseContext = new ItemUseContext(fakePlayer, stack, blockPos, enumFacing, blockPos.getX(), blockPos.getY(), blockPos.getZ());
EnumActionResult used = stack.onItemUse(itemUseContext);
if (used != EnumActionResult.SUCCESS) {
final BlockRayTraceResult rayTraceResult = new BlockRayTraceResult(ForgeAdapter.toVec3(position),
ForgeAdapter.adapt(face), blockPos, false);
ItemUseContext itemUseContext = new ItemUseContext(fakePlayer, Hand.MAIN_HAND, rayTraceResult);
ActionResultType used = stack.onItemUse(itemUseContext);
if (used != ActionResultType.SUCCESS) {
// try activating the block
if (getWorld().getBlockState(blockPos).onBlockActivated(world, blockPos, fakePlayer, EnumHand.MAIN_HAND,
enumFacing, blockPos.getX(), blockPos.getY(), blockPos.getZ())) {
used = EnumActionResult.SUCCESS;
if (getWorld().getBlockState(blockPos).onBlockActivated(world, fakePlayer, Hand.MAIN_HAND, rayTraceResult)) {
used = ActionResultType.SUCCESS;
} else {
used = stack.getItem().onItemRightClick(world, fakePlayer, EnumHand.MAIN_HAND).getType();
used = stack.getItem().onItemRightClick(world, fakePlayer, Hand.MAIN_HAND).getType();
}
}
return used == EnumActionResult.SUCCESS;
return used == ActionResultType.SUCCESS;
}
@Override
@ -289,24 +295,22 @@ public class ForgeWorld extends AbstractWorld {
return;
}
EntityItem entity = new EntityItem(getWorld(), position.getX(), position.getY(), position.getZ(), ForgeAdapter.adapt(item));
ItemEntity entity = new ItemEntity(getWorld(), position.getX(), position.getY(), position.getZ(), ForgeAdapter.adapt(item));
entity.setPickupDelay(10);
getWorld().spawnEntity(entity);
getWorld().addEntity(entity);
}
@Override
public void simulateBlockMine(BlockVector3 position) {
BlockPos pos = ForgeAdapter.toBlockPos(position);
IBlockState state = getWorld().getBlockState(pos);
state.dropBlockAsItem(getWorld(), pos, 0);
getWorld().removeBlock(pos);
getWorld().destroyBlock(pos, true);
}
@Override
public boolean regenerate(Region region, EditSession editSession) {
// Don't even try to regen if it's going to fail.
IChunkProvider provider = getWorld().getChunkProvider();
if (!(provider instanceof ChunkProviderServer)) {
AbstractChunkProvider provider = getWorld().getChunkProvider();
if (!(provider instanceof ServerChunkProvider)) {
return false;
}
@ -315,11 +319,12 @@ public class ForgeWorld extends AbstractWorld {
// normally it should be deleted at the end of this method
saveFolder.deleteOnExit();
try {
WorldServer originalWorld = (WorldServer) getWorld();
ServerWorld originalWorld = (ServerWorld) getWorld();
MinecraftServer server = originalWorld.getServer();
AnvilSaveHandler saveHandler = new AnvilSaveHandler(saveFolder, originalWorld.getSaveHandler().getWorldDirectory().getName(), server, server.getDataFixer());
World freshWorld = new WorldServer(server, saveHandler, originalWorld.getSavedDataStorage(), originalWorld.getWorldInfo(), originalWorld.dimension.getType(), originalWorld.profiler).init();
SaveHandler saveHandler = new SaveHandler(saveFolder, originalWorld.getSaveHandler().getWorldDirectory().getName(), server, server.getDataFixer());
World freshWorld = new ServerWorld(server, server.getBackgroundExecutor(), saveHandler, originalWorld.getWorldInfo(),
originalWorld.dimension.getType(), originalWorld.getProfiler(), new NoOpChunkStatusListener());
// Pre-gen all the chunks
// We need to also pull one more chunk in every direction
@ -342,36 +347,45 @@ public class ForgeWorld extends AbstractWorld {
}
@Nullable
private static Feature<NoFeatureConfig> createTreeFeatureGenerator(TreeType type) {
private static Feature<? extends IFeatureConfig> createTreeFeatureGenerator(TreeType type) {
switch (type) {
case TREE: return new TreeFeature(true);
case BIG_TREE: return new BigTreeFeature(true);
case PINE:
case REDWOOD: return new PointyTaigaTreeFeature();
case TALL_REDWOOD: return new TallTaigaTreeFeature(true);
case BIRCH: return new BirchTreeFeature(true, false);
case JUNGLE: return new MegaJungleFeature(true, 10, 20, JUNGLE_LOG, JUNGLE_LEAF);
case SMALL_JUNGLE: return new JungleTreeFeature(true, 4 + random.nextInt(7), JUNGLE_LOG, JUNGLE_LEAF, false);
case SHORT_JUNGLE: return new JungleTreeFeature(true, 4 + random.nextInt(7), JUNGLE_LOG, JUNGLE_LEAF, true);
case JUNGLE_BUSH: return new ShrubFeature(JUNGLE_LOG, JUNGLE_SHRUB);
case RED_MUSHROOM: return new BigBrownMushroomFeature();
case BROWN_MUSHROOM: return new BigRedMushroomFeature();
case SWAMP: return new SwampTreeFeature();
case ACACIA: return new SavannaTreeFeature(true);
case DARK_OAK: return new CanopyTreeFeature(true);
case MEGA_REDWOOD: return new MegaPineTree(false, random.nextBoolean());
case TALL_BIRCH: return new BirchTreeFeature(true, true);
case TREE: return new TreeFeature(NoFeatureConfig::deserialize, true);
case BIG_TREE: return new BigTreeFeature(NoFeatureConfig::deserialize, true);
case REDWOOD: return new PointyTaigaTreeFeature(NoFeatureConfig::deserialize);
case TALL_REDWOOD: return new TallTaigaTreeFeature(NoFeatureConfig::deserialize, true);
case BIRCH: return new BirchTreeFeature(NoFeatureConfig::deserialize, true, false);
case JUNGLE: return new MegaJungleFeature(NoFeatureConfig::deserialize, true, 10, 20, JUNGLE_LOG, JUNGLE_LEAF);
case SMALL_JUNGLE: return new JungleTreeFeature(NoFeatureConfig::deserialize, true, 4 + random.nextInt(7), JUNGLE_LOG, JUNGLE_LEAF, false);
case SHORT_JUNGLE: return new JungleTreeFeature(NoFeatureConfig::deserialize, true, 4 + random.nextInt(7), JUNGLE_LOG, JUNGLE_LEAF, true);
case JUNGLE_BUSH: return new ShrubFeature(NoFeatureConfig::deserialize, JUNGLE_LOG, JUNGLE_SHRUB);
case SWAMP: return new SwampTreeFeature(NoFeatureConfig::deserialize);
case ACACIA: return new SavannaTreeFeature(NoFeatureConfig::deserialize, true);
case DARK_OAK: return new DarkOakTreeFeature(NoFeatureConfig::deserialize, true);
case MEGA_REDWOOD: return new MegaPineTree(NoFeatureConfig::deserialize, true, random.nextBoolean());
case TALL_BIRCH: return new BirchTreeFeature(NoFeatureConfig::deserialize, true, true);
case RED_MUSHROOM: return new BigRedMushroomFeature(BigMushroomFeatureConfig::deserialize);
case BROWN_MUSHROOM: return new BigBrownMushroomFeature(BigMushroomFeatureConfig::deserialize);
case RANDOM: return createTreeFeatureGenerator(TreeType.values()[ThreadLocalRandom.current().nextInt(TreeType.values().length)]);
case RANDOM_REDWOOD:
default:
return null;
}
}
private IFeatureConfig createFeatureConfig(TreeType type) {
if (type == TreeType.RED_MUSHROOM || type == TreeType.BROWN_MUSHROOM) {
return new BigMushroomFeatureConfig(true);
} else {
return new NoFeatureConfig();
}
}
@Override
public boolean generateTree(TreeType type, EditSession editSession, BlockVector3 position) throws MaxChangedBlocksException {
Feature<NoFeatureConfig> generator = createTreeFeatureGenerator(type);
return generator != null && generator.place(getWorld(), getWorld().getChunkProvider().getChunkGenerator(), random, ForgeAdapter.toBlockPos(position), new NoFeatureConfig());
@SuppressWarnings("unchecked")
Feature<IFeatureConfig> generator = (Feature<IFeatureConfig>) createTreeFeatureGenerator(type);
return generator != null
&& generator.place(getWorld(), getWorld().getChunkProvider().getChunkGenerator(), random,
ForgeAdapter.toBlockPos(position), createFeatureConfig(type));
}
@Override
@ -388,7 +402,7 @@ public class ForgeWorld extends AbstractWorld {
public void fixLighting(Iterable<BlockVector2> chunks) {
World world = getWorld();
for (BlockVector2 chunk : chunks) {
world.getChunk(chunk.getBlockX(), chunk.getBlockZ()).resetRelightChecks();
world.getChunkProvider().getLightManager().func_215571_a(new ChunkPos(chunk.getBlockX(), chunk.getBlockZ()), true);
}
}
@ -447,7 +461,7 @@ public class ForgeWorld extends AbstractWorld {
@Override
public int getMaxY() {
return getWorld().getHeight() - 1;
return getWorld().getMaxHeight() - 1;
}
@Override
@ -457,11 +471,9 @@ public class ForgeWorld extends AbstractWorld {
@Override
public BlockState getBlock(BlockVector3 position) {
IBlockState mcState = getWorld().getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4).getBlockState(
position.getBlockX(),
position.getBlockY(),
position.getBlockZ()
);
net.minecraft.block.BlockState mcState = getWorld()
.getChunk(position.getBlockX() >> 4, position.getBlockZ() >> 4)
.getBlockState(ForgeAdapter.toBlockPos(position));
BlockState matchingBlock = BlockStateIdAccess.getBlockStateById(Block.getStateId(mcState));
if (matchingBlock != null) {
@ -475,7 +487,7 @@ public class ForgeWorld extends AbstractWorld {
public BaseBlock getFullBlock(BlockVector3 position) {
BlockPos pos = new BlockPos(position.getBlockX(), position.getBlockY(), position.getBlockZ());
// Avoid creation by using the CHECK mode -- if it's needed, it'll be re-created anyways
TileEntity tile = getWorld().getChunk(pos).getTileEntity(pos, Chunk.EnumCreateEntityType.CHECK);
TileEntity tile = getWorld().getChunk(pos).getTileEntity(pos, Chunk.CreateEntityType.CHECK);
if (tile != null) {
return getBlock(position).toBaseBlock(NBTConverter.fromNative(TileEntityUtils.copyNbtData(tile)));
@ -507,33 +519,34 @@ public class ForgeWorld extends AbstractWorld {
@Override
public List<? extends Entity> getEntities(Region region) {
List<Entity> entities = new ArrayList<>();
for (net.minecraft.entity.Entity entity : getWorld().loadedEntityList) {
if (region.contains(BlockVector3.at(entity.posX, entity.posY, entity.posZ))) {
entities.add(new ForgeEntity(entity));
}
final World world = getWorld();
if (!(world instanceof ServerWorld)) {
return Collections.emptyList();
}
return entities;
return ((ServerWorld) world).getEntities().filter(e -> region.contains(ForgeAdapter.adapt(e.getPosition())))
.map(ForgeEntity::new).collect(Collectors.toList());
}
@Override
public List<? extends Entity> getEntities() {
List<Entity> entities = new ArrayList<>();
for (net.minecraft.entity.Entity entity : getWorld().loadedEntityList) {
entities.add(new ForgeEntity(entity));
final World world = getWorld();
if (!(world instanceof ServerWorld)) {
return Collections.emptyList();
}
return entities;
return ((ServerWorld) world).getEntities().map(ForgeEntity::new).collect(Collectors.toList());
}
@Nullable
@Override
public Entity createEntity(Location location, BaseEntity entity) {
World world = getWorld();
net.minecraft.entity.Entity createdEntity = EntityType.create(world, new ResourceLocation(entity.getType().getId()));
final Optional<EntityType<?>> entityType = EntityType.getTypeFromString(entity.getType().getId());
if (!entityType.isPresent()) return null;
net.minecraft.entity.Entity createdEntity = entityType.get().create(world);
if (createdEntity != null) {
CompoundTag nativeTag = entity.getNbtData();
if (nativeTag != null) {
NBTTagCompound tag = NBTConverter.toNative(entity.getNbtData());
CompoundNBT tag = NBTConverter.toNative(entity.getNbtData());
for (String name : Constants.NO_COPY_ENTITY_NBT_FIELDS) {
tag.remove(name);
}
@ -542,7 +555,7 @@ public class ForgeWorld extends AbstractWorld {
createdEntity.setLocationAndAngles(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
world.spawnEntity(createdEntity);
world.addEntity(createdEntity);
return new ForgeEntity(createdEntity);
} else {
return null;
@ -553,10 +566,23 @@ public class ForgeWorld extends AbstractWorld {
* Thrown when the reference to the world is lost.
*/
@SuppressWarnings("serial")
private static class WorldReferenceLostException extends WorldEditException {
private static final class WorldReferenceLostException extends WorldEditException {
private WorldReferenceLostException(String message) {
super(message);
}
}
private static class NoOpChunkStatusListener implements IChunkStatusListener {
@Override
public void func_219509_a(ChunkPos chunkPos) {
}
@Override
public void func_219508_a(ChunkPos chunkPos, @Nullable ChunkStatus chunkStatus) {
}
@Override
public void func_219510_b() {
}
}
}

View File

@ -19,9 +19,6 @@
package com.sk89q.worldedit.forge;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.sk89q.worldedit.forge.ForgeAdapter.adaptPlayer;
import com.mojang.brigadier.ParseResults;
import com.mojang.brigadier.exceptions.CommandSyntaxException;
import com.sk89q.worldedit.LocalSession;
@ -42,12 +39,13 @@ import com.sk89q.worldedit.world.entity.EntityType;
import com.sk89q.worldedit.world.item.ItemCategory;
import com.sk89q.worldedit.world.item.ItemType;
import net.minecraft.command.CommandSource;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.tags.BlockTags;
import net.minecraft.tags.ItemTags;
import net.minecraft.util.EnumHand;
import net.minecraft.util.Hand;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.CommandEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
@ -60,9 +58,11 @@ import net.minecraftforge.fml.ModContainer;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent;
import net.minecraftforge.fml.event.server.FMLServerStartedEvent;
import net.minecraftforge.fml.event.server.FMLServerStoppingEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.loading.FMLLoader;
import net.minecraftforge.fml.loading.FMLPaths;
import net.minecraftforge.registries.ForgeRegistries;
import org.apache.logging.log4j.LogManager;
@ -74,6 +74,9 @@ import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.sk89q.worldedit.forge.ForgeAdapter.adaptPlayer;
/**
* The Forge implementation of WorldEdit.
*/
@ -216,12 +219,12 @@ public class ForgeWorldEdit {
event instanceof PlayerInteractEvent.RightClickBlock
&& ((PlayerInteractEvent.RightClickBlock) event)
.getUseItem() == Event.Result.DENY;
if (isLeftDeny || isRightDeny || event.getEntity().world.isRemote || event.getHand() == EnumHand.OFF_HAND) {
if (isLeftDeny || isRightDeny || event.getEntity().world.isRemote || event.getHand() == Hand.OFF_HAND) {
return;
}
WorldEdit we = WorldEdit.getInstance();
ForgePlayer player = adaptPlayer((EntityPlayerMP) event.getEntityPlayer());
ForgePlayer player = adaptPlayer((ServerPlayerEntity) event.getEntityPlayer());
ForgeWorld world = getWorld(event.getEntityPlayer().world);
if (event instanceof PlayerInteractEvent.LeftClickEmpty) {
@ -256,10 +259,10 @@ public class ForgeWorldEdit {
@SubscribeEvent
public void onCommandEvent(CommandEvent event) throws CommandSyntaxException {
ParseResults<CommandSource> parseResults = event.getParseResults();
if (!(parseResults.getContext().getSource().getEntity() instanceof EntityPlayerMP)) {
if (!(parseResults.getContext().getSource().getEntity() instanceof ServerPlayerEntity)) {
return;
}
EntityPlayerMP player = parseResults.getContext().getSource().asPlayer();
ServerPlayerEntity player = parseResults.getContext().getSource().asPlayer();
if (player.world.isRemote()) {
return;
}
@ -288,7 +291,7 @@ public class ForgeWorldEdit {
* @param player the player
* @return the session
*/
public LocalSession getSession(EntityPlayerMP player) {
public LocalSession getSession(ServerPlayerEntity player) {
checkNotNull(player);
return WorldEdit.getInstance().getSessionManager().get(adaptPlayer(player));
}

View File

@ -22,6 +22,7 @@ package com.sk89q.worldedit.forge;
import com.sk89q.worldedit.forge.gui.GuiReferenceCard;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.util.text.StringTextComponent;
import net.minecraftforge.client.event.InputEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.client.registry.ClientRegistry;
@ -39,7 +40,7 @@ public class KeyHandler {
@SubscribeEvent
public void onKey(InputEvent.KeyInputEvent evt) {
if (mc.player != null && mc.world != null && mainKey.isPressed()) {
mc.displayGuiScreen(new GuiReferenceCard());
mc.displayGuiScreen(new GuiReferenceCard(new StringTextComponent("WorldEdit Reference")));
}
}

View File

@ -32,19 +32,19 @@ import com.sk89q.jnbt.LongTag;
import com.sk89q.jnbt.ShortTag;
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import net.minecraft.nbt.INBTBase;
import net.minecraft.nbt.NBTTagByte;
import net.minecraft.nbt.NBTTagByteArray;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagDouble;
import net.minecraft.nbt.NBTTagEnd;
import net.minecraft.nbt.NBTTagFloat;
import net.minecraft.nbt.NBTTagInt;
import net.minecraft.nbt.NBTTagIntArray;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagLong;
import net.minecraft.nbt.NBTTagShort;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.nbt.ByteArrayNBT;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.DoubleNBT;
import net.minecraft.nbt.INBT;
import net.minecraft.nbt.ByteNBT;
import net.minecraft.nbt.EndNBT;
import net.minecraft.nbt.FloatNBT;
import net.minecraft.nbt.IntArrayNBT;
import net.minecraft.nbt.IntNBT;
import net.minecraft.nbt.ListNBT;
import net.minecraft.nbt.LongNBT;
import net.minecraft.nbt.StringNBT;
import net.minecraft.nbt.ShortNBT;
import java.util.ArrayList;
import java.util.Arrays;
@ -62,7 +62,7 @@ final class NBTConverter {
private NBTConverter() {
}
public static INBTBase toNative(Tag tag) {
public static INBT toNative(Tag tag) {
if (tag instanceof IntArrayTag) {
return toNative((IntArrayTag) tag);
@ -100,13 +100,13 @@ final class NBTConverter {
}
}
public static NBTTagIntArray toNative(IntArrayTag tag) {
public static IntArrayNBT toNative(IntArrayTag tag) {
int[] value = tag.getValue();
return new NBTTagIntArray(Arrays.copyOf(value, value.length));
return new IntArrayNBT(Arrays.copyOf(value, value.length));
}
public static NBTTagList toNative(ListTag tag) {
NBTTagList list = new NBTTagList();
public static ListNBT toNative(ListTag tag) {
ListNBT list = new ListNBT();
for (Tag child : tag.getValue()) {
if (child instanceof EndTag) {
continue;
@ -116,94 +116,94 @@ final class NBTConverter {
return list;
}
public static NBTTagLong toNative(LongTag tag) {
return new NBTTagLong(tag.getValue());
public static LongNBT toNative(LongTag tag) {
return new LongNBT(tag.getValue());
}
public static NBTTagString toNative(StringTag tag) {
return new NBTTagString(tag.getValue());
public static StringNBT toNative(StringTag tag) {
return new StringNBT(tag.getValue());
}
public static NBTTagInt toNative(IntTag tag) {
return new NBTTagInt(tag.getValue());
public static IntNBT toNative(IntTag tag) {
return new IntNBT(tag.getValue());
}
public static NBTTagByte toNative(ByteTag tag) {
return new NBTTagByte(tag.getValue());
public static ByteNBT toNative(ByteTag tag) {
return new ByteNBT(tag.getValue());
}
public static NBTTagByteArray toNative(ByteArrayTag tag) {
public static ByteArrayNBT toNative(ByteArrayTag tag) {
byte[] value = tag.getValue();
return new NBTTagByteArray(Arrays.copyOf(value, value.length));
return new ByteArrayNBT(Arrays.copyOf(value, value.length));
}
public static NBTTagCompound toNative(CompoundTag tag) {
NBTTagCompound compound = new NBTTagCompound();
public static CompoundNBT toNative(CompoundTag tag) {
CompoundNBT compound = new CompoundNBT();
for (Entry<String, Tag> child : tag.getValue().entrySet()) {
compound.put(child.getKey(), toNative(child.getValue()));
}
return compound;
}
public static NBTTagFloat toNative(FloatTag tag) {
return new NBTTagFloat(tag.getValue());
public static FloatNBT toNative(FloatTag tag) {
return new FloatNBT(tag.getValue());
}
public static NBTTagShort toNative(ShortTag tag) {
return new NBTTagShort(tag.getValue());
public static ShortNBT toNative(ShortTag tag) {
return new ShortNBT(tag.getValue());
}
public static NBTTagDouble toNative(DoubleTag tag) {
return new NBTTagDouble(tag.getValue());
public static DoubleNBT toNative(DoubleTag tag) {
return new DoubleNBT(tag.getValue());
}
public static Tag fromNative(INBTBase other) {
if (other instanceof NBTTagIntArray) {
return fromNative((NBTTagIntArray) other);
public static Tag fromNative(INBT other) {
if (other instanceof IntArrayNBT) {
return fromNative((IntArrayNBT) other);
} else if (other instanceof NBTTagList) {
return fromNative((NBTTagList) other);
} else if (other instanceof ListNBT) {
return fromNative((ListNBT) other);
} else if (other instanceof NBTTagEnd) {
return fromNative((NBTTagEnd) other);
} else if (other instanceof EndNBT) {
return fromNative((EndNBT) other);
} else if (other instanceof NBTTagLong) {
return fromNative((NBTTagLong) other);
} else if (other instanceof LongNBT) {
return fromNative((LongNBT) other);
} else if (other instanceof NBTTagString) {
return fromNative((NBTTagString) other);
} else if (other instanceof StringNBT) {
return fromNative((StringNBT) other);
} else if (other instanceof NBTTagInt) {
return fromNative((NBTTagInt) other);
} else if (other instanceof IntNBT) {
return fromNative((IntNBT) other);
} else if (other instanceof NBTTagByte) {
return fromNative((NBTTagByte) other);
} else if (other instanceof ByteNBT) {
return fromNative((ByteNBT) other);
} else if (other instanceof NBTTagByteArray) {
return fromNative((NBTTagByteArray) other);
} else if (other instanceof ByteArrayNBT) {
return fromNative((ByteArrayNBT) other);
} else if (other instanceof NBTTagCompound) {
return fromNative((NBTTagCompound) other);
} else if (other instanceof CompoundNBT) {
return fromNative((CompoundNBT) other);
} else if (other instanceof NBTTagFloat) {
return fromNative((NBTTagFloat) other);
} else if (other instanceof FloatNBT) {
return fromNative((FloatNBT) other);
} else if (other instanceof NBTTagShort) {
return fromNative((NBTTagShort) other);
} else if (other instanceof ShortNBT) {
return fromNative((ShortNBT) other);
} else if (other instanceof NBTTagDouble) {
return fromNative((NBTTagDouble) other);
} else if (other instanceof DoubleNBT) {
return fromNative((DoubleNBT) other);
} else {
throw new IllegalArgumentException("Can't convert other of type " + other.getClass().getCanonicalName());
}
}
public static IntArrayTag fromNative(NBTTagIntArray other) {
public static IntArrayTag fromNative(IntArrayNBT other) {
int[] value = other.getIntArray();
return new IntArrayTag(Arrays.copyOf(value, value.length));
}
public static ListTag fromNative(NBTTagList other) {
public static ListTag fromNative(ListNBT other) {
other = other.copy();
List<Tag> list = new ArrayList<>();
Class<? extends Tag> listClass = StringTag.class;
@ -216,32 +216,32 @@ final class NBTConverter {
return new ListTag(listClass, list);
}
public static EndTag fromNative(NBTTagEnd other) {
public static EndTag fromNative(EndNBT other) {
return new EndTag();
}
public static LongTag fromNative(NBTTagLong other) {
public static LongTag fromNative(LongNBT other) {
return new LongTag(other.getLong());
}
public static StringTag fromNative(NBTTagString other) {
public static StringTag fromNative(StringNBT other) {
return new StringTag(other.getString());
}
public static IntTag fromNative(NBTTagInt other) {
public static IntTag fromNative(IntNBT other) {
return new IntTag(other.getInt());
}
public static ByteTag fromNative(NBTTagByte other) {
public static ByteTag fromNative(ByteNBT other) {
return new ByteTag(other.getByte());
}
public static ByteArrayTag fromNative(NBTTagByteArray other) {
public static ByteArrayTag fromNative(ByteArrayNBT other) {
byte[] value = other.getByteArray();
return new ByteArrayTag(Arrays.copyOf(value, value.length));
}
public static CompoundTag fromNative(NBTTagCompound other) {
public static CompoundTag fromNative(CompoundNBT other) {
Set<String> tags = other.keySet();
Map<String, Tag> map = new HashMap<>();
for (String tagName : tags) {
@ -250,15 +250,15 @@ final class NBTConverter {
return new CompoundTag(map);
}
public static FloatTag fromNative(NBTTagFloat other) {
public static FloatTag fromNative(FloatNBT other) {
return new FloatTag(other.getFloat());
}
public static ShortTag fromNative(NBTTagShort other) {
public static ShortTag fromNative(ShortNBT other) {
return new ShortTag(other.getShort());
}
public static DoubleTag fromNative(NBTTagDouble other) {
public static DoubleTag fromNative(DoubleNBT other) {
return new DoubleTag(other.getDouble());
}

View File

@ -19,7 +19,7 @@
package com.sk89q.worldedit.forge;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.server.MinecraftServer;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;
@ -58,10 +58,10 @@ public class ThreadSafeCache {
Set<UUID> onlineIds = new HashSet<>();
MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
if (server == null || server.getPlayerList() == null) {
if (server == null) {
return;
}
for (EntityPlayerMP player : server.getPlayerList().getPlayers()) {
for (ServerPlayerEntity player : server.getPlayerList().getPlayers()) {
if (player != null) {
onlineIds.add(player.getUniqueID());
}

View File

@ -23,8 +23,8 @@ import static com.google.common.base.Preconditions.checkNotNull;
import com.sk89q.worldedit.math.BlockVector3;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagInt;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.nbt.IntNBT;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@ -45,13 +45,13 @@ final class TileEntityUtils {
* @param tag the tag
* @param position the position
*/
private static void updateForSet(NBTTagCompound tag, BlockVector3 position) {
private static void updateForSet(CompoundNBT tag, BlockVector3 position) {
checkNotNull(tag);
checkNotNull(position);
tag.put("x", new NBTTagInt(position.getBlockX()));
tag.put("y", new NBTTagInt(position.getBlockY()));
tag.put("z", new NBTTagInt(position.getBlockZ()));
tag.put("x", new IntNBT(position.getBlockX()));
tag.put("y", new IntNBT(position.getBlockY()));
tag.put("z", new IntNBT(position.getBlockZ()));
}
/**
@ -62,7 +62,7 @@ final class TileEntityUtils {
* @param position the position
* @param tag the tag for the tile entity (may be null to do nothing)
*/
static void setTileEntity(World world, BlockVector3 position, @Nullable NBTTagCompound tag) {
static void setTileEntity(World world, BlockVector3 position, @Nullable CompoundNBT tag) {
if (tag != null) {
updateForSet(tag, position);
TileEntity tileEntity = TileEntity.create(tag);
@ -72,8 +72,8 @@ final class TileEntityUtils {
}
}
public static NBTTagCompound copyNbtData(TileEntity tile) {
NBTTagCompound tag = new NBTTagCompound();
public static CompoundNBT copyNbtData(TileEntity tile) {
CompoundNBT tag = new CompoundNBT();
tile.write(tag);
return tag;
}

View File

@ -20,21 +20,29 @@
package com.sk89q.worldedit.forge;
import com.mojang.authlib.GameProfile;
import net.minecraft.world.WorldServer;
import net.minecraft.inventory.container.INamedContainerProvider;
import net.minecraft.world.ServerWorld;
import net.minecraftforge.common.util.FakePlayer;
import javax.annotation.Nullable;
import java.util.OptionalInt;
import java.util.UUID;
public class WorldEditFakePlayer extends FakePlayer {
private static final GameProfile FAKE_GAME_PROFILE = new GameProfile(UUID.nameUUIDFromBytes("worldedit".getBytes()), "[WorldEdit]");
public WorldEditFakePlayer(WorldServer world) {
public WorldEditFakePlayer(ServerWorld world) {
super(world, FAKE_GAME_PROFILE);
}
@Override
public boolean canEat(boolean ignoreHunger) {
public boolean canEat(boolean checkHunger) {
return true;
}
@Override
public OptionalInt openContainer(@Nullable INamedContainerProvider container) {
return OptionalInt.empty();
}
}

View File

@ -20,46 +20,46 @@
package com.sk89q.worldedit.forge.gui;
import com.sk89q.worldedit.forge.ForgeWorldEdit;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.widget.button.Button;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.lwjgl.opengl.GL11;
@OnlyIn(Dist.CLIENT)
public class GuiReferenceCard extends GuiScreen {
public class GuiReferenceCard extends Screen {
private GuiButton closeButton;
private Button closeButton;
private int backgroundWidth = 256;
private int backgroundHeight = 256;
@Override
public void initGui() {
this.closeButton = new GuiButton(0, (this.width - this.backgroundWidth + 100) / 2,
(this.height + this.backgroundHeight - 60) / 2, this.backgroundWidth - 100, 20, "Close") {
@Override
public void onClick(double mouseX, double mouseY) {
super.onClick(mouseX, mouseY);
public GuiReferenceCard(ITextComponent title) {
super(title);
}
mc.player.closeScreen();
}
};
@Override
public void init() {
this.addButton(closeButton = new Button(
(this.width - this.backgroundWidth + 56) / 2, (this.height + this.backgroundHeight) / 2,
200, 20, "Close",
button -> this.minecraft.player.closeScreen()));
}
@Override
public void render(int mouseX, int mouseY, float par3) {
int x = (this.width - this.backgroundWidth) / 2;
int y = (this.height - this.backgroundHeight) / 2 - this.closeButton.height;
int y = (this.height - this.backgroundHeight) / 2 - this.closeButton.getHeight();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
this.mc.textureManager.bindTexture(new ResourceLocation(ForgeWorldEdit.MOD_ID, "textures/gui/reference.png"));
this.drawTexturedModalRect(x, y, 0, 0, this.backgroundWidth, this.backgroundHeight);
this.minecraft.textureManager.bindTexture(new ResourceLocation(ForgeWorldEdit.MOD_ID, "textures/gui/reference.png"));
this.blit(x, y, 0, 0, this.backgroundWidth, this.backgroundHeight);
super.render(mouseX, mouseY, par3);
}
@Override
public boolean doesGuiPauseGame() {
public boolean isPauseScreen() {
return true;
}

View File

@ -1,65 +0,0 @@
/*
* WorldEdit, a Minecraft world manipulation toolkit
* Copyright (C) sk89q <http://www.sk89q.com>
* Copyright (C) WorldEdit team and contributors
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.sk89q.worldedit.forge.gui;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.text.ITextComponent;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.world.IInteractionObject;
import javax.annotation.Nullable;
public class ResourceLocationInteractionObject implements IInteractionObject {
private ResourceLocation resourceLocation;
public ResourceLocationInteractionObject(ResourceLocation resourceLocation) {
this.resourceLocation = resourceLocation;
}
@Override
public Container createContainer(InventoryPlayer inventoryPlayer, EntityPlayer entityPlayer) {
throw new UnsupportedOperationException();
}
@Override
public String getGuiID() {
return resourceLocation.toString();
}
@Override
public ITextComponent getName() {
return new TextComponentString(resourceLocation.toString());
}
@Override
public boolean hasCustomName() {
return false;
}
@Nullable
@Override
public ITextComponent getCustomName() {
return null;
}
}

View File

@ -42,7 +42,7 @@ final class PacketHandlerUtil {
private static Predicate<String> validateLenient(String protocolVersion) {
return remoteVersion ->
protocolVersion.equals(remoteVersion)
|| NetworkRegistry.ABSENT.equals(remoteVersion)
|| NetworkRegistry.ACCEPTVANILLA.equals(remoteVersion);
|| NetworkRegistry.ABSENT.equals(remoteVersion)
|| NetworkRegistry.ACCEPTVANILLA.equals(remoteVersion);
}
}

View File

@ -23,9 +23,9 @@ import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.forge.ForgePlayer;
import com.sk89q.worldedit.forge.ForgeWorldEdit;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.network.ThreadQuickExitException;
import net.minecraft.network.play.server.SPacketCustomPayload;
import net.minecraft.network.play.server.SCustomPayloadPlayPacket;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.network.NetworkEvent.ClientCustomPayloadEvent;
import net.minecraftforge.fml.network.NetworkEvent.ServerCustomPayloadEvent;
@ -45,14 +45,13 @@ public final class WECUIPacketHandler {
.buildLenientHandler(ForgeWorldEdit.CUI_PLUGIN_CHANNEL, PROTOCOL_VERSION)
.eventNetworkChannel();
public static void init() {
HANDLER.addListener(WECUIPacketHandler::onPacketData);
HANDLER.addListener(WECUIPacketHandler::callProcessPacket);
}
public static void onPacketData(ServerCustomPayloadEvent event) {
EntityPlayerMP player = event.getSource().get().getSender();
ServerPlayerEntity player = event.getSource().get().getSender();
LocalSession session = ForgeWorldEdit.inst.getSession(player);
if (session.hasCUISupport()) {
@ -67,11 +66,12 @@ public final class WECUIPacketHandler {
public static void callProcessPacket(ClientCustomPayloadEvent event) {
try {
new SPacketCustomPayload(
new SCustomPayloadPlayPacket(
new ResourceLocation(ForgeWorldEdit.MOD_ID, ForgeWorldEdit.CUI_PLUGIN_CHANNEL),
event.getPayload()
).processPacket(Minecraft.getInstance().player.connection);
} catch (ThreadQuickExitException ignored) {
}
}
}