Merge branch 'master' into 1.16

This commit is contained in:
gnembon committed 2020-05-20 02:13:37 -03:00
commit abd5f178be
6 files changed
+99 -2

No files matched your search

+16
View File
@@ -2526,6 +2526,14 @@ Breeding age of passive entity, in ticks. If negative, time to adulthood, if pos
For living entities, the number of ticks they fall outside of immediate player presence. For living entities, the number of ticks they fall outside of immediate player presence.
### `query(e, 'portal_cooldown')`
Number of ticks remaining until an entity can use a portal again.
### `query(e, 'portal_timer')`
Number of ticks an entity sits in a portal.
### `query(e, 'item')` ### `query(e, 'item')`
The item triple (name, count, nbt) if its an item entity, `null` otherwise The item triple (name, count, nbt) if its an item entity, `null` otherwise
@@ -2739,6 +2747,14 @@ Sets the breeding age for the animal.
Sets a custom despawn timer value. Sets a custom despawn timer value.
### `modify(e, 'portal_cooldown', number)`
Sets a custom number of ticks remaining until an entity can use a portal again.
### `modify(e, 'portal_timer', number)`
Sets a custom number of ticks an entity sits in a portal.
### `modify(e, 'dismount')` ### `modify(e, 'dismount')`
Dismounts riding entity. Dismounts riding entity.
+16
View File
@@ -204,6 +204,14 @@ Breeding age of passive entity, in ticks. If negative, time to adulthood, if pos
For living entities, the number of ticks they fall outside of immediate player presence. For living entities, the number of ticks they fall outside of immediate player presence.
### `query(e, 'portal_cooldown')`
Number of ticks remaining until an entity can use a portal again.
### `query(e, 'portal_timer')`
Number of ticks an entity sits in a portal.
### `query(e, 'item')` ### `query(e, 'item')`
The item triple (name, count, nbt) if its an item entity, `null` otherwise The item triple (name, count, nbt) if its an item entity, `null` otherwise
@@ -417,6 +425,14 @@ Sets the breeding age for the animal.
Sets a custom despawn timer value. Sets a custom despawn timer value.
### `modify(e, 'portal_cooldown', number)`
Sets a custom number of ticks remaining until an entity can use a portal again.
### `modify(e, 'portal_timer', number)`
Sets a custom number of ticks an entity sits in a portal.
### `modify(e, 'dismount')` ### `modify(e, 'dismount')`
Dismounts riding entity. Dismounts riding entity.
@@ -11,4 +11,8 @@ public interface EntityInterface
boolean isPermanentVehicle(); boolean isPermanentVehicle();
void setPermanentVehicle(boolean permanent); void setPermanentVehicle(boolean permanent);
int getPortalTimer();
void setPortalTimer(int amount);
} }
@@ -14,6 +14,7 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
{ {
@Shadow public boolean removed; @Shadow public boolean removed;
@Shadow protected int netherPortalTime;
private boolean permanentVehicle; private boolean permanentVehicle;
private final EntityEventsGroup events = new EntityEventsGroup(); private final EntityEventsGroup events = new EntityEventsGroup();
@@ -36,6 +37,18 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
permanentVehicle = permanent; permanentVehicle = permanent;
} }
@Override
public int getPortalTimer()
{
return netherPortalTime;
}
@Override
public void setPortalTimer(int amount)
{
netherPortalTime = amount;
}
@Inject(method = "tick", at = @At("HEAD")) @Inject(method = "tick", at = @At("HEAD"))
private void onTickCall(CallbackInfo ci) private void onTickCall(CallbackInfo ci)
{ {
@@ -140,6 +140,7 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.CompletionException;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -2851,12 +2852,43 @@ public class CarpetExpression
return (_c, _t) -> ret; return (_c, _t) -> ret;
}); });
this.expr.addLazyFunction("task_dock", 1, (c, t, lv) -> { this.expr.addLazyFunctionWithDelegation("task_dock", 1, (c, t, expr, tok, lv) -> {
CarpetContext cc = (CarpetContext)c; CarpetContext cc = (CarpetContext)c;
MinecraftServer server = cc.s.getMinecraftServer(); MinecraftServer server = cc.s.getMinecraftServer();
if (server.isOnThread()) return lv.get(0); // pass through for on thread tasks if (server.isOnThread()) return lv.get(0); // pass through for on thread tasks
Value[] result = new Value[]{Value.NULL}; Value[] result = new Value[]{Value.NULL};
((CarpetContext) c).s.getMinecraftServer().submitAndJoin(() -> result[0] = lv.get(0).evalValue(c, t)); RuntimeException[] internal = new RuntimeException[]{null};
try
{
((CarpetContext) c).s.getMinecraftServer().submitAndJoin(() ->
{
try
{
result[0] = lv.get(0).evalValue(c, t);
}
catch (ExpressionException exc)
{
internal[0] = exc;
}
catch (InternalExpressionException exc)
{
internal[0] = new ExpressionException(c, expr, tok, exc.getMessage(), exc.stack);
}
catch (ArithmeticException exc)
{
internal[0] = new ExpressionException(c, expr, tok, "Your math is wrong, "+exc.getMessage());
}
});
}
catch (CompletionException exc)
{
throw new InternalExpressionException("Error while executing docked task section, internal stack trace is gone");
}
if (internal[0] != null)
{
throw internal[0];
}
Value ret = result[0]; // preventing from lazy evaluating of the result in case a future completes later Value ret = result[0]; // preventing from lazy evaluating of the result in case a future completes later
return (_c, _t) -> ret; return (_c, _t) -> ret;
// pass through placeholder // pass through placeholder
@@ -259,6 +259,8 @@ public class EntityValue extends Value
put("item", (e, a) -> (e instanceof ItemEntity)?ListValue.fromItemStack(((ItemEntity) e).getStack()):Value.NULL); put("item", (e, a) -> (e instanceof ItemEntity)?ListValue.fromItemStack(((ItemEntity) e).getStack()):Value.NULL);
put("count", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntity) e).getStack().getCount()):Value.NULL); put("count", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntity) e).getStack().getCount()):Value.NULL);
put("pickup_delay", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntityInterface) e).getPickupDelayCM()):Value.NULL); put("pickup_delay", (e, a) -> (e instanceof ItemEntity)?new NumericValue(((ItemEntityInterface) e).getPickupDelayCM()):Value.NULL);
put("portal_cooldown", (e , a) ->new NumericValue(((EntityInterface)e).getPortalTimer()));
put("portal_timer", (e , a) ->new NumericValue(e.netherPortalCooldown));
// ItemEntity -> despawn timer via ssGetAge // ItemEntity -> despawn timer via ssGetAge
put("is_baby", (e, a) -> (e instanceof LivingEntity)?new NumericValue(((LivingEntity) e).isBaby()):Value.NULL); put("is_baby", (e, a) -> (e instanceof LivingEntity)?new NumericValue(((LivingEntity) e).isBaby()):Value.NULL);
put("target", (e, a) -> { put("target", (e, a) -> {
@@ -825,6 +827,20 @@ public class EntityValue extends Value
} }
}); });
put("portal_cooldown", (e , v) ->
{
if (v==null)
throw new InternalExpressionException("'portal_cooldown' requires a value to set");
e.netherPortalCooldown = NumericValue.asNumber(v).getInt();
});
put("portal_timer", (e , v) ->
{
if (v==null)
throw new InternalExpressionException("'portal_timer' requires a value to set");
((EntityInterface) e).setPortalTimer(NumericValue.asNumber(v).getInt());
});
put("ai", (e, v) -> put("ai", (e, v) ->
{ {
if (e instanceof MobEntity) if (e instanceof MobEntity)