Woot Spawner causes blocks to disappear underneath it.
ApacheTech opened this issue ยท 13 comments
This issue is present within FTB Beyond, but have not tried to recreate separately.
What is the bug?
Setting up a Woot Mob Farm causes a 3x3x3 cube of blocks to be deleted from the world at y=2 to y=4 below the farm. This includes a layer of Bedrock at y=2. Even in creative mode, the blocks cannot be replaced.
Bug Report Video:
https://youtu.be/A-Y7Hpal0Sw
Mod & Version
Woot 1.2.6
Is it repeatable?
Yes. Set up a Woot Mob Farm, and allow it to run.
https://github.com/Ipsis/Woot/blob/master/src/main/java/ipsis/woot/manager/SpawnerManager.java#L128 for reference. The box is created on purpose to spawn mobs (this is apparent if you make a wither spawner, you can hear the constant deaths/spawns) and kill them with a fake player to generate loot.
I wonder if mobs could be spawned under the bedrock or above build height instead?
Mod Author is making a bunch of dangerous assumptions by just taking over this space at bedrock. First of all, you have no idea what blocks are here. (If any blocks do exist- what happens in a void dimension, does everything just drop into the void?) One wonders if you make a Wither spawner and any neutral entity or player is nearby the bedrock box area, will the wither have enough time to get a shot off? (breaking any blocks nearby?) Hmmm - do you actually need to spawn a monster at all, if what you are making is essentially an XP/Drop factory.
Also of note - the Woot manual mentions nothing about this bedrock area, other than one obscure note to build above Y=10 "because construction rules". Nothing is mentioned about not building OTHER things below your Woot farm as a warning.
@ApacheTech While the factory is learning that particular mob then alas that 3x3x3 will be used. It is a horrible issue that I'm still trying to find a nice way to handle.
@RypoFalem Under the bedrock was one of the options that I was considering, I'm just not sure if it is going to cause more issues. Maybe creating a glass box just below build height would be safer, as I could then destroy it once I've finished with it. It still wouldn't be 100% safe, but it may cause less conflicts than the bedrock one.
@CDArena
I need to learn what drops a mob can product, mainly so I don't have to maintain a config file of all possible combinations. Also many mods dont use the vanilla loot system. To get around this - and support every mob by default - I fake spawn the mob, kill it then grab the drop information from the death drop event.
Some mods do not use the event system to generate the loot that they drop, but spawn them directly in the world. I fake spawn the mob at bedrock level, but this causes those mod items to be accelerated from bedrock to ground level due to them spawning inside a block.
The learning process only occurs for 500 fake spawns for the mob in the factory. Once the factory has learned the loot setup of the mob, then it no longer performs these fake spawns.
The spawned entity - which only occurs during the learning process - does not physically spawn in the world, but those drops will. If all mods used the event system, then this wouldn't be an issue, but that is completely the other mod authors choice.
Do I like the solution - No, no, no, no, no, no, no :)
Have I come up with a valid alternative - No. (Although maybe the skybox)
Rypo, that is pretty much what I said, but adding a separate "dissection chamber" would not mean adding any breaking changes. It would be as part of major milestone, but it would be backwards compatible.
Controllers already present will have already "learnt" their drops, but any future controllers would run through the dissection machine first. You could have the chamber spawn 10,000 mobs on rotation, to get the percentage chance of drops to 0.001%, I doubt anything would have a rarity of more than that. That also means that each 100 mobs processed would be 1% of progress in the chamber. You can spread this over a number of ticks, so that it's lag-friendly, and it would be a repeatable process.
It's also a new "upgradable" feature, so you could add an upgrade that keeps any items it discovers, that make it use less power, that drop XP, etc. it wouldn't break any existing features, and qould mean you 're not breaking any blocks.
A problem with destroying blocks at build limit is that that is where most people place their wind farms, and it could be used as an exploit to break bedrock in the Nether or the Deep Dark.
So World.isOutsideBuildHeight will fail if Y < 0 || Y >= 256, to this means I'm going to have to use a box in the world. I'm going with a glass box topped at 255, 3x3x3.
Just to note that glass at that level could cause lighting glitches on the ground beneath. Especially when using Optifine, and any shaders. Could barrier blocks be used instead? Or make a block like the Invisible Block, that is solid but has no texture, as part of the mod. Thinking ahead, this area may need to be expanded if you plan to add the Ender Dragon, as she is bigger than 3x3x3.
Thank you for addressing this issue.
The EnderDragon is handled via a config file as it doesn't die in a standard way.
The size of the box doesn't really depend on the mob as the mob never appears in the world, it is just to cover the area that other mods may throw the mob drops.
I've got the glass box working just now and I'm testing it. The main thing for me is to create and destroy the box as it is needed.
The block really needs to be something that the user cannot destroy while the box exists. The loot box is basically an exploit as people can throw drops into it to fake the loot that a mob can drop.
(Looks like barrier blocks could be the answer here)
If you wanted to add it as a feature, you could make a "Mob Dissection Factory" as a 5x5x5 hollow multi-block structure. That way, it's separate from the spawner, and the learning box would be contained, and not accessible by the player.
My idea would be that you could either place a programmed prism inside a macine, or just use the pre-programmed Mob Controller, as a block within the multi-structure. That way, the area inside can be found reletive to the controller block, the multi-block casing would be largely aesthetic. The dissection machine would need power to run, and would update the loot tables within the Woot config. It's then upto the player to decide whether they want to just spawn the mob with a regular loot table, or try to dissect the mobs, and learn what other drops can be found.
Suggestion: Why have a hidden mysterious box that overwrites other blocks at all? Why not have a "cage" section of the multiblock structure that is required for it to function?
The cage section could be required to be built by the player using blocks you designate. Breaking it would break the multiblock, just like breaking any other part of the multiblock.
If i was starting from scratch then it would be built in. But to do it now would break existing setups. The box is only a workaround for troublesome mods, hence it not being present in the initial design .
Firstly, I need to consider dimension world height, rather than assume vanilla, so that needs patched :(
As to the whole chamber idea and V2 factories.
Server wide the learning process for a mob is only started for a unique mob/enchant combination. If that information already exists then no learning takes place. So it is only when a unique pairing exists that this loot box area will be temporarily created and used.
When a unique pairing does exist it will only run 500 test spawns, so the lifetime of the box for that pairing is only 500 seconds.
The size of the loot area has to be flexible. It was originally smaller until one mod spawns it's loot in world slightly farther forcing them to be accelerated to ground layer.
If no mod spawned items directly in the world this would be do much easier :(
Why not add a config option for server owners to build the kill box where the learning takes place. Guidelines being it is built at spawn where the chunks are loaded.
Food for thought
If you wanted to really accelerate the learning process then you could have an option for it to run through each mob at learning 1, 2 and 3 looting, it would increase server load but having the option for a light and heavy mode, light mode would be server friendly meant to be ran on servers with players on. Heavy mode would be done faster but use more server resources to complete the process faster. meant for empty servers or pre launch.