Jump to content

[1.7.x][SOLVED] Overriding World's base-block - Stone.


Ernio

Recommended Posts

Hello,

 

What I want is quite simple - tell world generator to replace every stone with something else in all biomes.

Result should look like this: all stone generated by world is mystone and when you craft stone in furnace it will be vanillastone.

 

Is there any global field with ID of "basic-block" which I can override (with reflection or whatever)?

 

And note for "other ways": No, I can't use events to do what I want (unless there is some world-gen even that would allow me to replace all stone during generaton - please say which) and no I don't want to replace stone with myblock inside registry array.

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

Make a custom WorldGenerator Class.

 

It should look like this.

 

public class SurfaceGen implements IWorldGenerator
{
    @Override
    public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider)
    {
        switch(world.provider.dimensionId)
        {
            case 0:
                generateSurface(world, random, chunkX * 16, chunkZ * 16);
        }
    }

    private void generateSurface(World world, Random random, int chunkX, int chunkZ)
    {
        for(int x = chunkX; x < chunkX + 16; x++)
        {
            for(int z = chunkZ; z < chunkZ + 16; z++)
            {
                for(int y = 0; y < 256; y++)
                {
                    if(block == Blocks.stone)
                    {
                        world.setBlock(x, y, z, CUSTOM STONE BLOCK);
                    }
                }

 

Now you need to register your WorldGenerator Class in your main mod class

 

@Mod.EventHandler
public void init(FMLInitializationEvent event)
{
      GameRegistry.registerWorldGenerator(new yourWorldGeneratorClassName(), 1);
}

Link to comment
Share on other sites

Underground Biomes replaces all stone, and gets acceptable performance. I have two techniques, although both tend to have incompatibilities with other mods.

 

The original one (originally written by exterminatorJeff) acts during decoration by intercepting BiomeDecorateEvent.Post and replacing the stone there. This method requires only routine Forge calls. It is noticeably slower than vanilla, but quite tolerable if you do your coding right (don't create objects in your innermost loops). However, it's prone to get caught up in the horrible tangle that results from multi-chunk changes in Minecraft chunk-at-a-time generation, and I used to get a never-ending stream of mod interaction crashes. Recently I've tried an ad-hoc system of keeping track of which chunks I'm already modifying and if I get a call to modify one I'm currently modifying I just skip it. Somewhat to my surprise, it worked (I wasn't sure which of the multiple chunks would "count") and it's really cut down on the problems (but not completely abolished them).

 

The other method is to write a wrapper for ChunkProviderGenerate which runs the replace on chunks right after they're made (bypassing the world and neighbor block checks). This is really fast and you can't tell it's there. You have to use reflection to install wrappers onto the ChunkProviderGenerate objects in various worlds, and it is hard sometimes to figure out what to modify. This also creates a interaction problem in that you have to specifically code to manage alternatives to ChunkProviderGenerate used by other mods.

Link to comment
Share on other sites

You guys are the best :)

 

Thanks for pointing out existance of Pre and Post events in decoration - wasn't aware of them, and those (diesieben07's) I'll use.

 

Will have to make some tests with Cauldron and how well that works with other mods, but It should be cool. ;)

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

I've experimented a bit (not much) and come to this: http://pastebin.com/QgnrXri4

It works and has a decent performance. You can probably optimize it even further by pre-computing the IDs (LSB & MSB) and setting the ID manually instead of using the method that looks up the ID every time.

 

Is there a way to use this with metadata blocks?

Link to comment
Share on other sites

It is an event subscription, so needs to be in a class that is registered to the proper event bus.  Interestingly, even though it is in the terraingen package, it seems to be fired on the regular EVENT_BUS.

 

So in your init() method in your main class or common proxy, you want something like:

        MinecraftForge.EVENT_BUS.register(new yourClassWithEventHandlerMethods());

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

I registered it with the right bus but I keep on getting this crash:

 

Crash

---- Minecraft Crash Report ----
// You should try our sister game, Minceraft!

Time: 7/26/14 4:13 PM
Description: Exception in server tick loop

