This commit is contained in:
parent
a8e9aa99f1
commit
d2ba0b6cf2
@ -37,5 +37,6 @@ public class Bridges {
|
|||||||
ItemSettingsBridges.register();
|
ItemSettingsBridges.register();
|
||||||
EntityBridges.register();
|
EntityBridges.register();
|
||||||
DamageSourceBridges.register();
|
DamageSourceBridges.register();
|
||||||
|
TagBridges.register();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package com.thebrokenrail.scriptcraft.bridge;
|
|||||||
import com.thebrokenrail.scriptcraft.util.Util;
|
import com.thebrokenrail.scriptcraft.util.Util;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
import net.minecraft.entity.damage.DamageSource;
|
import net.minecraft.entity.damage.DamageSource;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
|
|
||||||
@ -45,5 +46,11 @@ class EntityBridges {
|
|||||||
((Entity) args[0]).updatePosition(Util.toDouble(args[1], 0), Util.toDouble(args[2], 0), Util.toDouble(args[3], 0));
|
((Entity) args[0]).updatePosition(Util.toDouble(args[1], 0), Util.toDouble(args[2], 0), Util.toDouble(args[3], 0));
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Bridges.addBridge("Entity.toTag", args -> ((Entity) args[0]).toTag(new CompoundTag()));
|
||||||
|
Bridges.addBridge("Entity.fromTag", args -> {
|
||||||
|
((Entity) args[0]).fromTag((CompoundTag) args[1]);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,21 @@
|
|||||||
package com.thebrokenrail.scriptcraft.bridge;
|
package com.thebrokenrail.scriptcraft.bridge;
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
import net.minecraft.util.registry.Registry;
|
import net.minecraft.util.registry.Registry;
|
||||||
|
|
||||||
class ItemStackBridges {
|
class ItemStackBridges {
|
||||||
static void register() {
|
static void register() {
|
||||||
Bridges.addBridge("ItemStack.create", args -> new ItemStack(Registry.ITEM.get(new Identifier((String) args[0])), ((Double) args[1]).intValue()));
|
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.getItem", args -> Registry.ITEM.getId(((ItemStack) args[0]).getItem()).toString());
|
||||||
Bridges.addBridge("ItemStack.getCount", args -> (double) ((ItemStack) args[0]).getCount());
|
Bridges.addBridge("ItemStack.getCount", args -> (double) ((ItemStack) args[0]).getCount());
|
||||||
|
|
||||||
|
Bridges.addBridge("ItemStack.getTag", args -> ((ItemStack) args[0]).getTag());
|
||||||
|
Bridges.addBridge("ItemStack.setTag", args -> {
|
||||||
|
((ItemStack) args[0]).setTag((CompoundTag) args[1]);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,75 @@
|
|||||||
|
package com.thebrokenrail.scriptcraft.bridge;
|
||||||
|
|
||||||
|
import com.thebrokenrail.scriptcraft.util.Util;
|
||||||
|
import net.minecraft.nbt.AbstractListTag;
|
||||||
|
import net.minecraft.nbt.AbstractNumberTag;
|
||||||
|
import net.minecraft.nbt.ByteTag;
|
||||||
|
import net.minecraft.nbt.CompoundTag;
|
||||||
|
import net.minecraft.nbt.DoubleTag;
|
||||||
|
import net.minecraft.nbt.StringTag;
|
||||||
|
import net.minecraft.nbt.Tag;
|
||||||
|
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||||
|
class TagBridges {
|
||||||
|
private static Object[] toOut(Tag obj) {
|
||||||
|
Object[] out = new Object[2];
|
||||||
|
out[0] = false;
|
||||||
|
if (obj instanceof StringTag) {
|
||||||
|
out[1] = obj.asString();
|
||||||
|
} else if (obj instanceof AbstractNumberTag) {
|
||||||
|
out[1] = ((AbstractNumberTag) obj).getNumber().doubleValue();
|
||||||
|
} else if (obj instanceof AbstractListTag) {
|
||||||
|
out[0] = true;
|
||||||
|
out[1] = obj;
|
||||||
|
} else if (obj instanceof CompoundTag) {
|
||||||
|
out[1] = obj;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Tag toTag(Object obj) {
|
||||||
|
if (obj instanceof Tag) {
|
||||||
|
return (Tag) obj;
|
||||||
|
} else if (obj instanceof Boolean) {
|
||||||
|
return ByteTag.of((Boolean) obj);
|
||||||
|
} else if (obj instanceof Double) {
|
||||||
|
return DoubleTag.of((Double) obj);
|
||||||
|
} else if (obj instanceof String) {
|
||||||
|
return StringTag.of((String) obj);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void register() {
|
||||||
|
Bridges.addBridge("CompoundTag.get", args -> {
|
||||||
|
CompoundTag tag = (CompoundTag) args[0];
|
||||||
|
Tag obj = tag.get((String) args[1]);
|
||||||
|
return toOut(obj);
|
||||||
|
});
|
||||||
|
Bridges.addBridge("CompoundTag.set", args -> {
|
||||||
|
CompoundTag tag = (CompoundTag) args[0];
|
||||||
|
tag.put((String) args[1], toTag(args[2]));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
Bridges.addBridge("CompoundTag.keys", args -> {
|
||||||
|
CompoundTag tag = (CompoundTag) args[0];
|
||||||
|
return tag.getKeys().toArray(new String[0]);
|
||||||
|
});
|
||||||
|
|
||||||
|
Bridges.addBridge("ListTag.get", args -> {
|
||||||
|
AbstractListTag<?> tag = (AbstractListTag<?>) args[0];
|
||||||
|
Tag obj = tag.get((int) Util.toDouble(args[1], 0));
|
||||||
|
return toOut(obj);
|
||||||
|
});
|
||||||
|
Bridges.addBridge("ListTag.set", args -> {
|
||||||
|
AbstractListTag tag = (AbstractListTag) args[0];
|
||||||
|
tag.set((int) Util.toDouble(args[1], 0), toTag(args[2]));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
Bridges.addBridge("ListTag.size", args -> {
|
||||||
|
AbstractListTag<?> tag = (AbstractListTag<?>) args[0];
|
||||||
|
return tag.size();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -97,7 +97,7 @@ export class BlockState {
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
javaObject: JavaObject;
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
constructor(javaObject: JavaObject) {
|
constructor(javaObject: JavaObject) {
|
||||||
this.javaObject = javaObject;
|
this.javaObject = javaObject;
|
||||||
@ -154,5 +154,6 @@ export class BlockRegistry implements SingleRegistry<CustomBlock> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
addBridge('CustomBlock.onUse', (id: string, world: JavaObject, state: JavaObject, x: number, y: number, z: number, side: keyof typeof Direction, player: JavaObject, hand: keyof typeof Hand): string => {
|
addBridge('CustomBlock.onUse', (id: string, world: JavaObject, state: JavaObject, x: number, y: number, z: number, side: keyof typeof Direction, player: JavaObject, hand: keyof typeof Hand): string => {
|
||||||
|
console.log(typeof world);
|
||||||
return BlockRegistry.INSTANCE.get(new Identifier(id)).onUse(new World(world), new BlockState(state), new Pos(x, y, z), Direction[side], new PlayerEntity(player), Hand[hand]);
|
return BlockRegistry.INSTANCE.get(new Identifier(id)).onUse(new World(world), new BlockState(state), new Pos(x, y, z), Direction[side], new PlayerEntity(player), Hand[hand]);
|
||||||
});
|
});
|
@ -1,6 +1,7 @@
|
|||||||
import { ItemStack } from './item';
|
import { ItemStack } from './item';
|
||||||
import { useBridge, Hand, Identifier, Pos } from './core';
|
import { useBridge, Hand, Identifier, Pos } from './core';
|
||||||
import { World } from './world';
|
import { World } from './world';
|
||||||
|
import { CompoundTag } from './tag';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Damage Source
|
* Damage Source
|
||||||
@ -9,7 +10,7 @@ export class DamageSource {
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
javaObject: JavaObject;
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -65,7 +66,7 @@ export class Entity {
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
javaObject: JavaObject;
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -197,6 +198,27 @@ export class Entity {
|
|||||||
setPosition(pos: Pos) {
|
setPosition(pos: Pos) {
|
||||||
useBridge('Entity.setPosition', this.javaObject, pos.getX(), pos.getY(), pos.getZ());
|
useBridge('Entity.setPosition', this.javaObject, pos.getX(), pos.getY(), pos.getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save Data To {@link CompoundTag}
|
||||||
|
* @returns Tag
|
||||||
|
*/
|
||||||
|
toTag(): CompoundTag {
|
||||||
|
const obj = useBridge('Entity.toTag', this.javaObject) as JavaObject;
|
||||||
|
if (obj) {
|
||||||
|
return new CompoundTag(obj);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load Data From {@link CompoundTag}
|
||||||
|
* @param tag Tag
|
||||||
|
*/
|
||||||
|
fromTag(tag: CompoundTag) {
|
||||||
|
useBridge('Entity.fromTag', this.javaObject, tag.javaObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -3,4 +3,5 @@ export { CustomBlock, BlockSettings, BlockState } from './block';
|
|||||||
export { ItemStack, ItemSettings, CustomItem, BlockItem } from './item';
|
export { ItemStack, ItemSettings, CustomItem, BlockItem } from './item';
|
||||||
export { World } from './world';
|
export { World } from './world';
|
||||||
export { LivingEntity, PlayerEntity } from './entity';
|
export { LivingEntity, PlayerEntity } from './entity';
|
||||||
|
export { CompoundTag, ListTag } from './tag';
|
||||||
export { Registry } from './registry';
|
export { Registry } from './registry';
|
@ -1,6 +1,7 @@
|
|||||||
import { useBridge, Identifier, Hand, ActionResult, addBridge, Pos, Direction, SingleRegistry } from './core';
|
import { useBridge, Identifier, Hand, ActionResult, addBridge, Pos, Direction, SingleRegistry } from './core';
|
||||||
import { World } from './world';
|
import { World } from './world';
|
||||||
import { PlayerEntity, LivingEntity } from './entity';
|
import { PlayerEntity, LivingEntity } from './entity';
|
||||||
|
import { CompoundTag } from './tag';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Item Stack
|
* Item Stack
|
||||||
@ -9,7 +10,7 @@ export class ItemStack {
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
javaObject: JavaObject;
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
@ -52,6 +53,27 @@ export class ItemStack {
|
|||||||
getCount(): number {
|
getCount(): number {
|
||||||
return useBridge('ItemStack.getCount', this.javaObject) as number;
|
return useBridge('ItemStack.getCount', this.javaObject) as number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Item Tag
|
||||||
|
* @returns Item Tag
|
||||||
|
*/
|
||||||
|
getTag(): CompoundTag {
|
||||||
|
const obj = useBridge('ItemStack.getTag', this.javaObject) as JavaObject;
|
||||||
|
if (obj) {
|
||||||
|
return new CompoundTag(obj);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Item Tag
|
||||||
|
* @param tag New Item Tag
|
||||||
|
*/
|
||||||
|
setTag(tag: CompoundTag) {
|
||||||
|
useBridge('ItemStack.setTag', this.javaObject, tag.javaObject);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
106
src/main/resources/scriptcraft/minecraft/tag.ts
Normal file
106
src/main/resources/scriptcraft/minecraft/tag.ts
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
import { useBridge } from "./core";
|
||||||
|
|
||||||
|
type TagType = number | boolean | string | CompoundTag | ListTag;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
function getTagValue(obj: [boolean, BridgeValueType]): TagType {
|
||||||
|
if (typeof obj[1] === 'object') {
|
||||||
|
if (obj[0]) {
|
||||||
|
return new ListTag(obj[1] as JavaObject);
|
||||||
|
} else {
|
||||||
|
return new CompoundTag(obj[1] as JavaObject);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return obj[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compound Tag
|
||||||
|
*/
|
||||||
|
export class CompoundTag {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(javaObject: JavaObject) {
|
||||||
|
this.javaObject = javaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Value In Tag
|
||||||
|
* @param key Key
|
||||||
|
* @returns Value
|
||||||
|
*/
|
||||||
|
get(key: string): TagType {
|
||||||
|
const obj = useBridge('CompoundTag.get', this.javaObject, key) as [boolean, BridgeValueType];
|
||||||
|
return getTagValue(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Value In Tag
|
||||||
|
* @param key Key
|
||||||
|
* @param value Value
|
||||||
|
*/
|
||||||
|
set(key: string, value: TagType) {
|
||||||
|
useBridge('CompoundTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get All Keys
|
||||||
|
* @returns List Of Keys
|
||||||
|
*/
|
||||||
|
keys(): string[] {
|
||||||
|
return useBridge('CompoundTag.keys', this.javaObject) as string[];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List Tag
|
||||||
|
*/
|
||||||
|
export class ListTag {
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal
|
||||||
|
*/
|
||||||
|
constructor(javaObject: JavaObject) {
|
||||||
|
this.javaObject = javaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Value In Tag
|
||||||
|
* @param key Key
|
||||||
|
* @returns Value
|
||||||
|
*/
|
||||||
|
get(key: number): TagType {
|
||||||
|
const obj = useBridge('ListTag.get', this.javaObject, key) as [boolean, BridgeValueType];
|
||||||
|
return getTagValue(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Value In Tag
|
||||||
|
* @param key Key
|
||||||
|
* @param value Value
|
||||||
|
*/
|
||||||
|
set(key: number, value: TagType) {
|
||||||
|
useBridge('ListTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Size Of Tag
|
||||||
|
* @returns Size
|
||||||
|
*/
|
||||||
|
size(): number {
|
||||||
|
return useBridge('ListTag.size', this.javaObject) as number;
|
||||||
|
}
|
||||||
|
}
|
@ -9,7 +9,7 @@ export class World {
|
|||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
javaObject: JavaObject;
|
readonly javaObject: JavaObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
|
@ -33,7 +33,8 @@ class MyItem extends CustomItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onUseOnEntity(player: PlayerEntity, target: LivingEntity, hand: Hand): ActionResult {
|
onUseOnEntity(player: PlayerEntity, target: LivingEntity, hand: Hand): ActionResult {
|
||||||
console.log('Item Use: Entity ' + target.getPosition());
|
console.log('Item Use: Entity ' + target.toTag().keys());
|
||||||
|
console.log('Health: ' + target.toTag().get('Health').toString());
|
||||||
return ActionResult.SUCCESS;
|
return ActionResult.SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user