LemADEC / WarpDrive

A warp drive mod for minecraft
71 stars 39 forks source link

Nether portal bounces player outside Nether's world border if they are in survival. #418

Closed Routhinator closed 4 years ago

Routhinator commented 4 years ago

Describe the bug When this mod is added to a modpack, anyone opening going through a nether portal that's been opened more than 1000 blocks from spawn, while in survival mode, is bounced out of the nether's world border and dies. Creative mode works around this.

Removing warp drive from our modpacks has fixed this behaviour. We did this after noticing the nether behaviour change that was added in August.

There's not much info I can give you as there was no errors.

Versions (latest is not a valid answer)

Packmaker mods list from MQ 2020 Please ask if any versions are needed as there is a lot to list.

mods:
  - ae2-stuff:
  - ae2-wireless-terminal-library:
  - ae2wtlib:
  - angel-ring-to-bauble:
  - angry-pixel-the-betweenlands-mod:
  - appleskin:
  - applied-energistics-2:
  - armory-expansion:
  - aroma1997core:
  - aroma1997s-dimensional-world:
  - asmodeuscore:
  - astral-sorcery:
  - autoreglib:
  - atomic-science:
  - backpacks:
  - back-tools:
  - bad-wither-no-cookie-reloaded:
  - base:
  - base-metals:
  - baubley-heart-canisters:
  - bdlib:
  - baubles:
  - bed-bugs:
  - better-builders-wands:
  - better-advancements:
      clientonly: true
  - betterfps:
  - bibliocraft:
  - biomes-o-plenty:
  - blockcraftery:
  - blur:
      clientonly: true
  - bookshelf:
  - botania:
  - building-gadgets:
  - brandons-core:
  - btfu-continuous-rsync-incremental-backup:
      serveronly: true
  - cavern:
  - chameleon:
  - charset-lib:
  - chest-transporter:
  - chickens:
  - chicken-chunks-1-8:
  - chisel:
  - clumps:
  - cofh-core:
  - cofh-world:
  - codechicken-lib-1-8:
  - contenttweaker:
  - compact-machines:
  - common-capabilities:
  - controlling:
      clientonly: true
  - constructs-armory:
  - cooking-for-blockheads:
  - corail-pillar:
  - corail-pillar-extension-chisel:
  - corail-pillar-extension-quark:
  - cosmetic-armor-reworked:
  - crafttweaker:
  - ctm:
      clientonly: true
  - cucumber:
  - custom-main-menu:
      clientonly: true
  - cyclops-core:
  - dank-null:
  - dark-utilities:
  - default-options:
  - defiled-lands:
  - deep-resonance:
  - default-world-generator-port:
  - diet-hoppers:
  - draconic-evolution:
  - eleccore:
  - elemental-dimensions:
  - endertweaker:
  - endercore:
  - ender-io:
  - ender-io-endergy:
  - ender-storage-1-8:
  - energy-converters:
  - engineers-decor:
  - engineers-doors:
  - environmental-materials:
  - environmental-tech:
  - exchangers:
  - extra-glass:
  - extraplanets:
  - et-lunar-environmental-tech-addon:
  - exchangers:
  - extended-crafting:
  - extracells2:
  - extreme-reactors:
  - fairy-lights:
  - fast-leaf-decay:
  - fastworkbench:
  - forestry:
  - forgeendertech:
  - flux-networks:
  - foamfix-for-minecraft:
  - forge-multipart-cbe:
  - ftblib:
  - ftb-utilities:
  - funky-locomotion:
  - galacticrafttweaker:
  - galacticraft-add-on-more-planets:
  - gendustry:
  - gendustry-jei-addon:
  - gotta-go-fast:
  - gravestone-mod:
  - gravity-gun:
  - guide-api:
  - hammer-lib:
  - hunting-dimension:
  - ichunutil:
  - ice-and-fire-dragons:
  - immersive-engineering:
  - immersive-petroleum:
  - immersive-tech:
  - industrial-foregoing:
  - ingame-info-xml:
  - instantunify:
  - initial-inventory:
  - integration-foregoing:
  - integrated-crafting:
  - integrated-dynamics:
  - integrated-terminals:
  - integrated-tunnels:
  - inventory-tweaks:
  - iron-chests:
  - ivtoolkit:
  - jei:
  - jei-bees:
  - jeid:
  - journeymap:
  - just-a-few-fish:
  - just-enough-harvestcraft:
      clientonly: true
  - just-enough-resources-jer:
      clientonly: true
  - kleeslabs:
  - laggoggles:
  - lemonlib:
  - libvulpes:
  - light-level-overlay-reloaded:
      clientonly: true
  - lost-souls:
  - llibrary:
  - lunatriuscore:
  - malisiscore:
  - malisisdoors:
  - mantle:
  - mcjtylib:
  - mchorses-mclib:
  - metamorph:
  - mmdlib:
  - mjrlegendslib:
  - modular-powersuits:
  - more-bees:
  - mob-grinding-utils:
  - mod-name-tooltip:
      clientonly: true
  - modtweaker:
  - modular-routers:
  - more-chickens:
  - mouse-tweaks:
      clientonly: true
  - mrcrayfish-furniture-mod:
  - mrtjpcore:
  - mtlib:
  - mysticallib:
  - natura:
  - natures-compass:
  - nuclearcraft-mod:
  - numina:
  - oc-xnet-driver:
  - openblocks:
  - opencomputers:
  - openfm:
  - openmodslib:
  - ore-excavation:
  - orelib:
  - p455w0rds-library:
  - pams-harvestcraft:
  - placebo:
  - prefab:
  - pretty-beaches:
  - project-red-base:
  - project-red-lighting:
  - ptrlib:
  - plustic:
  - quark:
  - randompatches:
  - randomtweaks:
  - reauth:
      clientonly: true
  - realistic-terrain-generation:
  - reborncore:
  - recurrent-complex:
  - redstone-arsenal:
  - redstone-flux:
  - reliquary-v1-3:
  - resource-loader:
      clientonly: true
  - rftools:
  - rftools-control:
  - rftools-dimensions:
  - rftools-power:
  - rftools-power-oc-integration:
  - roost:
  - sanlib:
  - scannable:
  - shadowfacts-forgelin:
  - silent-lib:
  - simple-void-world:
  - simply-jetpacks-2:
  - smooth-font:
  - sonar-core:
  - statues-rechiseled:
  - steves-carts-reborn:
  - stevekungs-lib:
  - stimmedcow-nomorerecipeconflict:
  - stones-bricks-missing-vanilla-blocks:
  - storage-drawers:
  - storage-drawers-extras:
  - tesla-core-lib:
  - thaumcraft:
  - thaumcraft-inventory-scanning:
  - thaumic-additions:
  - thaumic-augmentation:
  - thaumic-energistics:
  - thaumic-jei:
  - thaumic-periphery:
  - the-one-probe:
  - the-twilight-forest:
  - the-beneath:
  - the-lost-cities:
  - thermal-cultivation:
  - thermal-dynamics:
  - thermal-expansion:
  - thermal-foundation:
  - thermal-innovation:
  - tickprofiler:
  - tinkers-complement:
  - tinkers-construct:
  - tinkers-tool-leveling:
  - toast-control:
      clientonly: true
  - top-addons:
  - torchmaster:
  - unidict:
  - unlimited-chisel-works:
  - wanionlib:
  - waystones:
  - wireless-crafting-terminal:
  - woot:
  - valkyrielib:
  - vanillatweaks:
  - xnet:
  - yabba:
  - ynot:
  - zerocore:
