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-06-02 17:24:32 +00:00
|
|
|
function buildDamageSource(bridge: string, value: BridgeValueType): DamageSource {
|
|
|
|
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-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-06-02 17:24:32 +00:00
|
|
|
* Create Damage Source from type
|
|
|
|
* @param value Type
|
2020-04-25 13:33:17 +00:00
|
|
|
* @returns Damage Source
|
|
|
|
*/
|
|
|
|
static create(value: string): DamageSource {
|
2020-06-02 17:24:32 +00:00
|
|
|
return buildDamageSource('DamageSource.create', value);
|
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-06-02 17:24:32 +00:00
|
|
|
return buildDamageSource('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-06-02 17:24:32 +00:00
|
|
|
return buildDamageSource('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-04-25 13:33:17 +00:00
|
|
|
if (obj) {
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|