Merge branch 'master' into 1.17
# Conflicts: # src/main/java/carpet/commands/PerimeterInfoCommand.java # src/main/resources/carpet.mixins.json
This commit is contained in:
commit
0cce983092
14 files changed
+93
-21
No files matched your search
@@ -610,7 +610,7 @@ Available options in the scarpet app space:
|
|||||||
* `world_folder` - name of the direct folder in the saves that holds world files
|
* `world_folder` - name of the direct folder in the saves that holds world files
|
||||||
* `world_carpet_rules` - returns all Carpet rules in a map form (`rule`->`value`). Note that the values are always returned as strings, so you can't do boolean comparisons directly. Includes rules from extensions with their namespace (`namespace:rule`->`value`). You can later listen to rule changes with the `on_carpet_rule_changes(rule, newValue)` event.
|
* `world_carpet_rules` - returns all Carpet rules in a map form (`rule`->`value`). Note that the values are always returned as strings, so you can't do boolean comparisons directly. Includes rules from extensions with their namespace (`namespace:rule`->`value`). You can later listen to rule changes with the `on_carpet_rule_changes(rule, newValue)` event.
|
||||||
* `world_gamerules` - returns all gamerules in a map form (`rule`->`value`). Like carpet rules, values are returned as strings, so you can use appropriate value conversions using `bool()` or `number()` to convert them to other values. Gamerules are read-only to discourage app programmers to mess up with the settings intentionally applied by server admins. Isn't that just super annoying when a datapack messes up with your gamerule settings? It is still possible to change them though using `run('gamerule ...`.
|
* `world_gamerules` - returns all gamerules in a map form (`rule`->`value`). Like carpet rules, values are returned as strings, so you can use appropriate value conversions using `bool()` or `number()` to convert them to other values. Gamerules are read-only to discourage app programmers to mess up with the settings intentionally applied by server admins. Isn't that just super annoying when a datapack messes up with your gamerule settings? It is still possible to change them though using `run('gamerule ...`.
|
||||||
|
* `world_spawn_point` - world spawn point
|
||||||
|
|
||||||
Relevant gameplay related properties
|
Relevant gameplay related properties
|
||||||
* `game_difficulty` - current difficulty of the game: `'peaceful'`, `'easy'`, `'normal'`, or `'hard'`
|
* `game_difficulty` - current difficulty of the game: `'peaceful'`, `'easy'`, `'normal'`, or `'hard'`
|
||||||
|
|||||||
@@ -227,11 +227,12 @@ length('foo') => 3
|
|||||||
### `rand(expr), rand(expr, seed)`
|
### `rand(expr), rand(expr, seed)`
|
||||||
|
|
||||||
returns a random number from `0.0` (inclusive) to `expr` (exclusive). In boolean context (in conditions,
|
returns a random number from `0.0` (inclusive) to `expr` (exclusive). In boolean context (in conditions,
|
||||||
boolean functions, or `bool`), returns false if the randomly selected value is less than 1\. This means
|
boolean functions, or `bool`), returns false if the randomly selected value is less than 1. This means
|
||||||
that `rand(2)` returns true half of the time and `rand(5)` returns true for 80% (4/5) of the time. If seed is not
|
that `bool(rand(2))` returns true half of the time and `!rand(5)` returns true for 20% (1/5) of the time. If seed is not
|
||||||
provided, uses a random seed. If seed is provided, each consecutive call to rand() will act like 'next' call to the
|
provided, uses a random seed that's shared across all scarpet apps.
|
||||||
same random object. Scarpet keeps track of up to 1024 custom random number generators, so if you exceed this number
|
If seed is provided, each consecutive call to rand() will act like 'next' call to the
|
||||||
(per app), then your random sequence will revert to the beginning.
|
same random object. Scarpet keeps track of up to 65536 custom random number generators (custom seeds, per app),
|
||||||
|
so if you exceed this number, your random sequences will revert to the beginning and start over.
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
map(range(10), floor(rand(10))) => [5, 8, 0, 6, 9, 3, 9, 9, 1, 8]
|
map(range(10), floor(rand(10))) => [5, 8, 0, 6, 9, 3, 9, 9, 1, 8]
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ public class PerimeterInfoCommand
|
|||||||
});
|
});
|
||||||
if (!(baseEntity instanceof MobEntity))
|
if (!(baseEntity instanceof MobEntity))
|
||||||
{
|
{
|
||||||
Messenger.m(source, "r Failed to spawn test entity");
|
Messenger.m(source, "r /perimeterinfo requires a mob entity to test agains.");
|
||||||
if (baseEntity != null) baseEntity.discard(); // discard //remove();
|
if (baseEntity != null) baseEntity.discard();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
entityliving = (MobEntity) baseEntity;
|
entityliving = (MobEntity) baseEntity;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import carpet.script.exception.CarpetExpressionException;
|
|||||||
import carpet.script.value.FunctionValue;
|
import carpet.script.value.FunctionValue;
|
||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
import carpet.settings.SettingsManager;
|
import carpet.settings.SettingsManager;
|
||||||
|
import carpet.utils.CarpetProfiler;
|
||||||
import carpet.utils.Messenger;
|
import carpet.utils.Messenger;
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||||
@@ -396,6 +397,7 @@ public class ScriptCommand
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet ace", CarpetProfiler.TYPE.GENERAL);
|
||||||
host.setChatErrorSnooper(source);
|
host.setChatErrorSnooper(source);
|
||||||
long start = System.nanoTime();
|
long start = System.nanoTime();
|
||||||
Value result = call.get();
|
Value result = call.get();
|
||||||
@@ -412,7 +414,9 @@ public class ScriptCommand
|
|||||||
metric = "s";
|
metric = "s";
|
||||||
}
|
}
|
||||||
Messenger.m(source, "wi = ", "wb "+result.getString(), "gi ("+time+metric+")");
|
Messenger.m(source, "wi = ", "wb "+result.getString(), "gi ("+time+metric+")");
|
||||||
return (int)result.readInteger();
|
int intres = (int)result.readInteger();
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
|
return intres;
|
||||||
}
|
}
|
||||||
catch (CarpetExpressionException e)
|
catch (CarpetExpressionException e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
package carpet.mixins;
|
||||||
|
|
||||||
|
import carpet.CarpetSettings;
|
||||||
|
import net.minecraft.block.BlockState;
|
||||||
|
import net.minecraft.block.ShapeContext;
|
||||||
|
import net.minecraft.entity.player.PlayerEntity;
|
||||||
|
import net.minecraft.item.ItemPlacementContext;
|
||||||
|
import net.minecraft.item.WallStandingBlockItem;
|
||||||
|
import net.minecraft.util.math.BlockPos;
|
||||||
|
import net.minecraft.util.shape.VoxelShape;
|
||||||
|
import net.minecraft.world.WorldView;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(WallStandingBlockItem.class)
|
||||||
|
public class WallStandingBlockItem_creativeNoClipMixin
|
||||||
|
{
|
||||||
|
@Redirect(method = "getPlacementState", at = @At(
|
||||||
|
value = "INVOKE",
|
||||||
|
target = "Lnet/minecraft/world/WorldView;canPlace(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Z"
|
||||||
|
))
|
||||||
|
private boolean canCreativePlayerPlace(
|
||||||
|
WorldView worldView, BlockState state, BlockPos pos, ShapeContext context,
|
||||||
|
ItemPlacementContext itemcontext
|
||||||
|
)
|
||||||
|
{
|
||||||
|
PlayerEntity player = itemcontext.getPlayer();
|
||||||
|
if (CarpetSettings.creativeNoClip && player != null && player.isCreative() && player.abilities.flying)
|
||||||
|
{
|
||||||
|
// copy from canPlace
|
||||||
|
VoxelShape voxelShape = state.getCollisionShape(worldView, pos, context);
|
||||||
|
return voxelShape.isEmpty() || worldView.intersectsEntities(player, voxelShape.offset(pos.getX(), pos.getY(), pos.getZ()));
|
||||||
|
|
||||||
|
}
|
||||||
|
return worldView.canPlace(state, pos, context);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import carpet.script.value.StringValue;
|
|||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
import carpet.script.value.ValueConversions;
|
import carpet.script.value.ValueConversions;
|
||||||
import carpet.settings.ParsedRule;
|
import carpet.settings.ParsedRule;
|
||||||
|
import carpet.utils.CarpetProfiler;
|
||||||
import carpet.utils.Messenger;
|
import carpet.utils.Messenger;
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
@@ -204,6 +205,7 @@ public class CarpetEventServer
|
|||||||
{
|
{
|
||||||
if (callList.size() > 0)
|
if (callList.size() > 0)
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet events", CarpetProfiler.TYPE.GENERAL);
|
||||||
List<Value> argv = argumentSupplier.get(); // empty for onTickDone
|
List<Value> argv = argumentSupplier.get(); // empty for onTickDone
|
||||||
ServerCommandSource source;
|
ServerCommandSource source;
|
||||||
try
|
try
|
||||||
@@ -225,6 +227,7 @@ public class CarpetEventServer
|
|||||||
if (!call.execute(source, argv)) fails.add(call);
|
if (!call.execute(source, argv)) fails.add(call);
|
||||||
}
|
}
|
||||||
for (Callback call : fails) callList.remove(call);
|
for (Callback call : fails) callList.remove(call);
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import carpet.script.value.MapValue;
|
|||||||
import carpet.script.value.NumericValue;
|
import carpet.script.value.NumericValue;
|
||||||
import carpet.script.value.StringValue;
|
import carpet.script.value.StringValue;
|
||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
|
import carpet.utils.CarpetProfiler;
|
||||||
import carpet.utils.Messenger;
|
import carpet.utils.Messenger;
|
||||||
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
@@ -127,6 +128,7 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
|
|
||||||
private static int execute(CommandContext<ServerCommandSource> ctx, String hostName, FunctionArgument<Value> funcSpec, List<String> paramNames) throws CommandSyntaxException
|
private static int execute(CommandContext<ServerCommandSource> ctx, String hostName, FunctionArgument<Value> funcSpec, List<String> paramNames) throws CommandSyntaxException
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL);
|
||||||
CarpetScriptHost cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(ctx.getSource());
|
CarpetScriptHost cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(ctx.getSource());
|
||||||
List<String> argNames = funcSpec.function.getArguments();
|
List<String> argNames = funcSpec.function.getArguments();
|
||||||
if ((argNames.size()-funcSpec.args.size()) != paramNames.size())
|
if ((argNames.size()-funcSpec.args.size()) != paramNames.size())
|
||||||
@@ -140,7 +142,9 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
Value response = cHost.handleCommand(ctx.getSource(), funcSpec.function, args);
|
Value response = cHost.handleCommand(ctx.getSource(), funcSpec.function, args);
|
||||||
// will skip prints for new
|
// will skip prints for new
|
||||||
//if (!response.isNull()) Messenger.m(ctx.getSource(), "gi " + response.getString());
|
//if (!response.isNull()) Messenger.m(ctx.getSource(), "gi " + response.getString());
|
||||||
return (int) response.readInteger();
|
int intres = (int) response.readInteger();
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
|
return intres;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiteralArgumentBuilder<ServerCommandSource> addPathToCommand(
|
public LiteralArgumentBuilder<ServerCommandSource> addPathToCommand(
|
||||||
@@ -210,12 +214,15 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
return s -> {
|
return s -> {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL);
|
||||||
CarpetScriptHost cHost = null;
|
CarpetScriptHost cHost = null;
|
||||||
cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(s);
|
cHost = CarpetServer.scriptServer.modules.get(hostName).retrieveOwnForExecution(s);
|
||||||
Value response = cHost.handleCommand(s, fun, Collections.singletonList(
|
Value response = cHost.handleCommand(s, fun, Collections.singletonList(
|
||||||
(s.getEntity() instanceof ServerPlayerEntity)?new EntityValue(s.getEntity()):Value.NULL)
|
(s.getEntity() instanceof ServerPlayerEntity)?new EntityValue(s.getEntity()):Value.NULL)
|
||||||
);
|
);
|
||||||
return response.getBoolean();
|
boolean res = response.getBoolean();
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
catch (CommandSyntaxException e)
|
catch (CommandSyntaxException e)
|
||||||
{
|
{
|
||||||
@@ -546,7 +553,10 @@ public class CarpetScriptHost extends ScriptHost
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return callLegacy(source, call, coords, arg);
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet legacy", CarpetProfiler.TYPE.GENERAL);
|
||||||
|
Value res = callLegacy(source, call, coords, arg);
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
catch (CarpetExpressionException exc)
|
catch (CarpetExpressionException exc)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,19 +1,15 @@
|
|||||||
package carpet.script;
|
package carpet.script;
|
||||||
|
|
||||||
import carpet.CarpetSettings;
|
import carpet.CarpetSettings;
|
||||||
import carpet.script.argument.FunctionArgument;
|
|
||||||
import carpet.script.bundled.BundledModule;
|
import carpet.script.bundled.BundledModule;
|
||||||
import carpet.CarpetServer;
|
import carpet.CarpetServer;
|
||||||
import carpet.script.bundled.FileModule;
|
import carpet.script.bundled.FileModule;
|
||||||
import carpet.script.bundled.Module;
|
import carpet.script.bundled.Module;
|
||||||
import carpet.script.command.CommandToken;
|
|
||||||
import carpet.script.exception.InvalidCallbackException;
|
import carpet.script.exception.InvalidCallbackException;
|
||||||
import carpet.script.value.FunctionValue;
|
import carpet.script.value.FunctionValue;
|
||||||
import carpet.script.value.StringValue;
|
|
||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
|
import carpet.utils.CarpetProfiler;
|
||||||
import carpet.utils.Messenger;
|
import carpet.utils.Messenger;
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import com.mojang.brigadier.tree.CommandNode;
|
import com.mojang.brigadier.tree.CommandNode;
|
||||||
|
|
||||||
@@ -229,6 +225,7 @@ public class CarpetScriptServer
|
|||||||
public boolean addScriptHost(ServerCommandSource source, String name, Function<ServerCommandSource, Boolean> commandValidator,
|
public boolean addScriptHost(ServerCommandSource source, String name, Function<ServerCommandSource, Boolean> commandValidator,
|
||||||
boolean perPlayer, boolean autoload, boolean isRuleApp)
|
boolean perPlayer, boolean autoload, boolean isRuleApp)
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet loading", CarpetProfiler.TYPE.GENERAL);
|
||||||
if (commandValidator == null) commandValidator = p -> true;
|
if (commandValidator == null) commandValidator = p -> true;
|
||||||
long start = System.nanoTime();
|
long start = System.nanoTime();
|
||||||
name = name.toLowerCase(Locale.ROOT);
|
name = name.toLowerCase(Locale.ROOT);
|
||||||
@@ -301,6 +298,7 @@ public class CarpetScriptServer
|
|||||||
FunctionValue onStart = newHost.getFunction("__on_start");
|
FunctionValue onStart = newHost.getFunction("__on_start");
|
||||||
if (onStart != null) newHost.callNow(onStart, Collections.emptyList());
|
if (onStart != null) newHost.callNow(onStart, Collections.emptyList());
|
||||||
}
|
}
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
long end = System.nanoTime();
|
long end = System.nanoTime();
|
||||||
CarpetSettings.LOG.info("App "+name+" loaded in "+(end-start)/1000000+" ms");
|
CarpetSettings.LOG.info("App "+name+" loaded in "+(end-start)/1000000+" ms");
|
||||||
return true;
|
return true;
|
||||||
@@ -412,11 +410,16 @@ public class CarpetScriptServer
|
|||||||
|
|
||||||
public void tick()
|
public void tick()
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken token;
|
||||||
|
token = CarpetProfiler.start_section(null, "Scarpet schedule", CarpetProfiler.TYPE.GENERAL);
|
||||||
events.tick();
|
events.tick();
|
||||||
|
CarpetProfiler.end_current_section(token);
|
||||||
|
token = CarpetProfiler.start_section(null, "Scarpet app data", CarpetProfiler.TYPE.GENERAL);
|
||||||
for (CarpetScriptHost host : modules.values())
|
for (CarpetScriptHost host : modules.values())
|
||||||
{
|
{
|
||||||
host.tick();
|
host.tick();
|
||||||
}
|
}
|
||||||
|
CarpetProfiler.end_current_section(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onClose()
|
public void onClose()
|
||||||
|
|||||||
@@ -765,7 +765,7 @@ public class Expression
|
|||||||
{
|
{
|
||||||
if (token.surface.equals(";"))
|
if (token.surface.equals(";"))
|
||||||
{
|
{
|
||||||
throw new ExpressionException(c, this, token, "Unnecessary semicolon");
|
throw new ExpressionException(c, this, token, "Empty expression found for ';'");
|
||||||
}
|
}
|
||||||
throw new ExpressionException(c, this, token, "Missing parameter(s) for operator " + token);
|
throw new ExpressionException(c, this, token, "Missing parameter(s) for operator " + token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public abstract class ScriptHost
|
|||||||
|
|
||||||
public Random getRandom(long aLong)
|
public Random getRandom(long aLong)
|
||||||
{
|
{
|
||||||
if (randomizers.size() > 1024)
|
if (randomizers.size() > 65536)
|
||||||
randomizers.clear();
|
randomizers.clear();
|
||||||
return randomizers.computeIfAbsent(aLong, Random::new);
|
return randomizers.computeIfAbsent(aLong, Random::new);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import carpet.script.value.NumericValue;
|
|||||||
import carpet.script.value.StringValue;
|
import carpet.script.value.StringValue;
|
||||||
import carpet.script.value.Value;
|
import carpet.script.value.Value;
|
||||||
import carpet.script.value.ValueConversions;
|
import carpet.script.value.ValueConversions;
|
||||||
|
import carpet.utils.CarpetProfiler;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.brigadier.arguments.ArgumentType;
|
import com.mojang.brigadier.arguments.ArgumentType;
|
||||||
@@ -365,6 +366,7 @@ public abstract class CommandArgument
|
|||||||
{
|
{
|
||||||
if (customSuggester != null)
|
if (customSuggester != null)
|
||||||
{
|
{
|
||||||
|
CarpetProfiler.ProfilerToken currentSection = CarpetProfiler.start_section(null, "Scarpet command", CarpetProfiler.TYPE.GENERAL);
|
||||||
Map<Value, Value> params = new HashMap<>();
|
Map<Value, Value> params = new HashMap<>();
|
||||||
for(ParsedCommandNode<ServerCommandSource> pnode : context.getNodes())
|
for(ParsedCommandNode<ServerCommandSource> pnode : context.getNodes())
|
||||||
{
|
{
|
||||||
@@ -379,7 +381,9 @@ public abstract class CommandArgument
|
|||||||
args.addAll(customSuggester.args);
|
args.addAll(customSuggester.args);
|
||||||
Value response = host.handleCommand(context.getSource(), customSuggester.function, args);
|
Value response = host.handleCommand(context.getSource(), customSuggester.function, args);
|
||||||
if (!(response instanceof ListValue)) throw error("Custom suggester should return a list of options"+" for custom type "+suffix);
|
if (!(response instanceof ListValue)) throw error("Custom suggester should return a list of options"+" for custom type "+suffix);
|
||||||
return ((ListValue) response).getItems().stream().map(Value::getString).collect(Collectors.toList());
|
Collection<String> res = ((ListValue) response).getItems().stream().map(Value::getString).collect(Collectors.toList());
|
||||||
|
CarpetProfiler.end_current_section(currentSection);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
if (needsMatching) return examples;
|
if (needsMatching) return examples;
|
||||||
//return Lists.newArrayList("");
|
//return Lists.newArrayList("");
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import net.fabricmc.loader.api.FabricLoader;
|
|||||||
import net.minecraft.SharedConstants;
|
import net.minecraft.SharedConstants;
|
||||||
import net.minecraft.util.WorldSavePath;
|
import net.minecraft.util.WorldSavePath;
|
||||||
import net.minecraft.world.GameRules;
|
import net.minecraft.world.GameRules;
|
||||||
|
import net.minecraft.world.WorldProperties;
|
||||||
|
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@@ -52,6 +53,11 @@ public class SystemInfo {
|
|||||||
return StringValue.of(tlf);
|
return StringValue.of(tlf);
|
||||||
});
|
});
|
||||||
put("world_dimensions", c -> ListValue.wrap(c.s.getMinecraftServer().getWorldRegistryKeys().stream().map(k -> ValueConversions.of(k.getValue())).collect(Collectors.toList())));
|
put("world_dimensions", c -> ListValue.wrap(c.s.getMinecraftServer().getWorldRegistryKeys().stream().map(k -> ValueConversions.of(k.getValue())).collect(Collectors.toList())));
|
||||||
|
put("world_spawn_point", c -> {
|
||||||
|
WorldProperties prop = c.s.getMinecraftServer().getOverworld().getLevelProperties();
|
||||||
|
return ListValue.of(NumericValue.of(prop.getSpawnX()), NumericValue.of(prop.getSpawnY()), NumericValue.of(prop.getSpawnZ()));
|
||||||
|
});
|
||||||
|
|
||||||
put("game_difficulty", c -> StringValue.of(c.s.getMinecraftServer().getSaveProperties().getDifficulty().getName()));
|
put("game_difficulty", c -> StringValue.of(c.s.getMinecraftServer().getSaveProperties().getDifficulty().getName()));
|
||||||
put("game_hardcore", c -> new NumericValue(c.s.getMinecraftServer().getSaveProperties().isHardcore()));
|
put("game_hardcore", c -> new NumericValue(c.s.getMinecraftServer().getSaveProperties().isHardcore()));
|
||||||
put("game_storage_format", c -> StringValue.of(c.s.getMinecraftServer().getSaveProperties().getFormatName(c.s.getMinecraftServer().getSaveProperties().getVersion())));
|
put("game_storage_format", c -> StringValue.of(c.s.getMinecraftServer().getSaveProperties().getFormatName(c.s.getMinecraftServer().getSaveProperties().getVersion())));
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ public class CarpetProfiler
|
|||||||
private static int tick_health_elapsed = 0;
|
private static int tick_health_elapsed = 0;
|
||||||
private static TYPE test_type = TYPE.NONE; //1 for ticks, 2 for entities;
|
private static TYPE test_type = TYPE.NONE; //1 for ticks, 2 for entities;
|
||||||
private static long current_tick_start = 0;
|
private static long current_tick_start = 0;
|
||||||
private static final String[] GENERAL_SECTIONS = {"Network", "Autosave", "Async Tasks", "Datapacks",};
|
private static final String[] GENERAL_SECTIONS = {"Network", "Autosave", "Async Tasks", "Datapacks",
|
||||||
|
"Scarpet ace", "Scarpet legacy", "Scarpet events", "Scarpet schedule",
|
||||||
|
"Scarpet command", "Scarpet loading", "Scarpet app data"};
|
||||||
private static final String[] SECTIONS = {
|
private static final String[] SECTIONS = {
|
||||||
"Spawning and Random Ticks", "Ticket Manager","Unloading",
|
"Spawning and Random Ticks", "Ticket Manager","Unloading",
|
||||||
"Blocks", "Entities", "Block Entities",
|
"Blocks", "Entities", "Block Entities",
|
||||||
|
|||||||
@@ -196,6 +196,7 @@
|
|||||||
"PlayerEntity_creativeNoClipMixin",
|
"PlayerEntity_creativeNoClipMixin",
|
||||||
"PistonBlockEntity_playerHandlingMixin",
|
"PistonBlockEntity_playerHandlingMixin",
|
||||||
"BlockItem_creativeNoClipMixin",
|
"BlockItem_creativeNoClipMixin",
|
||||||
|
"WallStandingBlockItem_creativeNoClipMixin",
|
||||||
"LivingEntity_creativeFlyMixin",
|
"LivingEntity_creativeFlyMixin",
|
||||||
"BaseRangeDecorator_cleanLogsMixin"
|
"BaseRangeDecorator_cleanLogsMixin"
|
||||||
],
|
],
|
||||||
|
|||||||
Reference in new issue
Block a user