Improve Manipulating Tag Number Types
All checks were successful
ScriptCraft/pipeline/head This commit looks good
All checks were successful
ScriptCraft/pipeline/head This commit looks good
This commit is contained in:
parent
9e9710653f
commit
80559457f5
@ -6,9 +6,16 @@ import net.minecraft.nbt.AbstractNumberTag;
|
||||
import net.minecraft.nbt.ByteTag;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.nbt.DoubleTag;
|
||||
import net.minecraft.nbt.FloatTag;
|
||||
import net.minecraft.nbt.IntTag;
|
||||
import net.minecraft.nbt.ListTag;
|
||||
import net.minecraft.nbt.LongTag;
|
||||
import net.minecraft.nbt.ShortTag;
|
||||
import net.minecraft.nbt.StringTag;
|
||||
import net.minecraft.nbt.Tag;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
@SuppressWarnings({"rawtypes", "unchecked"})
|
||||
class TagBridges {
|
||||
@ -18,7 +25,7 @@ class TagBridges {
|
||||
if (obj instanceof StringTag) {
|
||||
out[1] = obj.asString();
|
||||
} else if (obj instanceof AbstractNumberTag) {
|
||||
out[1] = ((AbstractNumberTag) obj).getNumber().doubleValue();
|
||||
out[1] = ((AbstractNumberTag) obj).getDouble();
|
||||
} else if (obj instanceof AbstractListTag) {
|
||||
out[0] = true;
|
||||
out[1] = obj;
|
||||
@ -28,13 +35,37 @@ class TagBridges {
|
||||
return out;
|
||||
}
|
||||
|
||||
private static Tag toTag(Object obj) {
|
||||
private static Tag toTag(Object obj, String numberType) {
|
||||
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);
|
||||
double value = (Double) obj;
|
||||
numberType = numberType.toUpperCase(Locale.ROOT);
|
||||
switch (numberType.toUpperCase(Locale.ROOT)) {
|
||||
case "INT": {
|
||||
return IntTag.of(MathHelper.floor(value));
|
||||
}
|
||||
case "BYTE": {
|
||||
return ByteTag.of((byte) (MathHelper.floor(value) & 255));
|
||||
}
|
||||
case "DOUBLE": {
|
||||
return DoubleTag.of(value);
|
||||
}
|
||||
case "LONG": {
|
||||
return LongTag.of((long) Math.floor(value));
|
||||
}
|
||||
case "FLOAT": {
|
||||
return FloatTag.of((float) value);
|
||||
}
|
||||
case "SHORT": {
|
||||
return ShortTag.of((short) (MathHelper.floor(value) & '\uffff'));
|
||||
}
|
||||
default: {
|
||||
throw new RuntimeException("Invalid Number Type: " + numberType);
|
||||
}
|
||||
}
|
||||
} else if (obj instanceof String) {
|
||||
return StringTag.of((String) obj);
|
||||
} else {
|
||||
@ -50,7 +81,7 @@ class TagBridges {
|
||||
});
|
||||
Bridges.addBridge("CompoundTag.set", args -> {
|
||||
CompoundTag tag = (CompoundTag) args[0];
|
||||
tag.put((String) args[1], toTag(args[2]));
|
||||
tag.put((String) args[1], toTag(args[2], (String) args[3]));
|
||||
return null;
|
||||
});
|
||||
Bridges.addBridge("CompoundTag.keys", args -> {
|
||||
@ -65,7 +96,7 @@ class TagBridges {
|
||||
});
|
||||
Bridges.addBridge("ListTag.set", args -> {
|
||||
AbstractListTag tag = (AbstractListTag) args[0];
|
||||
tag.set((int) Util.toDouble(args[1], 0), toTag(args[2]));
|
||||
tag.set((int) Util.toDouble(args[1], 0), toTag(args[2], (String) args[3]));
|
||||
return null;
|
||||
});
|
||||
Bridges.addBridge("ListTag.size", args -> {
|
||||
|
@ -3,5 +3,5 @@ export { CustomBlock, CustomBlockEntity, CustomBlockWithEntity, BlockSettings, B
|
||||
export { ItemStack, ItemSettings, CustomItem, BlockItem } from './item';
|
||||
export { World } from './world';
|
||||
export { LivingEntity, PlayerEntity } from './entity';
|
||||
export { CompoundTag, ListTag } from './tag';
|
||||
export { CompoundTag, ListTag, NumberType } from './tag';
|
||||
export { Registry } from './registry';
|
@ -19,6 +19,18 @@ function getTagValue(obj: [boolean, BridgeValueType]): TagType {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Number Types
|
||||
*/
|
||||
export enum NumberType {
|
||||
INT = 'INT',
|
||||
BYTE = 'BYTE',
|
||||
DOUBLE = 'DOUBLE',
|
||||
LONG = 'LONG',
|
||||
FLOAT = 'FLOAT',
|
||||
SHORT = 'SHORT'
|
||||
}
|
||||
|
||||
/**
|
||||
* Compound Tag
|
||||
*/
|
||||
@ -49,9 +61,12 @@ export class CompoundTag {
|
||||
* Set Value In Tag
|
||||
* @param key Key
|
||||
* @param value Value
|
||||
* @param numberType Number Type
|
||||
*/
|
||||
set(key: string, value: TagType) {
|
||||
useBridge('CompoundTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value);
|
||||
set(key: string, value: number, numberType: NumberType): void;
|
||||
set(key: string, value: Exclude<TagType, number>): void;
|
||||
set(key: string, value: TagType, numberType?: NumberType) {
|
||||
useBridge('CompoundTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value, numberType);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,9 +121,12 @@ export class ListTag {
|
||||
* Set Value In Tag
|
||||
* @param key Key
|
||||
* @param value Value
|
||||
* @param numberType Number Type
|
||||
*/
|
||||
set(key: number, value: TagType) {
|
||||
useBridge('ListTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value);
|
||||
set(key: number, value: number, numberType: NumberType): void;
|
||||
set(key: number, value: Exclude<TagType, number>): void;
|
||||
set(key: number, value: TagType, numberType?: NumberType) {
|
||||
useBridge('ListTag.set', this.javaObject, key, (value instanceof CompoundTag || value instanceof ListTag) ? value.javaObject : value, numberType);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { BlockSettings, Identifier, Registry, BlockState, ActionResult, World, Pos, Hand, PlayerEntity, BlockItem, ItemSettings, CustomItem, Direction, LivingEntity, CustomBlockWithEntity, CustomBlockEntity, CompoundTag } from 'minecraft';
|
||||
import { BlockSettings, Identifier, Registry, BlockState, ActionResult, World, Pos, Hand, PlayerEntity, BlockItem, ItemSettings, CustomItem, Direction, LivingEntity, CustomBlockWithEntity, CustomBlockEntity, CompoundTag, NumberType } from 'minecraft';
|
||||
|
||||
console.log('hello');
|
||||
|
||||
@ -6,7 +6,7 @@ class MyBlockEntity extends CustomBlockEntity {
|
||||
ticks: number;
|
||||
|
||||
toTag(tag: CompoundTag): CompoundTag {
|
||||
tag.set('MyTicks', this.ticks);
|
||||
tag.set('MyTicks', this.ticks, NumberType.INT);
|
||||
return tag;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user