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

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