java.lang.ArrayIndexOutOfBoundsException: 4096
at net.minecraft.world.chunk.storage.ExtendedBlockStorage.getBlockByExtId(ExtendedBlockStorage.java:61)
at com.logictechcorp.orizon.world.worldgen.StoneLayerGen.populateChunk(StoneLayerGen.java:58)
at cpw.mods.fml.common.eventhandler.ASMEventHandler_5_StoneLayerGen_populateChunk_Pre.invoke(.dynamic)
at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:51)
at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:122)
at net.minecraft.world.gen.ChunkProviderGenerate.populate(ChunkProviderGenerate.java:400)
at net.minecraft.world.gen.ChunkProviderServer.populate(ChunkProviderServer.java:315)
at net.minecraft.world.chunk.Chunk.populateChunk(Chunk.java:1163)
at net.minecraft.world.gen.ChunkProviderServer.originalLoadChunk(ChunkProviderServer.java:210)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:151)
at net.minecraft.world.gen.ChunkProviderServer.loadChunk(ChunkProviderServer.java:121)
at net.minecraft.server.MinecraftServer.initialWorldChunkLoad(MinecraftServer.java:315)
at net.minecraft.server.integrated.IntegratedServer.loadAllWorlds(IntegratedServer.java:79)
at net.minecraft.server.integrated.IntegratedServer.startServer(IntegratedServer.java:96)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:455)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:762)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 8.1 (amd64) version 6.3
Java Version: 1.7.0_55, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 902761424 bytes (860 MB) / 1056309248 bytes (1007 MB) up to 1056309248 bytes (1007 MB)
JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
FML: MCP v9.05 FML v7.10.1.1152 Minecraft Forge 10.13.0.1152 4 mods loaded, 4 mods active
mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available
FML{7.10.1.1152} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.0.1152.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available
Forge{10.13.0.1152} [Minecraft Forge] (forgeSrc-1.7.10-10.13.0.1152.jar) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available
orizon{1.7.X-1.4} [Orizon] (Orizon) Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available
Profiler Position: N/A (disabled)
Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Player Count: 0 / 8; []
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'

 

Main Class

@Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION)
public class Orizon
{
    @Mod.Instance(Reference.MOD_ID)
    public static Orizon instance;

    @SidedProxy(clientSide = Reference.CLIENT_SIDE_CLASS, serverSide = Reference.SERVER_SIDE_CLASS)
    public static IProxy proxy;

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
        ModBlocks.init();
        ModOverrides.init();
    }

    @Mod.EventHandler
    public void init(FMLInitializationEvent event)
    {
        MinecraftForge.EVENT_BUS.register(new StoneLayerGen());
        ModRecipes.init();
        ModWorldGen.init();
    }

    @Mod.EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
        ModOreDictionary.init();
    }
}

 

Event Class

public class StoneLayerGen
{
    @SubscribeEvent
    public  void populateChunk(PopulateChunkEvent.Pre event)
    {
        Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ);
        for(ExtendedBlockStorage storage : chunk.getBlockStorageArray())
        {
            if(storage != null)
            {
                for(int x = 0; x < 16; x++)
                {
                    for(int z = 0; z < 16; z++)
                    {
                        for(int y = 0; y < 16; y++)
                        {
                            if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(0));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.emerald_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedEmeraldOre.damageDropped(0));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.gold_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedGoldOre.damageDropped(0));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.iron_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedIronOre.damageDropped(0));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.lapis_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedLapisOre.damageDropped(0));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.stone)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.coloredStone.damageDropped(4));
                            }
                        }
                        for(int y = 16; y < 32; y++)
                        {
                            if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(2));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.emerald_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedEmeraldOre.damageDropped(1));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.gold_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedGoldOre.damageDropped(1));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.iron_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedIronOre.damageDropped(2));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.lapis_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedLapisOre.damageDropped(1));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.stone)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.coloredStone.damageDropped(1));
                            }
                        }
                        for(int y = 32; y < 48; y++)
                        {
                            if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(3));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.emerald_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedEmeraldOre.damageDropped(2));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.gold_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedGoldOre.damageDropped(2));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.iron_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedIronOre.damageDropped(3));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.lapis_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedLapisOre.damageDropped(2));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.stone)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.coloredStone.damageDropped(14));
                            }
                        }
                        for(int y = 64; y < 256; y++)
                        {
                            if(storage.getBlockByExtId(x, y, z) == Blocks.coal_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedCoalOre.damageDropped(1));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.iron_ore)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedIronOre.damageDropped(1));
                            }

                            if(storage.getBlockByExtId(x, y, z) == Blocks.stone)
                            {
                                storage.setExtBlockMetadata(x, y, z, ModBlocks.coloredStone.damageDropped(6));
                            }
                        }
                    }
                }
            }
        }
    }
}

Link to comment
Share on other sites

  • 3 weeks later...

