From 1c89f4bffa20416768c3f5deb39fbd9dd4c097bd Mon Sep 17 00:00:00 2001 From: Kenzie Togami Date: Sun, 12 Oct 2014 12:27:51 -0700 Subject: [PATCH] Update to Forge 1.7.10-10.13.1.1225 --- .travis.yml | 4 +- COMPILING.md | 5 +- build.gradle | 58 +++++++++--------- gradle/wrapper/gradle-wrapper.properties | 2 +- .../worldedit/forge/ForgeBiomeRegistry.java | 12 +++- .../worldedit/forge/ForgeEntityType.java | 4 +- .../sk89q/worldedit/forge/ForgePlatform.java | 20 +++---- .../sk89q/worldedit/forge/ForgePlayer.java | 27 +++++---- .../com/sk89q/worldedit/forge/ForgeUtil.java | 5 +- .../com/sk89q/worldedit/forge/ForgeWorld.java | 22 +++---- .../sk89q/worldedit/forge/ForgeWorldEdit.java | 31 ++++------ .../sk89q/worldedit/forge/NBTConverter.java | 60 +++++++++---------- .../worldedit/forge/ThreadSafeCache.java | 28 +++------ .../worldedit/forge/TileEntityUtils.java | 10 ++-- .../worldedit/forge/WECUIPacketHandler.java | 32 +++++++--- src/forge/resources/mcmod.info | 7 +-- src/main/build/import-control.xml | 1 + 17 files changed, 167 insertions(+), 161 deletions(-) diff --git a/.travis.yml b/.travis.yml index d4e964162..a23f1264c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,10 +2,10 @@ language: java notifications: email: false before_install: chmod +x gradlew -install: true +install: ./gradlew setupCIWorkspace -S matrix: include: - jdk: oraclejdk7 script: mvn clean package - jdk: oraclejdk7 - script: gradle build \ No newline at end of file + script: ./gradlew build -S \ No newline at end of file diff --git a/COMPILING.md b/COMPILING.md index d85b4afa9..a5dc67273 100644 --- a/COMPILING.md +++ b/COMPILING.md @@ -65,11 +65,12 @@ command: Build WorldEdit for Forge with: + gradle setupDecompWorkspace gradle build Once complete, you will find the release .jar in the folder *build/libs*. ### Other Tasks -* `gradle setupDecompWorkspace idea` will generate an [IntelliJ IDEA](http://www.jetbrains.com/idea/) workspace -* `gradle setupDecompWorkspace eclipse` will generate an [Eclipse](https://www.eclipse.org/downloads/) workspace +* `gradle idea` will generate an [IntelliJ IDEA](http://www.jetbrains.com/idea/) workspace +* `gradle eclipse` will generate an [Eclipse](https://www.eclipse.org/downloads/) workspace diff --git a/build.gradle b/build.gradle index 4305ff73e..13c3d703b 100644 --- a/build.gradle +++ b/build.gradle @@ -6,20 +6,27 @@ buildscript { repositories { mavenCentral() - maven { url = "http://files.minecraftforge.net/maven" } + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } jcenter() } dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' - classpath 'com.github.jengelman.gradle.plugins:shadow:0.8' + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + classpath 'com.github.jengelman.gradle.plugins:shadow:1.1.1' } } apply plugin: 'java' apply plugin: 'maven' apply plugin: 'forge' -apply plugin: 'shadow' +apply plugin: 'com.github.johnrengelman.shadow' group = 'com.sk89q' version = '6.0.0-SNAPSHOT' + System.getProperty("worldedit.build.suffix", "") @@ -66,8 +73,8 @@ sourceSets { } minecraft { - version = "1.6.4-9.11.1.964" - forgeVersion = "9.11.1.964" + ext.forgeVersion = "10.13.1.1225" + version = "1.7.10-$forgeVersion" replaceIn "com/sk89q/worldedit/forge/ForgeWorldEdit.java" replace "%VERSION%", project.version @@ -86,34 +93,29 @@ processResources { } // shade needed runtime dependencies -shadow { - //artifactAttached false - destinationDir "${buildDir}/libs/" - artifactSet { - include '*:jchronic:jar:' - include '*:paranamer:jar:' - include '*:jlibnoise:jar:' +shadowJar { + classifier 'shadow' + dependencies { + include(dependency('com.sk89q:jchronic:0.2.4a')) + include(dependency('com.thoughtworks.paranamer:paranamer:2.6')) + include(dependency('com.sk89q.lib:jlibnoise:1.0.0')) } + exclude 'GradleStart**' + exclude '.cache' +} + +// ensure reobf happens +reobf.reobf(shadowJar) { spec -> + spec.classpath = sourceSets.main.compileClasspath; } task deleteOrig(type: Delete) { - delete "${project.tasks.jar.getArchivePath().getPath()}" -} - -task renameShaded(type: Copy) { - from file("${buildDir}/libs") - into file("${buildDir}/libs") - rename { String fileName -> - fileName.replace('-shadow', '') - } + delete project.tasks.jar.archivePath.getPath() } task deleteShaded(type: Delete) { - delete "${project.tasks.jar.getArchivePath().getPath().replace('.jar', '-shadow.jar')}" + delete project.tasks.shadowJar.archivePath.getPath() } -// follow all the steps -build.dependsOn(deleteShaded) -deleteShaded.dependsOn(renameShaded) -renameShaded.dependsOn(deleteOrig) -deleteOrig.dependsOn(shadowJar) +shadowJar.dependsOn(deleteShaded) +build.dependsOn(shadowJar) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2e906f11c..74fe3a953 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=http\://services.gradle.org/distributions/gradle-1.11-bin.zip +distributionUrl=http\://services.gradle.org/distributions/gradle-2.0-bin.zip diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java index 7f0597313..fb793aaa0 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeBiomeRegistry.java @@ -19,13 +19,22 @@ package com.sk89q.worldedit.forge; +import com.google.common.base.Throwables; import com.google.common.collect.HashBiMap; import com.sk89q.worldedit.world.biome.BaseBiome; import com.sk89q.worldedit.world.biome.BiomeData; import com.sk89q.worldedit.world.registry.BiomeRegistry; + import net.minecraft.world.biome.BiomeGenBase; import javax.annotation.Nullable; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.lang.reflect.Type; +import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -36,7 +45,6 @@ import java.util.Map; * Provides access to biome data in Forge. */ class ForgeBiomeRegistry implements BiomeRegistry { - private static Map biomes = Collections.emptyMap(); private static Map biomeData = Collections.emptyMap(); @@ -71,7 +79,7 @@ class ForgeBiomeRegistry implements BiomeRegistry { Map biomes = HashBiMap.create(); Map biomeData = new HashMap(); - for (BiomeGenBase biome : BiomeGenBase.biomeList) { + for (BiomeGenBase biome : BiomeGenBase.getBiomeGenArray()) { if ((biome == null) || (biomes.containsValue(biome))) { continue; } diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeEntityType.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeEntityType.java index a2fc3952e..9db2e7431 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeEntityType.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeEntityType.java @@ -27,7 +27,7 @@ import net.minecraft.entity.INpc; import net.minecraft.entity.IProjectile; import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.item.EntityEnderEye; -import net.minecraft.entity.item.EntityFallingSand; +import net.minecraft.entity.item.EntityFallingBlock; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.item.EntityItemFrame; import net.minecraft.entity.item.EntityMinecart; @@ -68,7 +68,7 @@ public class ForgeEntityType implements EntityType { @Override public boolean isFallingBlock() { - return entity instanceof EntityFallingSand; + return entity instanceof EntityFallingBlock; } @Override diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgePlatform.java b/src/forge/java/com/sk89q/worldedit/forge/ForgePlatform.java index 46b88d5e7..bcc7f7bef 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgePlatform.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgePlatform.java @@ -20,8 +20,8 @@ package com.sk89q.worldedit.forge; import com.sk89q.worldedit.LocalConfiguration; -import com.sk89q.worldedit.ServerInterface; import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.extension.platform.AbstractPlatform; import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Capability; import com.sk89q.worldedit.extension.platform.MultiUserPlatform; @@ -51,17 +51,15 @@ import java.util.EnumMap; import java.util.List; import java.util.Map; -class ForgePlatform extends ServerInterface implements MultiUserPlatform { +class ForgePlatform extends AbstractPlatform implements MultiUserPlatform { private final ForgeWorldEdit mod; private final MinecraftServer server; - private final ForgeBiomeRegistry biomes; private boolean hookingEvents = false; ForgePlatform(ForgeWorldEdit mod) { this.mod = mod; this.server = FMLCommonHandler.instance().getMinecraftServerInstance(); - this.biomes = new ForgeBiomeRegistry(); } boolean isHookingEvents() { @@ -71,16 +69,17 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform { @Override public int resolveItem(String name) { if (name == null) return 0; - for (Item item : Item.itemsList) { + for (Object itemObj : Item.itemRegistry) { + Item item = (Item) itemObj; if (item == null) continue; if (item.getUnlocalizedName() == null) continue; if (item.getUnlocalizedName().startsWith("item.")) { - if (item.getUnlocalizedName().equalsIgnoreCase("item." + name)) return item.itemID; + if (item.getUnlocalizedName().equalsIgnoreCase("item." + name)) return Item.getIdFromItem(item); } if (item.getUnlocalizedName().startsWith("tile.")) { - if (item.getUnlocalizedName().equalsIgnoreCase("tile." + name)) return item.itemID; + if (item.getUnlocalizedName().equalsIgnoreCase("tile." + name)) return Item.getIdFromItem(item); } - if (item.getUnlocalizedName().equalsIgnoreCase(name)) return item.itemID; + if (item.getUnlocalizedName().equalsIgnoreCase(name)) return Item.getIdFromItem(item); } return 0; } @@ -115,7 +114,7 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform { if (player instanceof ForgePlayer) { return player; } else { - EntityPlayerMP entity = server.getConfigurationManager().getPlayerForUsername(player.getName()); + EntityPlayerMP entity = server.getConfigurationManager().func_152612_a(player.getName()); return entity != null ? new ForgePlayer(entity) : null; } } @@ -143,7 +142,6 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform { for (final CommandMapping command : dispatcher.getCommands()) { final Description description = command.getDescription(); - mcMan.registerCommand(new CommandBase() { @Override public String getCommandName() { @@ -220,7 +218,7 @@ class ForgePlatform extends ServerInterface implements MultiUserPlatform { List users = new ArrayList(); ServerConfigurationManager scm = server.getConfigurationManager(); for (String name : scm.getAllUsernames()) { - EntityPlayerMP entity = scm.getPlayerForUsername(name); + EntityPlayerMP entity = scm.func_152612_a(name); if (entity != null) { users.add(new ForgePlayer(entity)); } diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgePlayer.java b/src/forge/java/com/sk89q/worldedit/forge/ForgePlayer.java index da592ba8f..276061e37 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgePlayer.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgePlayer.java @@ -29,12 +29,15 @@ import com.sk89q.worldedit.internal.LocalWorldAdapter; import com.sk89q.worldedit.internal.cui.CUIEvent; import com.sk89q.worldedit.session.SessionKey; import com.sk89q.worldedit.util.Location; + import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.network.packet.Packet250CustomPayload; -import net.minecraft.util.ChatMessageComponent; +import net.minecraft.network.play.server.S3FPacketCustomPayload; +import net.minecraft.util.ChatComponentText; import javax.annotation.Nullable; + import java.util.UUID; public class ForgePlayer extends AbstractPlayerActor { @@ -54,12 +57,12 @@ public class ForgePlayer extends AbstractPlayerActor { @Override public int getItemInHand() { ItemStack is = this.player.getCurrentEquippedItem(); - return is == null ? 0 : is.itemID; + return is == null ? 0 : Item.getIdFromItem(is.getItem()); } @Override public String getName() { - return this.player.username; + return this.player.getCommandSenderName(); } @Override @@ -99,7 +102,7 @@ public class ForgePlayer extends AbstractPlayerActor { @Override public void giveItem(int type, int amt) { - this.player.inventory.addItemStackToInventory(new ItemStack(type, amt, 0)); + this.player.inventory.addItemStackToInventory(new ItemStack(Item.getItemById(type), amt, 0)); } @Override @@ -109,35 +112,35 @@ public class ForgePlayer extends AbstractPlayerActor { if (params.length > 0) { send = send + "|" + StringUtil.joinString(params, "|"); } - Packet250CustomPayload packet = new Packet250CustomPayload(ForgeWorldEdit.CUI_PLUGIN_CHANNEL, send.getBytes(WECUIPacketHandler.UTF_8_CHARSET)); - this.player.playerNetServerHandler.sendPacketToPlayer(packet); + S3FPacketCustomPayload packet = new S3FPacketCustomPayload(ForgeWorldEdit.CUI_PLUGIN_CHANNEL, send.getBytes(WECUIPacketHandler.UTF_8_CHARSET)); + this.player.playerNetServerHandler.sendPacket(packet); } @Override public void printRaw(String msg) { for (String part : msg.split("\n")) { - this.player.sendChatToPlayer(ChatMessageComponent.createFromText(part)); + this.player.addChatMessage(new ChatComponentText(part)); } } @Override public void printDebug(String msg) { for (String part : msg.split("\n")) { - this.player.sendChatToPlayer(ChatMessageComponent.createFromText("\u00a77" + part)); + this.player.addChatMessage(new ChatComponentText("\u00a77" + part)); } } @Override public void print(String msg) { for (String part : msg.split("\n")) { - this.player.sendChatToPlayer(ChatMessageComponent.createFromText("\u00a7d" + part)); + this.player.addChatMessage(new ChatComponentText("\u00a7d" + part)); } } @Override public void printError(String msg) { for (String part : msg.split("\n")) { - this.player.sendChatToPlayer(ChatMessageComponent.createFromText("\u00a7c" + part)); + this.player.addChatMessage(new ChatComponentText("\u00a7c" + part)); } } @@ -169,7 +172,7 @@ public class ForgePlayer extends AbstractPlayerActor { @Override public SessionKey getSessionKey() { - return new SessionKeyImpl(player.getUniqueID(), player.username); + return new SessionKeyImpl(player.getUniqueID(), player.getCommandSenderName()); } private static class SessionKeyImpl implements SessionKey { diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeUtil.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeUtil.java index c04355281..dd5f3826e 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeUtil.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeUtil.java @@ -22,6 +22,7 @@ package com.sk89q.worldedit.forge; import com.sk89q.worldedit.blocks.BaseItemStack; import cpw.mods.fml.common.FMLCommonHandler; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.Map; @@ -33,11 +34,11 @@ public final class ForgeUtil { public static boolean hasPermission(EntityPlayerMP player, String perm) { // TODO fix WEPIF - return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().isPlayerOpped(player.username); + return FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().func_152596_g(player.getGameProfile()); } public static ItemStack toForgeItemStack(BaseItemStack item) { - ItemStack ret = new ItemStack(item.getType(), item.getAmount(), item.getData()); + ItemStack ret = new ItemStack(Item.getItemById(item.getType()), item.getAmount(), item.getData()); for (Map.Entry entry : item.getEnchantments().entrySet()) { ret.addEnchantment(net.minecraft.enchantment.Enchantment.enchantmentsList[((Integer) entry.getKey())], (Integer) entry.getValue()); } diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java index bc5752f45..157b44954 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorld.java @@ -129,10 +129,10 @@ public class ForgeWorld extends AbstractWorld { int previousId = 0; if (notifyAndLight) { - previousId = chunk.getBlockID(x & 15, y, z & 15); + previousId = Block.getIdFromBlock(chunk.getBlock(x & 15, y, z & 15)); } - boolean successful = chunk.setBlockIDWithMetadata(x & 15, y, z & 15, block.getId(), block.getData()); + boolean successful = chunk.func_150807_a(x & 15, y, z & 15, Block.getBlockById(block.getId()), block.getData()); // Create the TileEntity if (successful) { @@ -145,13 +145,13 @@ public class ForgeWorld extends AbstractWorld { } if (notifyAndLight) { - world.updateAllLightTypes(x, y, z); + world.func_147451_t(x, y, z); world.markBlockForUpdate(x, y, z); - world.notifyBlockChange(x, y, z, previousId); + world.notifyBlockChange(x, y, z, Block.getBlockById(previousId)); - Block mcBlock = Block.blocksList[block.getId()]; + Block mcBlock = Block.getBlockById(previousId); if (mcBlock != null && mcBlock.hasComparatorInputOverride()) { - world.func_96440_m(x, y, z, block.getId()); + world.func_147453_f(x, y, z, Block.getBlockById(block.getId())); } } @@ -167,7 +167,7 @@ public class ForgeWorld extends AbstractWorld { @Override public boolean clearContainerBlockContents(Vector position) { checkNotNull(position); - TileEntity tile = getWorld().getBlockTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ()); + TileEntity tile = getWorld().getTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ()); if ((tile instanceof IInventory)) { IInventory inv = (IInventory) tile; int size = inv.getSizeInventory(); @@ -322,15 +322,15 @@ public class ForgeWorld extends AbstractWorld { @Override public boolean isValidBlockType(int id) { - return (id == 0) || (net.minecraft.block.Block.blocksList[id] != null); + return (id == 0) || (net.minecraft.block.Block.getBlockById(id) != null); } @Override public BaseBlock getBlock(Vector position) { World world = getWorld(); - int id = world.getBlockId(position.getBlockX(), position.getBlockY(), position.getBlockZ()); + int id = Block.getIdFromBlock(world.getBlock(position.getBlockX(), position.getBlockY(), position.getBlockZ())); int data = world.getBlockMetadata(position.getBlockX(), position.getBlockY(), position.getBlockZ()); - TileEntity tile = getWorld().getBlockTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ()); + TileEntity tile = getWorld().getTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ()); if (tile != null) { return new TileEntityBaseBlock(id, data, tile); @@ -342,7 +342,7 @@ public class ForgeWorld extends AbstractWorld { @Override public BaseBlock getLazyBlock(Vector position) { World world = getWorld(); - int id = world.getBlockId(position.getBlockX(), position.getBlockY(), position.getBlockZ()); + int id = Block.getIdFromBlock(world.getBlock(position.getBlockX(), position.getBlockY(), position.getBlockZ())); int data = world.getBlockMetadata(position.getBlockX(), position.getBlockY(), position.getBlockZ()); return new LazyBlock(id, data, this, position); } diff --git a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java index 3ec56713f..76a3ec8b8 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ForgeWorldEdit.java @@ -28,7 +28,8 @@ import com.sk89q.worldedit.WorldVector; import com.sk89q.worldedit.event.platform.PlatformReadyEvent; import com.sk89q.worldedit.extension.platform.Platform; import com.sk89q.worldedit.internal.LocalWorldAdapter; -import cpw.mods.fml.common.FMLLog; + +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; @@ -38,15 +39,12 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; import cpw.mods.fml.common.event.FMLServerStartedEvent; import cpw.mods.fml.common.event.FMLServerStoppingEvent; -import cpw.mods.fml.common.network.NetworkMod; -import cpw.mods.fml.common.registry.TickRegistry; -import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.common.eventhandler.Event.Result; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.CommandEvent; -import net.minecraftforge.event.Event.Result; -import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.player.PlayerInteractEvent; import javax.annotation.Nullable; @@ -54,8 +52,8 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.logging.Level; -import java.util.logging.Logger; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; import static com.google.common.base.Preconditions.checkNotNull; import static net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; @@ -64,10 +62,9 @@ import static net.minecraftforge.event.entity.player.PlayerInteractEvent.Action; * The Forge implementation of WorldEdit. */ @Mod(modid = "WorldEdit", name = "WorldEdit", version = "%VERSION%") -@NetworkMod(channels="WECUI", packetHandler=WECUIPacketHandler.class) public class ForgeWorldEdit { - private static final Logger logger = Logger.getLogger(ForgeWorldEdit.class.getCanonicalName()); + public static Logger logger; public static final String CUI_PLUGIN_CHANNEL = "WECUI"; @Instance("WorldEdit") @@ -79,9 +76,7 @@ public class ForgeWorldEdit { @EventHandler public void preInit(FMLPreInitializationEvent event) { - // Redirect all loggers under com.sk89q to FML's logger - Logger.getLogger("com.sk89q").setParent(FMLLog.getLogger()); - + logger = event.getModLog(); // Setup working directory workingDir = new File(event.getModConfigurationDirectory() + File.separator + "worldedit"); workingDir.mkdir(); @@ -92,7 +87,7 @@ public class ForgeWorldEdit { config = new ForgeConfiguration(this); config.load(); - TickRegistry.registerTickHandler(ThreadSafeCache.getInstance(), Side.SERVER); + FMLCommonHandler.instance().bus().register(ThreadSafeCache.getInstance()); } @EventHandler @@ -108,7 +103,7 @@ public class ForgeWorldEdit { @EventHandler public void serverAboutToStart(FMLServerAboutToStartEvent event) { if (this.platform != null) { - logger.warning("FMLServerStartingEvent occurred when FMLServerStoppingEvent hasn't"); + logger.warn("FMLServerStartingEvent occurred when FMLServerStoppingEvent hasn't"); WorldEdit.getInstance().getPlatformManager().unregister(platform); } @@ -129,7 +124,7 @@ public class ForgeWorldEdit { WorldEdit.getInstance().getEventBus().post(new PlatformReadyEvent()); } - @ForgeSubscribe + @SubscribeEvent public void onCommandEvent(CommandEvent event) { if ((event.sender instanceof EntityPlayerMP)) { if (((EntityPlayerMP) event.sender).worldObj.isRemote) return; @@ -142,7 +137,7 @@ public class ForgeWorldEdit { } } - @ForgeSubscribe + @SubscribeEvent public void onPlayerInteract(PlayerInteractEvent event) { if (platform == null) { return; @@ -278,7 +273,7 @@ public class ForgeWorldEdit { ByteStreams.copy(inputStream, outputStream); logger.info("Default configuration file written: " + name); } catch (IOException e) { - logger.log(Level.WARNING, "Failed to extract defaults", e); + logger.log(Level.WARN, "Failed to extract defaults", e); } finally { try { closer.close(); diff --git a/src/forge/java/com/sk89q/worldedit/forge/NBTConverter.java b/src/forge/java/com/sk89q/worldedit/forge/NBTConverter.java index db6600b53..a6298c590 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/NBTConverter.java +++ b/src/forge/java/com/sk89q/worldedit/forge/NBTConverter.java @@ -76,11 +76,11 @@ final class NBTConverter { public static NBTTagIntArray toNative(IntArrayTag tag) { int[] value = tag.getValue(); - return new NBTTagIntArray(tag.getName(), Arrays.copyOf(value, value.length)); + return new NBTTagIntArray(Arrays.copyOf(value, value.length)); } public static NBTTagList toNative(ListTag tag) { - NBTTagList list = new NBTTagList(tag.getName()); + NBTTagList list = new NBTTagList(); for (Tag child : tag.getValue()) { if (child instanceof EndTag) { continue; @@ -95,28 +95,28 @@ final class NBTConverter { } public static NBTTagLong toNative(LongTag tag) { - return new NBTTagLong(tag.getName(), tag.getValue()); + return new NBTTagLong(tag.getValue()); } public static NBTTagString toNative(StringTag tag) { - return new NBTTagString(tag.getName(), tag.getValue()); + return new NBTTagString(tag.getValue()); } public static NBTTagInt toNative(IntTag tag) { - return new NBTTagInt(tag.getName(), tag.getValue()); + return new NBTTagInt(tag.getValue()); } public static NBTTagByte toNative(ByteTag tag) { - return new NBTTagByte(tag.getName(), tag.getValue()); + return new NBTTagByte(tag.getValue()); } public static NBTTagByteArray toNative(ByteArrayTag tag) { byte[] value = tag.getValue(); - return new NBTTagByteArray(tag.getName(), Arrays.copyOf(value, value.length)); + return new NBTTagByteArray(Arrays.copyOf(value, value.length)); } public static NBTTagCompound toNative(CompoundTag tag) { - NBTTagCompound compound = new NBTTagCompound(tag.getName()); + NBTTagCompound compound = new NBTTagCompound(); for (Entry child : tag.getValue().entrySet()) { compound.setTag(child.getKey(), toNative(child.getValue())); } @@ -124,15 +124,15 @@ final class NBTConverter { } public static NBTTagFloat toNative(FloatTag tag) { - return new NBTTagFloat(tag.getName(), tag.getValue()); + return new NBTTagFloat(tag.getValue()); } public static NBTTagShort toNative(ShortTag tag) { - return new NBTTagShort(tag.getName(), tag.getValue()); + return new NBTTagShort(tag.getValue()); } public static NBTTagDouble toNative(DoubleTag tag) { - return new NBTTagDouble(tag.getName(), tag.getValue()); + return new NBTTagDouble(tag.getValue()); } public static Tag fromNative(NBTBase other) { @@ -177,22 +177,20 @@ final class NBTConverter { } public static IntArrayTag fromNative(NBTTagIntArray other) { - int[] value = other.intArray; - return new IntArrayTag(other.getName(), Arrays.copyOf(value, value.length)); + int[] value = other.func_150302_c(); + return new IntArrayTag(Arrays.copyOf(value, value.length)); } public static ListTag fromNative(NBTTagList other) { + other = (NBTTagList) other.copy(); List list = new ArrayList(); Class listClass = StringTag.class; for (int i = 0; i < other.tagCount(); i++) { - if (other.tagAt(i) instanceof NBTTagEnd) { - continue; - } - Tag child = fromNative(other.tagAt(i)); + Tag child = fromNative(other.removeTag(0)); list.add(child); listClass = child.getClass(); } - return new ListTag(other.getName(), listClass, list); + return new ListTag(listClass, list); } public static EndTag fromNative(NBTTagEnd other) { @@ -200,45 +198,45 @@ final class NBTConverter { } public static LongTag fromNative(NBTTagLong other) { - return new LongTag(other.getName(), other.data); + return new LongTag(other.func_150291_c()); } public static StringTag fromNative(NBTTagString other) { - return new StringTag(other.getName(), other.data); + return new StringTag(other.func_150285_a_()); } public static IntTag fromNative(NBTTagInt other) { - return new IntTag(other.getName(), other.data); + return new IntTag(other.func_150287_d()); } public static ByteTag fromNative(NBTTagByte other) { - return new ByteTag(other.getName(), other.data); + return new ByteTag(other.func_150290_f()); } public static ByteArrayTag fromNative(NBTTagByteArray other) { - byte[] value = other.byteArray; - return new ByteArrayTag(other.getName(), Arrays.copyOf(value, value.length)); + byte[] value = other.func_150292_c(); + return new ByteArrayTag(Arrays.copyOf(value, value.length)); } public static CompoundTag fromNative(NBTTagCompound other) { - @SuppressWarnings("unchecked") Collection tags = other.getTags(); + @SuppressWarnings("unchecked") Collection tags = other.func_150296_c(); Map map = new HashMap(); - for (NBTBase tag : tags) { - map.put(tag.getName(), fromNative(tag)); + for (String tagName : tags) { + map.put(tagName, fromNative(other.getTag(tagName))); } - return new CompoundTag(other.getName(), map); + return new CompoundTag(map); } public static FloatTag fromNative(NBTTagFloat other) { - return new FloatTag(other.getName(), other.data); + return new FloatTag(other.func_150288_h()); } public static ShortTag fromNative(NBTTagShort other) { - return new ShortTag(other.getName(), other.data); + return new ShortTag(other.func_150289_e()); } public static DoubleTag fromNative(NBTTagDouble other) { - return new DoubleTag(other.getName(), other.data); + return new DoubleTag(other.func_150286_g()); } } diff --git a/src/forge/java/com/sk89q/worldedit/forge/ThreadSafeCache.java b/src/forge/java/com/sk89q/worldedit/forge/ThreadSafeCache.java index c10ef5f1b..1322f0713 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/ThreadSafeCache.java +++ b/src/forge/java/com/sk89q/worldedit/forge/ThreadSafeCache.java @@ -20,12 +20,11 @@ package com.sk89q.worldedit.forge; import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.ITickHandler; -import cpw.mods.fml.common.TickType; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; import net.minecraft.entity.player.EntityPlayerMP; import java.util.Collections; -import java.util.EnumSet; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -34,7 +33,7 @@ import java.util.concurrent.CopyOnWriteArraySet; /** * Caches data that cannot be accessed from another thread safely. */ -class ThreadSafeCache implements ITickHandler { +public class ThreadSafeCache { private static final long REFRESH_DELAY = 1000 * 30; private static final ThreadSafeCache INSTANCE = new ThreadSafeCache(); @@ -50,13 +49,16 @@ class ThreadSafeCache implements ITickHandler { return onlineIds; } - @Override - public void tickStart(EnumSet type, Object... tickData) { + @SubscribeEvent + public void tickStart(TickEvent event) { long now = System.currentTimeMillis(); if (now - lastRefresh > REFRESH_DELAY) { Set onlineIds = new HashSet(); + if (FMLCommonHandler.instance().getMinecraftServerInstance() == null) { + return; + } for (Object object : FMLCommonHandler.instance().getMinecraftServerInstance().getConfigurationManager().playerEntityList) { if (object != null) { EntityPlayerMP player = (EntityPlayerMP) object; @@ -70,20 +72,6 @@ class ThreadSafeCache implements ITickHandler { } } - @Override - public void tickEnd(EnumSet type, Object... tickData) { - } - - @Override - public EnumSet ticks() { - return EnumSet.of(TickType.SERVER); - } - - @Override - public String getLabel() { - return "WorldEdit Cache"; - } - public static ThreadSafeCache getInstance() { return INSTANCE; } diff --git a/src/forge/java/com/sk89q/worldedit/forge/TileEntityUtils.java b/src/forge/java/com/sk89q/worldedit/forge/TileEntityUtils.java index d0e40c1ba..fd8d6e5fe 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/TileEntityUtils.java +++ b/src/forge/java/com/sk89q/worldedit/forge/TileEntityUtils.java @@ -49,9 +49,9 @@ final class TileEntityUtils { checkNotNull(tag); checkNotNull(position); - tag.setTag("x", new NBTTagInt("x", position.getBlockX())); - tag.setTag("y", new NBTTagInt("y", position.getBlockY())); - tag.setTag("z", new NBTTagInt("z", position.getBlockZ())); + tag.setTag("x", new NBTTagInt(position.getBlockX())); + tag.setTag("y", new NBTTagInt(position.getBlockY())); + tag.setTag("z", new NBTTagInt(position.getBlockZ())); return tag; } @@ -81,7 +81,7 @@ final class TileEntityUtils { tileEntity.readFromNBT(tag); } - world.setBlockTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ(), tileEntity); + world.setTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ(), tileEntity); } /** @@ -97,7 +97,7 @@ final class TileEntityUtils { updateForSet(tag, position); TileEntity tileEntity = TileEntity.createAndLoadEntity(tag); if (tileEntity != null) { - world.setBlockTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ(), tileEntity); + world.setTileEntity(position.getBlockX(), position.getBlockY(), position.getBlockZ(), tileEntity); } } } diff --git a/src/forge/java/com/sk89q/worldedit/forge/WECUIPacketHandler.java b/src/forge/java/com/sk89q/worldedit/forge/WECUIPacketHandler.java index 1fe5d1f33..03cf3ab0c 100644 --- a/src/forge/java/com/sk89q/worldedit/forge/WECUIPacketHandler.java +++ b/src/forge/java/com/sk89q/worldedit/forge/WECUIPacketHandler.java @@ -22,28 +22,42 @@ package com.sk89q.worldedit.forge; import java.nio.charset.Charset; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.INetworkManager; -import net.minecraft.network.packet.Packet250CustomPayload; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.network.play.client.C17PacketCustomPayload; import com.sk89q.worldedit.LocalSession; -import cpw.mods.fml.common.network.IPacketHandler; -import cpw.mods.fml.common.network.Player; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.network.FMLEventChannel; +import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent; +import cpw.mods.fml.common.network.NetworkRegistry; -public class WECUIPacketHandler implements IPacketHandler { +public class WECUIPacketHandler { public static final Charset UTF_8_CHARSET = Charset.forName("UTF-8"); + private static FMLEventChannel WECUI_CHANNEL; + + public static void init() { + WECUI_CHANNEL = NetworkRegistry.INSTANCE.newEventDrivenChannel(ForgeWorldEdit.CUI_PLUGIN_CHANNEL); + WECUI_CHANNEL.register(new WECUIPacketHandler()); + } - @Override - public void onPacketData(INetworkManager manager, Packet250CustomPayload packet, Player player) { - if (player instanceof EntityPlayerMP) { + @SubscribeEvent + public void onPacketData(ServerCustomPacketEvent event) { + C17PacketCustomPayload rawPacket = (C17PacketCustomPayload) event.packet.toC17Packet(); + if (event.packet.channel().equals(ForgeWorldEdit.CUI_PLUGIN_CHANNEL)) { + EntityPlayerMP player = getPlayerFromEvent(event); LocalSession session = ForgeWorldEdit.inst.getSession((EntityPlayerMP) player); if (session.hasCUISupport()) { return; } - String text = new String(packet.data, UTF_8_CHARSET); + String text = new String(rawPacket.func_149558_e(), UTF_8_CHARSET); session.handleCUIInitializationMessage(text); } } + + private static EntityPlayerMP getPlayerFromEvent(ServerCustomPacketEvent event) { + return ((NetHandlerPlayServer) event.handler).playerEntity; + } } \ No newline at end of file diff --git a/src/forge/resources/mcmod.info b/src/forge/resources/mcmod.info index 3f1d0b24c..50d9fca29 100644 --- a/src/forge/resources/mcmod.info +++ b/src/forge/resources/mcmod.info @@ -1,6 +1,4 @@ -{ - "modinfoversion": 2, - "modlist": [{ +[{ "modid": "WorldEdit", "name": "WorldEdit", "description": "WorldEdit is an easy-to-use in-game world editor for Minecraft, supporting both single player and multiplayer.", @@ -19,5 +17,4 @@ "Forge@[${forgeVersion},)" ], "dependants": [] - }] -} +}] diff --git a/src/main/build/import-control.xml b/src/main/build/import-control.xml index 0df088c20..849e92189 100644 --- a/src/main/build/import-control.xml +++ b/src/main/build/import-control.xml @@ -51,6 +51,7 @@ + \ No newline at end of file