|
@@ -50,6 +50,7 @@ import me.km.playerbank.IPlayerBank;
|
|
|
import me.km.plots.IProtection;
|
|
|
import me.km.scheduler.SnuviScheduler;
|
|
|
import me.km.utils.Mapper;
|
|
|
+import me.km.utils.TableUtils;
|
|
|
import net.minecraft.block.Block;
|
|
|
import net.minecraft.block.BlockState;
|
|
|
import net.minecraft.block.ChestBlock;
|
|
@@ -76,6 +77,7 @@ import net.minecraft.nbt.CompoundNBT;
|
|
|
import net.minecraft.nbt.NBTUtil;
|
|
|
import net.minecraft.network.play.client.CChatMessagePacket;
|
|
|
import net.minecraft.network.play.client.CClientStatusPacket;
|
|
|
+import net.minecraft.network.play.server.SEntityVelocityPacket;
|
|
|
import net.minecraft.network.play.server.SSpawnPositionPacket;
|
|
|
import net.minecraft.network.play.server.STitlePacket;
|
|
|
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
|
|
@@ -85,12 +87,16 @@ import net.minecraft.server.MinecraftServer;
|
|
|
import net.minecraft.server.management.PlayerList;
|
|
|
import net.minecraft.server.management.ProfileBanEntry;
|
|
|
import net.minecraft.state.properties.ChestType;
|
|
|
+import net.minecraft.tags.BlockTags;
|
|
|
+import net.minecraft.tags.ItemTags;
|
|
|
+import net.minecraft.tags.Tag;
|
|
|
import net.minecraft.tileentity.ChestTileEntity;
|
|
|
import net.minecraft.tileentity.MobSpawnerTileEntity;
|
|
|
import net.minecraft.tileentity.SignTileEntity;
|
|
|
import net.minecraft.tileentity.SkullTileEntity;
|
|
|
import net.minecraft.util.Direction;
|
|
|
import net.minecraft.util.NonNullList;
|
|
|
+import net.minecraft.util.ResourceLocation;
|
|
|
import net.minecraft.util.math.MathHelper;
|
|
|
import net.minecraft.util.text.ITextComponent;
|
|
|
import net.minecraft.util.text.StringTextComponent;
|
|
@@ -159,7 +165,23 @@ public class MinecraftFunctions
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Title-library
|
|
|
// ---------------------------------------------------------------------
|
|
|
- sm.registerFunction("title.settime", (sc, in) ->
|
|
|
+ sm.registerFunction("table.getstart", (sc, in) -> TableUtils.getTableStart(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
|
|
|
+ sm.registerFunction("title.getmiddle", (sc, in) -> TableUtils.getTableMiddle(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
|
|
|
+ sm.registerFunction("title.getend", (sc, in) -> TableUtils.getTableEnd(in[0].getInt(sc), in[1].getInt(sc), in[2].getString(sc)));
|
|
|
+ sm.registerFunction("title.get", (sc, in) ->
|
|
|
+ {
|
|
|
+ String[] columns = new String[in.length - 2];
|
|
|
+ for(int i = 0; i < columns.length; i++)
|
|
|
+ {
|
|
|
+ columns[i] = in[i + 2].getString(sc);
|
|
|
+ }
|
|
|
+ return TableUtils.getTable(in[0].getInt(sc), in[1].getString(sc), columns);
|
|
|
+ });
|
|
|
+
|
|
|
+ // ---------------------------------------------------------------------
|
|
|
+ // table library
|
|
|
+ // ---------------------------------------------------------------------
|
|
|
+ sm.registerFunction("table.settime", (sc, in) ->
|
|
|
{
|
|
|
((ServerPlayerEntity) in[0].get(sc)).connection.sendPacket(new STitlePacket(in[1].getInt(sc), in[2].getInt(sc), in[3].getInt(sc)));
|
|
|
return Void.TYPE;
|
|
@@ -362,7 +384,7 @@ public class MinecraftFunctions
|
|
|
return new Location(((PlayerEntity) in[0].get(sc)).world,
|
|
|
Utils.getTargetBlock((PlayerEntity) in[0].get(sc), in[1].getInt(sc), in[2].getBoolean(sc), in[3].getBoolean(sc)));
|
|
|
}
|
|
|
- return new Location(((PlayerEntity) in[0].get(sc)).world, Utils.getTargetBlock((PlayerEntity) in[0].get(sc), in[1].getInt(sc)));
|
|
|
+ return new Location(((PlayerEntity) in[0].get(sc)).world, Utils.getTargetBlock((PlayerEntity) in[0].get(sc), in[1].getInt(sc), true, false));
|
|
|
});
|
|
|
|
|
|
sm.registerFunction("player.gettargetentity", (sc, in) -> Utils.getTargetedEntity((PlayerEntity) in[0].get(sc), in[1].getDouble(sc), getClass(in[2].getString(sc))));
|
|
@@ -654,7 +676,8 @@ public class MinecraftFunctions
|
|
|
}
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
- sm.registerFunction("item.gettooltype", (sc, in) -> Mapper.getToolType((ItemStack) in[0].get(sc)));
|
|
|
+ sm.registerFunction("item.gettag", (sc, in) -> ItemTags.getCollection().get(new ResourceLocation(in[0].getString(sc))));
|
|
|
+ sm.registerFunction("item.hastag", (sc, in) -> ((Tag<Item>) in[0].get(sc)).contains(((ItemStack) in[0].get(sc)).getItem()));
|
|
|
sm.registerFunction("item.get", (sc, in) -> ((ItemStack) in[0].get(sc)).getItem());
|
|
|
sm.registerFunction("item.gettype", (sc, in) -> ((ItemStack) in[0].get(sc)).getItem().getRegistryName().toString());
|
|
|
sm.registerFunction("item.getamount", (sc, in) -> (double) ((ItemStack) in[0].get(sc)).getCount());
|
|
@@ -867,6 +890,8 @@ public class MinecraftFunctions
|
|
|
// ---------------------------------------------------------------------
|
|
|
// Block-library
|
|
|
// ---------------------------------------------------------------------
|
|
|
+ sm.registerFunction("block.gettag", (sc, in) -> BlockTags.getCollection().get(new ResourceLocation(in[0].getString(sc))));
|
|
|
+ sm.registerFunction("block.hastag", (sc, in) -> ((Tag<Block>) in[0].get(sc)).contains((Block) in[0].get(sc)));
|
|
|
sm.registerFunction("block.gettype", (sc, in) ->
|
|
|
{
|
|
|
Location l = (Location) in[0].get(sc);
|
|
@@ -1197,12 +1222,51 @@ public class MinecraftFunctions
|
|
|
sm.registerFunction("entity.getname", (sc, in) -> ((Entity) in[0].get(sc)).getDisplayName().getString());
|
|
|
sm.registerFunction("entity.throw", (sc, in) ->
|
|
|
{
|
|
|
- Utils.setVelocity((Entity) in[0].get(sc), in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc));
|
|
|
+ Entity ent = (Entity) in[0].get(sc);
|
|
|
+ ent.setMotion(in[1].getDouble(sc), in[2].getDouble(sc), in[3].getDouble(sc));
|
|
|
+ if(ent instanceof ServerPlayerEntity)
|
|
|
+ {
|
|
|
+ ServerPlayerEntity p = (ServerPlayerEntity) ent;
|
|
|
+ SEntityVelocityPacket packet = new SEntityVelocityPacket(p);
|
|
|
+ p.connection.sendPacket(packet);
|
|
|
+ }
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
sm.registerFunction("entity.teleport", (sc, in) ->
|
|
|
{
|
|
|
- Utils.teleportEntity((Entity) in[0].get(sc), (Location) in[1].get(sc));
|
|
|
+ Entity ent = (Entity) in[0].get(sc);
|
|
|
+ Location l = (Location) in[1].get(sc);
|
|
|
+ if(ent instanceof ServerPlayerEntity)
|
|
|
+ {
|
|
|
+ ServerPlayerEntity p = (ServerPlayerEntity) ent;
|
|
|
+
|
|
|
+ p.stopRiding();
|
|
|
+ if(p.isSleeping())
|
|
|
+ {
|
|
|
+ p.wakeUpPlayer(true, true, false);
|
|
|
+ }
|
|
|
+
|
|
|
+ float yaw = l.getYaw() != 0.0f ? l.getYaw() : ent.rotationYaw;
|
|
|
+ float pitch = l.getPitch() != 0.0f ? l.getPitch() : ent.rotationPitch;
|
|
|
+ p.teleport((ServerWorld) l.getWorld(), l.getX(), l.getY(), l.getZ(), yaw, pitch);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ if(ent.world != l.getWorld())
|
|
|
+ {
|
|
|
+ ServerWorld ws = (ServerWorld) l.getWorld();
|
|
|
+ ent.changeDimension(ws.getDimension().getType());
|
|
|
+ }
|
|
|
+ if(l.getYaw() != 0 && l.getPitch() != 0)
|
|
|
+ {
|
|
|
+ ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), l.getYaw(), l.getPitch());
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ent.setLocationAndAngles(l.getX(), l.getY(), l.getZ(), ent.rotationYaw, ent.rotationPitch);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
sm.registerFunction("entity.setequip", (sc, in) ->
|
|
@@ -1937,10 +2001,6 @@ public class MinecraftFunctions
|
|
|
String left = SnuviUtils.connect(sc, in, 1);
|
|
|
return ItemStackUtils.getStackFromNbtString((s + left).replace('\'', '"'));
|
|
|
}
|
|
|
- if(s.indexOf(':') == -1)
|
|
|
- {
|
|
|
- s = "minecraft:" + s;
|
|
|
- }
|
|
|
Item item = Mapper.getItem(s);
|
|
|
int amount = in.length >= 2 ? in[1].getInt(sc) : 1;
|
|
|
ItemStack stack = new ItemStack(item, amount);
|