You need to understand what the "ExtendedBlockStorage" is. The Minecraft world is (as everyone probably knows) split into 16x16 chunks. Then every chunk is split into so called "sections" (introduced with the "new" Anvil Save-format) which are 16 blocks high. If a section is empty, it is not saved / rendered at all, which allowed Mojang to increase the world height to 256 without the save-size doubling in size.

 

Now each "ExtendedBlockStorage" that I am iterating in the code I posted is one of these sections. Therefor it's X coordinate only goes 0-15 (because it's 16 blocks high). If you want different Blocks based on world height you'll need to select the right section.

 

Sorry to bring up an old topic but how would I select a different selection?

Link to comment
Share on other sites

The ExtendedBlockStorage array has one element for each strata (16 strata are possible, each of 16 blocks height).

So, extBlockArray[0] is the lowest strata (blocks x,0-15,y) are in it.

 

 

 

Use something like this:

import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
import net.minecraftforge.event.terraingen.PopulateChunkEvent;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;

public class StoneLayerGen {
@SubscribeEvent
public void populateChunk(PopulateChunkEvent.Pre event) {
	final Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ);
	final ExtendedBlockStorage[] storageArray = chunk.getBlockStorageArray();
	for (int x = 0; x < 16; x++) {
		for (int z = 0; z < 16; z++) {
			ExtendedBlockStorage storage = storageArray[0]; // 0 <= y < 16
			if (storage != null) {
				for (int y = 0; y < 16; y++) {
					final Block block = storage.getBlockByExtId(x, y, z);
					if (block == Blocks.coal_ore) {
						storage.setExtBlockMetadata(x, level, z, ModBlocks.stratifiedCoalOre.damageDropped(0));
					}

					if (block == Blocks.emerald_ore) {
						storage.setExtBlockMetadata(x, level, z, ModBlocks.stratifiedEmeraldOre.damageDropped(0));
					}

					if (block == Blocks.gold_ore) {
						storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedGoldOre.damageDropped(0));
					}

					if (block == Blocks.iron_ore) {
						storage.setExtBlockMetadata(x, y, z, ModBlocks.stratifiedIronOre.damageDropped(0));
					}

					if (block == Blocks.lapis_ore) {
						storage.setExtBlockMetadata(x, y, z,
								ModBlocks.stratifiedLapisOre.damageDropped(0));
					}

					if (block == Blocks.stone) {
						storage.setExtBlockMetadata(x, y, z,
								ModBlocks.coloredStone.damageDropped(4));
					}
				}
			}
			storage = storageArray[1]; // 16 <= y < 32
			if (storage != null) {
				for (int y = 0; y < 16; y++) {
					if (storage != null) {
						final Block block = storage[strata]
								.getBlockByExtId(x, level, z);

						if (storage.getBlockByExtId(x, y, z) == Blocks.coal_ore) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.stratifiedCoalOre
											.damageDropped(2));
						}

						if (storage.getBlockByExtId(x, y, z) == Blocks.emerald_ore) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.stratifiedEmeraldOre
											.damageDropped(1));
						}

						if (storage.getBlockByExtId(x, y, z) == Blocks.gold_ore) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.stratifiedGoldOre
											.damageDropped(1));
						}

						if (storage.getBlockByExtId(x, y, z) == Blocks.iron_ore) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.stratifiedIronOre
											.damageDropped(2));
						}

						if (storage.getBlockByExtId(x, y, z) == Blocks.lapis_ore) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.stratifiedLapisOre
											.damageDropped(1));
						}

						if (storage.getBlockByExtId(x, y, z) == Blocks.stone) {
							storage.setExtBlockMetadata(x, y, z,
									ModBlocks.coloredStone.damageDropped(1));
						}
					}
					storage = storageArray[2]; // 32 <= y < 48
					if (storage != null) {
						for (int y = 0; y < 16; y++) {
							if (storage.getBlockByExtId(x, y, z) == Blocks.coal_ore) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.stratifiedCoalOre.damageDropped(3));
							}

							if (storage.getBlockByExtId(x, y, z) == Blocks.emerald_ore) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.stratifiedEmeraldOre.damageDropped(2));
							}

							if (storage.getBlockByExtId(x, y, z) == Blocks.gold_ore) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.stratifiedGoldOre.damageDropped(2));
							}

							if (storage.getBlockByExtId(x, y, z) == Blocks.iron_ore) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.stratifiedIronOre.damageDropped(3));
							}

							if (storage.getBlockByExtId(x, y, z) == Blocks.lapis_ore) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.stratifiedLapisOre.damageDropped(2));
							}

							if (storage.getBlockByExtId(x, y, z) == Blocks.stone) {
								storage.setExtBlockMetadata(x, y, z,
										ModBlocks.coloredStone.damageDropped(14));
							}
						}
					}
					for (int y = 64; y < 256; y++) {
						storage = storageArray[y >> 4];
						final int level = y & 15;
						if (storage != null) {
							if (storage.getBlockByExtId(x, level, z) == Blocks.coal_ore) {
								storage.setExtBlockMetadata(x, level, z,
										ModBlocks.stratifiedCoalOre.damageDropped(1));
							}

							if (storage.getBlockByExtId(x, level, z) == Blocks.iron_ore) {
								storage.setExtBlockMetadata(x, level, z,
										ModBlocks.stratifiedIronOre.damageDropped(1));
							}

							if (storage.getBlockByExtId(x, level, z) == Blocks.stone) {
								storage.setExtBlockMetadata(x, level, z,
										ModBlocks.coloredStone.damageDropped(6));
							}
						}
					}
				}
			}
		}
	}
}

 

 

