This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
ScriptCraft/scriptcraft/src/main/ts/src/minecraft/entity.ts

279 lines
6.9 KiB
TypeScript
Raw Normal View History

2020-04-25 13:33:17 +00:00
import { ItemStack } from './item';
2020-06-02 17:24:32 +00:00
import { Hand, Identifier, Pos, JavaObjectWrapper } from './core';
2020-04-25 13:33:17 +00:00
import { World } from './world';
2020-04-26 01:17:59 +00:00
import { CompoundTag } from './tag';
2020-04-28 00:15:24 +00:00
import { useBridge } from 'scriptcraft-core';
2020-04-28 20:18:22 +00:00
import { Inventory } from './inventory';
2020-04-25 13:33:17 +00:00
2020-08-25 01:28:06 +00:00
function buildDamageSource(bridge: string): DamageSource {
const obj = useBridge(bridge) as JavaObject;
if (obj !== null) {
return new DamageSource(obj);
} else {
return null;
}
}
function buildDamageSourceWithValue(bridge: string, value: BridgeValueType): DamageSource {
2020-06-02 17:24:32 +00:00
const obj = useBridge(bridge, value) as JavaObject;
if (obj !== null) {
return new DamageSource(obj);
} else {
return null;
}
}
2020-04-25 13:33:17 +00:00
/**
* Damage Source
*/
2020-06-02 17:24:32 +00:00
export class DamageSource extends JavaObjectWrapper {
2020-08-25 01:28:06 +00:00
/**
* Generic Damage Source
*/
static GENERIC = buildDamageSource('DamageSource.getGeneric');
/**
* Void Damage Source
*/
static OUT_OF_WORLD = buildDamageSource('DamageSource.getOutOfWorld');
2020-04-25 13:33:17 +00:00
/**
2020-06-02 17:24:32 +00:00
* Create Damage Source Wrapper From Java Object
* @param javaObject Java Object
2020-04-25 13:33:17 +00:00
*/
2020-06-02 17:24:32 +00:00
constructor(javaObject: JavaObject | JavaObjectWrapper) {
super(javaObject);
this.assertValidJavaObject('DamageSource');
2020-04-25 13:33:17 +00:00
}
/**
2020-08-25 01:28:06 +00:00
* Create Damage Source from an explosion
* @param value Explosion Source
2020-04-25 13:33:17 +00:00
* @returns Damage Source
*/
2020-08-25 01:28:06 +00:00
static createFromExplosion(value: LivingEntity): DamageSource {
return buildDamageSourceWithValue('DamageSource.explosion', value.getJavaObject());
2020-04-25 13:33:17 +00:00
}
/**
* Create Damage Source from a player ({@link PlayerEntity})
* @param value Player
* @returns Damage Source
*/
static createFromPlayer(value: PlayerEntity): DamageSource {
2020-08-25 01:28:06 +00:00
return buildDamageSourceWithValue('DamageSource.createFromPlayer', value.getJavaObject());
2020-04-25 13:33:17 +00:00
}
/**
* Create Damage Source from a mob ({@link LivingEntity})
* @param value Mob
* @returns Damage Source
*/
static createFromMob(value: LivingEntity): DamageSource {
2020-08-25 01:28:06 +00:00
return buildDamageSourceWithValue('DamageSource.createFromMob', value.getJavaObject());
2020-04-25 13:33:17 +00:00
}
}
/**
* Entity
*/
2020-06-02 17:24:32 +00:00
export class Entity extends JavaObjectWrapper {
2020-04-25 13:33:17 +00:00
/**
2020-06-02 17:24:32 +00:00
* Create Entity Wrapper Class From Existing Entity Or Java Object
* @param object Existing Entity Or Java Object
2020-04-25 13:33:17 +00:00
*/
2020-06-02 17:24:32 +00:00
constructor(javaObject: JavaObject | JavaObjectWrapper) {
super(javaObject);
this.assertValidJavaObject('Entity');
2020-04-25 13:33:17 +00:00
}
/**
* Get Entity World
* @returns Entity World
*/
getEntityWorld(): World {
2020-06-02 17:24:32 +00:00
const obj = useBridge('Entity.getEntityWorld', this.getJavaObject()) as JavaObject;
2020-04-28 14:16:47 +00:00
if (obj !== null) {
2020-04-25 13:33:17 +00:00
return new World(obj);
} else {
return null;
}
}
/**
* Get Entity ID
* @returns Entity ID
*/
getID(): Identifier {
2020-06-02 17:24:32 +00:00
const obj = useBridge('Entity.getID', this.getJavaObject()) as string;
2020-04-28 14:16:47 +00:00
if (obj !== null) {
2020-04-25 13:33:17 +00:00
return new Identifier(obj);
} else {
return null;
}
}
/**
* Get Entity Name
* @returns Entity Name
*/
getName(): string {
2020-06-02 17:24:32 +00:00
return useBridge('Entity.getName', this.getJavaObject()) as string;
2020-04-25 13:33:17 +00:00
}
/**
* Get Entity Display Name
* @returns Entity Display Name
*/
getDisplayName(): string {
2020-06-02 17:24:32 +00:00
return useBridge('Entity.getDisplayName', this.getJavaObject()) as string;
2020-04-25 13:33:17 +00:00
}
/**
* Get Entity Custom Name
* @returns Entity Custom Name
*/
getCustomName(): string {
2020-06-02 17:24:32 +00:00
return useBridge('Entity.getCustomName', this.getJavaObject()) as string;
2020-04-25 13:33:17 +00:00
}
/**
* Convert To String
2020-04-28 20:18:22 +00:00
* @returns String
2020-04-25 13:33:17 +00:00
*/
toString(): string {
return this.getName();
}
/**
* Kill Entity
*/
2020-04-28 02:30:12 +00:00
kill(): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.kill', this.getJavaObject());
2020-04-25 13:33:17 +00:00
}
/**
* Remove Entity
*/
2020-04-28 02:30:12 +00:00
remove(): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.remove', this.getJavaObject());
2020-04-25 13:33:17 +00:00
}
/**
* Set Entity Fire Ticks
* @param ticks Fire Ticks
*/
2020-04-28 02:30:12 +00:00
setFireTicks(ticks: number): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.setFireTicks', this.getJavaObject(), ticks);
2020-04-25 13:33:17 +00:00
}
/**
* Get Entity Fire Ticks
* @returns Fire Ticks
*/
getFireTicks(): number {
2020-06-02 17:24:32 +00:00
return useBridge('Entity.getFireTicks', this.getJavaObject()) as number;
2020-04-25 13:33:17 +00:00
}
/**
* Damage Entity
* @param source Damage Source
* @param amount Damage Amount
*/
2020-04-28 02:30:12 +00:00
damage(source: DamageSource, amount: number): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.damage', source.getJavaObject(), amount);
2020-04-25 13:33:17 +00:00
}
/**
* Get Entity Position
* @returns Entity Position
*/
getPosition(): Pos {
2020-06-02 17:24:32 +00:00
const pos: number[] = useBridge('Entity.getPosition', this.getJavaObject()) as number[];
2020-04-28 14:16:47 +00:00
if (pos !== null && pos.length === 3) {
2020-04-25 13:33:17 +00:00
return new Pos(pos[0], pos[1], pos[2]);
} else {
return null;
}
}
/**
* Set Entity Position
* @param pos Entity Position
*/
2020-04-28 02:30:12 +00:00
setPosition(pos: Pos): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.setPosition', this.getJavaObject(), pos.getX(), pos.getY(), pos.getZ());
2020-04-25 13:33:17 +00:00
}
2020-04-26 01:17:59 +00:00
/**
* Save Data To {@link CompoundTag}
* @returns Tag
*/
toTag(): CompoundTag {
2020-06-02 17:24:32 +00:00
const obj = useBridge('Entity.toTag', this.getJavaObject()) as JavaObject;
2020-04-28 14:16:47 +00:00
if (obj !== null) {
2020-04-26 01:17:59 +00:00
return new CompoundTag(obj);
} else {
return null;
}
}
/**
* Load Data From {@link CompoundTag}
* @param tag Tag
*/
2020-04-28 02:30:12 +00:00
fromTag(tag: CompoundTag): void {
2020-06-02 17:24:32 +00:00
useBridge('Entity.fromTag', this.getJavaObject(), tag.getJavaObject());
2020-04-26 01:17:59 +00:00
}
2020-04-25 13:33:17 +00:00
}
/**
* Living Entity
*/
export class LivingEntity extends Entity {
2020-06-02 17:24:32 +00:00
constructor(javaObject: JavaObject | JavaObjectWrapper) {
super(javaObject);
this.assertValidJavaObject('LivingEntity');
}
2020-04-25 13:33:17 +00:00
/**
* Get Stack in {@link Hand}
* @param hand Hand
* @returns Item Stack
*/
getStackInHand(hand: Hand): ItemStack {
2020-06-02 17:24:32 +00:00
const obj = useBridge('LivingEntity.getStackInHand', this.getJavaObject(), hand.toString()) as JavaObject;
2020-08-26 21:52:17 +00:00
if (obj !== null) {
2020-04-25 13:33:17 +00:00
return new ItemStack(obj);
} else {
return null;
}
}
/**
* Get Health
* @returns Entity Health
*/
getHealth(): number {
2020-06-02 17:24:32 +00:00
return useBridge('LivingEntity.getHealth', this.getJavaObject()) as number;
2020-04-25 13:33:17 +00:00
}
}
/**
* Player Entity
*/
2020-04-28 20:18:22 +00:00
export class PlayerEntity extends LivingEntity {
2020-06-02 17:24:32 +00:00
constructor(javaObject: JavaObject | JavaObjectWrapper) {
super(javaObject);
this.assertValidJavaObject('PlayerEntity');
}
2020-04-28 20:18:22 +00:00
getInventory(): Inventory {
2020-06-02 17:24:32 +00:00
const obj = useBridge('PlayerEntity.getInventory', this.getJavaObject()) as JavaObject;
2020-04-28 20:18:22 +00:00
if (obj !== null) {
return new Inventory(obj);
} else {
return null;
}
}
}