Jump to content

Two

Members
  • Posts

    63
  • Joined

  • Last visited

Everything posted by Two

  1. Was just about to start a new server with friends, but nooooo... I think some kind of a backup system would be great to have, considering how important Forge is for the Minecraft community.
  2. I was setting the debug defines on the commandline used to start Minecraft in the Minecraft launcher as ChampionAsh535 suggested, this had zero effect. However enabling debugging in Curseforge did it. I have no idea what Curse is doing to suppress the commandlines, but if running with the Curseforge Launcher using that specific setting seems to be the only way to activate debug logs. Which is a bit odd, because it should listen to the commandline settings, especially if enforcing something like a log4j config file, but it is not. Thanks for the help!
  3. There is no debug log in the logs folder.
  4. Thank you, but this doesn't actually change anything about the log output. I also tried to set the file logger to debug, but again: no change in the log output.
  5. Hi, I am trying to help a modder to pin down an issue that's happening on my system and I am trying to figure out how to set the log level of forge file logging to debug. My attempts at googling and using the usual log4j settings have failed. I do not have access to the source code of the mod, so I need to set the log level on the command line.
  6. The error occurred again yesterday, and I can now say for sure that it is a re-obfuscation failure. I had just finished an update, did clean & build, tested the result in the IDE (non-obfuscated) and everything was working fine. So I copied the lib from that build to a real MC environment and it failed with the rock issue. I hit clean & build again, copied the lib again and then everything was working fine.
  7. I had this issue starting with at least Forge version 1277 and I still have the issue with 1481. You can find my mods here: https://github.com/twothe/ Affected are all mods that somehow use stone/rock as written above. I could not yet find any pattern to this, it seems to happen just randomly and does not seem to be associated to my code.
  8. I am not sure if there is even any other way. So yes: I am using the standard gradle tasks like clean and build.
  9. Whenever I have a block in my mod that uses Blocks.stone or Materials.rock reobfuscation completely randomly fails sometimes. That is: the code works, then (without any change) I do a re-compile, and the game crashes with Then I recompile the exact same code-base (without any changes) and the crash is gone. I have not seen this happen with anything but Materials.rock / Blocks.stone. This is really annoying when you do a quick recompile to change something like version number after extensive testing, upload the mod just to realize that it is crashing because of this.
  10. I managed to find your topic: http://www.minecraftforge.net/forum/index.php/topic,20135.0.html After some more fiddling with the way Minecraft handles worlds, I realized that the TileEntity (probably) needs to be requested as follows: - On the server: DimensionManager.getWorld(message.dimensionID) - On the client: Minecraft.getMinecraft().theWorld (not sure about this one) The client often re-creates the world around the player, i.E. if he dies, which will cause the tile entity to be re-created as well, which however - to complicate things further - is NOT the tile that is actually used in the world. Also it is unclear to me what happens if the player is in a different dimension (there is only one theWorld) and the server sends an update for that tile entity, which makes me speculate that there is a better way to do this. I'd love to get some more feedback on this if you have the time.
  11. Ok, I will have a look at them. Thank you.
  12. From the corresponding block to the tile entity code above: @Override public boolean onBlockActivated(final World world, final int x, final int y, final int z, final EntityPlayer player, final int side, final float hitX, final float hitY, final float hitZ) { if (world.isRemote == false) { final TileEntity tileEntity = world.getTileEntity(x, y, z); if (tileEntityClass.isInstance(tileEntity)) { tileEntityClass.cast(tileEntity).giveItemsToPlayer(player); } else { FMLLog.severe("Grave TileEntity expected %s, but found %s", tileEntityClass.getName(), tileEntity == null ? "null" : tileEntity.getClass().getName()); } } return true; }
  13. The code that adds the items. Log output tells me that all items are properly added on the server: public void giveItemsToPlayer(final EntityPlayer player) { int count = GravesAssets.itemsPerSecond >= 0 ? GravesAssets.itemsPerSecond / TICKS_PER_SECOND : Integer.MAX_VALUE; FMLLog.info("Giving %d of %d items back to %s...", count, this.inventoryContent.size(), player.getDisplayName()); if (count == 0) { return; } InventoryContent content; final Deque<InventoryContent> notAdded = new LinkedList<InventoryContent>(); while ((count-- > 0) && ((content = this.inventoryContent.poll()) != null)) { FMLLog.info("Returning %s...", content.toString()); try { switch (content.inventoryID) { case INVENTORY_ID_VANILLA: if (player.inventory.getStackInSlot(content.slot) == null) { player.inventory.setInventorySlotContents(content.slot, content.itemStack); } else { notAdded.add(content); FMLLog.info("Failed."); } break; } } catch (Exception e) { FMLLog.warning("Failed to add item to inventory: %s\n%s", e.toString(), content.toString()); } } for (InventoryContent item : notAdded) { FMLLog.info("Adding %s...", item.toString()); if (player.inventory.addItemStackToInventory(item.itemStack) == false) { this.inventoryContent.add(item); FMLLog.info("Failed"); } } if (this.inventoryContent.isEmpty()) { FMLLog.info("All items have been returned"); this.worldObj.setBlockToAir(this.xCoord, this.yCoord, this.zCoord); } else { FMLLog.info("Items remain in grave"); this.markDirty(); } } Neither setInventorySlotContents nor addItemStackToInventory synchronize to the client.
  14. That is what I am doing. The client inventory however stays empty until relogging, then the items magically appear.
  15. I am currently trying to write a mod that sets items to specific player inventory slots (like armor) without using any containers or similar. I got that working so far using player.inventory.setInventorySlotContents(...), however the items are only visible after relogging, which tells me that I am missing something to synchronize that change to the player. How do I properly synchronize a batch change to the player's inventory?
  16. In theory - that's as far as I could figure out - there needs to be a log4j.xml file somewhere, in which some handler needs to be reconfigured in some way to output trace/debug log entries on the IDE console. Italic font parts are those I wasn't able to figure out yet.
  17. The benefit of not doing that is that you can leave important debug output inside the code, but have it hidden in release mode until you need it. System.out will just pollute the output.
  18. I've been searching through the logging configuration for a while but can't seem to figure out how to get the trace/debug output of my mod to log on the console output (what you see when hitting 'run' in your IDE). I can see that the stuff is logged properly to the file, just not to my console. Any help would be appreciated.
  19. I got a fast PC with a fast SSD and it still feels like it takes ages to start Minecraft with Forge and a few mods.
  20. You're not sure if you can trust an official file used by thousands of people, but you do trust random people form the Internet? My advice: get a virus scanner. If you have no clue which one, try this one.
  21. Took a little more try and error, but finally I got it. For future reference, this is how you load any texture from a given block IIcon (use block.getIcon to get that icon): /* Returns the pixel data of the texture described by icon in ARGB format */ static int[] loadTexture(final IIcon icon) { try { final ResourceLocation resourceLocation = getResourceLocation(icon.getIconName()); final IResourceManager resourceManager = Minecraft.getMinecraft().getResourceManager(); final IResource resource = resourceManager.getResource(resourceLocation); final InputStream in = resource.getInputStream(); final BufferedImage image = ImageIO.read(in); return image.getRGB(0, 0, image.getWidth(), image.getHeight(), null, 0, image.getWidth()); } catch (Exception e) { FMLLog.log(Level.ERROR, e, "Unable to load texture '%s'", icon.getIconName()); } return null; } static ResourceLocation getResourceLocation(final String blockTexture) { String domain = "minecraft"; String path = blockTexture; final int domainSeparator = blockTexture.indexOf(':'); if (domainSeparator >= 0) { path = blockTexture.substring(domainSeparator + 1); if (domainSeparator > 1) { domain = blockTexture.substring(0, domainSeparator); } } final String resourcePath = "textures/blocks/" + path + ".png"; // base path and PNG are hardcoded in Minecraft return new ResourceLocation(domain.toLowerCase(), resourcePath); }
  22. Would you have an example code for that by any chance? I am trying to figure out how to load those for a while now and can't seem to find a working example.
  23. The way I want them to use I would only read them once, then reduce them to a single pixel value and cache that. So is there a way to do that other than to use the texture memory?
×
×
  • Create New...

Important Information

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