From 2f390e83935a62ada75d819e09ff6f7ff46b732c Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 19 May 2022 17:39:46 +0200 Subject: [PATCH] add some deprecated parsers to properly parse the packet --- .../parser/brigadier/_double/DoubleParser.kt | 3 -- .../parser/brigadier/_float/FloatParser.kt | 3 -- .../parser/brigadier/_int/IntParser.kt | 3 -- .../parser/brigadier/_long/LongParser.kt | 3 -- .../parser/brigadier/bool/BooleanParser.kt | 2 - .../parser/brigadier/string/StringParser.kt | 3 -- .../parser/factory/ArgumentParserFactories.kt | 54 +++++++++++++++++-- .../parser/factory/ArgumentParserFactory.kt | 3 -- .../{minosoft => minecraft}/range/Range.kt | 2 +- .../range/RangeParserFactory.kt | 9 ++-- .../range/_float/FloatRange.kt | 4 +- .../range/_float/FloatRangeParseError.kt | 2 +- .../range/_float/FloatRangeParser.kt | 7 +-- .../range/_int/IntRangeParseError.kt | 2 +- .../range/_int/IntRangeParser.kt | 7 +-- .../minecraft/resource/ResourceParser.kt | 53 ++++++++++++++++++ .../resource/tag/ResourceOrTagParser.kt | 53 ++++++++++++++++++ .../score/holder/ScoreHolderParseError.kt | 23 ++++++++ .../score/holder/ScoreHolderParser.kt | 52 ++++++++++++++++++ .../parser/minecraft/target/TargetParser.kt | 3 -- .../properties/rotation/PitchRotation.kt | 4 +- .../rotation/RotationOutOfRangeError.kt | 2 +- .../properties/rotation/RotationProperty.kt | 2 +- .../properties/rotation/YawRotation.kt | 4 +- .../parser/minosoft/enums/EnumParser.kt | 3 -- .../data/registries/registries/Registries.kt | 5 ++ 26 files changed, 255 insertions(+), 56 deletions(-) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/Range.kt (93%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/RangeParserFactory.kt (84%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/_float/FloatRange.kt (88%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/_float/FloatRangeParseError.kt (94%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/_float/FloatRangeParser.kt (89%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/_int/IntRangeParseError.kt (94%) rename src/main/java/de/bixilon/minosoft/commands/parser/{minosoft => minecraft}/range/_int/IntRangeParser.kt (89%) create mode 100644 src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/ResourceParser.kt create mode 100644 src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/tag/ResourceOrTagParser.kt create mode 100644 src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParseError.kt create mode 100644 src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParser.kt diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_double/DoubleParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_double/DoubleParser.kt index f8bb8d3cb..d88a75083 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_double/DoubleParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_double/DoubleParser.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.BitByte.isBitMask import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -50,8 +49,6 @@ class DoubleParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "brigadier:double".toResourceLocation() - override fun build(connection: PlayConnection?) = DoubleParser() - override fun read(buffer: PlayInByteBuffer): DoubleParser { val flags = buffer.readUnsignedByte() val min = if (flags.isBitMask(0x01)) buffer.readDouble() else -Double.MAX_VALUE diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_float/FloatParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_float/FloatParser.kt index ba854d527..e6b801296 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_float/FloatParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_float/FloatParser.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.BitByte.isBitMask import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -50,8 +49,6 @@ class FloatParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "brigadier:float".toResourceLocation() - override fun build(connection: PlayConnection?) = FloatParser() - override fun read(buffer: PlayInByteBuffer): FloatParser { val flags = buffer.readUnsignedByte() val min = if (flags.isBitMask(0x01)) buffer.readFloat() else -Float.MAX_VALUE diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_int/IntParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_int/IntParser.kt index cfebc048d..0f4a5d8cb 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_int/IntParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_int/IntParser.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.BitByte.isBitMask import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -50,8 +49,6 @@ class IntParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "brigadier:integer".toResourceLocation() - override fun build(connection: PlayConnection?) = IntParser() - override fun read(buffer: PlayInByteBuffer): IntParser { val flags = buffer.readUnsignedByte() val min = if (flags.isBitMask(0x01)) buffer.readInt() else Int.MIN_VALUE diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_long/LongParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_long/LongParser.kt index a4f5d3a39..081c53db2 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_long/LongParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/_long/LongParser.kt @@ -18,7 +18,6 @@ import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.BitByte.isBitMask import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -50,8 +49,6 @@ class LongParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "brigadier:long".toResourceLocation() - override fun build(connection: PlayConnection?) = LongParser() - override fun read(buffer: PlayInByteBuffer): LongParser { val flags = buffer.readUnsignedByte() val min = if (flags.isBitMask(0x01)) buffer.readLong() else Long.MIN_VALUE diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/bool/BooleanParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/bool/BooleanParser.kt index 6d275cde8..e258c0438 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/bool/BooleanParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/brigadier/bool/BooleanParser.kt @@ -20,7 +20,6 @@ import de.bixilon.minosoft.commands.suggestion.ArraySuggestion import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -50,6 +49,5 @@ object BooleanParser : BrigadierParser, ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "brigadier:string".toResourceLocation() - override fun build(connection: PlayConnection?) = StringParser() - override fun read(buffer: PlayInByteBuffer): StringParser { return StringParser(StringModes[buffer.readVarInt()]) } diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactories.kt b/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactories.kt index 6beca7234..ea43e87da 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactories.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactories.kt @@ -19,10 +19,13 @@ import de.bixilon.minosoft.commands.parser.brigadier._int.IntParser import de.bixilon.minosoft.commands.parser.brigadier._long.LongParser import de.bixilon.minosoft.commands.parser.brigadier.bool.BooleanParser import de.bixilon.minosoft.commands.parser.brigadier.string.StringParser +import de.bixilon.minosoft.commands.parser.minecraft.range.RangeParserFactory +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRangeParser +import de.bixilon.minosoft.commands.parser.minecraft.range._int.IntRangeParser +import de.bixilon.minosoft.commands.parser.minecraft.resource.ResourceParser +import de.bixilon.minosoft.commands.parser.minecraft.resource.tag.ResourceOrTagParser +import de.bixilon.minosoft.commands.parser.minecraft.score.holder.ScoreHolderParser import de.bixilon.minosoft.commands.parser.minecraft.target.TargetParser -import de.bixilon.minosoft.commands.parser.minosoft.range.RangeParserFactory -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRangeParser -import de.bixilon.minosoft.commands.parser.minosoft.range._int.IntRangeParser import de.bixilon.minosoft.data.registries.factory.DefaultFactory object ArgumentParserFactories : DefaultFactory>( @@ -38,4 +41,49 @@ object ArgumentParserFactories : DefaultFactory>( RangeParserFactory, FloatRangeParser, IntRangeParser, + + ScoreHolderParser, + ResourceParser, + ResourceOrTagParser, + +/* TODO: +minecraft:game_profile +minecraft:block_pos +minecraft:column_pos +minecraft:vec3 +minecraft:vec2 +minecraft:block_state +minecraft:block_predicate +minecraft:item_stack +minecraft:item_predicate +minecraft:color +minecraft:component +minecraft:message +minecraft:nbt +minecraft:nbt_path +minecraft:objective +minecraft:objective_criteria +minecraft:operation +minecraft:particle +minecraft:rotation +minecraft:angle +minecraft:scoreboard_slot +minecraft:score_holder +minecraft:swizzle +minecraft:team +minecraft:item_slot +minecraft:resource_location +minecraft:mob_effect +minecraft:function +minecraft:entity_anchor +minecraft:item_enchantment +minecraft:entity_summon +minecraft:dimension +minecraft:uuid +minecraft:nbt_tag +minecraft:nbt_compound_tag +minecraft:time +minecraft:resource_or_tag +minecraft:resource + */ ) diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactory.kt b/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactory.kt index ed37d1be4..c8512c7d6 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactory.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/factory/ArgumentParserFactory.kt @@ -15,12 +15,9 @@ package de.bixilon.minosoft.commands.parser.factory import de.bixilon.minosoft.commands.parser.ArgumentParser import de.bixilon.minosoft.data.registries.CompanionResourceLocation -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer interface ArgumentParserFactory> : CompanionResourceLocation { - fun build(connection: PlayConnection?): T - fun read(buffer: PlayInByteBuffer): T } diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/Range.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/Range.kt similarity index 93% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/Range.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/Range.kt index 9b998442a..5d45c6dc7 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/Range.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/Range.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range +package de.bixilon.minosoft.commands.parser.minecraft.range interface Range { val min: T diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/RangeParserFactory.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/RangeParserFactory.kt similarity index 84% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/RangeParserFactory.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/RangeParserFactory.kt index d43b35647..9f1aa8cf1 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/RangeParserFactory.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/RangeParserFactory.kt @@ -11,15 +11,14 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range +package de.bixilon.minosoft.commands.parser.minecraft.range import de.bixilon.minosoft.commands.parser.ArgumentParser import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRangeParser -import de.bixilon.minosoft.commands.parser.minosoft.range._int.IntRangeParser +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRangeParser +import de.bixilon.minosoft.commands.parser.minecraft.range._int.IntRangeParser import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -27,8 +26,6 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation object RangeParserFactory : ArgumentParserFactory> { override val RESOURCE_LOCATION: ResourceLocation = "minosoft:range".toResourceLocation() - override fun build(connection: PlayConnection?) = TODO("Can not construct range parser!") - override fun read(buffer: PlayInByteBuffer): ArgumentParser<*> { val decimals = buffer.readBoolean() return if (decimals) { diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRange.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRange.kt similarity index 88% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRange.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRange.kt index 5f1d7ef58..b5af3c559 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRange.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRange.kt @@ -11,9 +11,9 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range._float +package de.bixilon.minosoft.commands.parser.minecraft.range._float -import de.bixilon.minosoft.commands.parser.minosoft.range.Range +import de.bixilon.minosoft.commands.parser.minecraft.range.Range class FloatRange( override val min: Float = -Float.MAX_VALUE, diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParseError.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParseError.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParseError.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParseError.kt index ef5f49317..c592d6f1e 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParseError.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParseError.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range._float +package de.bixilon.minosoft.commands.parser.minecraft.range._float import de.bixilon.minosoft.commands.errors.parser.ParserError import de.bixilon.minosoft.commands.util.CommandReader diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParser.kt similarity index 89% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParser.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParser.kt index d44f9074e..886217a69 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_float/FloatRangeParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_float/FloatRangeParser.kt @@ -11,16 +11,15 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range._float +package de.bixilon.minosoft.commands.parser.minecraft.range._float import de.bixilon.minosoft.commands.parser.ArgumentParser import de.bixilon.minosoft.commands.parser.brigadier._float.FloatParser.Companion.readFloat import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory -import de.bixilon.minosoft.commands.parser.minosoft.range.RangeParserFactory.readRange +import de.bixilon.minosoft.commands.parser.minecraft.range.RangeParserFactory.readRange import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -44,8 +43,6 @@ class FloatRangeParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "minecraft:float_range".toResourceLocation() - override fun build(connection: PlayConnection?) = FloatRangeParser() - override fun read(buffer: PlayInByteBuffer) = FloatRangeParser() fun CommandReader.readFloatRange(defaultMin: Boolean = true): FloatRange? { diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParseError.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParseError.kt similarity index 94% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParseError.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParseError.kt index df9ae3ce2..d5cf369d8 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParseError.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParseError.kt @@ -11,7 +11,7 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range._int +package de.bixilon.minosoft.commands.parser.minecraft.range._int import de.bixilon.minosoft.commands.errors.parser.ParserError import de.bixilon.minosoft.commands.util.CommandReader diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParser.kt similarity index 89% rename from src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParser.kt rename to src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParser.kt index c44d0b943..fefc42471 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/range/_int/IntRangeParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/range/_int/IntRangeParser.kt @@ -11,16 +11,15 @@ * This software is not affiliated with Mojang AB, the original developer of Minecraft. */ -package de.bixilon.minosoft.commands.parser.minosoft.range._int +package de.bixilon.minosoft.commands.parser.minecraft.range._int import de.bixilon.minosoft.commands.parser.ArgumentParser import de.bixilon.minosoft.commands.parser.brigadier._int.IntParser.Companion.readInt import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory -import de.bixilon.minosoft.commands.parser.minosoft.range.RangeParserFactory.readRange +import de.bixilon.minosoft.commands.parser.minecraft.range.RangeParserFactory.readRange import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -44,8 +43,6 @@ class IntRangeParser( companion object : ArgumentParserFactory { override val RESOURCE_LOCATION: ResourceLocation = "minecraft:float_range".toResourceLocation() - override fun build(connection: PlayConnection?) = IntRangeParser() - override fun read(buffer: PlayInByteBuffer) = IntRangeParser() fun CommandReader.readIntRange(defaultMin: Boolean = true): IntRange? { diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/ResourceParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/ResourceParser.kt new file mode 100644 index 000000000..f5fc8998a --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/ResourceParser.kt @@ -0,0 +1,53 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.commands.parser.minecraft.resource + +import de.bixilon.minosoft.commands.parser.ArgumentParser +import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory +import de.bixilon.minosoft.commands.util.CommandReader +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.registries.registry.AbstractRegistry +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer +import de.bixilon.minosoft.util.KUtil.toResourceLocation + +@Deprecated("TODO") +class ResourceParser( + val registry: AbstractRegistry<*>?, +) : ArgumentParser { + override val examples: List = listOf("TODO") + override val placeholder = ChatComponent.of("") + + override fun parse(reader: CommandReader): IntRange { + TODO() + } + + override fun getSuggestions(reader: CommandReader): List { + if (reader.readString()?.isBlank() != false) { + return examples + } + return emptyList() + } + + companion object : ArgumentParserFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:resource".toResourceLocation() + + + override fun read(buffer: PlayInByteBuffer): ResourceParser { + val registryName = buffer.readResourceLocation() + val registry = buffer.connection.registries[registryName] + return ResourceParser(registry) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/tag/ResourceOrTagParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/tag/ResourceOrTagParser.kt new file mode 100644 index 000000000..7803bcbff --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/resource/tag/ResourceOrTagParser.kt @@ -0,0 +1,53 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.commands.parser.minecraft.resource.tag + +import de.bixilon.minosoft.commands.parser.ArgumentParser +import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory +import de.bixilon.minosoft.commands.util.CommandReader +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.registries.registries.registry.AbstractRegistry +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer +import de.bixilon.minosoft.util.KUtil.toResourceLocation + +@Deprecated("TODO") +class ResourceOrTagParser( + val registry: AbstractRegistry<*>?, +) : ArgumentParser { + override val examples: List = listOf("TODO") + override val placeholder = ChatComponent.of("") + + override fun parse(reader: CommandReader): IntRange { + TODO() + } + + override fun getSuggestions(reader: CommandReader): List { + if (reader.readString()?.isBlank() != false) { + return examples + } + return emptyList() + } + + companion object : ArgumentParserFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:resource_or_tag".toResourceLocation() + + + override fun read(buffer: PlayInByteBuffer): ResourceOrTagParser { + val registryName = buffer.readResourceLocation() + val registry = buffer.connection.registries[registryName] + return ResourceOrTagParser(registry) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParseError.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParseError.kt new file mode 100644 index 000000000..8d51aea8e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParseError.kt @@ -0,0 +1,23 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.commands.parser.minecraft.score.holder + +import de.bixilon.minosoft.commands.errors.parser.ParserError +import de.bixilon.minosoft.commands.util.CommandReader +import de.bixilon.minosoft.commands.util.ReadResult + +class ScoreHolderParseError( + reader: CommandReader, + result: ReadResult, +) : ParserError(reader, result) diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParser.kt new file mode 100644 index 000000000..3a5f627e0 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/score/holder/ScoreHolderParser.kt @@ -0,0 +1,52 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.commands.parser.minecraft.score.holder + +import de.bixilon.minosoft.commands.parser.ArgumentParser +import de.bixilon.minosoft.commands.parser.factory.ArgumentParserFactory +import de.bixilon.minosoft.commands.util.CommandReader +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer +import de.bixilon.minosoft.util.BitByte.isBitMask +import de.bixilon.minosoft.util.KUtil.toResourceLocation + +@Deprecated("TODO") +class ScoreHolderParser( + val allowMultiple: Boolean = false, +) : ArgumentParser { + override val examples: List = listOf("TODO") + override val placeholder = ChatComponent.of("") + + override fun parse(reader: CommandReader): IntRange { + TODO() + } + + override fun getSuggestions(reader: CommandReader): List { + if (reader.readString()?.isBlank() != false) { + return examples + } + return emptyList() + } + + companion object : ArgumentParserFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minecraft:score_holder".toResourceLocation() + + override fun read(buffer: PlayInByteBuffer): ScoreHolderParser { + val flags = buffer.readUnsignedByte() + val allowMultiple = flags.isBitMask(0x01) + return ScoreHolderParser(allowMultiple) + } + } +} diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/TargetParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/TargetParser.kt index b7c0ed988..dbc192985 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/TargetParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/TargetParser.kt @@ -31,7 +31,6 @@ import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.commands.util.ReadResult import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.util.BitByte.isBitMask @@ -106,8 +105,6 @@ class TargetParser( override val RESOURCE_LOCATION: ResourceLocation = "minecraft:entity".toResourceLocation() const val DEFAULT_PLAYER_NAME = "Bixilon" - override fun build(connection: PlayConnection?) = TargetParser(playerName = connection?.player?.name ?: DEFAULT_PLAYER_NAME) - override fun read(buffer: PlayInByteBuffer): TargetParser { val flags = buffer.readUnsignedByte() val single = flags.isBitMask(0x01) diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/PitchRotation.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/PitchRotation.kt index 9a98a3507..d4261daf6 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/PitchRotation.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/PitchRotation.kt @@ -13,9 +13,9 @@ package de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.rotation +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRange +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRangeParser import de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.TargetPropertyFactory -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRange -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRangeParser import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.entities.EntityRotation diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationOutOfRangeError.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationOutOfRangeError.kt index 67427461a..a1c3ba809 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationOutOfRangeError.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationOutOfRangeError.kt @@ -14,7 +14,7 @@ package de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.rotation import de.bixilon.minosoft.commands.errors.parser.ParserError -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRange +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRange import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.commands.util.ReadResult diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationProperty.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationProperty.kt index cc0be2a13..606404d1d 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationProperty.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/RotationProperty.kt @@ -13,8 +13,8 @@ package de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.rotation +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRange import de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.TargetProperty -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRange import de.bixilon.minosoft.data.entities.EntityRotation import de.bixilon.minosoft.data.entities.entities.Entity diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/YawRotation.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/YawRotation.kt index e0585625f..80bb88ca4 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/YawRotation.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minecraft/target/targets/selector/properties/rotation/YawRotation.kt @@ -13,9 +13,9 @@ package de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.rotation +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRange +import de.bixilon.minosoft.commands.parser.minecraft.range._float.FloatRangeParser import de.bixilon.minosoft.commands.parser.minecraft.target.targets.selector.properties.TargetPropertyFactory -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRange -import de.bixilon.minosoft.commands.parser.minosoft.range._float.FloatRangeParser import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.entities.EntityRotation diff --git a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/enums/EnumParser.kt b/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/enums/EnumParser.kt index 9542e2705..87aa989a7 100644 --- a/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/enums/EnumParser.kt +++ b/src/main/java/de/bixilon/minosoft/commands/parser/minosoft/enums/EnumParser.kt @@ -21,7 +21,6 @@ import de.bixilon.minosoft.commands.suggestion.ArraySuggestion import de.bixilon.minosoft.commands.util.CommandReader import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.text.ChatComponent -import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.protocol.PlayInByteBuffer import de.bixilon.minosoft.util.KUtil.toResourceLocation @@ -51,8 +50,6 @@ class EnumParser>( companion object : ArgumentParserFactory> { override val RESOURCE_LOCATION: ResourceLocation = "minosoft:enum".toResourceLocation() - override fun build(connection: PlayConnection?) = TODO("Can not construct enum parser yet!") - override fun read(buffer: PlayInByteBuffer) = TODO("Can not construct enum parser yet!") } } diff --git a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt index 4830cd10b..b4352d928 100644 --- a/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt +++ b/src/main/java/de/bixilon/minosoft/data/registries/registries/Registries.kt @@ -232,6 +232,11 @@ class Registries { return currentField?.get(this) as Registry? } + @Deprecated("TODO") + operator fun get(name: ResourceLocation): AbstractRegistry<*>? { + return null // ToDo + } + private fun > register(name: String, registry: R): R { registries[name.toResourceLocation()] = registry