@Override public IMessage onMessage(final PacketClassGui message, final MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayer player = Minecraft.getMinecraft().player; PlayerInformation playerInfo = (PlayerInformation) player.getCapability(CapabilityPlayerInformation.PLAYER_INFORMATION, null); if (playerInfo != null && playerInfo.getPlayerClass() == 0) { player.openGui(LootSlashConquer.instance, GuiHandler.CLASS_SELECTION, player.getEntityWorld(), player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ()); } } }); return null; }
@Override public IMessage onMessage(final PacketUpdateChunkLevel message, final MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { World world = Minecraft.getMinecraft().world; ChunkPos chunkPos = new ChunkPos(message.chunkX, message.chunkZ); IChunkLevelHolder chunkLevelHolder = CapabilityChunkLevel.getChunkLevelHolder(world); if (chunkLevelHolder.getChunkLevel(chunkPos) != null) return; IChunkLevel chunkLevel = new ChunkLevel(world, chunkPos, message.level); chunkLevelHolder.setChunkLevel(chunkPos, chunkLevel); } }); return null; }
@Override public IMessage onMessage(final ConfigSyncMessage message, MessageContext ctx) { IThreadListener threadListener = this.getThreadListener(ctx); threadListener.addScheduledTask(new Runnable() { @Override public void run() { ModConfiguration.enableInventoryGui = message.enableInventoryGui; ModConfiguration.enableDeathDrops = message.enableDeathDrops; ModConfiguration.requireEmptyHand = message.requireEmptyHand; } }); return null; }
/** IMPORTANT: Call this from the onMessage method in the subclass. */ public IMessage processMessage(final ObservationRequestMessage message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer)ctx.getServerHandler().playerEntity.worldObj; mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayerMP player = ctx.getServerHandler().playerEntity; JsonObject json = new JsonObject(); buildJson(json, player, message, ctx); // Send this message back again now we've filled in the json stats. Map<String, String> returnData = new HashMap<String, String>(); returnData.put("json", json.toString()); message.addReturnData(returnData); MalmoMod.network.sendTo(new MalmoMod.MalmoMessage(MalmoMessageType.SERVER_OBSERVATIONSREADY, message.id, returnData), player); } }); return null; // no response in this case }
@Override protected void channelRead0(ChannelHandlerContext ctx, final OpenGui msg) throws Exception { IThreadListener thread = FMLCommonHandler.instance().getWorldThread(ctx.channel().attr(NetworkRegistry.NET_HANDLER).get()); if (thread.isCallingFromMinecraftThread()) { process(msg); } else { thread.addScheduledTask(new Runnable() { public void run() { OpenGuiHandler.this.process(msg); } }); } }
@Override protected void channelRead0(ChannelHandlerContext ctx, final EntityMessage msg) throws Exception { IThreadListener thread = FMLCommonHandler.instance().getWorldThread(ctx.channel().attr(NetworkRegistry.NET_HANDLER).get()); if (thread.isCallingFromMinecraftThread()) { process(msg); } else { thread.addScheduledTask(new Runnable() { public void run() { EntitySpawnHandler.this.process(msg); } }); } }
@Override public IMessage onMessage(final MessageLegalMovesResponse message, MessageContext ctx) { if (message.legalPositions == null || message.controlBlockPos == null) { return null; } IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { CheckerBoardOverlay.INSTANCE.setValidMoves(message.legalPositions); } }); return null; }
@Override public IMessage onMessage(final MessageUpdateControlBlock message, MessageContext ctx) { if (message.controlBlockPos == null) { return null; } final IThreadListener mainThread = Minecraft.getMinecraft(); final EntityPlayerSP player = Minecraft.getMinecraft().player; mainThread.addScheduledTask(new Runnable() { @Override public void run() { TileEntityChessControl control = ItemChessControlWand.getChessControlAt(player.world, message.controlBlockPos); if (control == null) { System.out.println("control block not found"); return; } control.readFromNBT(message.data); } }); return null; }
public static void reloadResources(@Nonnull final Side side) { // Reload can be called on either side so make sure we queue // up a scheduled task appropriately. if (managers.hasValue(side)) { final IThreadListener tl = side == Side.SERVER ? FMLCommonHandler.instance().getMinecraftServerInstance() : Minecraft.getMinecraft(); if (tl == null) managers.clear(side); else tl.addScheduledTask(new Runnable() { public void run() { managers.get().reload(); } }); } }
@Override public InventoryChangeMessage onMessage(final InventoryMessage message, MessageContext ctx) { final EntityPlayerMP player = ctx.getServerHandler().playerEntity; IThreadListener mainThread = (WorldServer)ctx.getServerHandler().playerEntity.world; mainThread.addScheduledTask(new Runnable() { @Override public void run() { ItemStack[] changes = null; if (message.combine) changes = combineSlots(player, message.invA, message.slotA, message.invB, message.slotB, message.containerPos); else changes = swapSlots(player, message.invA, message.slotA, message.invB, message.slotB, message.containerPos); if (changes != null) MalmoMod.network.sendTo(new InventoryChangeMessage(changes[0], changes[1]), player); } }); return null; }
/** IMPORTANT: Call this from the onMessage method in the subclass. */ public IMessage processMessage(ObservationRequestMessage message, MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.world; final EntityPlayerMP player = ctx.getServerHandler().playerEntity; final ObservationRequestMessage mess = message; mainThread.addScheduledTask(new Runnable() { @Override public void run() { JsonObject json = new JsonObject(); buildJson(json, player, mess); // Send this message back again now we've filled in the json stats. Map<String, String> returnData = new HashMap<String, String>(); returnData.put("json", json.toString()); mess.addReturnData(returnData); MalmoMod.network.sendTo(new MalmoMod.MalmoMessage(MalmoMessageType.SERVER_OBSERVATIONSREADY, mess.id, returnData), player); } }); return null; // no response in this case }
@Override public IMessage onMessage(final RecipeNavigationMessage message, MessageContext ctx) { final EntityPlayerMP player = ctx.getServerHandler().player; IThreadListener threadListener = (WorldServer)player.world; threadListener.addScheduledTask(new Runnable() { @Override public void run() { Container container = player.openContainer; if (container instanceof ContainerUncraftingTable) { ContainerUncraftingTable uncraftingContainer = (ContainerUncraftingTable)container; uncraftingContainer.uncraftingResult.selectedCraftingGrid = message.recipeIndex; uncraftingContainer.switchRecipe(); } } }); return null; }
@Override public IMessage onMessage(final ConfigSyncMessage message, MessageContext ctx) { IThreadListener threadListener = getThreadListener(ctx); threadListener.addScheduledTask(new Runnable() { @Override public void run() { ModConfiguration.maxUsedLevel = message.maxUsedLevel; ModConfiguration.standardLevel = message.standardLevel; ModConfiguration.enchantmentCost = message.enchantmentCost; ModConfiguration.uncraftMethod = message.uncraftMethod; ModConfiguration.excludedItems = message.excludedItems; ModConfiguration.useNuggets = message.useNuggets; ModConfiguration.registerNuggets = message.registerNuggets; ModConfiguration.useRabbitHide = message.useRabbitHide; ModConfiguration.ensureReturn = message.ensureReturn; } }); return null; }
@Override public IMessage onMessage(final StructureTagMessage message, final MessageContext ctx) { // Or Minecraft.getMinecraft() on the client. IThreadListener mainThread = (WorldServer) ctx.getServerHandler().player.world; mainThread.addScheduledTask(new Runnable() { @Override public void run() { // This is server side. Build the structure. EnumStructureConfiguration structureConfig = message.getStructureConfig(); StructureConfiguration configuration = structureConfig.structureConfig.ReadFromNBTTagCompound(message.getMessageTag()); configuration.BuildStructure(ctx.getServerHandler().player, ctx.getServerHandler().player.world); } }); // no response in this case return null; }
@Override public IMessage onMessage(final PlayerEntityTagMessage message, final MessageContext ctx) { // Or Minecraft.getMinecraft() on the client. IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { // This is client side. NBTTagCompound newPlayerTag = Minecraft.getMinecraft().player.getEntityData(); newPlayerTag.setTag(EntityPlayerConfiguration.PLAYER_ENTITY_TAG, message.getMessageTag()); ClientEventHandler.playerConfig.loadFromNBTTagCompound(message.getMessageTag()); } }); // no response in this case return null; }
@Override public IMessage onMessage(final MessageCapability message, MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { Minecraft mc = Minecraft.getMinecraft(); EntityPlayerSP player = mc.player; Object capability = player.getCapability(message.capabilityType.getCapability(), null); if(capability != null && capability instanceof INBTSerializable) ((INBTSerializable) capability).deserializeNBT(message.capabilityNBT); //Refresh GuiQuest if open if(message.capabilityType == EnumCapability.QUEST && mc.currentScreen != null && mc.currentScreen instanceof GuiQuest) ((GuiQuest) mc.currentScreen).updateQuest(null); //Refresh GuiQuestList if open if(mc.currentScreen != null && mc.currentScreen instanceof GuiQuestList) ((GuiQuestList) mc.currentScreen).refreshButtons(); } }); return null; }
@Override public IMessage onMessage(final PacketMana message, MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayer entity = Minecraft.getMinecraft().player; if (entity instanceof EntityPlayer) { final IMana mana = CapabilityMana.getMana(entity); LostEclipse.LOGGER.info("Sending mana over to client: " + message.mana); mana.setMana(message.mana); } } }); return null; }
@Override public IMessage onMessage(final PacketMaxMana message, MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayer entity = Minecraft.getMinecraft().player; if (entity instanceof EntityPlayer) { final IMaxMana mana = CapabilityMaxMana.getMaxMana(entity); mana.setMaxMana(message.mana); } } }); return null; }
@Override public IMessage onMessage(final EntityTileEntityUpdateMessage message, final MessageContext ctx) { IThreadListener mainThread = MoarCarts.proxy.getIThreadListener(ctx); mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityMinecartTEBase minecartTEBase = message.getEntityMinecartTEBaseFromMessage(ctx); if(minecartTEBase != null) { minecartTEBase.getTileEntity().readFromNBT(message.nbtTagCompound); } } }); return null; }
@Override public IMessage onMessage(final CAnvilStrikePacket message, MessageContext ctx) { IThreadListener mainThread = net.minecraft.client.Minecraft.getMinecraft(); //(WorldServer) ctx.getServerHandler().playerentityIn.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { TileEntity te = net.minecraft.client.Minecraft.getMinecraft().world.getTileEntity(message.pos); if(te != null) { TileAnvil anvil = (TileAnvil)te; anvil.setStrikePoint(message.strikeIndex, message.strikePoint); } } }); return null; // no response in this case }
@Override public IMessage onMessage(final CFoodPacket message, MessageContext ctx) { IThreadListener mainThread = net.minecraft.client.Minecraft.getMinecraft(); //(WorldServer) ctx.getServerHandler().playerentityIn.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { IFoodStatsTFC stats = (IFoodStatsTFC)net.minecraft.client.Minecraft.getMinecraft().player.getFoodStats(); stats.getNutritionMap().put(EnumFoodGroup.Fruit, message.nutritionFruit); stats.getNutritionMap().put(EnumFoodGroup.Vegetable, message.nutritionVeg); stats.getNutritionMap().put(EnumFoodGroup.Grain, message.nutritionGrain); stats.getNutritionMap().put(EnumFoodGroup.Protein, message.nutritionProtein); stats.getNutritionMap().put(EnumFoodGroup.Dairy, message.nutritionDairy); stats.setWaterLevel(message.waterLevel); } }); return null; // no response in this case }
@Override public IMessage onMessage(final CMapPacket message, MessageContext ctx) { IThreadListener mainThread = net.minecraft.client.Minecraft.getMinecraft(); //(WorldServer) ctx.getServerHandler().playerentityIn.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { if(WorldGen.getInstance().worldSeed == Long.MIN_VALUE) { WorldGen.getInstance().worldSeed = message.seed - Helper.combineCoords(message.islandX, message.islandZ); ClientRenderHandler.IsGeneratingFirstIsland = true; } //WorldGen.getInstance().createIsland(message.islandX, message.islandZ, message.seed, true); WorldGen.getInstance().forceBuildIsland(message.islandX, message.islandZ, message.seed); } }); return null; // no response in this case }
@Override public IMessage onMessage(final SMapRequestPacket message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().player.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { int j; IslandMap map = WorldGen.getInstance().getIslandMap(message.islandX, message.islandZ); long seed = ctx.getServerHandler().player.world.getSeed()+Helper.combineCoords(message.islandX, message.islandZ); TFC.network.sendTo(new CMapPacket(message.islandX, message.islandZ, seed), ctx.getServerHandler().player); } }); return null; // no response in this case }
@Override public IMessage onMessage(final SKnappingPacket message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().player.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { PlayerInfo pi = PlayerManagerTFC.getInstance().getPlayerInfoFromUUID(ctx.getServerHandler().player.getUniqueID()); pi.knappingInterface[message.id] = true; if(ctx.getServerHandler().player.openContainer != null && ctx.getServerHandler().player.openContainer instanceof ContainerSpecialCrafting) { if(pi.specialCraftingTypeAlternate == null) ((ContainerSpecialCrafting)ctx.getServerHandler().player.openContainer).craftMatrix.setInventorySlotContents(message.id, ItemStack.EMPTY); else ((ContainerSpecialCrafting)ctx.getServerHandler().player.openContainer).craftMatrix.setInventorySlotContents(message.id, pi.specialCraftingTypeAlternate); } } }); return null; // no response in this case }
@Override public IMessage onMessage(final SAnvilCraftingPacket message, final MessageContext ctx) { final IThreadListener mainThread = (WorldServer) ctx.getServerHandler().player.world; // or Minecraft.getMinecraft() on the client mainThread.addScheduledTask(new Runnable() { @Override public void run() { TileEntity te = ((WorldServer)mainThread).getTileEntity(message.pos); if(te != null && te instanceof TileAnvil) { ((TileAnvil)te).setAnvilRecipeIndex(message.recipe); if(message.startedCrafting) { ((TileAnvil)te).startCrafting(message.smithID); } } } }); return null; // no response in this case }
private static void checkThreadAndEnqueue(final PacketTileTextbox message, final MessageContext ctx) { //copied in from my PacketSyncPlayerData IThreadListener thread = ModCyclic.proxy.getThreadFromContext(ctx); // pretty much copied straight from vanilla code, see {@link PacketThreadUtil#checkThreadAndEnqueue} thread.addScheduledTask(new Runnable() { public void run() { EntityPlayerMP player = ctx.getServerHandler().player; World world = player.getEntityWorld(); TileEntity tile = world.getTileEntity(message.pos); if (tile != null && tile instanceof ITileTextbox) { //TODO: PacketTilePassword reusing this? ((ITileTextbox) tile).setText(message.text); tile.markDirty(); } } }); }
private void checkThreadAndEnqueue(final PacketSpellFromServer message, final MessageContext ctx) { IThreadListener thread = ModCyclic.proxy.getThreadFromContext(ctx); thread.addScheduledTask(new Runnable() { public void run() { if (ctx.side.isServer() && message != null && message.pos != null) { EntityPlayer p = ctx.getServerHandler().player; ISpell spell = SpellRegistry.getSpellFromID(message.spellID); if (spell != null && spell instanceof ISpellFromServer) { ((ISpellFromServer) spell).castFromServer(message.pos, message.posOffset, message.face, p); } else { ModCyclic.logger.error("WARNING: Message from server: spell not found" + message.spellID); } } } }); }
@Override public CustomCollisionPacket onMessage(final CustomCollisionPacket message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.worldObj; mainThread.addScheduledTask(new Runnable() { World world = ctx.getServerHandler().playerEntity.worldObj; Entity e = (Entity) world.getEntityByID(message.id); @Override public void run() { if (e != null) { e.motionY=message.newY; } else System.out.println("Is null"); } }); return null; }
@Override public MountVehicleMessage onMessage(final MountVehicleMessage message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.worldObj; mainThread.addScheduledTask(new Runnable() { EntityPlayer player = ctx.getServerHandler().playerEntity; World world = ctx.getServerHandler().playerEntity.worldObj; Entity v = world.getEntityByID(message.vehicleId); @Override public void run() { if (v != null) { v.interactFirst(player); } } }); return null; }
@Override public ControlableInputPacket onMessage(final ControlableInputPacket message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.worldObj; mainThread.addScheduledTask(new Runnable() { World world = ctx.getServerHandler().playerEntity.worldObj; @Override public void run() { if(world.isRemote){ message.handleServerSide(ctx.getServerHandler().playerEntity); } } }); return null; }
@Override public SetPropertiesPackage onMessage(final SetPropertiesPackage message, final MessageContext ctx) { IThreadListener mainThread = (WorldServer) ctx.getServerHandler().playerEntity.worldObj; mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayerMP player = ctx.getServerHandler().playerEntity; RLMPlayerProps.get(player).name = message.name; RLMPlayerProps.get(player).surname = message.surname; RLMPlayerProps.get(player).gender = EnumGender.valueOf(message.gender); RLMPlayerProps.get(player).profession = EnumJob.valueOf(message.profession); System.out.println(RLMPlayerProps.get(player).name + " " + RLMPlayerProps.get(player).surname + " " + String.valueOf(RLMPlayerProps.get(player).gender)); } }); return null; }
@Override public IMessage onMessage(final PacketMythicSound message, final MessageContext ctx) { IThreadListener mainThread = Minecraft.getMinecraft(); mainThread.addScheduledTask(new Runnable() { @Override public void run() { EntityPlayer player = Minecraft.getMinecraft().player; player.playSound(SoundEvents.ENTITY_ENDERDRAGON_DEATH, 1.0F, 1.0F); } }); return null; }
@Override public REQ onMessage(REQ aMessage, MessageContext aCtx) { final REQ message = aMessage; final MessageContext ctx = aCtx; if (ctx.side == Side.SERVER) { ((IThreadListener) ctx.getServerHandler().player.world).addScheduledTask(new Runnable() { @Override public void run() { handleServer(message, ctx.getServerHandler().player); } }); } else if (ctx.side == Side.CLIENT) { Minecraft.getMinecraft().addScheduledTask(new Runnable() { @Override public void run() { handleClient(message, Minecraft.getMinecraft().player); } }); } return null; }