added hunger, saturation, and exhaustion entity API calls.
This commit is contained in:
1 parent
d9ed35676f
commit
73cb9d6968
4 files changed
+33
-11
No files matched your search
@@ -314,6 +314,13 @@ query(p,'effect','resistance') => null
|
||||
|
||||
Number indicating remaining entity health, or `null` if not applicable.
|
||||
|
||||
### `query(e, 'hunger')`
|
||||
### `query(e, 'saturation')`
|
||||
### `query(e, 'exhaustion')`
|
||||
|
||||
Retrieves player hunger related information. For non-players, returns `null`.
|
||||
|
||||
|
||||
### `query(e, 'holds', slot?)`
|
||||
|
||||
Returns triple of short name, stack count, and NBT of item held in `slot`, or `null` if nothing or not applicable. Available options for `slot` are:
|
||||
@@ -513,6 +520,17 @@ Toggles gravity for the entity.
|
||||
|
||||
Will set entity on fire for `ticks` ticks. Set to 0 to extinguish.
|
||||
|
||||
### `modify(e, 'hunger', value)`
|
||||
### `modify(e, 'saturation', value)`
|
||||
### `modify(e, 'exhaustion', value)`
|
||||
|
||||
Modifies directly player raw hunger components. Has no effect on non-players
|
||||
|
||||
### `modify(e, 'add_exhaustion', value)`
|
||||
|
||||
adds exhaustion value to the current player exhaustion level - that's the method you probably want to use
|
||||
to manipulate how much 'food' some action cost.
|
||||
|
||||
## Entity Events
|
||||
|
||||
There is a number of events that happen to entities that you can attach your own code to in the form of event handlers.
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package carpet.fakes;
|
||||
|
||||
public interface HungerManagerInterface {
|
||||
float getExhaustion();
|
||||
float getExhaustionCM();
|
||||
void setExhaustionCM(float exhaust);
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
package carpet.mixins;
|
||||
|
||||
import carpet.fakes.EntityInterface;
|
||||
import carpet.fakes.HungerManagerInterface;
|
||||
import carpet.script.EntityEventsGroup;
|
||||
import net.minecraft.entity.damage.DamageSource;
|
||||
import net.minecraft.entity.player.HungerManager;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(HungerManager.class)
|
||||
public class HungerManagerMixin_scarpetEventsMixin implements HungerManagerInterface {
|
||||
@Shadow private float exhaustion;
|
||||
public float getExhaustion(){
|
||||
public float getExhaustionCM(){
|
||||
return exhaustion;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExhaustionCM(float exhaust)
|
||||
{
|
||||
exhaustion = exhaust;
|
||||
}
|
||||
}
|
||||
@@ -299,8 +299,7 @@ public class EntityValue extends Value
|
||||
});
|
||||
|
||||
put("exhaustion",(e, a)->{
|
||||
if(e instanceof PlayerEntity)
|
||||
return new NumericValue(((HungerManagerInterface)((PlayerEntity) e).getHungerManager()).getExhaustion());
|
||||
if(e instanceof PlayerEntity) return new NumericValue(((HungerManagerInterface)((PlayerEntity) e).getHungerManager()).getExhaustionCM());
|
||||
return Value.NULL;
|
||||
});
|
||||
|
||||
@@ -966,6 +965,10 @@ public class EntityValue extends Value
|
||||
});
|
||||
|
||||
put("exhaustion", (e, v)-> {
|
||||
if(e instanceof PlayerEntity) ((HungerManagerInterface) ((PlayerEntity) e).getHungerManager()).setExhaustionCM(NumericValue.asNumber(v).getFloat());
|
||||
});
|
||||
|
||||
put("add_exhaustion", (e, v)-> {
|
||||
if(e instanceof PlayerEntity) ((PlayerEntity) e).getHungerManager().addExhaustion((int) NumericValue.asNumber(v).getLong());
|
||||
});
|
||||
|
||||
|
||||
Reference in new issue
Block a user