From d73e2bc1afebe8aeddf3b9eecd822d3af7f9223d Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sun, 26 Apr 2020 14:09:31 -0400 Subject: [PATCH] Tweaks --- .../scriptcraft/bridge/ItemStackBridges.java | 13 +++++ .../resources/scriptcraft/minecraft/block.ts | 22 +++++++- .../resources/scriptcraft/minecraft/core.ts | 21 +++++++- .../resources/scriptcraft/minecraft/item.ts | 53 ++++++++++++++++++- .../scriptcraft/minecraft/registry.ts | 17 ++++-- 5 files changed, 117 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/thebrokenrail/scriptcraft/bridge/ItemStackBridges.java b/src/main/java/com/thebrokenrail/scriptcraft/bridge/ItemStackBridges.java index 43ffe12..bfaec26 100644 --- a/src/main/java/com/thebrokenrail/scriptcraft/bridge/ItemStackBridges.java +++ b/src/main/java/com/thebrokenrail/scriptcraft/bridge/ItemStackBridges.java @@ -1,5 +1,6 @@ package com.thebrokenrail.scriptcraft.bridge; +import com.thebrokenrail.scriptcraft.util.Util; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Identifier; @@ -10,7 +11,19 @@ class ItemStackBridges { Bridges.addBridge("ItemStack.create", args -> new ItemStack(Registry.ITEM.get(new Identifier((String) args[0])), ((Double) args[1]).intValue())); Bridges.addBridge("ItemStack.getItem", args -> Registry.ITEM.getId(((ItemStack) args[0]).getItem()).toString()); + + Bridges.addBridge("ItemStack.setCount", args -> { + ((ItemStack) args[0]).setCount((int) Util.toDouble(args[1], 0)); + return null; + }); Bridges.addBridge("ItemStack.getCount", args -> (double) ((ItemStack) args[0]).getCount()); + + Bridges.addBridge("ItemStack.setDamage", args -> { + ((ItemStack) args[0]).setDamage((int) Util.toDouble(args[1], 0)); + return null; + }); + Bridges.addBridge("ItemStack.getDamage", args -> (double) ((ItemStack) args[0]).getDamage()); + Bridges.addBridge("ItemStack.isDamageable", args -> ((ItemStack) args[0]).isDamageable()); Bridges.addBridge("ItemStack.getTag", args -> ((ItemStack) args[0]).getTag()); Bridges.addBridge("ItemStack.setTag", args -> { diff --git a/src/main/resources/scriptcraft/minecraft/block.ts b/src/main/resources/scriptcraft/minecraft/block.ts index 933d189..bd15020 100644 --- a/src/main/resources/scriptcraft/minecraft/block.ts +++ b/src/main/resources/scriptcraft/minecraft/block.ts @@ -1,6 +1,6 @@ import { World } from './world'; import { PlayerEntity } from './entity'; -import { useBridge, addBridge, Identifier, Hand, Pos, ActionResult, Direction, SingleRegistry } from './core'; +import { useBridge, addBridge, Identifier, Hand, Pos, ActionResult, Direction, SimpleRegistry } from './core'; import { CompoundTag } from './tag'; /** @@ -130,6 +130,15 @@ export class BlockState { return null; } } + + /** + * Get Custom Block + * @returns Custom Block + */ + getCustomBlock(): CustomBlock { + const id = this.getBlock(); + return BlockRegistry.INSTANCE.get(id); + } } /** @@ -213,7 +222,7 @@ export abstract class CustomBlockWithEntity extends CustomBlock { /** * @internal */ -export class BlockRegistry implements SingleRegistry { +export class BlockRegistry implements SimpleRegistry { static INSTANCE = new BlockRegistry(); #blocks: Map; @@ -238,6 +247,15 @@ export class BlockRegistry implements SingleRegistry { return this.#blocks.get(id.toString()); } + getID(obj: CustomBlock): Identifier { + for (const block of this.#blocks) { + if (block[1] === obj) { + return new Identifier(block[0]); + } + } + return null; + } + getBlockEntity(id: Identifier, i: number): CustomBlockEntity { return this.#blockEntities.get(id.toString())[i]; } diff --git a/src/main/resources/scriptcraft/minecraft/core.ts b/src/main/resources/scriptcraft/minecraft/core.ts index 2ab1c84..dd92400 100644 --- a/src/main/resources/scriptcraft/minecraft/core.ts +++ b/src/main/resources/scriptcraft/minecraft/core.ts @@ -245,10 +245,27 @@ export class Pos { } /** - * @internal + * Simple Registry */ -export interface SingleRegistry { +export interface SimpleRegistry { + /** + * Register Object + * @param id ID + * @param obj Object + */ register(id: Identifier, obj: T): void; + /** + * Get Object From ID + * @param id ID + * @returns Object + */ get(id: Identifier): T; + + /** + * Get ID From Object + * @param obj Object + * @returns ID + */ + getID(obj: T): Identifier; } \ No newline at end of file diff --git a/src/main/resources/scriptcraft/minecraft/item.ts b/src/main/resources/scriptcraft/minecraft/item.ts index 1c44c15..6e9f0c0 100644 --- a/src/main/resources/scriptcraft/minecraft/item.ts +++ b/src/main/resources/scriptcraft/minecraft/item.ts @@ -1,4 +1,4 @@ -import { useBridge, Identifier, Hand, ActionResult, addBridge, Pos, Direction, SingleRegistry } from './core'; +import { useBridge, Identifier, Hand, ActionResult, addBridge, Pos, Direction, SimpleRegistry } from './core'; import { World } from './world'; import { PlayerEntity, LivingEntity } from './entity'; import { CompoundTag } from './tag'; @@ -46,6 +46,14 @@ export class ItemStack { } } + /** + * Get Custom Item + * @returns Custom Item + */ + getCustomItem(): CustomItem { + return ItemRegistry.INSTANCE.get(this.getItem()); + } + /** * Get Item Count * @returns Item Count @@ -54,6 +62,38 @@ export class ItemStack { return useBridge('ItemStack.getCount', this.javaObject) as number; } + /** + * Set Item Count + * @param count New Count + */ + setCount(count: number) { + useBridge('ItemStack.setCount', this.javaObject, count); + } + + /** + * Get Item Damage + * @returns Item Damage + */ + getDamage(): number { + return useBridge('ItemStack.getDamage', this.javaObject) as number; + } + + /** + * Set Item Damage + * @param count New Damage + */ + setDamage(damage: number) { + useBridge('ItemStack.setDamage', this.javaObject, damage); + } + + /** + * Is Item Damageable + * @returns True If Item Is Damageable + */ + isDamageable(): boolean { + return useBridge('ItemStack.isDamageable', this.javaObject) as boolean; + } + /** * Get Item Tag * @returns Item Tag @@ -207,7 +247,7 @@ export class BlockItem { /** * @internal */ -export class ItemRegistry implements SingleRegistry { +export class ItemRegistry implements SimpleRegistry { static INSTANCE = new ItemRegistry(); #items: Map; @@ -228,6 +268,15 @@ export class ItemRegistry implements SingleRegistry { get(id: Identifier): CustomItem { return this.#items.get(id.toString()); } + + getID(obj: CustomItem): Identifier { + for (const item of this.#items) { + if (item[1] === obj) { + return new Identifier(item[0]); + } + } + return null; + } } addBridge('CustomItem.onUse', (id: string, world: JavaObject, player: JavaObject, hand: keyof typeof Hand): string => { diff --git a/src/main/resources/scriptcraft/minecraft/registry.ts b/src/main/resources/scriptcraft/minecraft/registry.ts index 30f822f..27bd258 100644 --- a/src/main/resources/scriptcraft/minecraft/registry.ts +++ b/src/main/resources/scriptcraft/minecraft/registry.ts @@ -1,4 +1,4 @@ -import { Identifier, SingleRegistry } from './core'; +import { Identifier, SimpleRegistry } from './core'; import { BlockRegistry } from './block'; import { ItemRegistry } from './item'; @@ -21,7 +21,7 @@ export abstract class Registry { * @param id ID * @param obj Object */ - static register(registry: SingleRegistry, id: Identifier, obj: T): T { + static register(registry: SimpleRegistry, id: Identifier, obj: T): T { registry.register(id, obj); return obj; } @@ -30,8 +30,19 @@ export abstract class Registry { * Get Object From Registry * @param registry Target Registry * @param id ID + * @returns Object */ - static get(registry: SingleRegistry, id: Identifier): T { + static get(registry: SimpleRegistry, id: Identifier): T { return registry.get(id); } + + /** + * Get ID Of Object From Registry + * @param registry Target Registry + * @param obj Object + * @returns ID + */ + static getID(registry: SimpleRegistry, obj: T): Identifier { + return registry.getID(obj); + } } \ No newline at end of file