Jump to content

deadrecon98

Forge Modder
  • Posts

    316
  • Joined

Everything posted by deadrecon98

  1. Ok, so i've set up the packet handler's but I cannot figure out how to get a message from the server to the client. Whenever I do it is trying to cast the Server message to the Client message which are apparently different? I honestly have no idea how packets work anymore, last time I used them was back in 1.5.2. I should also mention that is is being fired every time the player gains xp, a level, or the data is being loaded. This is just to make sure that the client recieves all of the data needed. The item code that sends the data @Override public void onCreated(ItemStack is, World world, EntityPlayer player){ super.onCreated(is, world, player); EntityPlayerExtended playerEXT = EntityPlayerExtended.get(player); if(!world.isRemote){ playerEXT.addMagicXP(this.xpGiven); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "+" + this.xpGiven + EnumChatFormatting.GOLD + " to Magic! Only " + playerEXT.getRemainingXpToLevel() + " to go!")); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Total XP: " + EnumChatFormatting.GOLD + playerEXT.getMagicXP())); } } My sync method to send the packet. (This is called inside of EntityPlayerExtended) public void sync(){ if(!this.player.worldObj.isRemote){ RunesOfAltura.network.sendTo(new ServerPacketManager(this.magicXP + ":" + this.magicLevel), (EntityPlayerMP)player); } } My packet manager code(It is relatively the same for both client and server with minor exceptions) package com.Cyphereion.RunesOfAltura.Manager; import io.netty.buffer.ByteBuf; import cpw.mods.fml.common.network.ByteBufUtils; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class ClientPacketManager implements IMessage { private String text; public ClientPacketManager() { } public ClientPacketManager(String text) { this.text = text; } @Override public void fromBytes(ByteBuf buf) { text = ByteBufUtils.readUTF8String(buf); } @Override public void toBytes(ByteBuf buf) { ByteBufUtils.writeUTF8String(buf, text); } public static class Handler implements IMessageHandler<ClientPacketManager, IMessage> { @Override public IMessage onMessage(ClientPacketManager message, MessageContext ctx){ System.out.println(String.format("Received %s from %s", message.text, ctx.getServerHandler().playerEntity.getDisplayName())); return null; } } } My registry for them network = NetworkRegistry.INSTANCE.newSimpleChannel(RunesOfAltura.MODID); network.registerMessage(ServerPacketManager.Handler.class, ServerPacketManager.class, 0, Side.SERVER); network.registerMessage(ClientPacketManager.Handler.class, ClientPacketManager.class, 0, Side.CLIENT);
  2. Ok, that was impressive. Someone managed to out-stupid diesieben07's patience. I don't know whether to be offended or appalled? Probably a bit of both.
  3. Its because they copied it from your tutorial. Copied, yet took the time to remove the comments which clearly say that it is not needed. I suppose that's what I get for expecting people to READ. Sorry, I literally just glanced at them.
  4. Umm I copied the code from somewhere else. that's why the second one was there. Here are my whatchamacallits: List<IRecipe> recipes = CraftingManager.getInstance().getRecipeList(); GameRegistry.addRecipe(new ItemStack(blankRune), "x", 'x', Items.diamond); IRecipe recipe = recipes.remove(recipes.size() - 1); GameRegistry.addRecipe(new CraftManager(recipe)); GameRegistry.addRecipe(new ItemStack(newRune), "xx", 'x', Items.diamond); IRecipe recipe1 = recipes.remove(recipes.size() - 1); GameRegistry.addRecipe(new CraftManager(recipe1));
  5. Perms? I don't know, i've never tried to make forge and bukkit work together. Im not talking about Perms. Im asking something about forge Can I hide a forge command from the /help. Im not talking about bukkit. Just about forge /help is also in non-bukkit things. /help is global... And vanilla minecraft has "perms". Look into the src code, like I said. I have never tried to bridge bukkit and forge.
  6. Ok, to your request I have completely changed my player data system but the same thing is happening. Here is some more source code. ItemRune.java package com.Cyphereion.RunesOfAltura.Object; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import com.Cyphereion.RunesOfAltura.Data.EntityPlayerExtended; public class ItemRune extends Item{ public int xpGiven, levelNeeded; public ItemRune(int xpGiven, int levelNeeded){ this.xpGiven = xpGiven; this.levelNeeded = levelNeeded; } @Override public void onCreated(ItemStack is, World world, EntityPlayer player){ super.onCreated(is, world, player); EntityPlayerExtended playerEXT = EntityPlayerExtended.get(player); if(!world.isRemote){ playerEXT.addMagicXP(this.xpGiven); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "+" + this.xpGiven + EnumChatFormatting.GOLD + " to Magic! Only " + playerEXT.getRemainingXpToLevel() + " to go!")); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN + "Total XP: " + EnumChatFormatting.GOLD + playerEXT.getMagicXP())); } } } EventManager.java package com.Cyphereion.RunesOfAltura.Manager; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.event.entity.EntityEvent.EntityConstructing; import com.Cyphereion.RunesOfAltura.Data.EntityPlayerExtended; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class EventManager { @SubscribeEvent public void onEntityConstructing(EntityConstructing event) { if (event.entity instanceof EntityPlayer && EntityPlayerExtended.get((EntityPlayer) event.entity) == null){ EntityPlayerExtended.register((EntityPlayer) event.entity); } if (event.entity instanceof EntityPlayer && event.entity.getExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME) == null){ event.entity.registerExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME, new EntityPlayerExtended((EntityPlayer) event.entity)); } } } EntityPlayerExtended.java package com.Cyphereion.RunesOfAltura.Data; import java.util.Random; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; import com.Cyphereion.RunesOfAltura.RunesOfAltura; public class EntityPlayerExtended implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "RoA"; private final EntityPlayer player; private int magicXP = 0, magicLevel = 0; static LogManager log = RunesOfAltura.instance.log; public EntityPlayerExtended(EntityPlayer player) { this.player = player; this.magicLevel = 0; this.magicXP = 0; } /** * Used to register these extended properties for the player during EntityConstructing event * This method is for convenience only; it will make your code look nicer */ public static final void register(EntityPlayer player) { player.registerExtendedProperties(EntityPlayerExtended.EXT_PROP_NAME, new EntityPlayerExtended(player)); } /** * Returns ExtendedPlayer properties for player * This method is for convenience only; it will make your code look nicer */ public static final EntityPlayerExtended get(EntityPlayer player) { return (EntityPlayerExtended) player.getExtendedProperties(EXT_PROP_NAME); } @Override public void saveNBTData(NBTTagCompound compound) { NBTTagCompound properties = new NBTTagCompound(); properties.setInteger("magicXP", this.magicXP); properties.setInteger("magicLevel", this.magicLevel); compound.setTag(EXT_PROP_NAME, properties); } @Override public void loadNBTData(NBTTagCompound compound) { NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME); this.magicXP = properties.getInteger("magicXP"); this.magicLevel = properties.getInteger("magicLevel"); log.debug("Magic XP: " + this.magicXP + " : Magic Level: " + this.magicLevel); } @Override public void init(Entity entity, World world) { } public void addMagicXP(int amount){ if(!player.worldObj.isRemote){ log.info("Adding " + amount + " xp to " + ""); this.magicXP += amount; if(this.magicXP >= (50 * this.magicLevel + 12)){ levelUpMagic(); } } } public void levelUpMagic(){ if(!player.worldObj.isRemote){ this.magicLevel ++; this.magicXP = 0; log.info("Player " + player.getDisplayName() + " is now magic level " + this.magicLevel + "."); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.AQUA + "Level Up!" + EnumChatFormatting.GOLD + " You are now level " + EnumChatFormatting.RED + this.magicLevel + EnumChatFormatting.GOLD + "!")); } double x = player.posX, y = player.posY, z = player.posZ; Random rand = new Random(); for(int i=0;i<50;i++){ Minecraft.getMinecraft().theWorld.spawnParticle("lava", x + 0.5D + rand.nextDouble(), y + 0.5D + rand.nextDouble(), z - 1 + 0.5D + rand.nextDouble(), 0, 0, 0); } } public int getRemainingXpToLevel(){ int xpToLevel = 50 * this.magicLevel + 12; return xpToLevel - this.magicXP; } public int getMagicLevel(){ return this.magicLevel; } public int getMagicXP(){ return this.magicXP; } }
  7. WorldData.java package com.Cyphereion.RunesOfAltura.Data; import java.util.Iterator; import com.Cyphereion.RunesOfAltura.RunesOfAltura; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.village.Village; import net.minecraft.world.World; import net.minecraft.world.WorldSavedData; import net.minecraft.world.storage.MapStorage; public class WorldData extends WorldSavedData { final static String key = RunesOfAltura.MODID; public static WorldData forWorld(World world) { MapStorage storage = world.perWorldStorage; WorldData result = (WorldData)storage.loadData(WorldData.class, key); if (result == null) { result = new WorldData(key); storage.setData(key, result); } return result; } private NBTTagCompound data = new NBTTagCompound(); public WorldData(String tagName) { super(tagName); } @Override public void readFromNBT(NBTTagCompound compound) { data = compound.getCompoundTag(key); } @Override public void writeToNBT(NBTTagCompound compound) { compound.setTag(key, data); } public NBTTagCompound getData() { return data; } } Levels.java package com.Cyphereion.RunesOfAltura.Data; import java.util.Random; import com.Cyphereion.RunesOfAltura.RunesOfAltura; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.EnumChatFormatting; public class Levels { static LogManager log = RunesOfAltura.instance.log; public static void addMagicXP(EntityPlayer player, int amount){ if(!player.worldObj.isRemote){ log.info("Adding " + amount + " xp to " + player.getDisplayName() + "."); WorldData data = WorldData.forWorld(player.worldObj); NBTTagCompound tag = data.getData(); int xp = tag.getInteger(player.getDisplayName() + ".magicXP"); tag.setInteger(player.getDisplayName() + ".magicXP", xp + amount); data.markDirty(); xp = tag.getInteger(player.getDisplayName() + ".magicXP"); if(xp >= (50 * tag.getInteger(player.getDisplayName() + ".magicLevel") + 12)){ levelUpMagic(player); } } } public static void levelUpMagic(EntityPlayer player){ if(!player.worldObj.isRemote){ WorldData data = WorldData.forWorld(player.worldObj); NBTTagCompound tag = data.getData(); int lvl = tag.getInteger(player.getDisplayName() + ".magicLevel"); tag.setInteger(player.getDisplayName() + ".magicLevel", lvl + 1); tag.setInteger(player.getDisplayName() + ".magicXP", 0); log.info("Player " + player.getDisplayName() + " is now magic level " + tag.getInteger(player.getDisplayName() + ".magicLevel") + "."); player.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.AQUA + "Level Up!" + EnumChatFormatting.GOLD + " You are now level " + EnumChatFormatting.RED + tag.getInteger(player.getDisplayName() + ".magicLevel") + EnumChatFormatting.GOLD + "!")); } double x = player.posX, y = player.posY, z = player.posZ; Random rand = new Random(); for(int i=0;i<50;i++){ Minecraft.getMinecraft().theWorld.spawnParticle("lava", x + 0.5D + rand.nextDouble(), y + 0.5D + rand.nextDouble(), z - 1 + 0.5D + rand.nextDouble(), 0, 0, 0); } } public static int getRemainingXpToLevel(EntityPlayer player){ WorldData data = WorldData.forWorld(player.worldObj); NBTTagCompound tag = data.getData(); int xp = tag.getInteger(player.getDisplayName() + ".magicXP"); int xpToLevel = 50 * tag.getInteger(player.getDisplayName() + ".magicLevel") + 12; return xpToLevel - xp; } public static int getMagicLevel(EntityPlayer player){ WorldData data = WorldData.forWorld(player.worldObj); NBTTagCompound tag = data.getData(); return tag.getInteger(player.getDisplayName() + ".magicLevel"); } public static int getMagicXP(EntityPlayer player){ WorldData data = WorldData.forWorld(player.worldObj); NBTTagCompound tag = data.getData(); return tag.getInteger(player.getDisplayName() + ".magicXP"); } }
  8. It grabs the players current magic level from NBT and returns that. (This is a variable that I have added obviously.)
  9. Perms? I don't know, i've never tried to make forge and bukkit work together.
  10. It seems that I am getting another issue. The first Item I added (which needs to meet no requirements) works fine, but the second one put through it doesn't show up in the product grid. This one has the requirement of needing level one. Do you have any ideas as to what may be causing this? P.S. I also changed it to only update when on the client side and that worked but you could no longer get the item because the server was told it was false. EDIT: This seems to only be an issue when using two items of the same class. package com.Cyphereion.RunesOfAltura.Manager; import java.lang.reflect.Field; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ContainerPlayer; import net.minecraft.inventory.ContainerWorkbench; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.inventory.SlotCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.world.World; import com.Cyphereion.RunesOfAltura.Data.Levels; import com.Cyphereion.RunesOfAltura.Object.ItemRune; import com.google.common.base.Throwables; import cpw.mods.fml.relauncher.ReflectionHelper; public class CraftManager implements IRecipe { private final IRecipe wrapped; public CraftManager(IRecipe wrapped) { this.wrapped = wrapped; } @Override public boolean matches(InventoryCrafting grid, World world) { return additionalCondition(grid, world) && wrapped.matches(grid, world); } private boolean additionalCondition(InventoryCrafting grid, World world) { ItemStack output = this.wrapped.getRecipeOutput(); EntityPlayer player = findPlayer(grid); ItemRune rune = (ItemRune)output.getItem(); if(Levels.getMagicLevel(player) >= rune.levelNeeded){ return true; } return false; } private static final Field eventHandlerField = ReflectionHelper.findField(InventoryCrafting.class, "eventHandler"); private static final Field containerPlayerPlayerField = ReflectionHelper.findField(ContainerPlayer.class, "thePlayer"); private static final Field slotCraftingPlayerField = ReflectionHelper.findField(SlotCrafting.class, "thePlayer"); private static EntityPlayer findPlayer(InventoryCrafting inv) { try { Container container = (Container) eventHandlerField.get(inv); if (container instanceof ContainerPlayer) { return (EntityPlayer) containerPlayerPlayerField.get(container); } else if (container instanceof ContainerWorkbench) { return (EntityPlayer) slotCraftingPlayerField.get(container.getSlot(0)); } else { // don't know the player return null; } } catch (Exception e) { throw Throwables.propagate(e); } } @Override public ItemStack getCraftingResult(InventoryCrafting grid) { return wrapped.getCraftingResult(grid); } @Override public int getRecipeSize() { return wrapped.getRecipeSize(); } @Override public ItemStack getRecipeOutput() { return wrapped.getRecipeOutput(); } }
  11. Could I get the error log as well as me methods you are using?
  12. Perms? I don't know, i've never tried to make forge and bukkit work together.
  13. Oh jesus, my stupidity hurts. I was treating the class like it wasn't an object. Thanks a ton, I had no idea how off I was.
  14. Look at BlockIce and then just apply that to the blocks somehow. (I would check into the EntityMovementEvent or whatever it's called and go from there)
  15. Lol, the IRecipe's are completely seperate. I just took the object itself and stuck it into a list so that I may have multiple IRecipe's. and as for the returning method, I have set that up the way you are showing. Here is my code again so that you may point some stupid mistake I made. (It is only getting the first entry in the recipe list as well because I have only added one and don't want to implement the full thing yet) @Override public boolean matches(InventoryCrafting IC, World world) { EntityPlayer player = findPlayer(IC); if(!player.worldObj.isRemote){ if(runeList.get(0).matches(IC, world)){ return true; } } return false; } @Override public ItemStack getCraftingResult(InventoryCrafting IC){ EntityPlayer player = findPlayer(IC); World world = player.worldObj; if(!player.worldObj.isRemote){ if(runeList.get(0).matches(IC, world)){ return runeList.get(0).getRecipeOutput(); } } return null; } P.S. I should also mention that it will give me item(Even though it won't show up in the product cell) the first time but not any time after that. It will just give me a phantom item that isn't really there but is? Kind of like it is client only but a bit odder.
  16. Lol, I had no idea they were (for this reason) the same thing.
  17. If you mean that you created a command in forge then yes. As long as you have the mod installed (and a run-off version of bukkit that can run forge) then yes! Cool! And Im not going to ask about the question that I have for the actual bukkit code over here. (Dont want to get in trouble/ scolded by a mod) If it has to do with getting when the command is used, just go to the bukkit forums with it. It really is super simple.
  18. Ok, so I changed the method to return true if the requirements are met(Completely forgot that the method wasn't void) but it still won't show up. If I click it, I still get the item but the slot doesn't actually display the item. As for the list, I plan on adding more recipes and doing the same thing with them so by making a list I can make it more versatile. (And they are going to be processed one at a time)
  19. If you mean that you created a command in forge then yes. As long as you have the mod installed (and a run-off version of bukkit that can run forge) then yes!
  20. So i've managed to get a big chunk of the code fixed now is all I need to know is how to set the output. Also, for some reason the getCraftingResult() method isn't being called, I have to manually call it. public static ArrayList<IRecipe> runeList = new ArrayList<IRecipe>(); @Override public boolean matches(InventoryCrafting IC, World world) { EntityPlayer player = findPlayer(IC); if(!player.worldObj.isRemote){ if(runeList.get(0).matches(IC, world)){ System.out.println(getCraftingResult(IC)); } } return false; } @Override public ItemStack getCraftingResult(InventoryCrafting IC){ EntityPlayer player = findPlayer(IC); World world = player.worldObj; if(!player.worldObj.isRemote){ if(runeList.get(0).matches(IC, world)){ return runeList.get(0).getRecipeOutput(); } } return null; }
  21. Umm, look into EntityMinecart code? This seems a little odd to say the least.
  22. Lol what? That was wordy. So i've managed to get as far as //cm is CraftingManager, I have a variable set up to call the class. cm.addRecipe(new ItemStack(blankRune, 4), "SS ", "S S", "S ", Character.valueOf('S'), Blocks.stone); cm.getRecipeList().remove((cm.getRecipeList().size() - 1)); But as for delegating all methods, I have no idea what you mean.
  23. Not true. The issue is that the method is called createTileEntity, not createNewTileEntity. Also note that you will need hasTileEntity as well. There might be multiple ways to achieve this but I have already done this in my Realistic Deaths mod and the code uses createNewTileEntity instead of createTileEntity.
  24. I just want to check a normal recipe like 111, 222, 323, but I am trying to figure out a way of doing this. The recipe(3 in specific) would be the block but I cannot get the block by itself so I tried using ItemStacks. With ItemStacks however, I need to check if they are null and then it just goes downhill from there. There is no reason for you to check if its null. And heres a tutorial which you could have found in five seconds. http://www.minecraftforge.net/wiki/Crafting_and_Smelting ...Ummm, it HAS to be checked otherwise the game WILL crash. Also that link is way off topic. Read the rest of the post, I am not trying to learn how to create a recipe, I am trying to learn how to define one in a specific bit of code.
  25. public class MetallicInfuser extends Block { This needs to extend BlockContainer.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.