Hope this helps.

Link to comment
Share on other sites

  • 1 month later...

I know, this is a little bit of an old thread,but I have a similar Problem and tried to solve it with the code provided by diesieben07:

For a mod I am writing at the Moment (PoorOres) I need to disable worldgen for the ores I add myself. to do that I used the following code:

    public void onEvent(PopulateChunkEvent.Pre event)
    {
        // replace all oreblocks of a type with stone
        // diesieben07 came up with this method (http://www.minecraftforge.net/forum/index.php/topic,21625.0.html)

        Chunk chunk = event.world.getChunkFromChunkCoords(event.chunkX, event.chunkZ);

        for (ExtendedBlockStorage storage : chunk.getBlockStorageArray())
        {
            if (storage != null)
            {
                for (int x = 0; x < 16; ++x)
                {
                    for (int y = 0; y < 16; ++y)
                    {
                        for (int z = 0; z < 16; ++z)
                        {
                            Block curBlock = storage.getBlockByExtId(x, y, z);
                            for (PoorOre poorOre : Reference.WORLDGEN) {
                                if (curBlock == poorOre.getBaseBlock()) {
//                                    LogHelper.info("Replace " + poorOre.getBaseBlock().getLocalizedName() + " at " + x + ", " + y + ", " + z + " with " + poorOre.getUnderlyingBlock().getLocalizedName());
                                    storage.func_150818_a(x, y, z, poorOre.getUnderlyingBlock());
                                }
                            }
                        }
                    }
                }
            }
        }
        chunk.isModified = true; // this is important as it marks it to be saved
    }

 

Any idea, what I am doing wrong? It works fine, when I try to replace stone or grass.

 

