Add the lightEngineMaxBatchSize rule (#654)

* Apply light batch sizes after start region has been created

* Add light batch rules
This commit is contained in:
Andrew S authored and GitHub committed 2021-01-13 21:07:42 -04:00
1 parent b362c46056
commit df20f9e4e4
2 files changed
+55

No files matched your search

+53
View File
@@ -19,6 +19,7 @@ import net.minecraft.world.World;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.util.Iterator;
import java.util.Locale;
import static carpet.settings.RuleCategory.BUGFIX;
@@ -638,6 +639,58 @@ public class CarpetSettings
)
public static int spawnChunksSize = 11;
public static class LightBatchValidator extends Validator<Integer> {
public static void applyLightBatchSizes()
{
Iterator<ServerWorld> iterator = CarpetServer.minecraft_server.getWorlds().iterator();
while (iterator.hasNext())
{
ServerWorld serverWorld = iterator.next();
serverWorld.getChunkManager().getLightingProvider().setTaskBatchSize(lightEngineMaxBatchSize);
}
}
@Override public Integer validate(ServerCommandSource source, ParsedRule<Integer> currentRule, Integer newValue, String string) {
if (source == null) return newValue;
if (newValue < 0)
{
Messenger.m(source, "r light batch size has to be at least 0");
return null;
}
if (currentRule.get().intValue() == newValue.intValue())
{
//must been some startup thing
return newValue;
}
if (CarpetServer.minecraft_server == null) return newValue;
// Set the field before we apply.
try
{
currentRule.field.set(null, newValue.intValue());
}
catch (IllegalAccessException e)
{
Messenger.m(source, "r Unable to access setting for "+currentRule.name);
return null;
}
applyLightBatchSizes(); // Apply new settings
return newValue;
}
}
@Rule(
desc = "Changes maximum light tasks batch size",
extra = {"Allows for a higher light suppression tolerance", "setting it to 5 - Default limit defined by the game"},
category = {EXPERIMENTAL, OPTIMIZATION},
strict = false,
options = {"5", "50", "100", "200"},
validate = LightBatchValidator.class
)
public static int lightEngineMaxBatchSize = 5;
@Rule(desc = "Coral structures will grow with bonemeal from coral plants", category = FEATURE)
public static boolean renewableCoral = false;