added player type
This commit is contained in:
1 parent
c3137203b2
commit
9a875c64e2
3 files changed
+36
-3
No files matched your search
@@ -23,6 +23,7 @@ import carpet.utils.Messenger;
|
||||
public class EntityPlayerMPFake extends ServerPlayerEntity
|
||||
{
|
||||
public Runnable fixStartingPosition = () -> {};
|
||||
public boolean isAShadow;
|
||||
|
||||
public static EntityPlayerMPFake createFake(String username, MinecraftServer server, double d0, double d1, double d2, double yaw, double pitch, DimensionType dimension, GameMode gamemode)
|
||||
{
|
||||
@@ -38,7 +39,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
|
||||
{
|
||||
gameprofile = SkullBlockEntity.loadProperties(gameprofile);
|
||||
}
|
||||
EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, gameprofile, interactionManagerIn);
|
||||
EntityPlayerMPFake instance = new EntityPlayerMPFake(server, worldIn, gameprofile, interactionManagerIn, false);
|
||||
instance.fixStartingPosition = () -> instance.refreshPositionAndAngles(d0, d1, d2, (float) yaw, (float) pitch);
|
||||
server.getPlayerManager().onPlayerConnect(new NetworkManagerFake(NetworkSide.SERVERBOUND), instance);
|
||||
if (instance.dimension != dimension) //player was logged in in a different dimension
|
||||
@@ -73,7 +74,7 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
|
||||
ServerWorld worldIn = server.getWorld(player.dimension);
|
||||
ServerPlayerInteractionManager interactionManagerIn = new ServerPlayerInteractionManager(worldIn);
|
||||
GameProfile gameprofile = player.getGameProfile();
|
||||
EntityPlayerMPFake playerShadow = new EntityPlayerMPFake(server, worldIn, gameprofile, interactionManagerIn);
|
||||
EntityPlayerMPFake playerShadow = new EntityPlayerMPFake(server, worldIn, gameprofile, interactionManagerIn, true);
|
||||
server.getPlayerManager().onPlayerConnect(new NetworkManagerFake(NetworkSide.SERVERBOUND), playerShadow);
|
||||
|
||||
playerShadow.setHealth(player.getHealth());
|
||||
@@ -90,9 +91,10 @@ public class EntityPlayerMPFake extends ServerPlayerEntity
|
||||
return playerShadow;
|
||||
}
|
||||
|
||||
private EntityPlayerMPFake(MinecraftServer server, ServerWorld worldIn, GameProfile profile, ServerPlayerInteractionManager interactionManagerIn)
|
||||
private EntityPlayerMPFake(MinecraftServer server, ServerWorld worldIn, GameProfile profile, ServerPlayerInteractionManager interactionManagerIn, boolean shadow)
|
||||
{
|
||||
super(server, worldIn, profile, interactionManagerIn);
|
||||
isAShadow = shadow;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -155,6 +155,7 @@ public class CarpetExpression
|
||||
private final Expression expr;
|
||||
Expression getExpr() {return expr;}
|
||||
private static long tickStart = 0L;
|
||||
// dummy entity for dummy requirements in the loot tables (see snowball)
|
||||
private static FallingBlockEntity DUMMY_ENTITY = new FallingBlockEntity(EntityType.FALLING_BLOCK, null);
|
||||
|
||||
private static boolean stopAll = false;
|
||||
@@ -2157,6 +2158,17 @@ public class CarpetExpression
|
||||
* <p>String with gamemode, or <code>null</code> if not a player.</p>
|
||||
* <h3><code>query(e,'gamemode_id')</code></h3>
|
||||
* <p>Good'ol gamemode id, or null if not a player.</p>
|
||||
* <h3><code>query(e,'player_type')</code></h3>
|
||||
* <p>Returns <code>null</code> if the argument is not a player, otherwise:</p>
|
||||
* <ul>
|
||||
* <li><code>singleplayer</code>: for singleplayer game</li>
|
||||
* <li><code>multiplayer</code>: for players on a dedicated server</li>
|
||||
* <li><code>lan_host</code>: for singleplayer owner that opened the game to LAN</li>
|
||||
* <li><code>lan_player</code>: for all other players that connected to a LAN host</li>
|
||||
* <li><code>fake</code>: any carpet-spanwed fake player</li>
|
||||
* <li><code>shadow</code>: any carpet-shadowed real player</li>
|
||||
* <li><code>realms</code>: ?</li>
|
||||
* </ul>
|
||||
* <h3><code>query(e,'permission_level')</code></h3>
|
||||
* <p>Player's permission level, or <code>null</code> if not applicable for this entity.</p>
|
||||
*
|
||||
|
||||
@@ -4,6 +4,7 @@ import carpet.fakes.EntityInterface;
|
||||
import carpet.fakes.ItemEntityInterface;
|
||||
import carpet.fakes.MobEntityInterface;
|
||||
import carpet.helpers.Tracer;
|
||||
import carpet.patches.EntityPlayerMPFake;
|
||||
import carpet.script.CarpetContext;
|
||||
import carpet.script.EntityEventsGroup;
|
||||
import carpet.script.exception.InternalExpressionException;
|
||||
@@ -32,6 +33,7 @@ import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.predicate.entity.EntityPredicates;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.server.command.ServerCommandSource;
|
||||
import net.minecraft.server.integrated.IntegratedServer;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.text.LiteralText;
|
||||
@@ -311,6 +313,23 @@ public class EntityValue extends Value
|
||||
return Value.NULL;
|
||||
});
|
||||
|
||||
put("player_type", (e, a) -> {
|
||||
if (e instanceof PlayerEntity)
|
||||
{
|
||||
if (e instanceof EntityPlayerMPFake) return new StringValue(((EntityPlayerMPFake) e).isAShadow?"shadow":"fake");
|
||||
PlayerEntity p = (PlayerEntity)e;
|
||||
MinecraftServer server = p.getEntityWorld().getServer();
|
||||
if (server.isDedicated()) return new StringValue("multiplayer");
|
||||
boolean runningLan = server.isRemote();
|
||||
if (!runningLan) return new StringValue("singleplayer");
|
||||
boolean isowner = server.isOwner(p.getGameProfile());
|
||||
if (isowner) return new StringValue("lan_host");
|
||||
return new StringValue("lan player");
|
||||
// realms?
|
||||
}
|
||||
return Value.NULL;
|
||||
});
|
||||
|
||||
//spectating_entity
|
||||
// isGlowing
|
||||
put("effect", (e, a) ->
|
||||
|
||||
Reference in new issue
Block a user