|
@@ -49,6 +49,10 @@ public class ScriptEvents {
|
|
|
sc.setVar("item", stack);
|
|
|
}
|
|
|
|
|
|
+ private static void setPlayer(Script sc, PlayerEntity p) {
|
|
|
+ sc.setVar("player", p);
|
|
|
+ }
|
|
|
+
|
|
|
private final Scripts scripts;
|
|
|
private final MinecraftServer server;
|
|
|
|
|
@@ -300,9 +304,20 @@ public class ScriptEvents {
|
|
|
setLivingEntity(sc, e.getEntityLiving());
|
|
|
sc.setVar("drops", e.getDrops());
|
|
|
sc.setVar("damage_source", e.getSource());
|
|
|
- sc.setVar("looting_level", (double) e.getLootingLevel());
|
|
|
+ sc.setVar("looting", (double) e.getLootingLevel());
|
|
|
}, null);
|
|
|
}
|
|
|
+
|
|
|
+ @SubscribeEvent(receiveCanceled = true)
|
|
|
+ public void onLivingExperienceDrop(LivingExperienceDropEvent e) {
|
|
|
+ handleEvent(e, "living_experience_drop", (sc) -> {
|
|
|
+ setLivingEntity(sc, e.getEntityLiving());
|
|
|
+ sc.setVar("experience", (double) e.getDroppedExperience());
|
|
|
+ sc.setVar("original_experience", (double) e.getOriginalExperience());
|
|
|
+ }, (sc) -> {
|
|
|
+ handleVar(sc, "living_experience_drop", "experience", v -> e.setDroppedExperience(v.getInt(sc)));
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
@SubscribeEvent(receiveCanceled = true)
|
|
|
public void onProjectileHit(ProjectileImpactEvent e) {
|
|
@@ -352,10 +367,24 @@ public class ScriptEvents {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @SubscribeEvent(receiveCanceled = true)
|
|
|
+ public void onBlockHarvest(BlockEvent.HarvestDropsEvent e) {
|
|
|
+ handleEvent(e, "block_harvest", (sc) -> {
|
|
|
+ setPlayer(sc, e.getHarvester());
|
|
|
+ sc.setVar("location", new Location(e.getWorld(), e.getPos()));
|
|
|
+ sc.setVar("drop_chance", (double) e.getDropChance());
|
|
|
+ sc.setVar("drops", e.getDrops());
|
|
|
+ sc.setVar("fortune", (double) e.getFortuneLevel());
|
|
|
+ sc.setVar("silktouch", e.isSilkTouching());
|
|
|
+ }, (sc) -> {
|
|
|
+ handleVar(sc, "block_harvest", "drop_chance", v -> e.setDropChance(v.getFloat(sc)));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
@SubscribeEvent(receiveCanceled = true)
|
|
|
public void onBlockBreak(BlockEvent.BreakEvent e) {
|
|
|
handleEvent(e.getPlayer(), "block_break", (sc) -> {
|
|
|
- ScriptVars.setBlockVars(sc, e.getWorld(), e.getPos());
|
|
|
+ ScriptVars.setBlockVars(sc, e.getWorld(), e.getPos(), e.getState());
|
|
|
sc.setVar("cancel", e.isCanceled());
|
|
|
}, (sc) -> {
|
|
|
simpleCancel(sc, e, "block_break");
|
|
@@ -369,7 +398,7 @@ public class ScriptEvents {
|
|
|
}
|
|
|
handleEvent((PlayerEntity) e.getEntity(), "block_place", (sc) -> {
|
|
|
sc.setVar("block_type_after", e.getPlacedBlock().getBlock().getRegistryName());
|
|
|
- ScriptVars.setBlockVars(sc, e.getWorld(), e.getPos());
|
|
|
+ ScriptVars.setBlockVars(sc, e.getWorld(), e.getPos(), e.getState());
|
|
|
sc.setVar("cancel", e.isCanceled());
|
|
|
}, (sc) -> {
|
|
|
simpleCancel(sc, e, "block_place");
|
|
@@ -645,7 +674,7 @@ public class ScriptEvents {
|
|
|
@SubscribeEvent(receiveCanceled = true)
|
|
|
public void onEntityJoinWorld(EntityJoinWorldEvent e) {
|
|
|
Entity ent = e.getEntity();
|
|
|
- if(!scripts.getEntityLimits().isAllowedToSpawn(ent.getType())) {
|
|
|
+ if(!e.getEntity().isPassenger() && !scripts.getEntityLimits().isAllowedToSpawn(ent.getType())) {
|
|
|
e.getEntity().getPassengers().forEach(rider -> {
|
|
|
if(rider == null || rider instanceof PlayerEntity) {
|
|
|
return;
|