|
@@ -115,6 +115,7 @@ import net.minecraft.server.management.PlayerList;
|
|
|
import net.minecraft.server.management.ProfileBanEntry;
|
|
|
import net.minecraft.state.IProperty;
|
|
|
import net.minecraft.state.properties.ChestType;
|
|
|
+import net.minecraft.stats.Stats;
|
|
|
import net.minecraft.tags.BlockTags;
|
|
|
import net.minecraft.tags.ItemTags;
|
|
|
import net.minecraft.tags.Tag;
|
|
@@ -475,10 +476,15 @@ public class MinecraftFunctions
|
|
|
sm.registerAlias("player.setspawn", "player.setbedspawn");
|
|
|
sm.registerFunction("player.damageitem", (sc, in) ->
|
|
|
{
|
|
|
- PlayerEntity p =(PlayerEntity) in[0].get(sc);
|
|
|
+ PlayerEntity p = (PlayerEntity) in[0].get(sc);
|
|
|
p.getHeldItemMainhand().damageItem(in[1].getInt(sc), p, (c) -> {});
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
+ sm.registerFunction("player.damagearmor", (sc, in) ->
|
|
|
+ {
|
|
|
+ ((PlayerEntity) in[0].get(sc)).inventory.damageArmor(in[1].getFloat(sc));
|
|
|
+ return Void.TYPE;
|
|
|
+ });
|
|
|
sm.registerFunction("player.openenderchest", (sc, in) ->
|
|
|
{
|
|
|
PlayerEntity p1 = (PlayerEntity) in[0].get(sc);
|
|
@@ -1134,59 +1140,18 @@ public class MinecraftFunctions
|
|
|
// ---------------------------------------------------------------------
|
|
|
// damage stuff
|
|
|
// ---------------------------------------------------------------------
|
|
|
- sm.registerFunction("damage.ismagic", (sc, in) ->
|
|
|
- {
|
|
|
- DamageSource ds = ((DamageSource) in[0].get(sc));
|
|
|
- return ds.isMagicDamage() && !ds.isDamageAbsolute();
|
|
|
- });
|
|
|
- sm.registerFunction("damage.isphysical", (sc, in) ->
|
|
|
- {
|
|
|
- DamageSource ds = ((DamageSource) in[0].get(sc));
|
|
|
- return (!ds.isMagicDamage() || ds.isDamageAbsolute()) && !ds.isUnblockable();
|
|
|
- });
|
|
|
+ sm.registerFunction("damage.getimmediatesource", (sc, in) -> ((DamageSource) in[0].get(sc)).getImmediateSource());
|
|
|
+ sm.registerFunction("damage.gettruesource", (sc, in) -> ((DamageSource) in[0].get(sc)).getTrueSource());
|
|
|
+ sm.registerFunction("damage.iscreativeplayer", (sc, in) -> ((DamageSource) in[0].get(sc)).isCreativePlayer());
|
|
|
+ sm.registerFunction("damage.isabsolute", (sc, in) -> ((DamageSource) in[0].get(sc)).isDamageAbsolute());
|
|
|
+ sm.registerFunction("damage.isdifficultyscaled", (sc, in) -> ((DamageSource) in[0].get(sc)).isDifficultyScaled());
|
|
|
+ sm.registerFunction("damage.isexplosion", (sc, in) -> ((DamageSource) in[0].get(sc)).isExplosion());
|
|
|
+ sm.registerFunction("damage.isfireDamage", (sc, in) -> ((DamageSource) in[0].get(sc)).isFireDamage());
|
|
|
+ sm.registerFunction("damage.isunblockable", (sc, in) -> ((DamageSource) in[0].get(sc)).isMagicDamage());
|
|
|
+ sm.registerFunction("damage.ismagic", (sc, in) -> ((DamageSource) in[0].get(sc)).isProjectile());
|
|
|
+ sm.registerFunction("damage.isunblockable", (sc, in) -> ((DamageSource) in[0].get(sc)).isUnblockable());
|
|
|
sm.registerFunction("damage.gettype", (sc, in) -> ((DamageSource) in[0].get(sc)).getDamageType());
|
|
|
-
|
|
|
- // ---------------------------------------------------------------------
|
|
|
- // entity commands
|
|
|
- // ---------------------------------------------------------------------
|
|
|
- sm.registerFunction("entity.setburning", (sc, in) ->
|
|
|
- {
|
|
|
-
|
|
|
- ((Entity) in[0].get(sc)).setFire(in[1].getInt(sc));
|
|
|
- return Void.TYPE;
|
|
|
- });
|
|
|
- sm.registerFunction("entity.isburning", (sc, in) -> ((Entity) in[0].get(sc)).isBurning());
|
|
|
- sm.registerFunction("entity.getlook", (sc, in) ->
|
|
|
- {
|
|
|
- Object[] o = new Object[3];
|
|
|
- Vec3d v = ((Entity) in[0].get(sc)).getLookVec();
|
|
|
- o[0] = v.x;
|
|
|
- o[1] = v.y;
|
|
|
- o[2] = v.z;
|
|
|
- return o;
|
|
|
- });
|
|
|
- sm.registerFunction("entity.getlocation", (sc, in) -> new Location((Entity) in[0].get(sc)));
|
|
|
- sm.registerFunction("entity.damage", (sc, in) ->
|
|
|
- {
|
|
|
- if(in.length >= 3)
|
|
|
- {
|
|
|
- ((LivingEntity) in[0].get(sc)).attackEntityFrom((DamageSource) in[2].get(sc), in[1].getFloat(sc));
|
|
|
- return Void.TYPE;
|
|
|
- }
|
|
|
- ((LivingEntity) in[0].get(sc)).attackEntityFrom(DamageSource.GENERIC, in[1].getFloat(sc));
|
|
|
- return Void.TYPE;
|
|
|
- });
|
|
|
- sm.registerFunction("entity.fromsource", (sc, in) ->
|
|
|
- {
|
|
|
- DamageSource ds = (DamageSource) in[0].get(sc);
|
|
|
- Entity ent = ds.getTrueSource();
|
|
|
- if(ent == null)
|
|
|
- {
|
|
|
- return ds.getImmediateSource();
|
|
|
- }
|
|
|
- return ent;
|
|
|
- });
|
|
|
- sm.registerFunction("entity.getdamagesource", (sc, in) ->
|
|
|
+ sm.registerFunction("damage.get", (sc, in) ->
|
|
|
{
|
|
|
Object o = in[0].get(sc);
|
|
|
if(o instanceof LivingEntity)
|
|
@@ -1235,30 +1200,114 @@ public class MinecraftFunctions
|
|
|
|
|
|
switch(o.toString())
|
|
|
{
|
|
|
- case "IN_FIRE": return DamageSource.IN_FIRE;
|
|
|
- case "LIGHTNING_BOLT": return DamageSource.LIGHTNING_BOLT;
|
|
|
- case "ON_FIRE": return DamageSource.ON_FIRE;
|
|
|
- case "LAVA": return DamageSource.LAVA;
|
|
|
- case "HOT_FLOOR": return DamageSource.HOT_FLOOR;
|
|
|
- case "IN_WALL": return DamageSource.IN_WALL;
|
|
|
- case "CRAMMING": return DamageSource.CRAMMING;
|
|
|
- case "DROWN": return DamageSource.DROWN;
|
|
|
- case "STARVE": return DamageSource.STARVE;
|
|
|
- case "CACTUS": return DamageSource.CACTUS;
|
|
|
- case "FALL": return DamageSource.FALL;
|
|
|
- case "FLY_INTO_WALL": return DamageSource.FLY_INTO_WALL;
|
|
|
- case "OUT_OF_WORLD": return DamageSource.OUT_OF_WORLD;
|
|
|
- case "GENERIC": return DamageSource.GENERIC;
|
|
|
- case "MAGIC": return DamageSource.MAGIC;
|
|
|
- case "WITHER": return DamageSource.WITHER;
|
|
|
- case "ANVIL": return DamageSource.ANVIL;
|
|
|
- case "FALLING_BLOCK": return DamageSource.FALLING_BLOCK;
|
|
|
- case "DRAGON_BREATH": return DamageSource.DRAGON_BREATH;
|
|
|
- case "FIREWORKS": return DamageSource.FIREWORKS;
|
|
|
- case "THORNS": return DamageSource.causeThornsDamage((Entity) in[1].get(sc));
|
|
|
+ case "inFire": return DamageSource.IN_FIRE;
|
|
|
+ case "lightningBolt": return DamageSource.LIGHTNING_BOLT;
|
|
|
+ case "onFire": return DamageSource.ON_FIRE;
|
|
|
+ case "lava": return DamageSource.LAVA;
|
|
|
+ case "hotFloor": return DamageSource.HOT_FLOOR;
|
|
|
+ case "inWall": return DamageSource.IN_WALL;
|
|
|
+ case "cramming": return DamageSource.CRAMMING;
|
|
|
+ case "drown": return DamageSource.DROWN;
|
|
|
+ case "starve": return DamageSource.STARVE;
|
|
|
+ case "cactus": return DamageSource.CACTUS;
|
|
|
+ case "fall": return DamageSource.FALL;
|
|
|
+ case "flyIntoWall": return DamageSource.FLY_INTO_WALL;
|
|
|
+ case "outOfWorld": return DamageSource.OUT_OF_WORLD;
|
|
|
+ case "generic": return DamageSource.GENERIC;
|
|
|
+ case "magic": return DamageSource.MAGIC;
|
|
|
+ case "wither": return DamageSource.WITHER;
|
|
|
+ case "anvil": return DamageSource.ANVIL;
|
|
|
+ case "fallingBlock": return DamageSource.FALLING_BLOCK;
|
|
|
+ case "dragonBreath": return DamageSource.DRAGON_BREATH;
|
|
|
+ case "fireworks": return DamageSource.FIREWORKS;
|
|
|
+ case "dryout": return DamageSource.DRYOUT;
|
|
|
+ case "sweetBerryBush": return DamageSource.SWEET_BERRY_BUSH;
|
|
|
+ case "thorns": return DamageSource.causeThornsDamage((Entity) in[1].get(sc));
|
|
|
}
|
|
|
return DamageSource.GENERIC;
|
|
|
});
|
|
|
+
|
|
|
+ // ---------------------------------------------------------------------
|
|
|
+ // entity commands
|
|
|
+ // ---------------------------------------------------------------------
|
|
|
+ sm.registerFunction("entity.getarmorthoughness", (sc, in) -> ((LivingEntity) in[0].get(sc)).getAttribute(SharedMonsterAttributes.ARMOR_TOUGHNESS).getValue());
|
|
|
+ sm.registerFunction("entity.getarmor", (sc, in) -> (double) ((LivingEntity) in[0].get(sc)).getTotalArmorValue());
|
|
|
+ sm.registerFunction("entity.getmagicarmor", (sc, in) ->
|
|
|
+ {
|
|
|
+ int level = 0;
|
|
|
+ for(ItemStack stack : ((LivingEntity) in[0].get(sc)).getArmorInventoryList())
|
|
|
+ {
|
|
|
+ CompoundNBT com = stack.getTag();
|
|
|
+ if(com != null && com.contains("magic"))
|
|
|
+ {
|
|
|
+ level += com.getInt("magic");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return level;
|
|
|
+ });
|
|
|
+ sm.registerFunction("entity.getenchantmentmodifier", (sc, in) -> EnchantmentHelper.getEnchantmentModifierDamage(((LivingEntity) in[0].get(sc)).getArmorInventoryList(), (DamageSource) in[1].get(sc)));
|
|
|
+ sm.registerFunction("entity.setburning", (sc, in) ->
|
|
|
+ {
|
|
|
+ ((Entity) in[0].get(sc)).setFire(in[1].getInt(sc));
|
|
|
+ return Void.TYPE;
|
|
|
+ });
|
|
|
+ sm.registerFunction("entity.isburning", (sc, in) -> ((Entity) in[0].get(sc)).isBurning());
|
|
|
+ sm.registerFunction("entity.getlook", (sc, in) ->
|
|
|
+ {
|
|
|
+ Object[] o = new Object[3];
|
|
|
+ Vec3d v = ((Entity) in[0].get(sc)).getLookVec();
|
|
|
+ o[0] = v.x;
|
|
|
+ o[1] = v.y;
|
|
|
+ o[2] = v.z;
|
|
|
+ return o;
|
|
|
+ });
|
|
|
+ sm.registerFunction("entity.getlocation", (sc, in) -> new Location((Entity) in[0].get(sc)));
|
|
|
+ sm.registerFunction("entity.damage", (sc, in) ->
|
|
|
+ {
|
|
|
+ if(in.length >= 3)
|
|
|
+ {
|
|
|
+ ((LivingEntity) in[0].get(sc)).attackEntityFrom((DamageSource) in[2].get(sc), in[1].getFloat(sc));
|
|
|
+ return Void.TYPE;
|
|
|
+ }
|
|
|
+ ((LivingEntity) in[0].get(sc)).attackEntityFrom(DamageSource.GENERIC, in[1].getFloat(sc));
|
|
|
+ return Void.TYPE;
|
|
|
+ });
|
|
|
+ sm.registerFunction("entity.damagedirect", (sc, in) ->
|
|
|
+ {
|
|
|
+ LivingEntity liv = (LivingEntity) in[0].get(sc);
|
|
|
+ float damageAmount = in[1].getFloat(sc);
|
|
|
+ DamageSource ds = (DamageSource) in[2].get(sc);
|
|
|
+ if(!liv.isInvulnerableTo(ds))
|
|
|
+ {
|
|
|
+ float f2 = Math.max(damageAmount - liv.getAbsorptionAmount(), 0.0F);
|
|
|
+ liv.setAbsorptionAmount(liv.getAbsorptionAmount() - (damageAmount - f2));
|
|
|
+ float absorbedDamage = damageAmount - f2;
|
|
|
+ if(absorbedDamage > 0.0f && absorbedDamage < 3.4028235E37f && ds.getTrueSource() instanceof ServerPlayerEntity)
|
|
|
+ {
|
|
|
+ ((ServerPlayerEntity) ds.getTrueSource()).addStat(Stats.DAMAGE_DEALT_ABSORBED, Math.round(absorbedDamage * 10.0f));
|
|
|
+ }
|
|
|
+
|
|
|
+ if(f2 > 0.0f)
|
|
|
+ {
|
|
|
+ float f1 = liv.getHealth();
|
|
|
+ liv.getCombatTracker().trackDamage(ds, f1, f2);
|
|
|
+ liv.setHealth(f1 - f2);
|
|
|
+ liv.setAbsorptionAmount(liv.getAbsorptionAmount() - f2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Void.TYPE;
|
|
|
+ });
|
|
|
+ sm.registerFunction("entity.fromsource", (sc, in) ->
|
|
|
+ {
|
|
|
+ DamageSource ds = (DamageSource) in[0].get(sc);
|
|
|
+ Entity ent = ds.getTrueSource();
|
|
|
+ if(ent == null)
|
|
|
+ {
|
|
|
+ return ds.getImmediateSource();
|
|
|
+ }
|
|
|
+ return ent;
|
|
|
+ });
|
|
|
+ sm.registerAlias("damage.get", "entity.getdamagesource");
|
|
|
sm.registerFunction("entity.gethealth", (sc, in) -> (double) ((LivingEntity) in[0].get(sc)).getHealth());
|
|
|
sm.registerFunction("entity.sethealth", (sc, in) ->
|
|
|
{
|
|
@@ -1431,7 +1480,11 @@ public class MinecraftFunctions
|
|
|
((LivingEntity) in[0].get(sc)).clearActivePotions();
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
- sm.registerFunction("entity.haseffect", (sc, in) -> ((LivingEntity) in[0].get(sc)).isPotionActive(Mapper.getPotion(in[1].getString(sc))));
|
|
|
+ sm.registerFunction("entity.geteffectamplifier", (sc, in) ->
|
|
|
+ {
|
|
|
+ EffectInstance effect = ((LivingEntity) in[0].get(sc)).getActivePotionEffect(Mapper.getPotion(in[1].getString(sc)));
|
|
|
+ return effect == null ? 0 : effect.getAmplifier() + 1;
|
|
|
+ });
|
|
|
sm.registerFunction("entity.explode", (sc, in) ->
|
|
|
{
|
|
|
((CreeperEntity) in[0].get(sc)).ignite();
|
|
@@ -2458,6 +2511,11 @@ public class MinecraftFunctions
|
|
|
scheduler.scheduleTask(() -> Server.executeCommand(s));
|
|
|
return Void.TYPE;
|
|
|
});
|
|
|
+ sm.registerFunction("isplayer", (sc, in) ->
|
|
|
+ {
|
|
|
+ Object o = in[0].get(sc);
|
|
|
+ return o != null && o instanceof PlayerEntity;
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
private static Class getClass(String s) throws ClassNotFoundException
|