Edit: found out, what I was doing wrong. I simply used the OreGenEvent.GenerateMinable event instead and now it works like a charm.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello, I'm trying to modify the effects of native enchantments for bows and arrows in Minecraft. After using a decompilation tool, I found that the specific implementations of native bow and arrow enchantments (including `ArrowDamageEnchantment`, `ArrowKnockbackEnchantment`, `ArrowFireEnchantment`, `ArrowInfiniteEnchantment`, `ArrowPiercingEnchantment`) do not contain any information about the enchantment effects (such as the `getDamageProtection` function for `ProtectionEnchantment`, `getDamageBonus` function for `DamageEnchantment`, etc.). Upon searching for the base class of arrows, `AbstractArrow`, I found a function named setEnchantmentEffectsFromEntity`, which seems to be used to retrieve the enchantment levels of the tool held by a `LivingEntity` and calculate the specific values of the enchantment effects. However, after testing with the following code, I found that this function is not being called:   @Mixin(AbstractArrow.class) public class ModifyArrowEnchantmentEffects {     private static final Logger LOGGER = LogUtils.getLogger();     @Inject(         method = "setEnchantmentEffectsFromEntity",         at = @At("HEAD")     )     private void logArrowEnchantmentEffectsFromEntity(CallbackInfo ci) {         LOGGER.info("Arrow enchantment effects from entity");     } }   Upon further investigation, I found that within the onHitEntity method, there are several lines of code:               if (!this.level().isClientSide &amp;&amp; entity1 instanceof LivingEntity) {                EnchantmentHelper.doPostHurtEffects(livingentity, entity1);                EnchantmentHelper.doPostDamageEffects((LivingEntity)entity1, livingentity);             }   These lines of code actually call the doPostHurt and doPostAttack methods of each enchantment in the enchantment list. However, this leads back to the issue because native bow and arrow enchantments do not implement these functions. Although their base class defines the functions, they are empty. At this point, I'm completely stumped and seeking assistance. Thank you.
    • I have been trying to make a server with forge but I keep running into an issue. I have jdk 22 installed as well as Java 8. here is the debug file  
    • it crashed again     What the console says : [00:02:03] [Server thread/INFO] [Easy NPC/]: [EntityManager] Server started! [00:02:03] [Server thread/INFO] [co.gi.al.ic.IceAndFire/]: {iceandfire:fire_dragon_roost=true, iceandfire:fire_lily=true, iceandfire:spawn_dragon_skeleton_fire=true, iceandfire:lightning_dragon_roost=true, iceandfire:spawn_dragon_skeleton_lightning=true, iceandfire:ice_dragon_roost=true, iceandfire:ice_dragon_cave=true, iceandfire:lightning_dragon_cave=true, iceandfire:cyclops_cave=true, iceandfire:spawn_wandering_cyclops=true, iceandfire:spawn_sea_serpent=true, iceandfire:frost_lily=true, iceandfire:hydra_cave=true, iceandfire:lightning_lily=true, iceandfireixie_village=true, iceandfire:myrmex_hive_jungle=true, iceandfire:myrmex_hive_desert=true, iceandfire:silver_ore=true, iceandfire:siren_island=true, iceandfire:spawn_dragon_skeleton_ice=true, iceandfire:spawn_stymphalian_bird=true, iceandfire:fire_dragon_cave=true, iceandfire:sapphire_ore=true, iceandfire:spawn_hippocampus=true, iceandfire:spawn_death_worm=true} [00:02:03] [Server thread/INFO] [co.gi.al.ic.IceAndFire/]: {TROLL_S=true, HIPPOGRYPH=true, AMPHITHERE=true, COCKATRICE=true, TROLL_M=true, DREAD_LICH=true, TROLL_F=true} [00:02:03] [Server thread/INFO] [ne.be.lo.WeaponRegistry/]: Encoded Weapon Attribute registry size (with package overhead): 41976 bytes (in 5 string chunks with the size of 10000) [00:02:03] [Server thread/INFO] [patchouli/]: Sending reload packet to clients [00:02:03] [Server thread/WARN] [voicechat/]: [voicechat] Running in offline mode - Voice chat encryption is not secure! [00:02:03] [VoiceChatServerThread/INFO] [voicechat/]: [voicechat] Using server-ip as bind address: 0.0.0.0 [00:02:03] [Server thread/WARN] [ModernFix/]: Dedicated server took 22.521 seconds to load [00:02:03] [VoiceChatServerThread/INFO] [voicechat/]: [voicechat] Voice chat server started at 0.0.0.0:25565 [00:02:03] [Server thread/WARN] [minecraft/SynchedEntityData]: defineId called for: class net.minecraft.world.entity.player.Player from class tschipp.carryon.common.carry.CarryOnDataManager [00:02:03] [Server thread/INFO] [ne.mi.co.AdvancementLoadFix/]: Using new advancement loading for net.minecraft.server.PlayerAdvancements@2941ffd5 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 0 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 1 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 2 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 3 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 4 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 5 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 6 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 7 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 8 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 9 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 10 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 11 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 12 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 13 [00:02:10] [Netty Epoll Server IO #2/INFO] [Calio/]: Received acknowledgment for login packet with id 14 [00:02:19] [Server thread/INFO] [ne.mi.co.AdvancementLoadFix/]: Using new advancement loading for net.minecraft.server.PlayerAdvancements@ebc7ef2 [00:02:19] [Server thread/INFO] [minecraft/PlayerList]: ZacAdos[/90.2.17.162:49242] logged in with entity id 1062 at (-1848.6727005281205, 221.0, -3054.2468255848935) [00:02:19] [Server thread/ERROR] [ModernFix/]: Skipping entity ID sync for com.talhanation.smallships.world.entity.ship.Ship: java.lang.NoClassDefFoundError: net/minecraft/client/CameraType [00:02:19] [Server thread/INFO] [minecraft/MinecraftServer]: - Gloop - ZacAdos joined the game [00:02:19] [Server thread/INFO] [xa.pa.OpenPartiesAndClaims/]: Updating all forceload tickets for cc56befd-d376-3526-a760-340713c478bd [00:02:19] [Server thread/INFO] [se.mi.te.da.DataManager/]: Sending data to client: ZacAdos [00:02:19] [Server thread/INFO] [voicechat/]: [voicechat] Received secret request of - Gloop - ZacAdos (17) [00:02:19] [Server thread/INFO] [voicechat/]: [voicechat] Sent secret to - Gloop - ZacAdos [00:02:21] [VoiceChatPacketProcessingThread/INFO] [voicechat/]: [voicechat] Successfully authenticated player cc56befd-d376-3526-a760-340713c478bd [00:02:22] [VoiceChatPacketProcessingThread/INFO] [voicechat/]: [voicechat] Successfully validated connection of player cc56befd-d376-3526-a760-340713c478bd [00:02:22] [VoiceChatPacketProcessingThread/INFO] [voicechat/]: [voicechat] Player - Gloop - ZacAdos (cc56befd-d376-3526-a760-340713c478bd) successfully connected to voice chat stop [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping the server [00:02:34] [Server thread/INFO] [mo.pl.ar.ArmourersWorkshop/]: stop local service [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Stopping server [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Saving players [00:02:34] [Server thread/INFO] [minecraft/ServerGamePacketListenerImpl]: ZacAdos lost connection: Server closed [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: - Gloop - ZacAdos left the game [00:02:34] [Server thread/INFO] [xa.pa.OpenPartiesAndClaims/]: Updating all forceload tickets for cc56befd-d376-3526-a760-340713c478bd [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Saving worlds [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (world): All chunks are saved [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved [00:02:34] [Server thread/INFO] [minecraft/MinecraftServer]: ThreadedAnvilChunkStorage: All dimensions are saved [00:02:34] [Server thread/INFO] [xa.pa.OpenPartiesAndClaims/]: Stopping IO worker... [00:02:34] [Server thread/INFO] [xa.pa.OpenPartiesAndClaims/]: Stopped IO worker! [00:02:34] [Server thread/INFO] [Calio/]: Removing Dynamic Registries for: net.minecraft.server.dedicated.DedicatedServer@7dc879e1 [MineStrator Daemon]: Checking server disk space usage, this could take a few seconds... [MineStrator Daemon]: Updating process configuration files... [MineStrator Daemon]: Ensuring file permissions are set correctly, this could take a few seconds... [MineStrator Daemon]: Pulling Docker container image, this could take a few minutes to complete... [MineStrator Daemon]: Finished pulling Docker container image container@pterodactyl~ java -version openjdk version "17.0.10" 2024-01-16 OpenJDK Runtime Environment Temurin-17.0.10+7 (build 17.0.10+7) OpenJDK 64-Bit Server VM Temurin-17.0.10+7 (build 17.0.10+7, mixed mode, sharing) container@pterodactyl~ java -Xms128M -Xmx6302M -Dterminal.jline=false -Dterminal.ansi=true -Djline.terminal=jline.UnsupportedTerminal -p libraries/cpw/mods/bootstraplauncher/1.1.2/bootstraplauncher-1.1.2.jar:libraries/cpw/mods/securejarhandler/2.1.4/securejarhandler-2.1.4.jar:libraries/org/ow2/asm/asm-commons/9.5/asm-commons-9.5.jar:libraries/org/ow2/asm/asm-util/9.5/asm-util-9.5.jar:libraries/org/ow2/asm/asm-analysis/9.5/asm-analysis-9.5.jar:libraries/org/ow2/asm/asm-tree/9.5/asm-tree-9.5.jar:libraries/org/ow2/asm/asm/9.5/asm-9.5.jar:libraries/net/minecraftforge/JarJarFileSystems/0.3.16/JarJarFileSystems-0.3.16.jar --add-modules ALL-MODULE-PATH --add-opens java.base/java.util.jar=cpw.mods.securejarhandler --add-opens java.base/java.lang.invoke=cpw.mods.securejarhandler --add-exports java.base/sun.security.util=cpw.mods.securejarhandler --add-exports jdk.naming.dns/com.sun.jndi.dns=java.naming -Djava.net.preferIPv6Addresses=system -DignoreList=bootstraplauncher-1.1.2.jar,securejarhandler-2.1.4.jar,asm-commons-9.5.jar,asm-util-9.5.jar,asm-analysis-9.5.jar,asm-tree-9.5.jar,asm-9.5.jar,JarJarFileSystems-0.3.16.jar -DlibraryDirectory=libraries -DlegacyClassPath=libraries/cpw/mods/securejarhandler/2.1.4/securejarhandler-2.1.4.jar:libraries/org/ow2/asm/asm/9.5/asm-9.5.jar:libraries/org/ow2/asm/asm-commons/9.5/asm-commons-9.5.jar:libraries/org/ow2/asm/asm-tree/9.5/asm-tree-9.5.jar:libraries/org/ow2/asm/asm-util/9.5/asm-util-9.5.jar:libraries/org/ow2/asm/asm-analysis/9.5/asm-analysis-9.5.jar:libraries/net/minecraftforge/accesstransformers/8.0.4/accesstransformers-8.0.4.jar:libraries/org/antlr/antlr4-runtime/4.9.1/antlr4-runtime-4.9.1.jar:libraries/net/minecraftforge/eventbus/6.0.3/eventbus-6.0.3.jar:libraries/net/minecraftforge/forgespi/6.0.0/forgespi-6.0.0.jar:libraries/net/minecraftforge/coremods/5.0.1/coremods-5.0.1.jar:libraries/cpw/mods/modlauncher/10.0.8/modlauncher-10.0.8.jar:libraries/net/minecraftforge/unsafe/0.2.0/unsafe-0.2.0.jar:libraries/com/electronwill/night-config/core/3.6.4/core-3.6.4.jar:libraries/com/electronwill/night-config/toml/3.6.4/toml-3.6.4.jar:libraries/org/apache/maven/maven-artifact/3.8.5/maven-artifact-3.8.5.jar:libraries/net/jodah/typetools/0.8.3/typetools-0.8.3.jar:libraries/net/minecrell/terminalconsoleappender/1.2.0/terminalconsoleappender-1.2.0.jar:libraries/org/jline/jline-reader/3.12.1/jline-reader-3.12.1.jar:libraries/org/jline/jline-terminal/3.12.1/jline-terminal-3.12.1.jar:libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar:libraries/org/openjdk/nashorn/nashorn-core/15.3/nashorn-core-15.3.jar:libraries/net/minecraftforge/JarJarSelector/0.3.16/JarJarSelector-0.3.16.jar:libraries/net/minecraftforge/JarJarMetadata/0.3.16/JarJarMetadata-0.3.16.jar:libraries/net/minecraftforge/fmlloader/1.19.2-43.3.0/fmlloader-1.19.2-43.3.0.jar:libraries/net/minecraft/server/1.19.2-20220805.130853/server-1.19.2-20220805.130853-extra.jar:libraries/com/github/oshi/oshi-core/5.8.5/oshi-core-5.8.5.jar:libraries/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar:libraries/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.jar:libraries/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.jar:libraries/com/mojang/authlib/3.11.49/authlib-3.11.49.jar:libraries/com/mojang/brigadier/1.0.18/brigadier-1.0.18.jar:libraries/com/mojang/datafixerupper/5.0.28/datafixerupper-5.0.28.jar:libraries/com/mojang/javabridge/1.2.24/javabridge-1.2.24.jar:libraries/com/mojang/logging/1.0.0/logging-1.0.0.jar:libraries/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar:libraries/io/netty/netty-buffer/4.1.77.Final/netty-buffer-4.1.77.Final.jar:libraries/io/netty/netty-codec/4.1.77.Final/netty-codec-4.1.77.Final.jar:libraries/io/netty/netty-common/4.1.77.Final/netty-common-4.1.77.Final.jar:libraries/io/netty/netty-handler/4.1.77.Final/netty-handler-4.1.77.Final.jar:libraries/io/netty/netty-resolver/4.1.77.Final/netty-resolver-4.1.77.Final.jar:libraries/io/netty/netty-transport/4.1.77.Final/netty-transport-4.1.77.Final.jar:libraries/io/netty/netty-transport-classes-epoll/4.1.77.Final/netty-transport-classes-epoll-4.1.77.Final.jar:libraries/io/netty/netty-transport-native-epoll/4.1.77.Final/netty-transport-native-epoll-4.1.77.Final-linux-x86_64.jar:libraries/io/netty/netty-transport-native-epoll/4.1.77.Final/netty-transport-native-epoll-4.1.77.Final-linux-aarch_64.jar:libraries/io/netty/netty-transport-native-unix-common/4.1.77.Final/netty-transport-native-unix-common-4.1.77.Final.jar:libraries/it/unimi/dsi/fastutil/8.5.6/fastutil-8.5.6.jar:libraries/net/java/dev/jna/jna/5.10.0/jna-5.10.0.jar:libraries/net/java/dev/jna/jna-platform/5.10.0/jna-platform-5.10.0.jar:libraries/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar:libraries/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.jar:libraries/org/apache/logging/log4j/log4j-api/2.17.0/log4j-api-2.17.0.jar:libraries/org/apache/logging/log4j/log4j-core/2.17.0/log4j-core-2.17.0.jar:libraries/org/apache/logging/log4j/log4j-slf4j18-impl/2.17.0/log4j-slf4j18-impl-2.17.0.jar:libraries/org/slf4j/slf4j-api/1.8.0-beta4/slf4j-api-1.8.0-beta4.jar cpw.mods.bootstraplauncher.BootstrapLauncher --launchTarget forgeserver --fml.forgeVersion 43.3.0 --fml.mcVersion 1.19.2 --fml.forgeGroup net.minecraftforge --fml.mcpVersion 20220805.130853 [00:02:42] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeserver, --fml.forgeVersion, 43.3.0, --fml.mcVersion, 1.19.2, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20220805.130853] [00:02:42] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 10.0.8+10.0.8+main.0ef7e830 starting: java version 17.0.10 by Eclipse Adoptium; OS Linux arch amd64 version 6.1.0-12-amd64 [00:02:43] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/home/container/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%2363!/ Service=ModLauncher Env=SERVER [00:02:43] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/fmlcore/1.19.2-43.3.0/fmlcore-1.19.2-43.3.0.jar is missing mods.toml file [00:02:43] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/javafmllanguage/1.19.2-43.3.0/javafmllanguage-1.19.2-43.3.0.jar is missing mods.toml file [00:02:43] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/lowcodelanguage/1.19.2-43.3.0/lowcodelanguage-1.19.2-43.3.0.jar is missing mods.toml file [00:02:43] [main/WARN] [ne.mi.fm.lo.mo.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/mclanguage/1.19.2-43.3.0/mclanguage-1.19.2-43.3.0.jar is missing mods.toml file [00:02:44] [main/WARN] [ne.mi.ja.se.JarSelector/]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File: and Mod File: . Using Mod File: [00:02:44] [main/WARN] [ne.mi.ja.se.JarSelector/]: Attempted to select a dependency jar for JarJar which was passed in as source: resourcefullib. Using Mod File: /home/container/mods/resourcefullib-forge-1.19.2-1.1.24.jar [00:02:44] [main/INFO] [ne.mi.fm.lo.mo.JarInJarDependencyLocator/]: Found 13 dependencies adding them to mods collection Latest log [29Mar2024 00:02:42.803] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher running: args [--launchTarget, forgeserver, --fml.forgeVersion, 43.3.0, --fml.mcVersion, 1.19.2, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20220805.130853] [29Mar2024 00:02:42.805] [main/INFO] [cpw.mods.modlauncher.Launcher/MODLAUNCHER]: ModLauncher 10.0.8+10.0.8+main.0ef7e830 starting: java version 17.0.10 by Eclipse Adoptium; OS Linux arch amd64 version 6.1.0-12-amd64 [29Mar2024 00:02:43.548] [main/INFO] [mixin/]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/home/container/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%2363!/ Service=ModLauncher Env=SERVER [29Mar2024 00:02:43.876] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/fmlcore/1.19.2-43.3.0/fmlcore-1.19.2-43.3.0.jar is missing mods.toml file [29Mar2024 00:02:43.877] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/javafmllanguage/1.19.2-43.3.0/javafmllanguage-1.19.2-43.3.0.jar is missing mods.toml file [29Mar2024 00:02:43.877] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/lowcodelanguage/1.19.2-43.3.0/lowcodelanguage-1.19.2-43.3.0.jar is missing mods.toml file [29Mar2024 00:02:43.878] [main/WARN] [net.minecraftforge.fml.loading.moddiscovery.ModFileParser/LOADING]: Mod file /home/container/libraries/net/minecraftforge/mclanguage/1.19.2-43.3.0/mclanguage-1.19.2-43.3.0.jar is missing mods.toml file [29Mar2024 00:02:44.033] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select two dependency jars from JarJar which have the same identification: Mod File: and Mod File: . Using Mod File: [29Mar2024 00:02:44.034] [main/WARN] [net.minecraftforge.jarjar.selection.JarSelector/]: Attempted to select a dependency jar for JarJar which was passed in as source: resourcefullib. Using Mod File: /home/container/mods/resourcefullib-forge-1.19.2-1.1.24.jar [29Mar2024 00:02:44.034] [main/INFO] [net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator/]: Found 13 dependencies adding them to mods collection
    • I am unable to do that. Brigadier is a mojang library that parses commands.
  • Topics

×
×
  • Create New...

Important Information

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