added ability set unmountable entities

This commit is contained in:
gnembon committed 2020-02-10 01:52:08 -04:00
1 parent 229a82da90
commit ee4a073a57
4 files changed
+37

No files matched your search

@@ -7,4 +7,8 @@ public interface EntityInterface
float getMainYaw(float partialTicks);
EntityEventsGroup getEventContainer();
boolean isPermanentVehicle();
void setPermanentVehicle(boolean permanent);
}
@@ -14,6 +14,8 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
{
@Shadow public boolean removed;
private boolean permanentVehicle;
private final EntityEventsGroup events = new EntityEventsGroup();
@Override
@@ -22,6 +24,18 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
return events;
}
@Override
public boolean isPermanentVehicle()
{
return permanentVehicle;
}
@Override
public void setPermanentVehicle(boolean permanent)
{
permanentVehicle = permanent;
}
@Inject(method = "tick", at = @At("HEAD"))
private void onTickCall(CallbackInfo ci)
{
@@ -34,4 +48,6 @@ public abstract class Entity_scarpetEventsMixin implements EntityInterface
{
if (!removed) events.onEvent(EntityEventsGroup.EntityEventType.ON_REMOVED, (Entity) (Object) this);
}
}
@@ -1,5 +1,6 @@
package carpet.mixins;
import carpet.fakes.EntityInterface;
import com.mojang.authlib.GameProfile;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
@@ -53,4 +54,14 @@ public abstract class ServerPlayerEntity_scarpetEventMixin extends PlayerEntity
{
STATISTICS.onPlayerStatistic((ServerPlayerEntity) (Object)this, stat, amount);
}
@Redirect(method = "method_14218", at = @At(
value = "INVOKE",
target = "Lnet/minecraft/server/network/ServerPlayerEntity;setSneaking(Z)V"
))
private void setSneakingConditionally(ServerPlayerEntity serverPlayerEntity, boolean sneaking)
{
if (!((EntityInterface)serverPlayerEntity.getVehicle()).isPermanentVehicle()) // won't since that method makes sure its not null
serverPlayerEntity.setSneaking(sneaking);
}
}
@@ -228,6 +228,7 @@ public class EntityValue extends Value
put("is_ridden", (e, a) -> new NumericValue(e.hasPassengers()));
put("passengers", (e, a) -> ListValue.wrap(e.getPassengerList().stream().map(EntityValue::new).collect(Collectors.toList())));
put("mount", (e, a) -> (e.getVehicle()!=null)?new EntityValue(e.getVehicle()):Value.NULL);
put("unmountable", (e, a) -> new NumericValue(((EntityInterface)e).isPermanentVehicle()));
put("tags", (e, a) -> ListValue.wrap(e.getScoreboardTags().stream().map(StringValue::new).collect(Collectors.toList())));
put("has_tag", (e, a) -> new NumericValue(e.getScoreboardTags().contains(a.getString())));
put("yaw", (e, a)-> new NumericValue(e.yaw));
@@ -661,6 +662,11 @@ public class EntityValue extends Value
//...
}
});
put("unmountable", (e, v) ->{
if (v == null)
v = Value.TRUE;
((EntityInterface)e).setPermanentVehicle(v.getBoolean());
});
put("drop_passengers", (e, v) -> e.removeAllPassengers());
put("mount_passengers", (e, v) -> {
if (v==null)