Jump to content

m00nl1ght

Members
  • Posts

    22
  • Joined

  • Last visited

Everything posted by m00nl1ght

  1. In your OreGeneration class, add a field that holds your own feature instance private static final YourOreFeature END_OREGEN = new YourOreFeature(); And then use that instead of Feature.ORE like this: Biomes.THE_END.addFeature(GenerationStage.Decoration.UNDERGROUND_DECORATION, Biome.createDecoratedFeature(END_OREGEN, new OreFeatureConfig( ...
  2. p_207803_1_ is worldIn now, so if (worldIn.getBlockState(blockpos$mutableblockpos).getBlock() == Blocks.END_STONE) should work
  3. Instead of Feature.ORE pass in an instance of your own ore feature class.
  4. I have never used NetBeans before, so no idea how source attachments work there. However, there should be some way to specify the location of the sources. The file is called something like forge-1.14.2-26.0.13_mapped_snapshot_20190609-1.14.2-sources.jar Anyway, I recommend using an IDE with gradle integration (for example IntelliJ), because it can automatically attach the sources.
  5. Unfortunately, because FillerBlockType is an Enum, the only way to do this at the moment (or at least the only one I know) is to create your own class extending OreFeature Then override func_207803_a copy it and in there, replace if (p_207803_3_.target.func_214738_b().test(p_207803_1_.getBlockState(blockpos$mutableblockpos))) { ... with something that checks for end stone, or whatever your ore should spawn in, like this: if (p_207803_1_.getBlockState(blockpos$mutableblockpos).getBlock() == Blocks.END_STONE) { ...
  6. 1. Normally you should never need to open a .class file, only .java files. 2. How did you setup your workspace, what IDE are you using?
  7. What do you mean by "compiled" code? The java bytecode? Why?
  8. Update to 1.14.3 and use the latest mcp snapshot to get up to date mappings. Also, it takes time until all the fields and methods get named, 1.14 is relatively new. Edit: And yes, Forge still uses MCP internally to provide names in development environment.
  9. Just add -g /.gradle to your gradle command, for example gradlew setupDecompWorkspace -g /.gradle
  10. After running gradlew setupDecompWorkspace you need to run gradlew eclipse to prepare the eclipse project.
  11. You need an empty constructor in your TileEntity class. You currently only have public TileEntityNetIn(int maxTransfer) { this.maxTrans = maxTransfer; } just add public TileEntityNetIn() { }
  12. I created a simple GuiList for my mod some time ago, it is based on the vanilla Gui classes. Maybe it helps. github
  13. 1. What do you mean by "using the command"? Are you trying to create a command? 2. What do you mean by "a player who hits with his hand"? A player who is interacting with something? Please explain what you are trying to archieve.
  14. You could create a pull request on Forge's github if you really need this hook/event. Here you can find information about pull requests.
  15. Unfortunately, there is no such event. The arrow is added to the players inventory directly in EntityArrow#onCollideWithPlayer.
  16. So, if I understand correctly, you are creating a client-side only mod? And when you right click a block something should happen on the client, but the server should not be notified of the right click? This is actually not that easy, because the client will always send the interaction package even if the event has been cancelled (in PlayerControllerMP#processRightClickBlock) : if (event.isCanceled()) { // Give the server a chance to fire event as well. That way server event is not dependant on client event. this.connection.sendPacket(new CPacketPlayerTryUseItemOnBlock(pos, direction, hand, f, f1, f2)); return event.getCancellationResult(); }
  17. An easy way to find the source of 'cascading generation lag' warnings is to set a breakpoint in Chunk#logCascadingWorldGeneration(). Then run Minecraft in debug mode and when the warning is logged, you can look at the stacktrace.
  18. You can't add a file to your mod asset directory at runtime because it's located within the jar file. But you could save it somewhere else. What exacly are you trying to do? It seems like you are trying to download a texture and use it?
  19. You can override the vanilla shears item and change the getDestroySpeed method. Just create a class that extends the minecraft shears class, set the registry name to "minecraft:shears" and register it. But be aware that this will cause issues when another mod also overrides vanilla shears.
  20. An event is fired when a GUI is opened: GuiOpenEvent. You can use the GuiOpenEvent#setGui method to open your own GUI instead. However, I don't know if that has any side effects.
  21. While developing the structure generation system for my mod I had the same problem. I solved it with a pretty complex system involving a chunk cache. It is not really completed yet, but maybe it helps you anyway. My mod replaces the vanilla (overworld) ChunkProvider with a modified one. Source on github (my mod changes some other worldgen related things too, sorry if it is hard to read or understand the code) How it works: - Structure data is saved in NBT format (similiar to vanilla structures) and loaded on server start - When a chunk is generated, it checks for suitable positions based on the conditions saved in the NBT data, for example a block at a specific position in the structure needs to be grass or dirt. If all conditions match, it adds the position to my StructurePositionMap and generates it in the world later during chunk population, chunk by chunk. StructurePositionMap source The problem: What happens when the condition block that needs to be checked is in a chunk that is not generated yet? My solution: If the chunk that needs to be checked has not been generated yet, the ChunkProvider just 'pre-generates' it and stores it in a cache, like this (ChunkProviderDoomed.getChunk) : public Chunk getChunk(int x, int z) { // called when checking structure conditions if (world.getChunkProvider().isChunkGeneratedAt(x, z)) { // if chunk is already generated, just retrieve it (vanilla) return world.getChunkFromChunkCoords(x, z); } else { long c = ChunkPos.asLong(x, z); // if not, try to get it from our own chunk cache if (chunkCache.containsKey(c)) { return chunkCache.get(c); // if it is cached, return it } else { return this.preGenerate(x, z); // if not, pre-generate it and put it into the cache } } } Then it performs the checks, and later when the chunk is actually generated by minecraft it just retrieves the chunk from the cache instead of generating it again: public Chunk generateChunk(int x, int z) { // (override: ChunkProvider) Chunk cached = getChunkFromCache(x, z, true); if (cached!=null) { // if chunk has been pre-generated, we dont need to generate it again this.createVanillaStructures(x, z, null); //create vanilla structure data, everything else is already done this.createStructures(x, z); return cached; } return this.generateChunk(x, z, false); // if not, generate it normally } However, I cant tell if this causes problems with vanilla structure generation (not tested yet) But so far, it worked for me without any problems or lag. I hope it helps
×
×
  • Create New...

Important Information

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