LemADEC commented 4 years ago

Since 1.5.6, WarpDrive won't allow a player to open a nether portal outside the WorldBorder or leading them outside the World Border. Since 1.5.9, when the opening is cancelled, player gets a message and an INFO logs is reported in the server console. If a player still manages to light such invalid nether portal, then a mod is interfering, probably with the related BlockEvent.PortalSpawnEvent Forge event.

If the portal was already opened before 1.5.6, or player used another way to bypass the world border, then WarpDrive will pull them back inside the safe zone and send red/warning chat messages to the player every tick, then kill them. Since 1.5.10, player outside the world border have a 10 seconds 'grace period' before getting killed to account for network delay in SMP. If player didn't get moved or didn't get any of the 200 messages, then a mod is interfering, probably with entity motion or networking.

Long story short, issue needs to be reproduced with much less mods, and we'll need more details on how to reproduce it.

Routhinator commented 4 years ago

To clarify a couple of things, we tested this on two modpacks with mutiple portals, all of them opened withing the last few weeks with versions of Warp Drive released since then. I need to dig through git history to verify, but based on the curse release dates that means it was all done in 1.5.11

Additionally, none of the portals were outside the world border on either side (nether or overworld) and the player was not bounced to within the world border, but to 16m outside the world border in the nether, at the same height as their portal, often inside solid rock or lava. And, this only happens if the player is more than 1000 blocks from spawn. Within 1000 blocks portals work normally.

