Jump to content

1.14.4 Creating falling blocks in tick event causes extreme lag


DFined

Recommended Posts

Hi!

I have been working on a mod, that creates an ash-rain event, where ash blocks start falling from the sky. Currently I use the player tick event to spawn the blocks around the player. The only problem is, this seems to cause extreme lag, even when the block creation rate is such that only 10-20 blocks are falling at any time. I have tested much larger amounts of manually placed blocks falling at once and not causing lag. I have also tried creating sand blocks instead of the custom ash block to no difference, so the problem is not in the block itself either. Here is the code. If anyone knows what the problem might be, I would be very grateful. I assume its probably some mechanic I dont know about, and will go dig in it some more, but I'm stumped.

@Mod.EventBusSubscriber(bus= Mod.EventBusSubscriber.Bus.FORGE)
    public static class WorldEvents{
        private static final int ASHFALLRADIUS = 7*16;
        private static final float ASHFALLINTERVAL = 1;
        private static float interval = 0.f;
        @SubscribeEvent
        public static void onTick(TickEvent.PlayerTickEvent tickEvent) {
            PlayerEntity player = tickEvent.player;
            World world = tickEvent.player.world;

            if(world.isRemote()) {
                Random rand = world.getRandom();
                interval += rand.nextFloat();
                if(interval > 5.f) {
                    BlockPos dropPos = new BlockPos(
                            player.posX + rand.nextInt(ASHFALLRADIUS * 2) - ASHFALLRADIUS,
                            150,
                            player.posZ + rand.nextInt(ASHFALLRADIUS * 2) - ASHFALLRADIUS);
                    if (world.getChunkProvider().isChunkLoaded(new ChunkPos(dropPos))) {
                        BlockState state = ashBlock.getDefaultState().with(ashBlock.LAYERS, rand.nextInt(8) + 1);
                        world.setBlockState(dropPos, state, 6);
                    }
                    interval = 0;
                }
            }
        }
    }

 

Link to comment
Share on other sites

26 minutes ago, diesieben07 said:

You must modify the world on the server, not the client.

And that interval field cannot just be a static field somewhere, you need to actually bind this to the player, the world, etc.

Oh, my bad, I do actually have if(!world.isRemote()) in the code, I was just checking that I am not misunderstanding isRemote() when writing this post and forgot to change it back. So the lag isnt due to it being clientside (if it actually was done on the client the blocks wouldn't fall at all). As for the static field I know Ill have to change it. For now it works and this is just a quick and dirty way to check if the concept as a whole has any problems. Such as this weird lag.

Link to comment
Share on other sites

27 minutes ago, diesieben07 said:

Your code is on average creating a new block in the world every tick (PlayerTickEvent fires twice per tick, you need to check the phase). This will cause lag, no matter what you do, because you are causing lighting and chunk updates every single tick. Placing the blocks at once does not cause lag, because it causes one big update, so you will have one slow tick. But with your method all ticks are slow.

So its the block updates... Thanks! And I have found a solution as well. If anyone else is looking for how to do this: instead of creating the blocks, its better to just spawn the FallingBlockEntity. That way the lag vanishes completely.

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

    • The game crashed whilst exception ticking world Error: java.lang.NullPointerException: Cannot invoke "net.minecraft.resources.ResourceLocation.equals(Object)" because "this.lootTableId" is null Error given is above. I was already playing for around 15 minutes and wasn't doing anything specific or even breaking anything when the crashed happened. This is update 1.19.2 forge: 43.2.23 Mod list: ESSENTIAL Mod (by SparkUniverse_) Traveler's Titles (Forge) (by YUNGNICKYOUNG) Resourceful Config (by ThatGravyBoat) Dynamic Lights (by atomicstrykergrumpy) TenzinLib (by CommodoreThrawn) Nature's Compass (by Chaosyr) Library Ferret - Forge (by jtl_elisa) Cold Sweat (by Mikul) Simple Voice Chat (by henkelmax) Waystones (by BlayTheNinth) Carry On (by Tschipp) [Let's Do] Meadow (by satisfy) Creeper Overhaul (by joosh_7889) AutoRegLib (by Vazkii) Moonlight Lib (by MehVahdJukaar) AppleSkin (by squeek502) Xaero's World Map (by xaero96) Rotten Creatures (by fusionstudiomc) YUNG's API (Forge) (by YUNGNICKYOUNG) Village Artifacts (by Lothrazar) Right Click, Get Crops (by TeamCoFH) Supplementaries (by MehVahdJukaar) Automatic Tool Swap (by MelanX) Better Third Person (by Socolio) Supplementaries Squared (by plantspookable) Traveler's Backpack (by Tiviacz1337) Caelus API (Forge/NeoForge) (by TheIllusiveC4) Creatures and Beasts (by joosh_7889) Architectury API (Fabric/Forge/NeoForge) (by shedaniel) Quark Oddities (by Vazkii) Origins (Forge) (by EdwinMindcraft) Villager Names (by Serilum) GeckoLib (by Gecko) Realistic Bees (by Serilum) Illuminations Forge 🔥 (by dimadencep) Serene Seasons (by TheAdubbz) Critters and Companions (by joosh_7889) [Let's Do] Bakery (by satisfy) Falling Leaves (Forge) (by Cheaterpaul) Jade 🔍 (by Snownee) Collective (by Serilum) TerraBlender (Forge) (by TheAdubbz) [Let's Do] API (by Cristelknight) Towns and Towers (by Biban_Auriu) More Villagers (by SameDifferent) Biomes O' Plenty (by Forstride) Goblin Traders (by MrCrayfish) Corpse (by henkelmax) Tree Harvester (by Serilum) Balm (Forge Edition) (by BlayTheNinth) Mouse Tweaks (by YaLTeR) Sound Physics Remastered (by henkelmax) Xaero's Minimap (by xaero96) Just Enough Items (JEI) (by mezz) Terralith (by Starmute) Quark (by Vazkii) [Let's Do] Vinery (by satisfy) [Let's Do] Candlelight (by satisfy) Repurposed Structures (Neoforge/Forge) (by telepathicgrunt) Dusty Decorations (by flint_mischiff) Immersive Armors [Fabric/Forge] (by Conczin) Serene Seasons Fix (by Or_OS) Shutup Experimental Settings! (by Corgi_Taco) Skin Layers 3D (Fabric/Forge) (by tr7zw)
    • Make sure Java is running via Nvidia GPU https://windowsreport.com/minecraft-not-using-gpu/  
    • Also make a test with other Custom Launchers like AT Launcher, MultiMC or Technic Launcher
    • Embeddium and valkyrienskies are not working together - remove one of these mods With removing Embeddium, also remove Oculus, TexTrue's Embeddium Options and Embeddium Extras Or use Rubidium instead
  • Topics

×
×
  • Create New...

Important Information

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