As for reproducing with a lower subset, no disagreement there. I am quite busy but will try to do so in January sometime. For now we are just pulling this mod from the affected packs to allow nether play to proceed.

Space Race 2019 server was launched for testing on 2019/11/02 Multifarious Quest 2020 server was launched for testing on 2019/12/06

Both within the last couple months with the latest available Warp Drive at the time. 1.5.11 was release Oct 20th.

Routhinator commented 4 years ago

I forgot to add, World border on these maps is at 10K

Portals are no where near the world border. Farthest one was at 7K in overworld.

LemADEC commented 4 years ago

WarpDrive adds its own world border to support the universal coordinates and celestial map systems. You can see it has an overlay over the vanilla world border.

Default celestial configuration uses a 2500 m border size (or 1250 m radius) for the Nether, as seen here: https://github.com/LemADEC/WarpDrive/blob/MC1.12/src/main/resources/config/celestialObjects-default.xml#L163 So, you're "1000" distance is probably more like a 1250 m border radius in the nether. The default for the overworld is 10000 m border size (or 5000 m radius). Hence I'm not sure how a survival player would reach 7K in the overworld without creative or changing the default configuration.

LemADEC commented 4 years ago

Where can I find those modpacks?

Routhinator commented 4 years ago

I fudged the 7k, it's within 5k. -708,-3843 in the overworld.

Did not know about that config line. We had it default at the 2500m, so seems like the two settings are conflicting and that's the likely cause of the issue.

We haven't quite uploaded these to curse yet. They are in the SKCraft launcher we host @ https://minecraft.routh.io/

They'll go into curse as well once we get everything stabalized and documented.

LemADEC commented 4 years ago

The issue is hardly reproducible in SpaceRace2019 (less than 10% chance, as in 2 deaths from 20+ trials). When it happened, the target nether region was not generated yet and there was a pretty large lag spike (respectively 5803 & 7298 ms). In both cases, I died from being pulled back inside the world border, making me die from unsafe teleportation (respectively fall damage and swimming in lava deaths, notably no death from void damage). In other words, it wasn't the world border killing me per say.

In the first occurrence, a world memory leak is visible (overworld remains loaded), and FoamFix reports that DIM-1 is still loaded after 60 s while it should actually be loaded.

In the second occurrence, FoamFix detected a weak reference changed to NULL. This means a garbage location did happen during dimension transfer.

I would advise to set dimensionUnloadQueueDelay in forge.cfg to at least 100 ticks instead of the current default value of 0 ticks. That will improve performance and avoid forge unloading worlds while a player is joining them.

LemADEC commented 4 years ago

I'll need the logs from your occurrences to confirm it's the same symptoms.

Routhinator commented 4 years ago

Thank you for going that far. I also noticed the long delay and lag spike when troubleshooting this but missed the details you've noticed. I'll dig the logs up from the previous container runs. I'll also readd WarpDrive and test the settings changes you've suggested and see if it resolves the issue.

Routhinator commented 4 years ago

I dug though the logs from previous instances of the issue on the Space Race server and I don't think I had the debug set high enough, or the issue was slightly different:

https://pastebin.com/28jV6PM3

However.. I readded the WarpDrive mod to MQ 2020 and only changed the dimensionUnloadQueueDelay to 100 ticks as you suggested. Now the portals that were previously affected work perfectly, so I think that you found the true issue.

I'm going to do some more testing tonight on MQ 2020 with brand new portals to see what happens, but I think this may end up being nothing more than a documentation issue to note that this parameter should be changed for best results, as the original '0' we had was the forge default to my knowledge.

LemADEC commented 4 years ago

Forge default logs settings where changed recently to remove DEBUG level. You can customize logs configuration with the related log4j parameter like so: -Dlog4j.configurationFile=my_log4j_config.xml.

The logs you've posted shows 2 deaths from environment (wall suffocation and lava), not world border per say ("xxx fell out of the world"). Like you said, we would need more logs to understand what happened (we don't even have the player death location nor the portal coordinates in the overworld).

Routhinator commented 4 years ago

Confirmed. New portals seem to work perfectly now, and jumping between dimensions is far smoother to boot.

LemADEC commented 4 years ago

Excellent, next update will enforce a minimum value for that delay to avoid such issue