From 0eb7218582b9246c785afae1a15b1512d96a74b5 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sun, 19 Jun 2022 03:59:07 -0400 Subject: [PATCH 001/134] Super cursed custom skulls custom block --- .../api/block/custom/CustomBlockData.java | 65 +++++ .../block/custom/CustomBlockPermutation.java | 43 +++ .../api/block/custom/CustomBlockState.java | 48 ++++ .../custom/component/CollisionComponent.java | 30 +++ .../component/CustomBlockComponents.java | 70 +++++ .../custom/component/MaterialInstance.java | 32 +++ .../block/custom/component/RenderMethod.java | 32 +++ .../custom/component/RotationComponent.java | 29 ++ .../custom/property/CustomBlockProperty.java | 38 +++ .../block/custom/property/PropertyType.java | 42 +++ .../GeyserConvertSkullInventoryEvent.java | 48 ++++ .../GeyserDefineCustomBlocksEvent.java | 36 +++ .../event/world/GeyserConvertSkullEvent.java | 118 +++++++++ .../block/GeyserCustomBlockComponents.java | 173 ++++++++++++ .../level/block/GeyserCustomBlockData.java | 137 ++++++++++ .../block/GeyserCustomBlockPermutation.java | 76 ++++++ .../block/GeyserCustomBlockProperty.java | 60 +++++ .../level/block/GeyserCustomBlockState.java | 107 ++++++++ .../geyser/registry/BlockRegistries.java | 6 + .../populator/BlockRegistryPopulator.java | 250 ++++++++++++++++-- .../populator/ItemRegistryPopulator.java | 23 +- .../provider/GeyserBuilderProvider.java | 11 + .../geyser/registry/type/BlockMappings.java | 7 + .../geyser/registry/type/ItemMappings.java | 4 + .../geyser/session/GeyserSession.java | 6 + .../geyser/session/cache/SkullCache.java | 50 ++++ .../org/geysermc/geyser/skin/SkinManager.java | 2 +- .../inventory/item/ItemTranslator.java | 52 ++++ .../entity/SkullBlockEntityTranslator.java | 66 ++++- ...BedrockInventoryTransactionTranslator.java | 10 +- .../level/JavaBlockEntityDataTranslator.java | 18 +- .../JavaLevelChunkWithLightTranslator.java | 14 +- .../org/geysermc/geyser/util/ChunkUtils.java | 11 +- 33 files changed, 1681 insertions(+), 33 deletions(-) create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java new file mode 100644 index 00000000000..6ee7645148a --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; + +import java.util.List; +import java.util.Map; + +/** + * This is used to store data for a custom block. + */ +public interface CustomBlockData { + @NonNull String name(); + + CustomBlockComponents components(); + + @NonNull Map> properties(); + + @NonNull List permutations(); + + CustomBlockState.Builder blockStateBuilder(); + + interface Builder { + Builder name(@NonNull String name); + + Builder components(@NonNull CustomBlockComponents components); + + Builder booleanProperty(@NonNull String propertyName, List values); + + Builder intProperty(@NonNull String propertyName, List values); + + Builder stringProperty(@NonNull String propertyName, List values); + + + Builder permutations(@NonNull List permutations); + + CustomBlockData build(); + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java new file mode 100644 index 00000000000..5766565d21a --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; + +public interface CustomBlockPermutation { + @NonNull String condition(); + + CustomBlockComponents components(); + + interface Builder { + Builder condition(@NonNull String condition); + + Builder components(CustomBlockComponents components); + + CustomBlockPermutation build(); + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java new file mode 100644 index 00000000000..a630ecd6987 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom; + +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.util.Map; + +public interface CustomBlockState { + @NonNull String name(); + + @NonNull T property(String propertyName); + + @NonNull Map properties(); + + interface Builder { + Builder booleanProperty(@NonNull String propertyName, boolean value); + + Builder intProperty(@NonNull String propertyName, int value); + + Builder stringProperty(@NonNull String propertyName, @NonNull String value); + + CustomBlockState build(); + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java new file mode 100644 index 00000000000..6f975921a4e --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +public record CollisionComponent(float originX, float originY, float originZ, + float sizeX, float sizeY, float sizeZ) { +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java new file mode 100644 index 00000000000..6d60ba49c32 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +import java.util.Map; + +public interface CustomBlockComponents { + CollisionComponent aimCollision(); + + CollisionComponent entityCollision(); + + String geometry(); + + Map materialInstances(); + + Float destroyTime(); + + Float friction(); + + Float lightEmission(); + + Integer lightFilter(); + + RotationComponent rotation(); + + interface Builder { + Builder aimCollision(CollisionComponent aimCollision); + + Builder entityCollision(CollisionComponent entityCollision); + + Builder geometry(String geometry); + + Builder materialInstances(Map materialInstances); + + Builder destroyTime(Float destroyTime); + + Builder friction(Float friction); + + Builder lightEmission(Float lightEmission); + + Builder lightFilter(Integer lightFilter); + + Builder rotation(RotationComponent rotation); + + CustomBlockComponents build(); + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java new file mode 100644 index 00000000000..8331919e88b --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +import org.checkerframework.checker.nullness.qual.NonNull; + +public record MaterialInstance(@NonNull String texture, @NonNull RenderMethod renderMethod, boolean faceDimming, boolean ambientOcclusion) { + +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java new file mode 100644 index 00000000000..907d3803183 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +public enum RenderMethod { + BLEND, + OPAQUE, + ALPHA_TEST +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java new file mode 100644 index 00000000000..e8c66caf641 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +public record RotationComponent(float x, float y, float z) { +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java new file mode 100644 index 00000000000..194e2dd7d5f --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.property; + +import org.checkerframework.checker.nullness.qual.NonNull; + +import java.util.List; + +public interface CustomBlockProperty { + @NonNull String name(); + + @NonNull List values(); + + @NonNull PropertyType type(); +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java new file mode 100644 index 00000000000..d3027f8469f --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.property; + +public class PropertyType { + public static final PropertyType BOOLEAN = new PropertyType<>(Boolean.class); + public static final PropertyType INTEGER = new PropertyType<>(Integer.class); + public static final PropertyType STRING = new PropertyType<>(String.class); + + private final Class typeClass; + + private PropertyType(Class typeClass) { + this.typeClass = typeClass; + } + + public Class getTypeClass() { + return typeClass; + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java new file mode 100644 index 00000000000..ff5edea247f --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event; + +import lombok.RequiredArgsConstructor; +import org.geysermc.geyser.api.block.custom.CustomBlockData; + +@RequiredArgsConstructor +public class GeyserConvertSkullInventoryEvent implements Event { + private final String skinHash; + + private CustomBlockData replacementBlock; + + public void replaceWithBlock(CustomBlockData customBlockData) { + this.replacementBlock = customBlockData; + } + + public String skinHash() { + return skinHash; + } + + public CustomBlockData replacementBlock() { + return replacementBlock; + } +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java new file mode 100644 index 00000000000..5ed6e4f4f2d --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.event.Event; + +public abstract class GeyserDefineCustomBlocksEvent implements Event { + + public abstract boolean registerCustomBlock(@NonNull CustomBlockData customBlockData); + +} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java new file mode 100644 index 00000000000..b6ec543ac79 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.world; + +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.event.Cancellable; +import org.geysermc.geyser.api.event.Event; + +public class GeyserConvertSkullEvent implements Event, Cancellable { + private final int x; + private final int y; + private final int z; + + private final boolean onFloor; + + private final WallDirection wallDirection; + private final int floorDirection; + + private final String skinHash; + + private boolean cancelled; + + private CustomBlockState newBlockState; + + public GeyserConvertSkullEvent(int x, int y, int z, boolean onFloor, WallDirection wallDirection, int floorDirection, String skinHash) { + this.x = x; + this.y = y; + this.z = z; + this.onFloor = onFloor; + this.wallDirection = wallDirection; + this.floorDirection = floorDirection; + + if (onFloor && (wallDirection != WallDirection.INVALID || floorDirection == -1)) { + throw new IllegalArgumentException("Skull can't be on the floor and wall at the same time"); + } else if (!onFloor && (wallDirection == WallDirection.INVALID || floorDirection != -1)) { + throw new IllegalArgumentException("Skull can't be on the floor and wall at the same time"); + } + + this.skinHash = skinHash; + } + + public int x() { + return x; + } + + public int y() { + return y; + } + + public int z() { + return z; + } + + public boolean onFloor() { + return onFloor; + } + + public WallDirection wallDirection() { + return wallDirection; + } + + public int floorDirection() { + return floorDirection; + } + + public String skinHash() { + return skinHash; + } + + public void replaceWithBlock(CustomBlockState blockState) { + this.newBlockState = blockState; + } + + public CustomBlockState getNewBlockState() { + return newBlockState; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.cancelled = cancelled; + } + public enum WallDirection { + NORTH, + EAST, + SOUTH, + WEST, + INVALID + + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java new file mode 100644 index 00000000000..1f20c9b5573 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import org.geysermc.geyser.api.block.custom.component.CollisionComponent; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.RotationComponent; + +import java.util.Map; + +public class GeyserCustomBlockComponents implements CustomBlockComponents { + private final CollisionComponent aimCollision; + private final CollisionComponent entityCollision; + private final String geometry; + private final Map materialInstances; + private final Float destroyTime; + private final Float friction; + private final Float lightEmission; + private final Integer lightFilter; + private final RotationComponent rotation; + + public GeyserCustomBlockComponents(BuilderImpl builder) { + this.aimCollision = builder.aimCollision; + this.entityCollision = builder.entityCollision; + this.geometry = builder.geometry; + this.materialInstances = builder.materialInstances; + this.destroyTime = builder.destroyTime; + this.friction = builder.friction; + this.lightEmission = builder.lightEmission; + this.lightFilter = builder.lightFilter; + this.rotation = builder.rotation; + } + + @Override + public CollisionComponent aimCollision() { + return aimCollision; + } + + @Override + public CollisionComponent entityCollision() { + return entityCollision; + } + + @Override + public String geometry() { + return geometry; + } + + @Override + public Map materialInstances() { + return materialInstances; + } + + @Override + public Float destroyTime() { + return destroyTime; + } + + @Override + public Float friction() { + return friction; + } + + @Override + public Float lightEmission() { + return lightEmission; + } + + @Override + public Integer lightFilter() { + return lightFilter; + } + + @Override + public RotationComponent rotation() { + return rotation; + } + + public static class BuilderImpl implements Builder { + protected CollisionComponent aimCollision; + protected CollisionComponent entityCollision; + protected String geometry; + protected Map materialInstances; + protected Float destroyTime; + protected Float friction; + protected Float lightEmission; + protected Integer lightFilter; + protected RotationComponent rotation; + + @Override + public Builder aimCollision(CollisionComponent aimCollision) { + this.aimCollision = aimCollision; + return this; + } + + @Override + public Builder entityCollision(CollisionComponent entityCollision) { + this.entityCollision = entityCollision; + return this; + } + + @Override + public Builder geometry(String geometry) { + this.geometry = geometry; + return this; + } + + @Override + public Builder materialInstances(Map materialInstances) { + this.materialInstances = materialInstances; + return this; + } + + @Override + public Builder destroyTime(Float destroyTime) { + this.destroyTime = destroyTime; + return this; + } + + @Override + public Builder friction(Float friction) { + this.friction = friction; + return this; + } + + @Override + public Builder lightEmission(Float lightEmission) { + this.lightEmission = lightEmission; + return this; + } + + @Override + public Builder lightFilter(Integer lightFilter) { + this.lightFilter = lightFilter; + return this; + } + + @Override + public Builder rotation(RotationComponent rotation) { + this.rotation = rotation; + return this; + } + + @Override + public CustomBlockComponents build() { + return new GeyserCustomBlockComponents(this); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java new file mode 100644 index 00000000000..1d2351a375d --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectLists; +import lombok.Value; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; +import org.geysermc.geyser.api.block.custom.property.PropertyType; + +import java.util.List; +import java.util.Map; + +@Value +public class GeyserCustomBlockData implements CustomBlockData { + String name; + CustomBlockComponents components; + Map> properties; + List permutations; + + @Override + public @NonNull String name() { + return name; + } + + @Override + public CustomBlockComponents components() { + return components; + } + + @Override + public @NonNull Map> properties() { + return properties; + } + + @Override + public @NonNull List permutations() { + return permutations; + } + + @Override + public CustomBlockState.Builder blockStateBuilder() { + return new GeyserCustomBlockState.BuilderImpl(this); + } + + public static class BuilderImpl implements Builder { + private String name; + private CustomBlockComponents components; + private Map> properties = new Object2ObjectOpenHashMap<>(); + private List permutations; + + @Override + public Builder name(@NonNull String name) { + this.name = name; + return this; + } + + @Override + public Builder components(@NonNull CustomBlockComponents components) { + this.components = components; + return this; + } + + @Override + public Builder booleanProperty(@NonNull String propertyName, List values) { + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.BOOLEAN)); + return this; + } + + @Override + public Builder intProperty(@NonNull String propertyName, List values) { + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.INTEGER)); + return this; + } + + @Override + public Builder stringProperty(@NonNull String propertyName, List values) { + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.STRING)); + return this; + } + + @Override + public Builder permutations(@NonNull List permutations) { + this.permutations = permutations; + return this; + } + + @Override + public CustomBlockData build() { + if (name == null) { + throw new IllegalArgumentException("Name must be set"); + } + if (properties == null) { + properties = Object2ObjectMaps.emptyMap(); + } else { + for (CustomBlockProperty property : properties.values()) { + if (property.values().isEmpty() || property.values().size() > 16) { + throw new IllegalArgumentException(property.name() + " must contain 1 to 16 values."); + } + } + } + if (permutations == null) { + permutations = ObjectLists.emptyList(); + } + return new GeyserCustomBlockData(name, components, properties, permutations); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java new file mode 100644 index 00000000000..c2bfc8b6c6f --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; + + +public class GeyserCustomBlockPermutation implements CustomBlockPermutation { + private final String condition; + private final CustomBlockComponents components; + + public GeyserCustomBlockPermutation(String condition, CustomBlockComponents components) { + this.condition = condition; + this.components = components; + } + + @Override + public @NonNull String condition() { + return condition; + } + + @Override + public CustomBlockComponents components() { + return components; + } + + public static class BuilderImpl implements Builder { + private String condition; + private CustomBlockComponents components; + + @Override + public Builder condition(@NonNull String condition) { + this.condition = condition; + return this; + } + + @Override + public Builder components(CustomBlockComponents components) { + this.components = components; + return this; + } + + @Override + public CustomBlockPermutation build() { + if (condition == null) { + throw new IllegalArgumentException("Condition must be set"); + } + return new GeyserCustomBlockPermutation(condition, components); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java new file mode 100644 index 00000000000..b91e5cf8da6 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; +import org.geysermc.geyser.api.block.custom.property.PropertyType; + +import java.util.List; + +public class GeyserCustomBlockProperty implements CustomBlockProperty { + private final String name; + private final List values; + + private final PropertyType type; + + public GeyserCustomBlockProperty(String name, List values, PropertyType type) { + this.name = name; + this.values = values; + this.type = type; + } + + @Override + public @NonNull String name() { + return name; + } + + @Override + public @NonNull List values(){ + return values; + } + + @Override + public @NonNull PropertyType type() { + return type; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java new file mode 100644 index 00000000000..b2b0e21488a --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.RequiredArgsConstructor; +import lombok.Value; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; + +import java.util.Map; + +@Value +public class GeyserCustomBlockState implements CustomBlockState { + String name; + Map properties; + + @Override + public @NonNull String name() { + return name; + } + + @SuppressWarnings("unchecked") + @Override + public @NonNull T property(String propertyName) { + return (T) properties.get(propertyName); + } + + @Override + public @NonNull Map properties() { + return properties; + } + + @RequiredArgsConstructor + public static class BuilderImpl implements CustomBlockState.Builder { + private final CustomBlockData blockData; + private final Object2ObjectMap properties = new Object2ObjectOpenHashMap<>(); + + @Override + public Builder booleanProperty(@NonNull String propertyName, boolean value) { + properties.put(propertyName, value); + return this; + } + + @Override + public Builder intProperty(@NonNull String propertyName, int value) { + properties.put(propertyName, value); + return this; + } + + @Override + public Builder stringProperty(@NonNull String propertyName, @NonNull String value) { + properties.put(propertyName, value); + return this; + } + + @Override + public CustomBlockState build() { + for (String propertyName : blockData.properties().keySet()) { + if (!properties.containsKey(propertyName)) { + throw new IllegalArgumentException("Missing property: " + propertyName); + } + } + + for (Map.Entry entry : properties.entrySet()) { + String propertyName = entry.getKey(); + Object propertyValue = entry.getValue(); + + CustomBlockProperty property = blockData.properties().get(propertyName); + if (property == null) { + throw new IllegalArgumentException("Unknown property: " + propertyName); + } else if (!property.values().contains(propertyValue)) { + throw new IllegalArgumentException("Invalid value for property: " + propertyName + " Value: " + propertyValue); + } + } + + return new GeyserCustomBlockState(blockData.name(), Object2ObjectMaps.unmodifiable(properties)); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 609647b2d8e..d5b5275a658 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; import org.geysermc.geyser.registry.type.BlockMapping; @@ -72,6 +73,11 @@ public class BlockRegistries { */ public static final SimpleRegistry WATERLOGGED = SimpleRegistry.create(RegistryLoaders.empty(IntOpenHashSet::new)); + /** + * A registry containing all the custom blocks. + */ + public static final ArrayRegistry CUSTOM_BLOCKS = ArrayRegistry.create(RegistryLoaders.empty(() -> new CustomBlockData[] {})); + static { BlockRegistryPopulator.populate(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 25528a91959..a3bee28d105 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -28,15 +28,24 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableMap; import com.nukkitx.nbt.*; +import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; -import it.unimi.dsi.fastutil.objects.Object2IntMap; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectIntPair; +import it.unimi.dsi.fastutil.objects.*; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.CollisionComponent; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; +import org.geysermc.geyser.api.block.custom.property.PropertyType; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.level.block.BlockStateValues; +import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMapping; @@ -45,10 +54,8 @@ import java.io.DataInputStream; import java.io.InputStream; -import java.util.ArrayDeque; -import java.util.Deque; -import java.util.Iterator; -import java.util.Map; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.function.BiFunction; import java.util.zip.GZIPInputStream; @@ -71,38 +78,172 @@ public class BlockRegistryPopulator { */ private static JsonNode BLOCKS_JSON; + public static final String CUSTOM_PREFIX = ""; + public static void populate() { registerJavaBlocks(); + registerCustomBedrockBlocks(); registerBedrockBlocks(); BLOCKS_JSON = null; } + private static void registerCustomBedrockBlocks() { + List customBlocks = new ArrayList<>(); + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { + @Override + public boolean registerCustomBlock(@NonNull CustomBlockData customBlockData) { + customBlocks.add(customBlockData); + return true; + } + }); + BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); + GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); + } + + private static void generateCustomBlockStates(List blockStates, List customExtBlockStates, CustomBlockData customBlock, int stateVersion) { + if (customBlock.properties().isEmpty()) { + blockStates.add(NbtMap.builder() + .putString("name", CUSTOM_PREFIX + customBlock.name()) + .putInt("version", stateVersion) + .putCompound("states", NbtMap.EMPTY) + .build()); + } + int totalPermutations = 1; + for (CustomBlockProperty property : customBlock.properties().values()) { + totalPermutations *= property.values().size(); + } + + for (int i = 0; i < totalPermutations; i++) { + NbtMapBuilder statesBuilder = NbtMap.builder(); + + int permIndex = i; + for (CustomBlockProperty property : customBlock.properties().values()) { + statesBuilder.put(property.name(), property.values().get(permIndex % property.values().size())); + permIndex /= property.values().size(); + } + String name = CUSTOM_PREFIX + customBlock.name(); + NbtMap states = statesBuilder.build(); + + blockStates.add(NbtMap.builder() + .putString("name", name) + .putInt("version", stateVersion) + .putCompound("states", states) + .build()); + customExtBlockStates.add(new GeyserCustomBlockState(name, states)); + } + } + @SuppressWarnings("unchecked") + private static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock) { + List permutations = new ArrayList<>(); + for (CustomBlockPermutation permutation : customBlock.permutations()) { + permutations.add(NbtMap.builder() + .putCompound("components", convertComponents(permutation.components())) + .putString("condition", permutation.condition()) + .build()); + } + + // The order that properties are defined influences the order that block states are generated + List properties = new ArrayList<>(); + for (CustomBlockProperty property : customBlock.properties().values()) { + NbtMapBuilder propertyBuilder = NbtMap.builder() + .putString("name", property.name()); + if (property.type() == PropertyType.BOOLEAN) { + List values = new ArrayList<>(); + for (boolean value : (List) property.values()) { + values.add((byte) (value ? 1 : 0)); + } + propertyBuilder.putList("enum", NbtType.BYTE, values); + } else if (property.type() == PropertyType.INTEGER) { + propertyBuilder.putList("enum", NbtType.INT, (List) property.values()); + } else if (property.type() == PropertyType.STRING) { + propertyBuilder.putList("enum", NbtType.STRING, (List) property.values()); + } + properties.add(propertyBuilder.build()); + } + + NbtMap propertyTag = NbtMap.builder() + .putCompound("components", convertComponents(customBlock.components())) + .putInt("molangVersion", 0) + .putList("permutations", NbtType.COMPOUND, permutations) + .putList("properties", NbtType.COMPOUND, properties) + .build(); + return new BlockPropertyData(CUSTOM_PREFIX + customBlock.name(), propertyTag); + } + + private static final long FNV1_64_OFFSET_BASIS = 0xcbf29ce484222325L; + private static final long FNV1_64_PRIME = 1099511628211L; + + private static long fnv164(String str) { + long hash = FNV1_64_OFFSET_BASIS; + for (byte b : str.getBytes(StandardCharsets.UTF_8)) { + hash *= FNV1_64_PRIME; + hash ^= b; + } + return hash; + } private static void registerBedrockBlocks() { for (Map.Entry, BiFunction> palette : BLOCK_MAPPERS.entrySet()) { NbtList blocksTag; + List blockStates; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key())); NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { NbtMap blockPalette = (NbtMap) nbtInputStream.readTag(); blocksTag = (NbtList) blockPalette.getList("blocks", NbtType.COMPOUND); + blockStates = new ArrayList<>(blocksTag); } catch (Exception e) { throw new AssertionError("Unable to get blocks from runtime block states", e); } + int stateVersion = blocksTag.get(0).getInt("version"); + + List customBlockProperties = new ArrayList<>(); + List customBlockStates = new ArrayList<>(); + List customExtBlockStates = new ArrayList<>(); + int[] remappedVanillaIds = new int[0]; + if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { + for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { + customBlockProperties.add(generateBlockPropertyData(customBlock)); + generateCustomBlockStates(customBlockStates, customExtBlockStates, customBlock, stateVersion); + } + blockStates.addAll(customBlockStates); + GeyserImpl.getInstance().getLogger().debug("Added " + customBlockStates.size() + " custom block states to v" + palette.getKey().valueInt() + " palette."); + + if (palette.getKey().valueInt() > 486) { + // Version 1.18.30 and above sort the palette by the FNV1 64 bit hash of the name + blockStates.sort((a, b) -> Long.compareUnsigned(fnv164(a.getString("name")), fnv164(b.getString("name")))); + } else { + // Version below 1.18.30 sort the palette alphabetically by name + blockStates.sort(Comparator.comparing(state -> state.getString("name"))); + } + + } + // New since 1.16.100 - find the block runtime ID by the order given to us in the block palette, // as we no longer send a block palette - Object2IntMap blockStateOrderedMap = new Object2IntOpenHashMap<>(blocksTag.size()); - - int stateVersion = -1; - for (int i = 0; i < blocksTag.size(); i++) { - NbtMap tag = blocksTag.get(i); + Object2IntMap blockStateOrderedMap = new Object2IntOpenHashMap<>(blockStates.size()); + for (int i = 0; i < blockStates.size(); i++) { + NbtMap tag = blockStates.get(i); if (blockStateOrderedMap.containsKey(tag)) { throw new AssertionError("Duplicate block states in Bedrock palette: " + tag); } blockStateOrderedMap.put(tag, i); - if (stateVersion == -1) { - stateVersion = tag.getInt("version"); + } + + Object2IntMap customBlockStateIds = Object2IntMaps.emptyMap(); + if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { + customBlockStateIds = new Object2IntOpenHashMap<>(customExtBlockStates.size()); + for (int i = 0; i < customExtBlockStates.size(); i++) { + NbtMap tag = customBlockStates.get(i); + CustomBlockState blockState = customExtBlockStates.get(i); + customBlockStateIds.put(blockState, blockStateOrderedMap.getInt(tag)); + } + + remappedVanillaIds = new int[blocksTag.size()]; + for (int i = 0; i < blocksTag.size(); i++) { + remappedVanillaIds[i] = blockStateOrderedMap.getInt(blocksTag.get(i)); } } + int airRuntimeId = -1; int commandBlockRuntimeId = -1; int javaRuntimeId = -1; @@ -154,7 +295,7 @@ private static void registerBedrockBlocks() { // Get the tag needed for non-empty flower pots if (entry.getValue().get("pottable") != null) { - flowerPotBlocks.put(cleanJavaIdentifier.intern(), blocksTag.get(bedrockRuntimeId)); + flowerPotBlocks.put(cleanJavaIdentifier.intern(), blockStates.get(bedrockRuntimeId)); } javaToBedrockBlocks[javaRuntimeId] = bedrockRuntimeId; @@ -187,15 +328,90 @@ private static void registerBedrockBlocks() { itemFrames.put(entry.getKey(), entry.getIntValue()); } } - builder.bedrockBlockStates(blocksTag); + builder.bedrockBlockStates(new NbtList<>(NbtType.COMPOUND, blockStates)); BlockRegistries.BLOCKS.register(palette.getKey().valueInt(), builder.blockStateVersion(stateVersion) .javaToBedrockBlocks(javaToBedrockBlocks) .itemFrames(itemFrames) .flowerPotBlocks(flowerPotBlocks) .jigsawStateIds(jigsawStateIds) + .remappedVanillaIds(remappedVanillaIds) + .blockProperties(customBlockProperties) + .customBlockStateIds(customBlockStateIds) + .build()); + } + } + + private static NbtMap convertComponents(CustomBlockComponents components) { + if (components == null) { + return NbtMap.EMPTY; + } + NbtMapBuilder builder = NbtMap.builder(); + if (components.aimCollision() != null) { + CollisionComponent collisionComponent = components.aimCollision(); + builder.putCompound("minecraft:aim_collision", NbtMap.builder() + .putBoolean("enabled", true) + .putList("origin", NbtType.FLOAT, collisionComponent.originX(), collisionComponent.originY(), collisionComponent.originZ()) + .putList("size", NbtType.FLOAT, collisionComponent.sizeX(), collisionComponent.sizeY(), collisionComponent.sizeZ()) + .build()); + } + if (components.entityCollision() != null) { + CollisionComponent collisionComponent = components.entityCollision(); + builder.putCompound("minecraft:block_collision", NbtMap.builder() + .putBoolean("enabled", true) + .putList("origin", NbtType.FLOAT, collisionComponent.originX(), collisionComponent.originY(), collisionComponent.originZ()) + .putList("size", NbtType.FLOAT, collisionComponent.sizeX(), collisionComponent.sizeY(), collisionComponent.sizeZ()) + .build()); + } + if (components.geometry() != null) { + builder.putCompound("minecraft:geometry", NbtMap.builder() + .putString("value", components.geometry()) + .build()); + } + if (components.materialInstances() != null) { + NbtMapBuilder materialsBuilder = NbtMap.builder(); + for (Map.Entry entry : components.materialInstances().entrySet()) { + MaterialInstance materialInstance = entry.getValue(); + materialsBuilder.putCompound(entry.getKey(), NbtMap.builder() + .putString("texture", materialInstance.texture()) + .putString("render_method", materialInstance.renderMethod().toString().toLowerCase(Locale.ROOT)) + .putBoolean("face_dimming", materialInstance.faceDimming()) + .putBoolean("ambient_occlusion", materialInstance.faceDimming()) + .build()); + } + builder.putCompound("minecraft:material_instances", NbtMap.builder() + .putCompound("mappings", NbtMap.EMPTY) + .putCompound("materials", materialsBuilder.build()) + .build()); + } + if (components.destroyTime() != null) { + builder.putCompound("minecraft:destroy_time", NbtMap.builder() + .putFloat("value", components.destroyTime()) + .build()); + } + if (components.friction() != null) { + builder.putCompound("minecraft:friction", NbtMap.builder() + .putFloat("value", components.friction()) + .build()); + } + if (components.lightEmission() != null) { + builder.putCompound("minecraft:block_light_emission", NbtMap.builder() + .putFloat("value", components.lightEmission()) + .build()); + } + if (components.lightFilter() != null) { + builder.putCompound("minecraft:block_light_filter", NbtMap.builder() + .putByte("value", components.lightFilter().byteValue()) + .build()); + } + if (components.rotation() != null) { + builder.putCompound("minecraft:rotation", NbtMap.builder() + .putFloat("x", components.rotation().x()) + .putFloat("y", components.rotation().y()) + .putFloat("z", components.rotation().z()) .build()); } + return builder.build(); } private static void registerJavaBlocks() { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 22669fd7943..bcfe9b8eebe 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -46,6 +46,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomItemsEvent; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; @@ -198,6 +199,8 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { // Temporary mapping to create stored items Map identifierToMapping = new Object2ObjectOpenHashMap<>(); + BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.getValue().protocolVersion()); + int netId = 1; List creativeItems = new ArrayList<>(); for (JsonNode itemNode : creativeItemEntries) { @@ -216,6 +219,10 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { JsonNode blockRuntimeIdNode = itemNode.get("blockRuntimeId"); if (blockRuntimeIdNode != null) { blockRuntimeId = blockRuntimeIdNode.asInt(); + + if (blockMappings.getRemappedVanillaIds().length != 0) { + blockRuntimeId = blockMappings.getRemappedVanillaIds()[blockRuntimeId]; + } } JsonNode nbtNode = itemNode.get("nbt_b64"); if (nbtNode != null) { @@ -270,8 +277,6 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { } } - BlockMappings blockMappings = BlockRegistries.BLOCKS.forVersion(palette.getValue().protocolVersion()); - int itemIndex = 0; int javaFurnaceMinecartId = 0; @@ -631,6 +636,19 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { } } + // Register the item forms of custom blocks + Object2IntMap customBlockItemIds = Object2IntMaps.emptyMap(); + if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { + customBlockItemIds = new Object2IntOpenHashMap<>(); + for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { + int customProtocolId = nextFreeBedrockId++; + String identifier = BlockRegistryPopulator.CUSTOM_PREFIX + customBlock.name(); + + entries.put(identifier, new StartGamePacket.ItemEntry(identifier, (short) customProtocolId)); + customBlockItemIds.put(customBlock, customProtocolId); + } + } + ItemMappings itemMappings = ItemMappings.builder() .items(mappings.toArray(new ItemMapping[0])) .creativeItems(creativeItems.toArray(new ItemData[0])) @@ -645,6 +663,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { .componentItemData(componentItemData) .lodestoneCompass(lodestoneEntry) .customIdMappings(customIdMappings) + .customBlockItemIds(customBlockItemIds) .build(); Registries.ITEMS.register(palette.getValue().protocolVersion(), itemMappings); diff --git a/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java b/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java index af289bcda02..b40846b2c45 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java +++ b/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java @@ -27,6 +27,9 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.command.CommandSource; import org.geysermc.geyser.api.item.custom.CustomItemData; @@ -37,6 +40,9 @@ import org.geysermc.geyser.item.GeyserCustomItemData; import org.geysermc.geyser.item.GeyserCustomItemOptions; import org.geysermc.geyser.item.GeyserNonVanillaCustomItemData; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserCustomBlockPermutation; import org.geysermc.geyser.registry.ProviderRegistries; import org.geysermc.geyser.registry.SimpleMappedRegistry; @@ -52,6 +58,11 @@ private GeyserBuilderProvider() { @Override public void registerProviders(Map, ProviderSupplier> providers) { providers.put(Command.Builder.class, args -> new GeyserCommandManager.CommandBuilder<>((Class) args[0])); + + providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.BuilderImpl()); + providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.BuilderImpl()); + providers.put(CustomBlockPermutation.Builder.class, args -> new GeyserCustomBlockPermutation.BuilderImpl()); + providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); providers.put(NonVanillaCustomItemData.Builder.class, args -> new GeyserNonVanillaCustomItemData.NonVanillaCustomItemDataBuilder()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 41318ee64b8..e2e99d5e799 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -27,11 +27,14 @@ import com.nukkitx.nbt.NbtList; import com.nukkitx.nbt.NbtMap; +import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2IntMap; import lombok.Builder; import lombok.Value; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import java.util.List; import java.util.Map; @Builder @@ -46,6 +49,7 @@ public class BlockMappings { int[] javaToBedrockBlocks; NbtList bedrockBlockStates; + int[] remappedVanillaIds; int commandBlockRuntimeId; @@ -54,6 +58,9 @@ public class BlockMappings { IntSet jigsawStateIds; + List blockProperties; + Object2IntMap customBlockStateIds; + public int getBedrockBlockId(int state) { if (state >= this.javaToBedrockBlocks.length) { return bedrockAirId; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index c4e967dffde..24963cc4723 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -31,9 +31,11 @@ import com.nukkitx.protocol.bedrock.packet.StartGamePacket; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.IntList; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import lombok.Builder; import lombok.Value; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.inventory.item.StoredItemMappings; import javax.annotation.Nonnull; @@ -70,6 +72,8 @@ public class ItemMappings { List componentItemData; Int2ObjectMap customIdMappings; + Object2IntMap customBlockItemIds; + /** * Gets an {@link ItemMapping} from the given {@link ItemStack}. * diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 99e29dd2161..62eb38fc958 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1467,6 +1467,12 @@ private void startGame() { startGamePacket.setMultiplayerCorrelationId(""); startGamePacket.setItemEntries(this.itemMappings.getItemEntries()); + startGamePacket.getBlockProperties().addAll(this.blockMappings.getBlockProperties()); + + startGamePacket.getExperiments().add(new ExperimentData("vanilla_experiments", true)); + startGamePacket.getExperiments().add(new ExperimentData("data_driven_items", true)); + startGamePacket.getExperiments().add(new ExperimentData("upcoming_creator_features", true)); + startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); startGamePacket.setVanillaVersion("*"); startGamePacket.setInventoriesServerAuthoritative(true); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index f26e1cce34c..133c403373f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -27,12 +27,14 @@ import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; +import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.level.block.entity.SkullBlockEntityTranslator; import java.util.*; @@ -75,6 +77,17 @@ public void putSkull(Vector3i position, String texturesProperty, int blockState) Skull skull = skulls.computeIfAbsent(position, Skull::new); skull.texturesProperty = texturesProperty; skull.blockState = blockState; + if (skull.customRuntimeId != -1) { + skull.customRuntimeId = -1; + + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NEIGHBORS); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + updateBlockPacket.setBlockPosition(position); + updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockBlockId(blockState)); + updateBlockPacket.setDataLayer(0); + session.sendUpstreamPacket(updateBlockPacket); + } if (skull.entity != null) { skull.entity.updateSkull(skull); @@ -106,6 +119,24 @@ public void putSkull(Vector3i position, String texturesProperty, int blockState) } } + public void putSkull(Vector3i position, String texturesProperty, int blockState, int customRuntimeId) { + Skull skull = skulls.computeIfAbsent(position, Skull::new); + skull.texturesProperty = texturesProperty; + skull.blockState = blockState; + skull.customRuntimeId = customRuntimeId; + + boolean hadEntity = skull.entity != null; + freeSkullEntity(skull); + + if (cullingEnabled) { + inRangeSkulls.remove(skull); + if (hadEntity && inRangeSkulls.size() >= maxVisibleSkulls) { + // Reassign entity to the closest skull without an entity + assignSkullEntity(inRangeSkulls.get(maxVisibleSkulls - 1)); + } + } + } + public void removeSkull(Vector3i position) { Skull skull = skulls.remove(position); if (skull != null) { @@ -122,6 +153,20 @@ public void removeSkull(Vector3i position) { } } + public int updateSkull(Vector3i position, int blockState) { + Skull skull = skulls.remove(position); + if (skull != null) { + int customRuntimeId = SkullBlockEntityTranslator.translateCustomSkull(session, position, skull.texturesProperty, blockState); + if (customRuntimeId != -1) { + putSkull(position, skull.texturesProperty, blockState, customRuntimeId); + } else { + putSkull(position, skull.texturesProperty, blockState); + } + return customRuntimeId; + } + return -1; + } + public void updateVisibleSkulls() { if (cullingEnabled) { // No need to recheck skull visibility for small movements @@ -132,6 +177,10 @@ public void updateVisibleSkulls() { inRangeSkulls.clear(); for (Skull skull : skulls.values()) { + if (skull.customRuntimeId != -1) { + continue; + } + skull.distanceSquared = skull.position.distanceSquared(lastPlayerPosition.getX(), lastPlayerPosition.getY(), lastPlayerPosition.getZ()); if (skull.distanceSquared > skullRenderDistanceSquared) { freeSkullEntity(skull); @@ -203,6 +252,7 @@ public void clear() { public static class Skull { private String texturesProperty; private int blockState; + private int customRuntimeId = -1; private SkullPlayerEntity entity; private final Vector3i position; diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 38d57dc0127..9bc1306fc3d 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -254,7 +254,7 @@ public static GameProfileData from(PlayerEntity entity) { } } - private static GameProfileData loadFromJson(String encodedJson) throws IOException { + public static GameProfileData loadFromJson(String encodedJson) throws IOException { JsonNode skinObject = GeyserImpl.JSON_MAPPER.readTree(new String(Base64.getDecoder().decode(encodedJson), StandardCharsets.UTF_8)); JsonNode textures = skinObject.get("textures"); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 0a2ab57dfb4..af5e9658f9c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -38,6 +38,8 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.event.GeyserConvertSkullInventoryEvent; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -45,11 +47,13 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.FileUtils; import javax.annotation.Nonnull; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.stream.Collectors; @@ -175,6 +179,10 @@ public static ItemData translateToBedrock(GeyserSession session, ItemStack stack translateCustomItem(nbt, builder, bedrockItem); + if (bedrockItem == session.getItemMappings().getStoredItems().playerHead()) { + translatePlayerHead(session, nbt, builder, bedrockItem); + } + if (nbt != null) { // Translate the canDestroy and canPlaceOn Java NBT ListTag canDestroy = nbt.get("CanDestroy"); @@ -542,6 +550,50 @@ private static void translateCustomItem(CompoundTag nbt, ItemData.Builder builde builder.id(bedrockId); } } + + private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder, ItemMapping mapping) { + if (nbt != null && nbt.contains("SkullOwner")) { + String skinHash = null; + Tag skullOwner = nbt.get("SkullOwner"); + if (skullOwner instanceof StringTag) { + // It's a username give up d: + return; + } else if (skullOwner instanceof CompoundTag) { + Tag properties = ((CompoundTag) skullOwner).get("Properties"); + if (properties instanceof CompoundTag) { + Tag textures = ((CompoundTag) properties).get("textures"); + if (textures instanceof ListTag) { + List textureTags = ((ListTag) textures).getValue(); + if (!textureTags.isEmpty()) { + Tag skinTag = textureTags.get(0); + if (skinTag instanceof CompoundTag) { + Tag valueTag = ((CompoundTag) skinTag).get("Value"); + String encodedJson = (String) valueTag.getValue(); + try { + SkinManager.GameProfileData data = SkinManager.GameProfileData.loadFromJson(encodedJson); + skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); + } catch (IOException e) { + session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt + " " + e.getMessage()); + return; + } + } + } + } + } + } + if (skinHash == null) { + session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt); + } + GeyserConvertSkullInventoryEvent skullInventoryEvent = new GeyserConvertSkullInventoryEvent(skinHash); + GeyserImpl.getInstance().getEventBus().fire(skullInventoryEvent); + + CustomBlockData replacementBlock = skullInventoryEvent.replacementBlock(); + if (replacementBlock != null) { + int bedrockId = session.getItemMappings().getCustomBlockItemIds().getInt(replacementBlock); + builder.id(bedrockId); + } + } + } private static int getCustomItem(CompoundTag nbt, ItemMapping mapping) { if (nbt == null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 94e2d47674b..07c1552a2e6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -31,12 +31,17 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.NbtMapBuilder; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.event.world.GeyserConvertSkullEvent; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.skin.SkinManager; import org.geysermc.geyser.skin.SkinProvider; +import java.io.IOException; import java.util.LinkedHashMap; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; @BlockEntity(type = BlockEntityType.SKULL) public class SkullBlockEntityTranslator extends BlockEntityTranslator implements RequiresBlockState { @@ -69,18 +74,65 @@ private static CompletableFuture getTextures(CompoundTag tag) { return CompletableFuture.completedFuture(null); } - public static void translateSkull(GeyserSession session, CompoundTag tag, int posX, int posY, int posZ, int blockState) { - Vector3i blockPosition = Vector3i.from(posX, posY, posZ); - getTextures(tag).whenComplete((texturesProperty, throwable) -> { + public static int translateSkull(GeyserSession session, CompoundTag tag, int posX, int posY, int posZ, int blockState) { + try { + String texturesProperty = getTextures(tag).get(); + Vector3i blockPosition = Vector3i.from(posX, posY, posZ); if (texturesProperty == null) { session.getGeyser().getLogger().debug("Custom skull with invalid SkullOwner tag: " + blockPosition + " " + tag); - return; + return -1; } - if (session.getEventLoop().inEventLoop()) { + int runtimeId = translateCustomSkull(session, blockPosition, texturesProperty, blockState); + if (runtimeId == -1) { session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState); } else { - session.executeInEventLoop(() -> session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState)); + session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState, runtimeId); } - }); + return runtimeId; + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } + + public static int translateCustomSkull(GeyserSession session, Vector3i blockPosition, String texturesProperty, int blockState) { + try { + SkinManager.GameProfileData gameProfileData = SkinManager.GameProfileData.loadFromJson(texturesProperty); + if (gameProfileData == null || gameProfileData.skinUrl() == null) { + session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + blockPosition + " Textures: " + texturesProperty); + return -1; + } + + String skinUrl = gameProfileData.skinUrl(); + String skinHash = skinUrl.substring(skinUrl.lastIndexOf('/') + 1); + + byte floorRotation = BlockStateValues.getSkullRotation(blockState); + GeyserConvertSkullEvent.WallDirection wallDirection = GeyserConvertSkullEvent.WallDirection.INVALID; + boolean onFloor = true; + if (floorRotation == -1) { + // Wall skull + onFloor = false; + int wallRotation = BlockStateValues.getSkullWallDirections().get(blockState); + wallDirection = switch (wallRotation) { + case 0 -> GeyserConvertSkullEvent.WallDirection.SOUTH; + case 90 -> GeyserConvertSkullEvent.WallDirection.WEST; + case 180 -> GeyserConvertSkullEvent.WallDirection.NORTH; + case 270 -> GeyserConvertSkullEvent.WallDirection.EAST; + default -> GeyserConvertSkullEvent.WallDirection.INVALID; + }; + } + GeyserConvertSkullEvent event = new GeyserConvertSkullEvent(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), onFloor, wallDirection, floorRotation, skinHash); + GeyserImpl.getInstance().getEventBus().fire(event); + + if (event.getNewBlockState() != null) { + return session.getBlockMappings().getCustomBlockStateIds().getOrDefault(event.getNewBlockState(), -1); + } + + if (event.isCancelled()) { + return -1; + } + } catch (IOException e) { + session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + blockPosition + " Textures: " + texturesProperty + " Message: " + e.getMessage()); + } + return -1; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index 243b1cede8c..5feefa6814b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -505,10 +505,18 @@ private void processEntityInteraction(GeyserSession session, InventoryTransactio */ private void restoreCorrectBlock(GeyserSession session, Vector3i blockPos, InventoryTransactionPacket packet) { int javaBlockState = session.getGeyser().getWorldManager().getBlockAt(session, blockPos); + int bedrockId = session.getBlockMappings().getBedrockBlockId(javaBlockState); + if (BlockStateValues.getSkullVariant(javaBlockState) == 3) { + int customRuntimeId = session.getSkullCache().updateSkull(blockPos, javaBlockState); + if (customRuntimeId != -1) { + bedrockId = customRuntimeId; + } + } + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(blockPos); - updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockBlockId(javaBlockState)); + updateBlockPacket.setRuntimeId(bedrockId); updateBlockPacket.getFlags().addAll(UpdateBlockPacket.FLAG_ALL_PRIORITY); session.sendUpstreamPacket(updateBlockPacket); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index 3738156e404..9bb398fc946 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -31,6 +31,7 @@ import com.nukkitx.math.vector.Vector3i; import com.nukkitx.protocol.bedrock.data.inventory.ContainerType; import com.nukkitx.protocol.bedrock.packet.ContainerOpenPacket; +import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; @@ -63,8 +64,23 @@ public void translate(GeyserSession session, ClientboundBlockEntityDataPacket pa BlockEntityUtils.updateBlockEntity(session, translator.getBlockEntityTag(type, position.getX(), position.getY(), position.getZ(), packet.getNbt(), blockState), packet.getPosition()); // Check for custom skulls. + boolean customSkull = false; if (session.getPreferencesCache().showCustomSkulls() && packet.getNbt() != null && packet.getNbt().contains("SkullOwner")) { - SkullBlockEntityTranslator.translateSkull(session, packet.getNbt(), position.getX(), position.getY(), position.getZ(), blockState); + int runtimeId = SkullBlockEntityTranslator.translateSkull(session, packet.getNbt(), position.getX(), position.getY(), position.getZ(), blockState); + if (runtimeId != -1) { + customSkull = true; + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position); + updateBlockPacket.setRuntimeId(runtimeId); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NEIGHBORS); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } + } + if (!customSkull) { + BlockEntityUtils.updateBlockEntity(session, translator.getBlockEntityTag(type, position.getX(), position.getY(), position.getZ(), + packet.getNbt(), blockState), packet.getPosition()); } // If block entity is command block, OP permission level is appropriate, player is in creative mode and the NBT is not empty diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 5c7b2dd959b..6e20d97c053 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -46,6 +46,7 @@ import io.netty.buffer.ByteBufOutputStream; import io.netty.buffer.Unpooled; import it.unimi.dsi.fastutil.ints.IntArrayList; +import it.unimi.dsi.fastutil.ints.IntImmutableList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntLists; import it.unimi.dsi.fastutil.objects.ObjectArrayList; @@ -273,7 +274,18 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // Check for custom skulls if (session.getPreferencesCache().showCustomSkulls() && type == BlockEntityType.SKULL && tag != null && tag.contains("SkullOwner")) { - SkullBlockEntityTranslator.translateSkull(session, tag, x + chunkBlockX, y, z + chunkBlockZ, blockState); + int runtimeId = SkullBlockEntityTranslator.translateSkull(session, tag, x + chunkBlockX, y, z + chunkBlockZ, blockState); + if (runtimeId != -1) { + int bedrockSectionY = (y >> 4) - (bedrockDimension.minY() >> 4); + GeyserChunkSection bedrockSection = sections[bedrockSectionY]; + IntList palette = bedrockSection.getBlockStorageArray()[0].getPalette(); + if (palette instanceof IntImmutableList || palette instanceof IntLists.Singleton) { + // TODO there has to be a better way to expand the palette .-. + bedrockSection = bedrockSection.copy(); + sections[bedrockSectionY] = bedrockSection; + } + bedrockSection.setFullBlock(x, y & 0xF, z, 0, runtimeId); + } } } diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index d1ee9f16551..fac3984721a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -135,16 +135,21 @@ public static void updateBlock(GeyserSession session, int blockState, Vector3i p // Otherwise, let's still store our reference to the item frame, but let the new block take precedence for now } - if (BlockStateValues.getSkullVariant(blockState) == -1) { + int blockId = session.getBlockMappings().getBedrockBlockId(blockState); + int skullVariant = BlockStateValues.getSkullVariant(blockState); + if (skullVariant == -1) { // Skull is gone session.getSkullCache().removeSkull(position); + } else if (skullVariant == 3) { + int customRuntimeId = session.getSkullCache().updateSkull(position, blockState); + if (customRuntimeId != -1) { + blockId = customRuntimeId; + } } // Prevent moving_piston from being placed // It's used for extending piston heads, but it isn't needed on Bedrock and causes pistons to flicker if (!BlockStateValues.isMovingPiston(blockState)) { - int blockId = session.getBlockMappings().getBedrockBlockId(blockState); - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(position); From c2a6e8ce70174d0883dc78d6b0f203de4a4933db Mon Sep 17 00:00:00 2001 From: davchoo Date: Wed, 6 Jul 2022 09:12:52 -0400 Subject: [PATCH 002/134] Rename some stuff --- .../{RenderMethod.java => BoxComponent.java} | 6 +-- .../custom/component/CollisionComponent.java | 30 --------------- .../component/CustomBlockComponents.java | 14 +++---- .../custom/component/MaterialInstance.java | 2 +- .../java/org/geysermc/geyser/GeyserImpl.java | 2 +- .../block/GeyserCustomBlockComponents.java | 38 +++++++++---------- .../level/block/GeyserCustomBlockData.java | 4 +- .../block/GeyserCustomBlockPermutation.java | 2 +- .../level/block/GeyserCustomBlockState.java | 2 +- .../populator/BlockRegistryPopulator.java | 26 ++++++------- .../provider/GeyserBuilderProvider.java | 6 +-- 11 files changed, 50 insertions(+), 82 deletions(-) rename api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/{RenderMethod.java => BoxComponent.java} (90%) delete mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java similarity index 90% rename from api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java rename to api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 907d3803183..b114a361c4e 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RenderMethod.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -25,8 +25,6 @@ package org.geysermc.geyser.api.block.custom.component; -public enum RenderMethod { - BLEND, - OPAQUE, - ALPHA_TEST +public record BoxComponent(float originX, float originY, float originZ, + float sizeX, float sizeY, float sizeZ) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java deleted file mode 100644 index 6f975921a4e..00000000000 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CollisionComponent.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.block.custom.component; - -public record CollisionComponent(float originX, float originY, float originZ, - float sizeX, float sizeY, float sizeZ) { -} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 6d60ba49c32..92da81db821 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -28,9 +28,9 @@ import java.util.Map; public interface CustomBlockComponents { - CollisionComponent aimCollision(); + BoxComponent selectionBox(); - CollisionComponent entityCollision(); + BoxComponent collisionBox(); String geometry(); @@ -40,16 +40,16 @@ public interface CustomBlockComponents { Float friction(); - Float lightEmission(); + Integer lightEmission(); - Integer lightFilter(); + Integer lightDampening(); RotationComponent rotation(); interface Builder { - Builder aimCollision(CollisionComponent aimCollision); + Builder aimCollision(BoxComponent aimCollision); - Builder entityCollision(CollisionComponent entityCollision); + Builder entityCollision(BoxComponent entityCollision); Builder geometry(String geometry); @@ -59,7 +59,7 @@ interface Builder { Builder friction(Float friction); - Builder lightEmission(Float lightEmission); + Builder lightEmission(Integer lightEmission); Builder lightFilter(Integer lightFilter); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index 8331919e88b..19ba0906d5c 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -27,6 +27,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; -public record MaterialInstance(@NonNull String texture, @NonNull RenderMethod renderMethod, boolean faceDimming, boolean ambientOcclusion) { +public record MaterialInstance(@NonNull String texture, @NonNull String renderMethod, boolean faceDimming, boolean ambientOcclusion) { } diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 4c3cf6fca45..76a8f95f2af 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -595,7 +595,7 @@ public void reload() { @Override public boolean isProductionEnvironment() { // noinspection ConstantConditions - changes in production - return !"git-local/dev-0000000".equals(GeyserImpl.GIT_VERSION); + return !"${gitVersion}".equals(GeyserImpl.GIT_VERSION); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 1f20c9b5573..61e43b63f69 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,7 +25,7 @@ package org.geysermc.geyser.level.block; -import org.geysermc.geyser.api.block.custom.component.CollisionComponent; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.RotationComponent; @@ -33,17 +33,17 @@ import java.util.Map; public class GeyserCustomBlockComponents implements CustomBlockComponents { - private final CollisionComponent aimCollision; - private final CollisionComponent entityCollision; + private final BoxComponent aimCollision; + private final BoxComponent entityCollision; private final String geometry; private final Map materialInstances; private final Float destroyTime; private final Float friction; - private final Float lightEmission; - private final Integer lightFilter; + private final Integer lightEmission; + private final Integer lightDampening; private final RotationComponent rotation; - public GeyserCustomBlockComponents(BuilderImpl builder) { + private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.aimCollision = builder.aimCollision; this.entityCollision = builder.entityCollision; this.geometry = builder.geometry; @@ -51,17 +51,17 @@ public GeyserCustomBlockComponents(BuilderImpl builder) { this.destroyTime = builder.destroyTime; this.friction = builder.friction; this.lightEmission = builder.lightEmission; - this.lightFilter = builder.lightFilter; + this.lightDampening = builder.lightFilter; this.rotation = builder.rotation; } @Override - public CollisionComponent aimCollision() { + public BoxComponent selectionBox() { return aimCollision; } @Override - public CollisionComponent entityCollision() { + public BoxComponent collisionBox() { return entityCollision; } @@ -86,13 +86,13 @@ public Float friction() { } @Override - public Float lightEmission() { + public Integer lightEmission() { return lightEmission; } @Override - public Integer lightFilter() { - return lightFilter; + public Integer lightDampening() { + return lightDampening; } @Override @@ -100,25 +100,25 @@ public RotationComponent rotation() { return rotation; } - public static class BuilderImpl implements Builder { - protected CollisionComponent aimCollision; - protected CollisionComponent entityCollision; + public static class CustomBlockComponentsBuilder implements Builder { + protected BoxComponent aimCollision; + protected BoxComponent entityCollision; protected String geometry; protected Map materialInstances; protected Float destroyTime; protected Float friction; - protected Float lightEmission; + protected Integer lightEmission; protected Integer lightFilter; protected RotationComponent rotation; @Override - public Builder aimCollision(CollisionComponent aimCollision) { + public Builder aimCollision(BoxComponent aimCollision) { this.aimCollision = aimCollision; return this; } @Override - public Builder entityCollision(CollisionComponent entityCollision) { + public Builder entityCollision(BoxComponent entityCollision) { this.entityCollision = entityCollision; return this; } @@ -148,7 +148,7 @@ public Builder friction(Float friction) { } @Override - public Builder lightEmission(Float lightEmission) { + public Builder lightEmission(Integer lightEmission) { this.lightEmission = lightEmission; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 1d2351a375d..47d129a8db2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -69,10 +69,10 @@ public CustomBlockComponents components() { @Override public CustomBlockState.Builder blockStateBuilder() { - return new GeyserCustomBlockState.BuilderImpl(this); + return new GeyserCustomBlockState.CustomBlockStateBuilder(this); } - public static class BuilderImpl implements Builder { + public static class CustomBlockDataBuilder implements Builder { private String name; private CustomBlockComponents components; private Map> properties = new Object2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java index c2bfc8b6c6f..22e03c99a94 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java @@ -49,7 +49,7 @@ public CustomBlockComponents components() { return components; } - public static class BuilderImpl implements Builder { + public static class CustomBlockPermutationBuilder implements Builder { private String condition; private CustomBlockComponents components; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index b2b0e21488a..506a72a9392 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -59,7 +59,7 @@ public class GeyserCustomBlockState implements CustomBlockState { } @RequiredArgsConstructor - public static class BuilderImpl implements CustomBlockState.Builder { + public static class CustomBlockStateBuilder implements CustomBlockState.Builder { private final CustomBlockData blockData; private final Object2ObjectMap properties = new Object2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index a3bee28d105..b61d0e389c3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -38,7 +38,7 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.component.CollisionComponent; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; @@ -347,20 +347,20 @@ private static NbtMap convertComponents(CustomBlockComponents components) { return NbtMap.EMPTY; } NbtMapBuilder builder = NbtMap.builder(); - if (components.aimCollision() != null) { - CollisionComponent collisionComponent = components.aimCollision(); + if (components.selectionBox() != null) { + BoxComponent selectionBox = components.selectionBox(); builder.putCompound("minecraft:aim_collision", NbtMap.builder() .putBoolean("enabled", true) - .putList("origin", NbtType.FLOAT, collisionComponent.originX(), collisionComponent.originY(), collisionComponent.originZ()) - .putList("size", NbtType.FLOAT, collisionComponent.sizeX(), collisionComponent.sizeY(), collisionComponent.sizeZ()) + .putList("origin", NbtType.FLOAT, selectionBox.originX(), selectionBox.originY(), selectionBox.originZ()) + .putList("size", NbtType.FLOAT, selectionBox.sizeX(), selectionBox.sizeY(), selectionBox.sizeZ()) .build()); } - if (components.entityCollision() != null) { - CollisionComponent collisionComponent = components.entityCollision(); + if (components.collisionBox() != null) { + BoxComponent collisionBox = components.collisionBox(); builder.putCompound("minecraft:block_collision", NbtMap.builder() .putBoolean("enabled", true) - .putList("origin", NbtType.FLOAT, collisionComponent.originX(), collisionComponent.originY(), collisionComponent.originZ()) - .putList("size", NbtType.FLOAT, collisionComponent.sizeX(), collisionComponent.sizeY(), collisionComponent.sizeZ()) + .putList("origin", NbtType.FLOAT, collisionBox.originX(), collisionBox.originY(), collisionBox.originZ()) + .putList("size", NbtType.FLOAT, collisionBox.sizeX(), collisionBox.sizeY(), collisionBox.sizeZ()) .build()); } if (components.geometry() != null) { @@ -374,7 +374,7 @@ private static NbtMap convertComponents(CustomBlockComponents components) { MaterialInstance materialInstance = entry.getValue(); materialsBuilder.putCompound(entry.getKey(), NbtMap.builder() .putString("texture", materialInstance.texture()) - .putString("render_method", materialInstance.renderMethod().toString().toLowerCase(Locale.ROOT)) + .putString("render_method", materialInstance.renderMethod()) .putBoolean("face_dimming", materialInstance.faceDimming()) .putBoolean("ambient_occlusion", materialInstance.faceDimming()) .build()); @@ -396,12 +396,12 @@ private static NbtMap convertComponents(CustomBlockComponents components) { } if (components.lightEmission() != null) { builder.putCompound("minecraft:block_light_emission", NbtMap.builder() - .putFloat("value", components.lightEmission()) + .putFloat("value", ((float) components.lightEmission()) / 15f) .build()); } - if (components.lightFilter() != null) { + if (components.lightDampening() != null) { builder.putCompound("minecraft:block_light_filter", NbtMap.builder() - .putByte("value", components.lightFilter().byteValue()) + .putByte("value", components.lightDampening().byteValue()) .build()); } if (components.rotation() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java b/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java index b40846b2c45..88b37e45618 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java +++ b/core/src/main/java/org/geysermc/geyser/registry/provider/GeyserBuilderProvider.java @@ -59,9 +59,9 @@ private GeyserBuilderProvider() { public void registerProviders(Map, ProviderSupplier> providers) { providers.put(Command.Builder.class, args -> new GeyserCommandManager.CommandBuilder<>((Class) args[0])); - providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.BuilderImpl()); - providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.BuilderImpl()); - providers.put(CustomBlockPermutation.Builder.class, args -> new GeyserCustomBlockPermutation.BuilderImpl()); + providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.CustomBlockComponentsBuilder()); + providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); + providers.put(CustomBlockPermutation.Builder.class, args -> new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder()); providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); From f553dee3a504bb4c8d7f27a8151e77678c40d13f Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 7 Jul 2022 05:06:28 -0400 Subject: [PATCH 003/134] Attempt to clean up some code --- .../populator/BlockRegistryPopulator.java | 41 ++++++++----------- .../populator/ItemRegistryPopulator.java | 1 + .../inventory/item/ItemTranslator.java | 37 ++++------------- .../entity/SkullBlockEntityTranslator.java | 3 +- ...BedrockInventoryTransactionTranslator.java | 8 ++-- .../level/JavaBlockEntityDataTranslator.java | 2 +- .../JavaLevelChunkWithLightTranslator.java | 2 +- 7 files changed, 35 insertions(+), 59 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index b61d0e389c3..4781110f7a6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -100,10 +100,11 @@ public boolean registerCustomBlock(@NonNull CustomBlockData customBlockData) { GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); } - private static void generateCustomBlockStates(List blockStates, List customExtBlockStates, CustomBlockData customBlock, int stateVersion) { + private static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { + String name = CUSTOM_PREFIX + customBlock.name(); if (customBlock.properties().isEmpty()) { blockStates.add(NbtMap.builder() - .putString("name", CUSTOM_PREFIX + customBlock.name()) + .putString("name", name) .putInt("version", stateVersion) .putCompound("states", NbtMap.EMPTY) .build()); @@ -121,7 +122,6 @@ private static void generateCustomBlockStates(List blockStates, List, BiFunction> palette : BLOCK_MAPPERS.entrySet()) { NbtList blocksTag; @@ -203,19 +192,13 @@ private static void registerBedrockBlocks() { if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { customBlockProperties.add(generateBlockPropertyData(customBlock)); - generateCustomBlockStates(customBlockStates, customExtBlockStates, customBlock, stateVersion); + generateCustomBlockStates(customBlock, customBlockStates, customExtBlockStates, stateVersion); } blockStates.addAll(customBlockStates); GeyserImpl.getInstance().getLogger().debug("Added " + customBlockStates.size() + " custom block states to v" + palette.getKey().valueInt() + " palette."); - if (palette.getKey().valueInt() > 486) { - // Version 1.18.30 and above sort the palette by the FNV1 64 bit hash of the name - blockStates.sort((a, b) -> Long.compareUnsigned(fnv164(a.getString("name")), fnv164(b.getString("name")))); - } else { - // Version below 1.18.30 sort the palette alphabetically by name - blockStates.sort(Comparator.comparing(state -> state.getString("name"))); - } - + // The palette is sorted by the FNV1 64-bit hash of the name + blockStates.sort((a, b) -> Long.compareUnsigned(fnv164(a.getString("name")), fnv164(b.getString("name")))); } // New since 1.16.100 - find the block runtime ID by the order given to us in the block palette, @@ -602,4 +585,16 @@ private static NbtMap buildBedrockState(JsonNode node, int blockStateVersion, Bi tagBuilder.put("states", statesBuilder.build()); return tagBuilder.build(); } + + private static final long FNV1_64_OFFSET_BASIS = 0xcbf29ce484222325L; + private static final long FNV1_64_PRIME = 1099511628211L; + + private static long fnv164(String str) { + long hash = FNV1_64_OFFSET_BASIS; + for (byte b : str.getBytes(StandardCharsets.UTF_8)) { + hash *= FNV1_64_PRIME; + hash ^= b; + } + return hash; + } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index bcfe9b8eebe..150f1b6bd3a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -646,6 +646,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { entries.put(identifier, new StartGamePacket.ItemEntry(identifier, (short) customProtocolId)); customBlockItemIds.put(customBlock, customProtocolId); + customIdMappings.put(customProtocolId, identifier); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index af5e9658f9c..995408318fb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -53,7 +53,6 @@ import org.geysermc.geyser.util.FileUtils; import javax.annotation.Nonnull; -import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.*; import java.util.stream.Collectors; @@ -180,7 +179,7 @@ public static ItemData translateToBedrock(GeyserSession session, ItemStack stack translateCustomItem(nbt, builder, bedrockItem); if (bedrockItem == session.getItemMappings().getStoredItems().playerHead()) { - translatePlayerHead(session, nbt, builder, bedrockItem); + translatePlayerHead(session, nbt, builder); } if (nbt != null) { @@ -551,39 +550,19 @@ private static void translateCustomItem(CompoundTag nbt, ItemData.Builder builde } } - private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder, ItemMapping mapping) { + private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder) { if (nbt != null && nbt.contains("SkullOwner")) { - String skinHash = null; - Tag skullOwner = nbt.get("SkullOwner"); - if (skullOwner instanceof StringTag) { + if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) { // It's a username give up d: return; - } else if (skullOwner instanceof CompoundTag) { - Tag properties = ((CompoundTag) skullOwner).get("Properties"); - if (properties instanceof CompoundTag) { - Tag textures = ((CompoundTag) properties).get("textures"); - if (textures instanceof ListTag) { - List textureTags = ((ListTag) textures).getValue(); - if (!textureTags.isEmpty()) { - Tag skinTag = textureTags.get(0); - if (skinTag instanceof CompoundTag) { - Tag valueTag = ((CompoundTag) skinTag).get("Value"); - String encodedJson = (String) valueTag.getValue(); - try { - SkinManager.GameProfileData data = SkinManager.GameProfileData.loadFromJson(encodedJson); - skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); - } catch (IOException e) { - session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt + " " + e.getMessage()); - return; - } - } - } - } - } } - if (skinHash == null) { + SkinManager.GameProfileData data = SkinManager.GameProfileData.from(skullOwner); + if (data == null) { session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt); + return; } + + String skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); GeyserConvertSkullInventoryEvent skullInventoryEvent = new GeyserConvertSkullInventoryEvent(skinHash); GeyserImpl.getInstance().getEventBus().fire(skullInventoryEvent); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 07c1552a2e6..6c03a737c33 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -74,10 +74,9 @@ private static CompletableFuture getTextures(CompoundTag tag) { return CompletableFuture.completedFuture(null); } - public static int translateSkull(GeyserSession session, CompoundTag tag, int posX, int posY, int posZ, int blockState) { + public static int translateSkull(GeyserSession session, CompoundTag tag, Vector3i blockPosition, int blockState) { try { String texturesProperty = getTextures(tag).get(); - Vector3i blockPosition = Vector3i.from(posX, posY, posZ); if (texturesProperty == null) { session.getGeyser().getLogger().debug("Custom skull with invalid SkullOwner tag: " + blockPosition + " " + tag); return -1; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index 5feefa6814b..0f391206690 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -53,6 +53,7 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.BlockUtils; @@ -507,9 +508,10 @@ private void restoreCorrectBlock(GeyserSession session, Vector3i blockPos, Inven int javaBlockState = session.getGeyser().getWorldManager().getBlockAt(session, blockPos); int bedrockId = session.getBlockMappings().getBedrockBlockId(javaBlockState); if (BlockStateValues.getSkullVariant(javaBlockState) == 3) { - int customRuntimeId = session.getSkullCache().updateSkull(blockPos, javaBlockState); - if (customRuntimeId != -1) { - bedrockId = customRuntimeId; + // The changed block was a player skull so check if a custom block was defined for this skull + SkullCache.Skull skull = session.getSkullCache().getSkulls().get(blockPos); + if (skull != null && skull.getCustomRuntimeId() != -1) { + bedrockId = skull.getCustomRuntimeId(); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index 9bb398fc946..248aaba26c3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -66,7 +66,7 @@ public void translate(GeyserSession session, ClientboundBlockEntityDataPacket pa // Check for custom skulls. boolean customSkull = false; if (session.getPreferencesCache().showCustomSkulls() && packet.getNbt() != null && packet.getNbt().contains("SkullOwner")) { - int runtimeId = SkullBlockEntityTranslator.translateSkull(session, packet.getNbt(), position.getX(), position.getY(), position.getZ(), blockState); + int runtimeId = SkullBlockEntityTranslator.translateSkull(session, packet.getNbt(), position, blockState); if (runtimeId != -1) { customSkull = true; UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 6e20d97c053..8a1161c1f74 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -274,7 +274,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // Check for custom skulls if (session.getPreferencesCache().showCustomSkulls() && type == BlockEntityType.SKULL && tag != null && tag.contains("SkullOwner")) { - int runtimeId = SkullBlockEntityTranslator.translateSkull(session, tag, x + chunkBlockX, y, z + chunkBlockZ, blockState); + int runtimeId = SkullBlockEntityTranslator.translateSkull(session, tag, Vector3i.from(x + chunkBlockX, y, z + chunkBlockZ), blockState); if (runtimeId != -1) { int bedrockSectionY = (y >> 4) - (bedrockDimension.minY() >> 4); GeyserChunkSection bedrockSection = sections[bedrockSectionY]; From 49f7f6d2f9c5625dfef37b54559efd0e26634065 Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 7 Jul 2022 16:18:24 -0400 Subject: [PATCH 004/134] Remove skull translation events and define custom blocks for custom skulls Clean up skull block translation a bit --- .../api/block/custom/CustomBlockData.java | 2 + .../custom/component/RotationComponent.java | 2 +- .../GeyserConvertSkullInventoryEvent.java | 48 ----- .../event/world/GeyserConvertSkullEvent.java | 118 ------------ .../level/block/GeyserCustomBlockData.java | 5 + .../geyser/registry/BlockRegistries.java | 7 + .../populator/BlockRegistryPopulator.java | 18 +- .../populator/ItemRegistryPopulator.java | 2 +- .../geyser/registry/type/CustomSkull.java | 171 ++++++++++++++++++ .../geyser/session/GeyserSession.java | 1 - .../geyser/session/cache/SkullCache.java | 125 +++++++------ .../inventory/item/ItemTranslator.java | 21 ++- .../entity/SkullBlockEntityTranslator.java | 88 ++++----- .../level/JavaBlockEntityDataTranslator.java | 6 +- .../org/geysermc/geyser/util/ChunkUtils.java | 8 +- 15 files changed, 323 insertions(+), 299 deletions(-) delete mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java delete mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 6ee7645148a..5d842249938 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -38,6 +38,8 @@ public interface CustomBlockData { @NonNull String name(); + @NonNull String identifier(); + CustomBlockComponents components(); @NonNull Map> properties(); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java index e8c66caf641..6fab3c1ba95 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java @@ -25,5 +25,5 @@ package org.geysermc.geyser.api.block.custom.component; -public record RotationComponent(float x, float y, float z) { +public record RotationComponent(int x, int y, int z) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java deleted file mode 100644 index ff5edea247f..00000000000 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/GeyserConvertSkullInventoryEvent.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.event; - -import lombok.RequiredArgsConstructor; -import org.geysermc.geyser.api.block.custom.CustomBlockData; - -@RequiredArgsConstructor -public class GeyserConvertSkullInventoryEvent implements Event { - private final String skinHash; - - private CustomBlockData replacementBlock; - - public void replaceWithBlock(CustomBlockData customBlockData) { - this.replacementBlock = customBlockData; - } - - public String skinHash() { - return skinHash; - } - - public CustomBlockData replacementBlock() { - return replacementBlock; - } -} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java deleted file mode 100644 index b6ec543ac79..00000000000 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/world/GeyserConvertSkullEvent.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.event.world; - -import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.event.Cancellable; -import org.geysermc.geyser.api.event.Event; - -public class GeyserConvertSkullEvent implements Event, Cancellable { - private final int x; - private final int y; - private final int z; - - private final boolean onFloor; - - private final WallDirection wallDirection; - private final int floorDirection; - - private final String skinHash; - - private boolean cancelled; - - private CustomBlockState newBlockState; - - public GeyserConvertSkullEvent(int x, int y, int z, boolean onFloor, WallDirection wallDirection, int floorDirection, String skinHash) { - this.x = x; - this.y = y; - this.z = z; - this.onFloor = onFloor; - this.wallDirection = wallDirection; - this.floorDirection = floorDirection; - - if (onFloor && (wallDirection != WallDirection.INVALID || floorDirection == -1)) { - throw new IllegalArgumentException("Skull can't be on the floor and wall at the same time"); - } else if (!onFloor && (wallDirection == WallDirection.INVALID || floorDirection != -1)) { - throw new IllegalArgumentException("Skull can't be on the floor and wall at the same time"); - } - - this.skinHash = skinHash; - } - - public int x() { - return x; - } - - public int y() { - return y; - } - - public int z() { - return z; - } - - public boolean onFloor() { - return onFloor; - } - - public WallDirection wallDirection() { - return wallDirection; - } - - public int floorDirection() { - return floorDirection; - } - - public String skinHash() { - return skinHash; - } - - public void replaceWithBlock(CustomBlockState blockState) { - this.newBlockState = blockState; - } - - public CustomBlockState getNewBlockState() { - return newBlockState; - } - - @Override - public boolean isCancelled() { - return cancelled; - } - - @Override - public void setCancelled(boolean cancelled) { - this.cancelled = cancelled; - } - public enum WallDirection { - NORTH, - EAST, - SOUTH, - WEST, - INVALID - - } -} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 47d129a8db2..caf04203895 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -52,6 +52,11 @@ public class GeyserCustomBlockData implements CustomBlockData { return name; } + @Override + public @NonNull String identifier() { + return "geyser:" + name; + } + @Override public CustomBlockComponents components() { return components; diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index d5b5275a658..1d13e1acff5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.util.collection.Object2IntBiMap; /** @@ -78,6 +79,12 @@ public class BlockRegistries { */ public static final ArrayRegistry CUSTOM_BLOCKS = ArrayRegistry.create(RegistryLoaders.empty(() -> new CustomBlockData[] {})); + /** + * A registry which stores skin texture hashes to custom skull blocks. + * TODO add loader/populator + */ + public static final SimpleMappedRegistry CUSTOM_SKULLS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + static { BlockRegistryPopulator.populate(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 4781110f7a6..e6a210f18c8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -50,6 +50,7 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.util.BlockUtils; import java.io.DataInputStream; @@ -78,8 +79,6 @@ public class BlockRegistryPopulator { */ private static JsonNode BLOCKS_JSON; - public static final String CUSTOM_PREFIX = ""; - public static void populate() { registerJavaBlocks(); registerCustomBedrockBlocks(); @@ -96,15 +95,19 @@ public boolean registerCustomBlock(@NonNull CustomBlockData customBlockData) { return true; } }); + + for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { + customBlocks.add(customSkull.getCustomBlockData()); + } + BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); } private static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { - String name = CUSTOM_PREFIX + customBlock.name(); if (customBlock.properties().isEmpty()) { blockStates.add(NbtMap.builder() - .putString("name", name) + .putString("name", customBlock.identifier()) .putInt("version", stateVersion) .putCompound("states", NbtMap.EMPTY) .build()); @@ -116,7 +119,6 @@ private static void generateCustomBlockStates(CustomBlockData customBlock, List< for (int i = 0; i < totalPermutations; i++) { NbtMapBuilder statesBuilder = NbtMap.builder(); - int permIndex = i; for (CustomBlockProperty property : customBlock.properties().values()) { statesBuilder.put(property.name(), property.values().get(permIndex % property.values().size())); @@ -125,11 +127,11 @@ private static void generateCustomBlockStates(CustomBlockData customBlock, List< NbtMap states = statesBuilder.build(); blockStates.add(NbtMap.builder() - .putString("name", name) + .putString("name", customBlock.identifier()) .putInt("version", stateVersion) .putCompound("states", states) .build()); - customExtBlockStates.add(new GeyserCustomBlockState(name, states)); + customExtBlockStates.add(new GeyserCustomBlockState(customBlock.name(), states)); } } @@ -168,7 +170,7 @@ private static BlockPropertyData generateBlockPropertyData(CustomBlockData custo .putList("permutations", NbtType.COMPOUND, permutations) .putList("properties", NbtType.COMPOUND, properties) .build(); - return new BlockPropertyData(CUSTOM_PREFIX + customBlock.name(), propertyTag); + return new BlockPropertyData(customBlock.identifier(), propertyTag); } private static void registerBedrockBlocks() { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 150f1b6bd3a..4cf4f4d2992 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -642,7 +642,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { customBlockItemIds = new Object2IntOpenHashMap<>(); for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { int customProtocolId = nextFreeBedrockId++; - String identifier = BlockRegistryPopulator.CUSTOM_PREFIX + customBlock.name(); + String identifier = customBlock.identifier(); entries.put(identifier, new StartGamePacket.ItemEntry(identifier, (short) customProtocolId)); customBlockItemIds.put(customBlock, customProtocolId); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java new file mode 100644 index 00000000000..54bbc68350d --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ +package org.geysermc.geyser.registry.type; + +import lombok.Data; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserCustomBlockPermutation; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.IntStream; + +@Data +public class CustomSkull { + private final String skinHash; + + private CustomBlockData customBlockData; + + private static final String DIRECTION_PROPERTY = "davchoo:direction"; + private static final String TYPE_PROPERTY = "davchoo:type"; + + private static final int[] ROTATIONS = {0, -90, 180, 90}; + + public CustomSkull(String skinHash) { + this.skinHash = skinHash; + + CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + .destroyTime(1.5f) + .materialInstances(Map.of("*", new MaterialInstance("davchoo." + skinHash + "_player_skin", "alpha_test", true, true))) + .lightFilter(0) + .build(); + + List permutations = new ArrayList<>(); + addDefaultPermutation(permutations); + addFloorPermutations(permutations); + addWallPermutations(permutations); + + customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() + .name("player_head_" + skinHash) + .components(components) + .intProperty(DIRECTION_PROPERTY, IntStream.rangeClosed(0, 15).boxed().toList()) + .intProperty(TYPE_PROPERTY, IntStream.rangeClosed(0, 2).boxed().toList()) + .permutations(permutations) + .build(); + } + + public CustomBlockState getDefaultBlockState() { + return customBlockData.blockStateBuilder() + .intProperty(DIRECTION_PROPERTY, 0) + .intProperty(TYPE_PROPERTY, 0) + .build(); + } + + public CustomBlockState getWallBlockState(int wallDirection) { + wallDirection = switch (wallDirection) { + case 0 -> 2; // South + case 90 -> 3; // West + case 180 -> 0; // North + case 270 -> 1; // East + default -> throw new IllegalArgumentException("Unknown skull wall direction: " + wallDirection); + }; + + return customBlockData.blockStateBuilder() + .intProperty(DIRECTION_PROPERTY, wallDirection) + .intProperty(TYPE_PROPERTY, 1) + .build(); + } + + public CustomBlockState getFloorBlockState(int floorRotation) { + return customBlockData.blockStateBuilder() + .intProperty(DIRECTION_PROPERTY, floorRotation) + .intProperty(TYPE_PROPERTY, 2) + .build(); + } + + private void addDefaultPermutation(List permutations) { + CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + .geometry("geometry.davchoo.player_head_hand") + .rotation(new RotationComponent(0, 180, 0)) + .build(); + + String condition = String.format("query.block_property('%s') == 0 && query.block_property('%s') == 0", DIRECTION_PROPERTY, TYPE_PROPERTY); + permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() + .condition(condition) + .components(components) + .build()); + } + + private void addFloorPermutations(List permutations) { + BoxComponent box = new BoxComponent( + -4, 0, -4, + 8, 8, 8 + ); + + String[] quadrantNames = {"a", "b", "c", "d"}; + + for (int quadrant = 0; quadrant < 4; quadrant++) { + RotationComponent rotation = new RotationComponent(0, ROTATIONS[quadrant], 0); + for (int i = 0; i < 4; i++) { + int floorDirection = 4 * quadrant + i; + CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + .aimCollision(box) + .entityCollision(box) + .geometry("geometry.davchoo.player_head_floor_" + quadrantNames[i]) + .rotation(rotation) + .build(); + + String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", DIRECTION_PROPERTY, floorDirection, TYPE_PROPERTY, 2); + permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() + .condition(condition) + .components(components) + .build()); + } + } + } + + private void addWallPermutations(List permutations) { + BoxComponent box = new BoxComponent( + -4, 4, 0, + 8, 8, 8 + ); + + for (int i = 0; i < 4; i++) { + RotationComponent rotation = new RotationComponent(0, ROTATIONS[i], 0); + String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", DIRECTION_PROPERTY, i, TYPE_PROPERTY, 1); + + CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + .aimCollision(box) + .entityCollision(box) + .geometry("geometry.davchoo.player_head_wall") + .rotation(rotation) + .build(); + + permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() + .condition(condition) + .components(components) + .build()); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 62eb38fc958..3c61133c762 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1469,7 +1469,6 @@ private void startGame() { startGamePacket.setItemEntries(this.itemMappings.getItemEntries()); startGamePacket.getBlockProperties().addAll(this.blockMappings.getBlockProperties()); - startGamePacket.getExperiments().add(new ExperimentData("vanilla_experiments", true)); startGamePacket.getExperiments().add(new ExperimentData("data_driven_items", true)); startGamePacket.getExperiments().add(new ExperimentData("upcoming_creator_features", true)); startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index 133c403373f..291790ed818 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -27,15 +27,20 @@ import com.nukkitx.math.vector.Vector3f; import com.nukkitx.math.vector.Vector3i; -import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Data; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.player.SkullPlayerEntity; +import org.geysermc.geyser.level.block.BlockStateValues; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.level.block.entity.SkullBlockEntityTranslator; +import org.geysermc.geyser.skin.SkinManager; +import java.io.IOException; import java.util.*; public class SkullCache { @@ -73,20 +78,33 @@ public SkullCache(GeyserSession session) { this.skullRenderDistanceSquared = distance * distance; } - public void putSkull(Vector3i position, String texturesProperty, int blockState) { + public Skull putSkull(Vector3i position, String texturesProperty, int blockState) { Skull skull = skulls.computeIfAbsent(position, Skull::new); - skull.texturesProperty = texturesProperty; + if (!texturesProperty.equals(skull.texturesProperty)) { + skull.texturesProperty = texturesProperty; + try { + SkinManager.GameProfileData gameProfileData = SkinManager.GameProfileData.loadFromJson(texturesProperty); + if (gameProfileData != null && gameProfileData.skinUrl() != null) { + String skinUrl = gameProfileData.skinUrl(); + skull.skinHash = skinUrl.substring(skinUrl.lastIndexOf('/') + 1); + } else { + session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + position + " Textures: " + texturesProperty); + skull.skinHash = null; + } + } catch (IOException e) { + session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + position + " Textures: " + texturesProperty); + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + skull.skinHash = null; + } + } skull.blockState = blockState; + skull.customRuntimeId = translateCustomSkull(skull.skinHash, blockState); + if (skull.customRuntimeId != -1) { - skull.customRuntimeId = -1; - - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NEIGHBORS); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - updateBlockPacket.setBlockPosition(position); - updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockBlockId(blockState)); - updateBlockPacket.setDataLayer(0); - session.sendUpstreamPacket(updateBlockPacket); + reassignSkullEntity(skull); + return skull; } if (skull.entity != null) { @@ -94,10 +112,10 @@ public void putSkull(Vector3i position, String texturesProperty, int blockState) } else { if (!cullingEnabled) { assignSkullEntity(skull); - return; + return skull; } if (lastPlayerPosition == null) { - return; + return skull; } skull.distanceSquared = position.distanceSquared(lastPlayerPosition.getX(), lastPlayerPosition.getY(), lastPlayerPosition.getZ()); if (skull.distanceSquared < skullRenderDistanceSquared) { @@ -117,54 +135,22 @@ public void putSkull(Vector3i position, String texturesProperty, int blockState) } } } - } - - public void putSkull(Vector3i position, String texturesProperty, int blockState, int customRuntimeId) { - Skull skull = skulls.computeIfAbsent(position, Skull::new); - skull.texturesProperty = texturesProperty; - skull.blockState = blockState; - skull.customRuntimeId = customRuntimeId; - - boolean hadEntity = skull.entity != null; - freeSkullEntity(skull); - - if (cullingEnabled) { - inRangeSkulls.remove(skull); - if (hadEntity && inRangeSkulls.size() >= maxVisibleSkulls) { - // Reassign entity to the closest skull without an entity - assignSkullEntity(inRangeSkulls.get(maxVisibleSkulls - 1)); - } - } + return skull; } public void removeSkull(Vector3i position) { Skull skull = skulls.remove(position); if (skull != null) { - boolean hadEntity = skull.entity != null; - freeSkullEntity(skull); - - if (cullingEnabled) { - inRangeSkulls.remove(skull); - if (hadEntity && inRangeSkulls.size() >= maxVisibleSkulls) { - // Reassign entity to the closest skull without an entity - assignSkullEntity(inRangeSkulls.get(maxVisibleSkulls - 1)); - } - } + reassignSkullEntity(skull); } } - public int updateSkull(Vector3i position, int blockState) { - Skull skull = skulls.remove(position); + public Skull updateSkull(Vector3i position, int blockState) { + Skull skull = skulls.get(position); if (skull != null) { - int customRuntimeId = SkullBlockEntityTranslator.translateCustomSkull(session, position, skull.texturesProperty, blockState); - if (customRuntimeId != -1) { - putSkull(position, skull.texturesProperty, blockState, customRuntimeId); - } else { - putSkull(position, skull.texturesProperty, blockState); - } - return customRuntimeId; + putSkull(position, skull.texturesProperty, blockState); } - return -1; + return skull; } public void updateVisibleSkulls() { @@ -239,6 +225,19 @@ private void freeSkullEntity(Skull skull) { } } + private void reassignSkullEntity(Skull skull) { + boolean hadEntity = skull.entity != null; + freeSkullEntity(skull); + + if (cullingEnabled) { + inRangeSkulls.remove(skull); + if (hadEntity && inRangeSkulls.size() >= maxVisibleSkulls) { + // Reassign entity to the closest skull without an entity + assignSkullEntity(inRangeSkulls.get(maxVisibleSkulls - 1)); + } + } + } + public void clear() { skulls.clear(); inRangeSkulls.clear(); @@ -247,10 +246,30 @@ public void clear() { lastPlayerPosition = null; } + private int translateCustomSkull(String skinHash, int blockState) { + CustomSkull customSkull = BlockRegistries.CUSTOM_SKULLS.get(skinHash); + if (customSkull != null) { + byte floorRotation = BlockStateValues.getSkullRotation(blockState); + CustomBlockState customBlockState; + if (floorRotation == -1) { + // Wall skull + int wallDirection = BlockStateValues.getSkullWallDirections().get(blockState); + customBlockState = customSkull.getWallBlockState(wallDirection); + } else { + customBlockState = customSkull.getFloorBlockState(floorRotation); + } + + return session.getBlockMappings().getCustomBlockStateIds().getOrDefault(customBlockState, -1); + } + return -1; + } + @RequiredArgsConstructor @Data public static class Skull { private String texturesProperty; + private String skinHash; + private int blockState; private int customRuntimeId = -1; private SkullPlayerEntity entity; diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 995408318fb..a9306041139 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -38,12 +38,11 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.event.GeyserConvertSkullInventoryEvent; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; @@ -176,12 +175,12 @@ public static ItemData translateToBedrock(GeyserSession session, ItemStack stack builder.blockRuntimeId(bedrockItem.getBedrockBlockId()); } - translateCustomItem(nbt, builder, bedrockItem); - if (bedrockItem == session.getItemMappings().getStoredItems().playerHead()) { translatePlayerHead(session, nbt, builder); } + translateCustomItem(nbt, builder, bedrockItem); + if (nbt != null) { // Translate the canDestroy and canPlaceOn Java NBT ListTag canDestroy = nbt.get("CanDestroy"); @@ -547,6 +546,7 @@ private static void translateCustomItem(CompoundTag nbt, ItemData.Builder builde int bedrockId = getCustomItem(nbt, mapping); if (bedrockId != -1) { builder.id(bedrockId); + builder.blockRuntimeId(0); } } @@ -563,13 +563,14 @@ private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, } String skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); - GeyserConvertSkullInventoryEvent skullInventoryEvent = new GeyserConvertSkullInventoryEvent(skinHash); - GeyserImpl.getInstance().getEventBus().fire(skullInventoryEvent); - CustomBlockData replacementBlock = skullInventoryEvent.replacementBlock(); - if (replacementBlock != null) { - int bedrockId = session.getItemMappings().getCustomBlockItemIds().getInt(replacementBlock); - builder.id(bedrockId); + CustomSkull customSkull = BlockRegistries.CUSTOM_SKULLS.get(skinHash); + if (customSkull != null) { + int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customSkull.getCustomBlockData()); + int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customSkull.getDefaultBlockState()); + + builder.id(itemId); + builder.blockRuntimeId(blockRuntimeId); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 6c03a737c33..58ed9c6306a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -31,14 +31,13 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.nukkitx.math.vector.Vector3i; import com.nukkitx.nbt.NbtMapBuilder; +import com.nukkitx.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.event.world.GeyserConvertSkullEvent; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.skin.SkinProvider; -import java.io.IOException; import java.util.LinkedHashMap; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -75,63 +74,46 @@ private static CompletableFuture getTextures(CompoundTag tag) { } public static int translateSkull(GeyserSession session, CompoundTag tag, Vector3i blockPosition, int blockState) { - try { - String texturesProperty = getTextures(tag).get(); + CompletableFuture texturesFuture = getTextures(tag); + if (texturesFuture.isDone()) { + try { + SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, texturesFuture.get(), blockState); + return skull.getCustomRuntimeId(); + } catch (InterruptedException | ExecutionException e) { + session.getGeyser().getLogger().debug("Failed to acquire textures for custom skull: " + blockPosition + " " + tag); + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + } + return -1; + } + + // SkullOwner contained a username, so we have to wait for it to be retrieved + texturesFuture.whenComplete((texturesProperty, throwable) -> { if (texturesProperty == null) { session.getGeyser().getLogger().debug("Custom skull with invalid SkullOwner tag: " + blockPosition + " " + tag); - return -1; + return; } - int runtimeId = translateCustomSkull(session, blockPosition, texturesProperty, blockState); - if (runtimeId == -1) { - session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState); + if (session.getEventLoop().inEventLoop()) { + putSkull(session, blockPosition, texturesProperty, blockState); } else { - session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState, runtimeId); + session.executeInEventLoop(() -> putSkull(session, blockPosition, texturesProperty, blockState)); } - return runtimeId; - } catch (InterruptedException | ExecutionException e) { - throw new RuntimeException(e); - } + }); + // We don't have the textures yet, so we can't determine if a custom block was defined for this skull + return -1; } - public static int translateCustomSkull(GeyserSession session, Vector3i blockPosition, String texturesProperty, int blockState) { - try { - SkinManager.GameProfileData gameProfileData = SkinManager.GameProfileData.loadFromJson(texturesProperty); - if (gameProfileData == null || gameProfileData.skinUrl() == null) { - session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + blockPosition + " Textures: " + texturesProperty); - return -1; - } - - String skinUrl = gameProfileData.skinUrl(); - String skinHash = skinUrl.substring(skinUrl.lastIndexOf('/') + 1); - - byte floorRotation = BlockStateValues.getSkullRotation(blockState); - GeyserConvertSkullEvent.WallDirection wallDirection = GeyserConvertSkullEvent.WallDirection.INVALID; - boolean onFloor = true; - if (floorRotation == -1) { - // Wall skull - onFloor = false; - int wallRotation = BlockStateValues.getSkullWallDirections().get(blockState); - wallDirection = switch (wallRotation) { - case 0 -> GeyserConvertSkullEvent.WallDirection.SOUTH; - case 90 -> GeyserConvertSkullEvent.WallDirection.WEST; - case 180 -> GeyserConvertSkullEvent.WallDirection.NORTH; - case 270 -> GeyserConvertSkullEvent.WallDirection.EAST; - default -> GeyserConvertSkullEvent.WallDirection.INVALID; - }; - } - GeyserConvertSkullEvent event = new GeyserConvertSkullEvent(blockPosition.getX(), blockPosition.getY(), blockPosition.getZ(), onFloor, wallDirection, floorRotation, skinHash); - GeyserImpl.getInstance().getEventBus().fire(event); - - if (event.getNewBlockState() != null) { - return session.getBlockMappings().getCustomBlockStateIds().getOrDefault(event.getNewBlockState(), -1); - } - - if (event.isCancelled()) { - return -1; - } - } catch (IOException e) { - session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + blockPosition + " Textures: " + texturesProperty + " Message: " + e.getMessage()); + private static void putSkull(GeyserSession session, Vector3i blockPosition, String texturesProperty, int blockState) { + SkullCache.Skull skull = session.getSkullCache().putSkull(blockPosition, texturesProperty, blockState); + if (skull.getCustomRuntimeId() != -1) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(blockPosition); + updateBlockPacket.setRuntimeId(skull.getCustomRuntimeId()); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NEIGHBORS); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); } - return -1; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index 248aaba26c3..254357a1e19 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -64,11 +64,11 @@ public void translate(GeyserSession session, ClientboundBlockEntityDataPacket pa BlockEntityUtils.updateBlockEntity(session, translator.getBlockEntityTag(type, position.getX(), position.getY(), position.getZ(), packet.getNbt(), blockState), packet.getPosition()); // Check for custom skulls. - boolean customSkull = false; + boolean hasCustomHeadBlock = false; if (session.getPreferencesCache().showCustomSkulls() && packet.getNbt() != null && packet.getNbt().contains("SkullOwner")) { int runtimeId = SkullBlockEntityTranslator.translateSkull(session, packet.getNbt(), position, blockState); if (runtimeId != -1) { - customSkull = true; + hasCustomHeadBlock = true; UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(position); @@ -78,7 +78,7 @@ public void translate(GeyserSession session, ClientboundBlockEntityDataPacket pa session.sendUpstreamPacket(updateBlockPacket); } } - if (!customSkull) { + if (!hasCustomHeadBlock) { BlockEntityUtils.updateBlockEntity(session, translator.getBlockEntityTag(type, position.getX(), position.getY(), position.getZ(), packet.getNbt(), blockState), packet.getPosition()); } diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index fac3984721a..56c1f2300f8 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.level.chunk.bitarray.SingletonBitArray; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.SkullCache; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.level.block.entity.BedrockOnlyBlockEntity; @@ -141,9 +142,10 @@ public static void updateBlock(GeyserSession session, int blockState, Vector3i p // Skull is gone session.getSkullCache().removeSkull(position); } else if (skullVariant == 3) { - int customRuntimeId = session.getSkullCache().updateSkull(position, blockState); - if (customRuntimeId != -1) { - blockId = customRuntimeId; + // The changed block was a player skull so check if a custom block was defined for this skull + SkullCache.Skull skull = session.getSkullCache().updateSkull(position, blockState); + if (skull != null && skull.getCustomRuntimeId() != -1) { + blockId = skull.getCustomRuntimeId(); } } From 9e0af6e098d00636d37511ab36552bcf3d2b065a Mon Sep 17 00:00:00 2001 From: davchoo Date: Fri, 8 Jul 2022 14:49:19 -0400 Subject: [PATCH 005/134] Auto generate skull resource pack Change `davchoo` to `geyser` in geometry --- .../geysermc/geyser/pack/ResourcePack.java | 21 +- .../geyser/pack/ResourcePackManifest.java | 2 +- .../geyser/pack/SkullResourcePackManager.java | 208 ++++++++++++++++++ .../geyser/registry/type/CustomSkull.java | 15 +- .../geyser/session/cache/SkullCache.java | 3 +- .../geysermc/geyser/skin/SkinProvider.java | 11 +- .../animations/disable.animation.json | 14 ++ .../animations/player_skull.animation.json | 80 +++++++ .../attachables/template_attachable.json | 57 +++++ .../bedrock/skull_resource_pack/manifest.json | 17 ++ .../models/blocks/player_skull.geo.json | 50 +++++ .../blocks/player_skull_floor_a.geo.json | 29 +++ .../blocks/player_skull_floor_b.geo.json | 30 +++ .../blocks/player_skull_floor_c.geo.json | 30 +++ .../blocks/player_skull_floor_d.geo.json | 30 +++ .../models/blocks/player_skull_hand.geo.json | 29 +++ .../models/blocks/player_skull_wall.geo.json | 29 +++ .../bedrock/skull_resource_pack/pack_icon.png | Bin 0 -> 36264 bytes .../textures/terrain_texture.json | 8 + .../bedrock/skull_resource_pack_files.txt | 12 + 20 files changed, 651 insertions(+), 24 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/animations/disable.animation.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/animations/player_skull.animation.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/attachables/template_attachable.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/manifest.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png create mode 100644 core/src/main/resources/bedrock/skull_resource_pack/textures/terrain_texture.json create mode 100644 core/src/main/resources/bedrock/skull_resource_pack_files.txt diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java index bef5c741896..55a95b53caf 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java @@ -27,6 +27,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.lifecycle.GeyserLoadResourcePacksEvent; +import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.text.GeyserLocale; @@ -77,13 +78,18 @@ public static void loadPacks() { } List resourcePacks; - try { - resourcePacks = Files.walk(directory).collect(Collectors.toList()); + try (Stream stream = Files.walk(directory)) { + resourcePacks = stream.collect(Collectors.toList()); } catch (IOException e) { GeyserImpl.getInstance().getLogger().error("Could not list packs directory", e); return; } + Path skullResourcePack = SkullResourcePackManager.createResourcePack(BlockRegistries.CUSTOM_SKULLS.get().keySet()); + if (skullResourcePack != null) { + resourcePacks.add(skullResourcePack); + } + GeyserLoadResourcePacksEvent event = new GeyserLoadResourcePacksEvent(resourcePacks); GeyserImpl.getInstance().eventBus().fire(event); @@ -95,11 +101,8 @@ public static void loadPacks() { pack.sha256 = FileUtils.calculateSHA256(file); - Stream stream = null; - try { - ZipFile zip = new ZipFile(file); - - stream = zip.stream(); + try (ZipFile zip = new ZipFile(file); + Stream stream = zip.stream()) { stream.forEach((x) -> { if (x.getName().contains("manifest.json")) { try { @@ -121,10 +124,6 @@ public static void loadPacks() { } catch (Exception e) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.resource_pack.broken", file.getName())); e.printStackTrace(); - } finally { - if (stream != null) { - stream.close(); - } } } } diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java index 2b14eade394..0c3abf86d75 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java @@ -71,7 +71,7 @@ public String getVersionString() { @ToString public static class Module { private String description; - private String name; + private String type; private UUID uuid; private int[] version; } diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java new file mode 100644 index 00000000000..819811c9be5 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.pack; + +import it.unimi.dsi.fastutil.Pair; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.skin.SkinProvider; +import org.geysermc.geyser.util.FileUtils; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.function.UnaryOperator; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +public class SkullResourcePackManager { + + private static final long RESOURCE_PACK_VERSION = 4; + + @SuppressWarnings("ResultOfMethodCallIgnored") + public static Path createResourcePack(Set skins) { + Path packPath = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls.mcpack"); + File packFile = packPath.toFile(); + if (skins.isEmpty()) { + packFile.delete(); // No need to keep resource pack + GeyserImpl.getInstance().getLogger().debug("No skins to create player skull resource pack."); + return null; + } + if (packFile.exists() && canReusePack(skins, packFile)) { + GeyserImpl.getInstance().getLogger().info("Reusing cached player skull resource pack."); + return packPath; + } + + // We need to create the resource pack from scratch + GeyserImpl.getInstance().getLogger().info("Creating skull resource pack."); + packFile.delete(); + try (ZipOutputStream zipOS = new ZipOutputStream(Files.newOutputStream(packPath, StandardOpenOption.WRITE, StandardOpenOption.CREATE))) { + addBaseResources(zipOS, skins); + addSkinTextures(zipOS, skins); + addAttachables(zipOS, skins); + GeyserImpl.getInstance().getLogger().info("Finished creating skull resource pack."); + return packPath; + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().error("Unable to create player skull resource pack!", e); + packFile.delete(); + } + return null; + } + + private static void addBaseResources(ZipOutputStream zipOS, Set skins) throws IOException { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(GeyserImpl.getInstance().getBootstrap().getResource("bedrock/skull_resource_pack_files.txt")))) { + List lines = reader.lines().toList(); + for (String path : lines) { + ZipEntry entry = new ZipEntry(path); + + zipOS.putNextEntry(entry); + String resourcePath = "bedrock/" + path; + switch (path) { + case "skull_resource_pack/manifest.json" -> + fillTemplate(zipOS, resourcePath, template -> fillManifestJson(template, skins)); + case "skull_resource_pack/textures/terrain_texture.json" -> + fillTemplate(zipOS, resourcePath, template -> fillTerrainTextureJson(template, skins)); + default -> zipOS.write(FileUtils.readAllBytes(resourcePath)); + } + zipOS.closeEntry(); + } + } + } + + private static void addAttachables(ZipOutputStream zipOS, Set skins) throws IOException { + String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/attachables/template_attachable.json"), StandardCharsets.UTF_8); + for (String skinHash : skins) { + ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + skinHash + ".json"); + zipOS.putNextEntry(entry); + zipOS.write(fillAttachableJson(template, skinHash).getBytes(StandardCharsets.UTF_8)); + zipOS.closeEntry(); + } + } + + private static void addSkinTextures(ZipOutputStream zipOS, Set skins) throws IOException { + Path skullSkinCache = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); + Files.createDirectories(skullSkinCache); + for (String skin : skins) { + Path skinPath = skullSkinCache.resolve(skin + ".png"); + if (!Files.exists(skinPath)) { + // TODO this should go somewhere else and be async somehow + BufferedImage image = SkinProvider.requestImage("http://textures.minecraft.net/texture/" + skin, null); + ImageIO.write(image, "png", skinPath.toFile()); + GeyserImpl.getInstance().getLogger().debug("Cached player skull to file " + skinPath + " for " + skin); + } + + ZipEntry entry = new ZipEntry("skull_resource_pack/textures/blocks/" + skin + ".png"); + + zipOS.putNextEntry(entry); + zipOS.write(FileUtils.readAllBytes(skinPath.toFile())); + zipOS.closeEntry(); + } + } + + private static void fillTemplate(ZipOutputStream zipOS, String path, UnaryOperator filler) throws IOException { + String template = new String(FileUtils.readAllBytes(path), StandardCharsets.UTF_8); + String result = filler.apply(template); + zipOS.write(result.getBytes(StandardCharsets.UTF_8)); + } + + private static String fillAttachableJson(String template, String skinHash) { + return template.replace("${identifier}", "geyser:player_skull_" + skinHash) // TOOD use CustomSkull for this + .replace("${texture}", skinHash); + } + + private static String fillManifestJson(String template, Set skins) { + Pair uuids = generatePackUUIDs(skins); + return template.replace("${uuid1}", uuids.first().toString()) + .replace("${uuid2}", uuids.second().toString()); + } + + private static String fillTerrainTextureJson(String template, Set skins) { + StringBuilder textures = new StringBuilder(); + for (String skinHash : skins) { + String texture = String.format("\"geyser.%s_player_skin\":{\"textures\":\"textures/blocks/%s\"},", skinHash, skinHash); + textures.append(texture); + } + if (textures.length() != 0) { + // Remove trailing comma + textures.deleteCharAt(textures.length() - 1); + } + return template.replace("${texture_data}", textures); + } + + private static Pair generatePackUUIDs(Set skins) { + UUID uuid1 = UUID.randomUUID(); + UUID uuid2 = UUID.randomUUID(); + try { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + for (int i = 0; i < 8; i++) { + md.update((byte) ((RESOURCE_PACK_VERSION >> (i * 8)) & 0xFF)); + } + skins.stream() + .sorted() + .map(hash -> hash.getBytes(StandardCharsets.UTF_8)) + .forEach(md::update); + + ByteBuffer skinHashes = ByteBuffer.wrap(md.digest()); + uuid1 = new UUID(skinHashes.getLong(), skinHashes.getLong()); + uuid2 = new UUID(skinHashes.getLong(), skinHashes.getLong()); + } catch (NoSuchAlgorithmException e) { + GeyserImpl.getInstance().getLogger().severe("Unable to get SHA-256 Message Digest instance! Bedrock players will have to re-downloaded the player skull resource pack after each server restart.", e); + } + + return Pair.of(uuid1, uuid2); + } + + private static boolean canReusePack(Set skins, File packFile) { + Pair uuids = generatePackUUIDs(skins); + try (ZipFile zipFile = new ZipFile(packFile)) { + Optional manifestEntry = zipFile.stream() + .filter(entry -> entry.getName().contains("manifest.json")) + .findFirst(); + if (manifestEntry.isPresent()) { + ResourcePackManifest manifest = FileUtils.loadJson(zipFile.getInputStream(manifestEntry.get()), ResourcePackManifest.class); + if (!uuids.first().equals(manifest.getHeader().getUuid())) { + return false; + } + Optional resourceUUID = manifest.getModules().stream() + .filter(module -> "resources".equals(module.getType())) + .findFirst() + .map(ResourcePackManifest.Module::getUuid); + return resourceUUID.isPresent() && uuids.second().equals(resourceUUID.get()); + } + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().debug("Cached player skull resource pack was invalid! The pack will be recreated."); + } + return false; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 54bbc68350d..49486dcdc78 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -22,6 +22,7 @@ * @author GeyserMC * @link https://github.com/GeyserMC/Geyser */ + package org.geysermc.geyser.registry.type; import lombok.Data; @@ -47,8 +48,8 @@ public class CustomSkull { private CustomBlockData customBlockData; - private static final String DIRECTION_PROPERTY = "davchoo:direction"; - private static final String TYPE_PROPERTY = "davchoo:type"; + private static final String DIRECTION_PROPERTY = "geyser_skull:direction"; + private static final String TYPE_PROPERTY = "geyser_skull:type"; private static final int[] ROTATIONS = {0, -90, 180, 90}; @@ -57,7 +58,7 @@ public CustomSkull(String skinHash) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .destroyTime(1.5f) - .materialInstances(Map.of("*", new MaterialInstance("davchoo." + skinHash + "_player_skin", "alpha_test", true, true))) + .materialInstances(Map.of("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true))) .lightFilter(0) .build(); @@ -67,7 +68,7 @@ public CustomSkull(String skinHash) { addWallPermutations(permutations); customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() - .name("player_head_" + skinHash) + .name("player_skull_" + skinHash) .components(components) .intProperty(DIRECTION_PROPERTY, IntStream.rangeClosed(0, 15).boxed().toList()) .intProperty(TYPE_PROPERTY, IntStream.rangeClosed(0, 2).boxed().toList()) @@ -106,7 +107,7 @@ public CustomBlockState getFloorBlockState(int floorRotation) { private void addDefaultPermutation(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .geometry("geometry.davchoo.player_head_hand") + .geometry("geometry.geyser.player_skull_hand") .rotation(new RotationComponent(0, 180, 0)) .build(); @@ -132,7 +133,7 @@ private void addFloorPermutations(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .aimCollision(box) .entityCollision(box) - .geometry("geometry.davchoo.player_head_floor_" + quadrantNames[i]) + .geometry("geometry.geyser.player_skull_floor_" + quadrantNames[i]) .rotation(rotation) .build(); @@ -158,7 +159,7 @@ private void addWallPermutations(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .aimCollision(box) .entityCollision(box) - .geometry("geometry.davchoo.player_head_wall") + .geometry("geometry.geyser.player_skull_wall") .rotation(rotation) .build(); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index 291790ed818..bd39143c409 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -82,6 +82,7 @@ public Skull putSkull(Vector3i position, String texturesProperty, int blockState Skull skull = skulls.computeIfAbsent(position, Skull::new); if (!texturesProperty.equals(skull.texturesProperty)) { skull.texturesProperty = texturesProperty; + skull.skinHash = null; try { SkinManager.GameProfileData gameProfileData = SkinManager.GameProfileData.loadFromJson(texturesProperty); if (gameProfileData != null && gameProfileData.skinUrl() != null) { @@ -89,14 +90,12 @@ public Skull putSkull(Vector3i position, String texturesProperty, int blockState skull.skinHash = skinUrl.substring(skinUrl.lastIndexOf('/') + 1); } else { session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + position + " Textures: " + texturesProperty); - skull.skinHash = null; } } catch (IOException e) { session.getGeyser().getLogger().debug("Player skull with invalid Skin tag: " + position + " Textures: " + texturesProperty); if (GeyserImpl.getInstance().getConfig().isDebugMode()) { e.printStackTrace(); } - skull.skinHash = null; } } skull.blockState = blockState; diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index 43cf30b4708..d6b16f6fd40 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -406,7 +406,7 @@ public static void storeEarGeometry(UUID playerID, boolean isSlim) { private static Skin supplySkin(UUID uuid, String textureUrl) { try { - byte[] skin = requestImage(textureUrl, null); + byte[] skin = requestImageData(textureUrl, null); return new Skin(uuid, textureUrl, skin, System.currentTimeMillis(), false, false); } catch (Exception ignored) {} // just ignore I guess @@ -416,7 +416,7 @@ private static Skin supplySkin(UUID uuid, String textureUrl) { private static Cape supplyCape(String capeUrl, CapeProvider provider) { byte[] cape = EMPTY_CAPE.getCapeData(); try { - cape = requestImage(capeUrl, provider); + cape = requestImageData(capeUrl, provider); } catch (Exception ignored) { } // just ignore I guess @@ -473,7 +473,7 @@ private static Skin supplyEars(Skin existingSkin, String earsUrl) { } @SuppressWarnings("ResultOfMethodCallIgnored") - private static byte[] requestImage(String imageUrl, CapeProvider provider) throws Exception { + public static BufferedImage requestImage(String imageUrl, CapeProvider provider) throws IOException { BufferedImage image = null; // First see if we have a cached file. We also update the modification stamp so we know when the file was last used @@ -533,6 +533,11 @@ private static byte[] requestImage(String imageUrl, CapeProvider provider) throw // TODO remove alpha channel } + return image; + } + + private static byte[] requestImageData(String imageUrl, CapeProvider provider) throws Exception { + BufferedImage image = requestImage(imageUrl, provider); byte[] data = bufferedImageToImageData(image); image.flush(); return data; diff --git a/core/src/main/resources/bedrock/skull_resource_pack/animations/disable.animation.json b/core/src/main/resources/bedrock/skull_resource_pack/animations/disable.animation.json new file mode 100644 index 00000000000..70a348409b9 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/animations/disable.animation.json @@ -0,0 +1,14 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.geyser.disable": { + "loop": true, + "override_previous_animation": true, + "bones": { + "root": { + "scale": 0 + } + } + } + } +} diff --git a/core/src/main/resources/bedrock/skull_resource_pack/animations/player_skull.animation.json b/core/src/main/resources/bedrock/skull_resource_pack/animations/player_skull.animation.json new file mode 100644 index 00000000000..6da4696650d --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/animations/player_skull.animation.json @@ -0,0 +1,80 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.geyser.player_skull.head": { + "loop": true, + "bones": { + "root_x": { + "position": [0, 15.95, 0], + "scale": [1.1875, 1.1875, 1.1875] + } + } + }, + "animation.geyser.player_skull.thirdperson_main_hand": { + "loop": true, + "bones": { + "root": { + "scale": [0.5, 0.5, 0.5], + "position": [0, 12, -4] + }, + "root_x": { + "rotation": [45, 0, 0] + }, + "root_y": { + "rotation": [0, 135, 0] + } + } + }, + "animation.geyser.player_skull.thirdperson_off_hand": { + "loop": true, + "bones": { + "root": { + "scale": [0.5, 0.5, 0.5], + "position": [0, 12, -4] + }, + "root_x": { + "rotation": [45, 0, 0] + }, + "root_y": { + "rotation": [0, -135, 0] + } + } + }, + "animation.geyser.player_skull.firstperson_main_hand": { + "loop": true, + "bones": { + "root": { + "scale": [0.5, 0.5, 0.5], + "position": [2, 16, 4] + }, + "root_x": { + "rotation": [180, 0, 0] + }, + "root_y": { + "rotation": [0, 135, 0] + }, + "root_z": { + "rotation": [45, 0, 0] + } + } + }, + "animation.geyser.player_skull.firstperson_off_hand": { + "loop": true, + "bones": { + "root": { + "scale": [0.5, 0.5, 0.5], + "position": [2, 16, 4] + }, + "root_x": { + "rotation": [180, 0, 0] + }, + "root_y": { + "rotation": [0, 135, 0] + }, + "root_z": { + "rotation": [45, 0, 0] + } + } + } + } +} diff --git a/core/src/main/resources/bedrock/skull_resource_pack/attachables/template_attachable.json b/core/src/main/resources/bedrock/skull_resource_pack/attachables/template_attachable.json new file mode 100644 index 00000000000..16913819144 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/attachables/template_attachable.json @@ -0,0 +1,57 @@ +{ + "format_version": "1.10.0", + "minecraft:attachable": { + "description": { + "identifier": "${identifier}", + "materials": { + "default": "entity_alphatest", + "enchanted": "entity_alphatest" + }, + "textures": { + "default": "textures/blocks/${texture}", + "enchanted": "textures/misc/enchanted_item_glint" + }, + "geometry": { + "default": "geometry.geyser.player_skull" + }, + "scripts": { + "pre_animation": [ + "v.main_hand = c.item_slot == 'main_hand';", + "v.off_hand = c.item_slot == 'off_hand';", + "v.head = c.item_slot == 'head';" + ], + "animate": [ + { + "thirdperson_main_hand": "v.main_hand && !c.is_first_person" + }, + { + "thirdperson_off_hand": "v.off_hand && !c.is_first_person" + }, + { + "thirdperson_head": "v.head && !c.is_first_person" + }, + { + "firstperson_main_hand": "v.main_hand && c.is_first_person" + }, + { + "firstperson_off_hand": "v.off_hand && c.is_first_person" + }, + { + "firstperson_head": "v.head && c.is_first_person || query.is_owner_identifier_any('minecraft:player')" + } + ] + }, + "animations": { + "thirdperson_main_hand": "animation.geyser.player_skull.thirdperson_main_hand", + "thirdperson_off_hand": "animation.geyser.player_skull.thirdperson_off_hand", + "thirdperson_head": "animation.geyser.player_skull.head", + "firstperson_main_hand": "animation.geyser.player_skull.firstperson_main_hand", + "firstperson_off_hand": "animation.geyser.player_skull.firstperson_off_hand", + "firstperson_head": "animation.geyser.disable" + }, + "render_controllers": [ + "controller.render.item_default" + ] + } + } +} diff --git a/core/src/main/resources/bedrock/skull_resource_pack/manifest.json b/core/src/main/resources/bedrock/skull_resource_pack/manifest.json new file mode 100644 index 00000000000..a7a6f9c1c56 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/manifest.json @@ -0,0 +1,17 @@ +{ + "format_version": 2, + "header": { + "name": "Geyser Player Skull Resource Pack", + "description": "Auto-generated resource pack to support player skulls as custom blocks", + "uuid": "${uuid1}", + "version": [1, 0, 0], + "min_engine_version": [1, 16, 0] + }, + "modules": [ + { + "type": "resources", + "uuid": "${uuid2}", + "version": [1, 0, 0] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json new file mode 100644 index 00000000000..2681b406f3d --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json @@ -0,0 +1,50 @@ +{ + "format_version": "1.16.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "root", + "binding": "c.item_slot == 'head' ? 'head' : q.item_slot_to_bone_name(c.item_slot)", + "pivot": [0, 8, 0] + }, + { + "name": "root_x", + "parent": "root", + "pivot": [0, 8, 0] + }, + { + "name": "root_y", + "parent": "root_x", + "pivot": [0, 8, 0] + }, + { + "name": "root_z", + "parent": "root_y", + "pivot": [0, 8, 0] + }, + { + "name": "player_skull", + "parent": "root_z", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "player_skull_hat", + "parent": "player_skull", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.25} + ] + } + ] + } + ] +} diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json new file mode 100644 index 00000000000..743236a5d2f --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json @@ -0,0 +1,29 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_floor_a", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json new file mode 100644 index 00000000000..0bbe1c1f653 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json @@ -0,0 +1,30 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_floor_b", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "rotation": [0, 22.5, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json new file mode 100644 index 00000000000..c633977abe4 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json @@ -0,0 +1,30 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_floor_c", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "rotation": [0, 45, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json new file mode 100644 index 00000000000..7436944e774 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json @@ -0,0 +1,30 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_floor_d", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "rotation": [0, 67.5, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json new file mode 100644 index 00000000000..6ad5bea1b28 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json @@ -0,0 +1,29 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_hand", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json new file mode 100644 index 00000000000..5c39733dd74 --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json @@ -0,0 +1,29 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.geyser.player_skull_wall", + "texture_width": 64, + "texture_height": 64 + }, + "bones": [ + { + "name": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [0, 0]} + ] + }, + { + "name": "hat", + "parent": "head", + "pivot": [0, 24, 0], + "cubes": [ + {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png b/core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f64fdce4b33f39466c03336dec679c025d4fe9e4 GIT binary patch literal 36264 zcmV*2KzF~1P)YR(7BM)$esxz4z+XtNXv_ z{LeY}9OuSA|1_p#N~Yw{LQnJsOv#j-%;KEr3wW){qJ@hRyNY3V2+|aSq$L3hIg-)) zjG{~kLiInDGIStEU0{F=?cY5%HpWlr#lMDR3LwW=rkydraU|VxjnmjX$2nv11^YNw z?0DjPxL(62Y(zeN<1OLloY$u zL;Ic%_U>Ng9O&7I{@%yJd^UfKzUpg6rU3FPq@|_R$#&2Clh~|9SME=>ym^GOy6Qle zlK^mt0WK%MFD)uw>Krd|o11IuKs5}kk?LbH&=14~?pLi|9_eX*Wxzjya+ zdm!lV-S!H;`fF0A0CJepdfp{B_bs^W9}ZADhX{ZQ0zoAtt-%2ykkt`92?&vyG+8tJ zG0jp73TmHB2F77(6}_tjS_b#unc4R2ck*i|RYrz}kI9WZg=GpLlcc`Avo+f^`(5R(Wq+Pa zG%gTQKrlP795Qb45CTCYs5IN^L|-$ACuo%_kj91BovZs1`%Fqu!nB5}74^O}IGkXT z5e?cJ*DECf5fToOXe*39TtC=z>)5&{@0c>fj7$Ntx_4K&br{7^(mx6hi4Fd$`^Q z5)^a-04YdS3rQj;s1fy?Sj0?zPi@tE3gpT(H2VUK5(qBA2mx2uB#ib_rlUhdW&XZr zKY8HZUw`ws{s@p>W_@9cW@Aj7oF78rW)(t3gUE07&GlveUjgH?_yAnVwqpLxtVX zB8+fpkB`m?vlUh==xa8gL%IDtb$x0-`x!*oYY~x3QlCSs=T#ykVS~x`8#|U?@ur|$ zD9eG~^(XAdIl=Op)*$Wk7cJPk{HEWHl-+r55%9~@m?Csy+(HdRPNf}BRs%2!WqwsP zK$Q}h*9DVR4q_}Rq631`L3JS3ikjIYO%rJ)bsbf6D$*Pi;w3etpB+9?e<@L*aXBDu zoIV0_oy+%mkNxZ&rQOdz_NqVR6qDDa2C2)`(bBx-pV@WJwLdAAX@^q+5?KlonDDW4cfGaO3MrPz5Bq^D}Qrjcm33q*OUh7 zm_2`1|LflR`+-!;b!u=qWr}pxffEoo9B_o4jn!6h0X0Kg&7ieMWV3SvAR1cjqBKWn zJxDf2QR7Uq*D=TRQ1~8kpy< z(sZG9dD&|Vy>ZYGYX%x(Z(cK+#(pP8;5%SJ^Q?EqW-VBj3bGrE!$YUFHhIkegv^+K z)sBnaa$n9%&Qs650!4a^Y2M+41T-My1Gk3E!UBU@vdb)hh~g@>@dajPb7d~68CkIs z#Z8ovM9b2cLZLCi)c<ktqIu=;se1Aq_)nCc?~Vn7fYv(2&Jq1H?i zQrhdc8b?^Oj+*NYV$x)|R5i&s*Rk_~b~h`Hqj1F>3MV0frn>oJ{*sS$&s#W?4eVQ2 z$c>Gjz@PV+$!h{2q+`Yf{g=G`t`e6S^;``)uSAi_GO!96_wYpCB}AMd^7zyS;mjsv z*2IDxi4;{}XmV}eP#}qwtX8rEReP%x7z8!^#14KZG$&WDD-NUh4UP5zfvaAVYCooV zh~hX#GcW@r%TGejIuz)*+gO=_LYS=rvv7=d2;$@4LtlRlCyAUAlGzvyqaZ}Wb0j?9 zfv3JoI=$3cbnZJ#yS6_la-#>1*Kc~f6S(3eyra2_73mfw)TYl(8owl>-8W` z`}C!K7vA*aihyUlONOyJ0YyB=wCCqV$+C7U?0}Kh^iaf{D>$eDB-AKosL&9?C8&5p z17rLoBwR`n6B1ki^~6jpo<|V7 z_|pGa*3f?4n&1B5?Z@N?JpppsYLL3NX*2d*^6tmW9I5IrY`3v8)BJ-@_V`%Qvn-L| z)C^|zP+CH1gwO@bafyN-YWqF#te4Bq);a=jO%+9sV-V7O~i~j!);`I0{^Kc z>f#V7?-5@KjcMqbXWu8>Nr18jo1Sc{K271XgS2SaL0y z2`q|GfQ1T-5(ov{fWRpUt+DhYG+D=7sUf8qlvZ&iLLxMnv?@f7cOtiwG`74Ne9X+& zn#c;PDTIVqrbreXO`N0IniGLg4R*y@nDKIHUO`CJa|G)EP}dRxNn1Y*TI)o~l2P(v zHQ7;E(747-(;A8rR1)U3Py^bYPhGETIf@vM)hJ%%Q-Tx)T&*#Pw!@V+@sw5}fX4_j zgd*+$DUTun3SSa<5{NTnt)=QS(`U{<>+Q6Vy?bbI;FQf0KJ7S2Q$r)l7u|GAc{Fge zX~L}$O;KI3S0O;btsqu$3@NoXf55n&{mTh6SQIFfozFEmq&78(O+u6rPpMrA2x|_7 zCiLzFMnNkc!wI(jZGdy-|*&`WOXDH?Vw1TK8=f zd{qD2V4sNM84xzZ*l-m>ZQ^8PzuAlc8D+180=~zzxdn@RYPV9GSAfq5(wu_nq)P=H zb1GMJeS+qWjzu%y@ty}N-~ZM{J9~Eb9aMs6miV zbCk4sVoe=l>~hY8wx=Z#pv3t9l|3#kFlZD6xA|2(lnCe{Le(-#Cm|YK6-S~NC5yF+mt;-qF+E6D@Qtda;gnm4UQR*0p z;N0p-yGBI_L(Zik>00|piK-)`5>~Z~+PE(Y`V*~95)MJ!G2ozfUuMDK*ufQ2HvLT> z{`l&9e)gjqHgDdv?pXcq$4X8sfHXI^_#I0w{OseqbJd)v7cCYd(6f2qKo4x92qvYV z)XcgrH8Zh8qiQ2&#=@MBKznt7AP|#^E0_-|cxA{qN1#kFMUu5YS@8gq)1u8I zhhQvif_z#i(ar#9!Y@pWqMDRw2Cy3NOnr{hYM#jr(|J~EHn*uQCYQ>%f|WLi)}mAs zA#1i1d=-R%QWI|>A=iYzAx7Ydi8)(JlX#LKp-eIBprCd@DWFgrsdpW1Gj`nY?)Tk^ zpZ(|6n>TOTcx*?((UsE*AZK6shW|atWxFQd5|d0HG9fQXfP*o>rwoLc0jEegrQ?2! z>N+V+l#TsOn3?I-YsHGtW>yI`+A7jiHfUJ#xp4sK!EUsPuv$WmB1Xo&P10sWavgKA zs}~gyp}IDfKCRXa4j>$6QrSbH-zQ8nc5Q+w?czuVDFp&@geA13M43zdUCWB7ha5C; z(3o&cVx~eMm!OW}SqZCjShSvuYTW93t27g{gN!iRe$%_&v-aS>ePwpvz`)*D_e&o? zIc)&a+1b@yH*Myp#tOXZjj0tGX%wPZ2U(_XXEuvYS1z#$HZlt@diyQZ%>>zNcO%s7M)ESk+Z`+$xB2C^ZqS zP=X-^l+b=AHRq}+*&N*QG&7&DbxtzvJDem-N?>^EO|`4#V3zkdBsa;HGmuG0n}%`;|y%xBQE zaEwxfay;s+2Ds7|%8XI~P=nj0Kup=!K10f5@Fy*qO-%CKL=p;tKq}56kS&Bd2I1-% z(-3X-870n95|e6NaaltS$RSGtRWUQcJe1?ltz&@FaW-J+w;6$43S(+f5hdl?On`~! zq~M6B7-AtHV~){I!uZJ|o}-RSiV#W0kS0c}5*tW#$asMkqdmxkHC#3h2~v~QPsS-7 zu73Ts-+y7-3#*2P51#bv-cJjFESR_8!uqC$d5T6Rm_W0u2I=_woEY%3@cs*D&1rEjvfi{2QE``IT)=0iR2M;95(FNE+Dam+zq)NDH zRN_Rwh$D?xEHO{1p1~P>>rz!FOHl&((85=Y2l=2)GV6Yh?n9)3D5;vDjmo_A7zh`r zI3`p7;YX5yNZ2jDX9wR6hID|tH=axu&M8B@i;V^1qW|0Lotq#6kH)L>NnNT+cq``&odl%|R?f>43*5a}}10!!K=5mi81l&c9NSqZ^B zhP0H3`wSH|(1qbbTI;BLXYWsfQSH{HFp+$%F|0Pz1BejJnLGCjk3O>Uv!#6Dohz0t zOZ6Vue^I)=VV)3T@r>!y7ZXb76UGwKoB|`GBm0ldXgIoZS^#AJqQ&noz|4RNhhS+- z9J@v^WtUy? zHOj+}tXsGC=B4K>eJr0HyH^My@44&FP;GtJxvIIjZTZOXz~Jh2&wlG@{PxFMPI-X5 z`Au(mA1G_~wdw{~NYUa^G&IMmzjNei(F2ECK0*vPiL`|&Fe0nLI#jI|6C{+3Y48k` z0u3(3Ihs>S8!?@35m9h1Y+%h+Ihjz$iqY`_ZFz)aIfZLeJJjs16aOqv(m^+3G*sGS zsBiDJ68)vD)3Ne@ww-ocmMizYdm!E zkBp2yG;79m?C9A`hK3KmM7rq7Bd0V#GU+r~vh2LSFQ`Fee^lQkXpK22aWi9@nU`wb z;979NE{fuo0FS3>kx9>u28pbrGMAW{av%~6aW%VJ(@c|d`~Sf}Vz|PqC3>RKqzJAy zTNpLRm~|9JD>%l4((h4|6`S-Zntg_(OU=WfdLTN)0BNKmv}RD|Pt2j(3#WKO%4M1t zDUbyM2tuL1LnRb2`HUtDHyvY0yA<_4Lz{0tt0~S5L6@?|gpztfaLJ455t&53t3C%t zyH_k*`paM6e#eq@GPPSBGyjaagiu1_u{gpoL^hW@>A`_h9UwEhx|T_Yb-0pf?V$-I z1zIRYF&v-mn2mKroH)u|WH#|g3RH8DqF*`MN4*jKk})RHA(-JJmJ7IcwuaSG*)Y_R zb>dJRRMcz9l}SfPH5EgVd8#yp8x4A6#wb&*EA65^#*lP~)>y7J1q}x=yeVcuu6{ga zKKj-prv~yF^*%b{#{XIp5~CG?fwDkRNN{dI8gKzm0m%d{^l=S7MZFhM=^C#TNR?pM z){v+^qBQ?7+(Rg7C6xKv(LrfC<~eV>{q8&eNxgsj-6pyBqUGn4J-vJ7{=QRV@!=^A zkYs(+Ty3Vtj9!n-?@sL*v#mX&{f3wF|uR0|(M zJgMS2jS}(fRu>GdPJcGbcGCHjZ7yo2NHr+AsIjl@jO{Tq>r3m2;+EX2!95yC4G`CA zEm%!sT(d-*LerBjx>K%pAVfC28_XOOOevE+yBWsa`9DQfr*{w1YD;t~SBc zV2?9`gljW!m1)JHxknwRnv-b4E`%oV%H&Egf(DOjkhydsDCDF%*uT2{j&mH>+dgmZ zJXRPRz5dKI&%E4Y^jgM9huZzTvloAKDfI>&4_^G+jJJ!Y8U;UEw~UFc(vD{ z9t-O|wD=4u*SxMsyaJ|r9&w^jT963CJ=C_s1u9(eFXO3Gz*Z((%({}R-wWgSGPWBk(}H#wyNa-gq& z_gQ58hn*bYBNKjLf_;1T{NUHO-S!vxY&L)OWtY<#-7~63xSq4}={3*%>y4e$eq;_d z1E`jKMq0`tn6M5DI!0pNJG0(HcXHxwb)q~k%OgCi71W@nk)|Ny0X0I#i(J>Hr;wWZ zaR~)DpK5L4Y3~<7+`6x$Ym11sus~57qarCr%Ulz91*qsd=-jiYYP~e|h@)O`E1?gL1hP6iP+$tKa>$(mkz9A8@LfQ-_jM8X()Z zZ++l;Tw5TZiCVrf!LuS|xp&|GJ65e;_3cNVc;cSu*kAniH&yljnNR#B+ugG#Tz1Ym z*VGbHH4}@P^D#2+y`f~Bv&g9Cfix)@%$jf}%au$>yU@JCiQKp5eOa^as+uuhQ-H2^ zE27wp0O~xdUCc2$&V|UhvaDX4&PJ97K-xqLDF%xsV>c0}RZm>B?uC+ZPhV}|R9){G z)4ML7F|A|csx|9=Rtn|!THD&Ux3{&io;`cY`COjw+1HCb`+84#U_^4tmmY0xX_%Y!TCR} zCFiwfhBl+ZaMQZyo?TOy$rR?!n)Ro?>mj4F<}Fdb4pXpQYEPMZQT?xG`=m$5 zQ>+f5`6e%8QKnEOl;Fx#sz{Ur!1sZ;M>PPHc@`1;aqV+x8OjT6J0Q@I1TqOA=9%kp ztX4zK=X2|90C_Qi7ea_#d-tu}zGvS*?cB5Ho=2W|{IqLNeaZtQl9rZMXUT#Evkwdo z4Q$xF@vzrGcXv+1MdzP?*%cRG_|T!IJt+m>^!y7y-LQGf*ZKzs*Isy3$U@5qpN|TK0%O*1L=ez>Ph#=>v(V>_}_f> z-&btkwQJ20AAFL_DQ#la%D_N>c;7(()+0S`!Q3-0xbmX&e^t9QLQRlCD0Zz{yY~CJ zZ0;vP$agN7JC7_mbHU%8y>P+*KrJ(n#u0#Mtu{3k3R^Zb;Xu7C=9rS0PqE%F+Hda z=qaF-$`bpBIR-|6J%b^}iW0Ni8Rj&bQOI=p-*Hb^nb(+7fz+VlS_?^R-5+9CKSwDv zQT^V70(%cq%xYz5uQTUUgIfWEQCVHDL8$?k5~Y1|MPR64UI;~qQos;$hJn8QPu}{6 z-@W_H*|Xk$!P0Zy)Y;MY`h@Q#Cx5@mGMX>0x&7Yz{_z<6L?>Kc(*U{l$}8WYzyU*i z3s0?G_rrTvKKxbRk3Fx(!$1G~*Q!?6wU=LVlVgJeqLwrZHN*3wkaASlVsKdtBg83% z5(8O|kvxzs5sc;p@)e1EAkjZ&>v2JvbP!>JdR&=L%A5+#|HTT>GsLlHkYg|>G)Mxy zKFe&&OzHq%|A>I^g-H1X9m;G<5~O29n_H7jz;Yn5V<5!vnAA&hg#}f8f}*3L^Nn+7 z&$;IAhaULB-48wV1GWEI3(oAKj4pB+O)WWVaf(RMMhMdCy;LgQ*FSV{S1cA^dC~Io z$?4#=nk=trfZYAygLgF6)y?%|e)$JK|HW4)t(BheWA8oCe>WxMa|#(@$b)h@c;t@z z@4u}Qir?M0@}XVPeyz>Tsb!1L`rwsUUi&wckc{t`^l~@GK}QJ!A>cSbJ~Sqj(1AN+ zM(J`s!p!p9`Z%`qhT0q|N1)N~5tIX}bF5;X=1AHkbSeZR1z<2MOw^qbB;y24X{z~& zF&ibaMUJ7Y(8rHt)$1lRc_7KrkZ^F_)z|!N{f6i22L}hr>icZivUzWJ=d`_7U3NKb zY-p-+iyK31cBY+3WT?eP*oSx6krO6=_8=p7cwmyI_}&G?EN zRX9PhM8G+(R)mC3GiSQ=r(fI00B z=65*gY9e^@$%j9G+ns;-Ka;=Hyg6r(bSj0;_6~hA#mkgwx^??DdD~roIOU_}hmzAC zAT2Ge&KqvH@e@z4dg9g%TQ>I`@6Z2#Kl|l%72z#8n3vezA7ak{M^_WYrDuAE50oW# z4sz`7<62vkAT^mTN~tS@@G?PBP=uU7aDk8qrXdcjgP^A0A=TxJDB`{WiX!VNk09<6 z#9~APQeo?0UZ5DrDlbX;1k+m_Ea-4By_q28%brjD&(F;`-uLQcl+)V8nzQ86cinLL z1z!wG<^By@Hh=Y%oTDyNN4q;aXOCsaMtXXC2aojlU;Xyy?|tXn{`ApgNHZ;Iifln( z|ER#->nq3>B}!64@s%<)xnf0~ZA(F2Tc?)-%oRHMF$e$=ItWl1?`0xQ{VQr?EF|Oz zLxM2oAQ_X89??LkRAf!ykRa(16a%BBoJmB*by(N*uC7GS-o1raa?egDIb{LT+}z@4 z(#?xXW!lox)#a{#>h3$D_v$ju-EG}}_U-d7Y`CtqiH1M_*^l0Or0371)2Z{XxbCx^ z^A>%AGN-=IrJ#k8XP$lLslU5#|rGskUb`X(tI^ zqApG~anB@)4k%_4RBI7szU4|1xgycq7d6Nwgl1CdZUE08>3uuhQj$!ik6Nx3XjND8#iy-e59Xq(N)*~bz=5e z|9xjk>ZMgpzCdTZ{@jbMzV26`^#8fB@)d#*%5(}5SxbJ5p|KvA*6bUOLO2?vql?$|?BmFmsjbXD-fUABqlN@^pmVeu z5){pK6b(s&wmKIvSA-3*@TpK@TREgR9xOPGny}|2^2Ha^2MKvftQkMna!LRsozA!` z&OP_NnTB)!a@Y2zB|rVXgj2_{@LY+p-upiJF4oeytb&Z= z;JJ;@-gl&*clM%1Gg{}J^%vW60)5#~bAr(XwJ8@4F1q5H|3joK-uuvl|8}_Nynp3` z-#UBo@{gze#&hDfMpd2z#mHP@<4G&NC(+T&K$!q_q^-5ZAwq`kR)T?Sh;oQ(pFv=} zr%2LgnsYR!DO&3orqz?|t{rQ>7AK|e_J+Ji2onxjH|s-d@lcbqPFo-$M_sJlylHTfh2i=Uwvp@1+_TNFf9%OAtYAL_}6KNHWRb zd8Xc$NpmN*hMWL%Br-{g{i78VxTEG+SGr&hftMmk#}qgyI_nt*dRBkvyhU^Gs8lLE zsOZKhkwLXbJ@)kO{dMn_yZ&pT!alI%`s>bq@S*#+uiyCGH==7+;P~{Pf8uL7j*Ca~ za?Snst>4LFLw9Ug{qSkkYVD=uqzA~1?(Rj8?r8Y0&+ROOcL=o31(wfu&{!I{<7Yqp z!57p%sbmT_-SEL5|L#_zzfZoagr7Q8r$;QZ7;03eJqRd8>c@7^dCu2yK?34kMz7JyPWhb*m`oJWll!|SIw`-W$iJZ80r7^EkFI?J8Jit*1h7d z8X6^%O%lTm1=QC`y}mmL#SxoV-P5|5<1oG6S_kN)L^0sVbBW=yz(6s?-fRT}6{#zW zgoMq#?wV`9bhzh#rGIZ%SRqikaRb zN~hR`FA3_RG0o7D0qWCA!e(~GiRKf9TWXJB^J8t{sPj6l_lNGuy z4UwN-fDC|#?{&NK#cS{Q)PMQRZ`)d0X1(eUI*H_@2gttFEC1K~&xrr>^=Rk9zW90D-;SZBBMl_ z0&ICj){7xVD;z^5j*&p<^&iWYobx|t&zLd$aLylaxhmmMWMUL4Lctsd)N$a(2+}Uo zgWo3(94SGiu8CraxM?4)dv3(-by2DTIYon{WE7PyY9$-G0_Q%do7(3uIf|M)aCOGOS zM_idllp*DDBs~ewhpzVM5TP@JsqJ4VY#+qh;tC2paq6HU#n7R&hewfO!L1`>V}18L zaQ`v!JUz4anXfq`eRrJO;lo{6!ok*}e*NG9iEn>bI+t8}%^hbgTzJm0`0V2?Cp|!3 zP8Ka#(88H});TRPOlvfa$~)^lEU0r)967k^+0C1teI@5@^5t4J&>G^7Hr1jsI=byx z+|gSlqk%9$2_zcZ+Ru5@jW>RwqpkfV&#T^Jf}a&v;PZio1Vb{z(Ujuor~}&TJpDaV zO2c@}6jOjH^rjh!sY0PUTSdYcP#2?UPE&Ly7}72YITwHZ=o3#=j)qxvC>a|Yx7_RA{j@URtHjWk|&sI+9Eme`DZ}NGW!%Uc2U)Cl792zxw|!YVa_x zGlu=sM=;hlZ8F6QWB&yFrqEw%ROEryzt&GyMBH7sNLk3ku__c`Bjr6 zx1ZJIqb=iMThlOB%V9JvE92pTG0d7f_g!7nx?WnPo&s{xyLn$uHm-YS_`_GdVMkBG zpFJ&+KzD*^)8y{E@BDNvkv~#-Zu6#RZl z3KT=8m)MpBF!!u;{%Yl2cYN#o^Ohet@0_JoTgZ=jPClQ%9?Y3jC<`515k%^A^in7h zkP3Lk19O;O|G}tfkQu0B8Q=t_TxqE!biS77dPq7U;t8NRY08Gi9PqHjf3s@!>dH~O z$uA?L*=*_22k!skIhSAa$ zX$_)e+v=5{SkdHRZqh-LQVb0a-ha=74}R~}o_F)c=YE-TqoU3Z8j~)XVveq6NNnBP zEC>2I!JZ;VPd>!{Vu=1S+__7a-@bk4juzK*nF2;U5pxgp_4%o~x-X9e5`#sK!HU3e znPV{E7!d*^W#b_`mIGU0rsMVLujPf3Xehk#Lzl*^HHO<=Gs&a|l|xmdNc zr)O}_zT?-D{J}>a{7I7|Us&AYVOqThNtGs*a2={O?BYd>rXRP9IR#0yL7OtQT+?GDF9foJ;s6Kw0*-w`VrxLK zufVad7(zC+pOcw3^Oh%`ewqyo4vL+-ck@g`!@s-f`o+V6#NHCeo_vV@02t*C`U403 zp}=4vz>s={6_)Cp=hgZr(HD1j0wiMxa;|?TaJ5G!_AwX z`_Y_?gM}?|3O2D9luv;u zbKRzZ+BF^R38Kv_mjOl2?|x?8y5MNtgTs|aAA9r{=PzCQ#q*kDtT!9#bt!Ywt`1=C z>e;*Fcwf)a6gF@9g(vzNj*9dT4vrn|bMD%?AzmnPJYV40#0mC=Lig+#B@{(RLQrY? zsWYMf52(~jYjwf7kRZpQwTU`!S(r+P3MloCb@94Xcg`vY;+9oUJy|?a_v!~f|HT&$ z?BBm;ddkJ@w1eW{fhT_V+go3k&5j*+jdnEUv@o%br9Aw|BmcZ?$=QEaVuU3f)0;zy zpcCt!DC$nQX-+e$UtuT_(}uxOd?FASRGO#4F{-m~P5Lg^?UikRb3!4Rgm4G~hw9je z0!4uWS=%tQ5DGYs0tH3dfhOuiic%o(yInm!;R(7;TK?_3-@X2(8{Y7akRO zbz3*abXvMAjhCy@XS%0|t4yFcMSF@OS?_=)sLslDIYXlCz^hQW6{?ras)rviFv}kN zxan1>P^Q2VQi1}2ZAF1$E>UsKdJ&(Rit9qkZBIV+Wd20or_)iU0CJe})KgD=QE8Bd zq=!}_k&HPyPYN|1{X8n+x~BAK)WAolqI(208X1}!7#L-!2SG#8MXJaUFEGT%82mf| z3!wvrG2ak=K};}Fn^u%)F4J3)DA?9PE~8p&g&|+N<%O-MT~))AL8bt5nDW3w5B@qB zJ@|N?OVF5dQO_u1ai*6RMm1|W%*^j8^T(m4aGUK%sH7!BFuRi=l>z*iL_!dx0|$wK zARaKdl);G+G_=SGtrrwXN}<5MK;l3kFcO+~O$SDY?G&AD1Wp=oT)=Z3y;9JLOYk~@ zuC$~3DpE4u&?fR`4RMKKlVV>5=Fs545m#-QlEafJfE_lhs(bEye-lI4>}dq4RtZtZk#8UFHQkb!T+plYN=~oxa?~K9zk9b6a_)( zm>wXbMTxj4G#Erpw^(9(3r20K9sQ7)-7FC_8uxA7Wje;;9-_@asU&rQYITM%WeQqL z5R@z7BSS+&uP8V;Z_XKH=-@$ltk#X34l)IhS0K0k`j)T1Eta^fdB*&k3j!EbW{(eu zyu@e`XwAI%7-_+xK;zl&QP9O7Oo8dRQ)8A*0*Egqa%I4ktlB-wmex||eR|)4{YOO5 zn;IJN7a#pt-19w$hoQLp{`-rMt$Om5k69cGnKH3nq5SG6KX_Y1?%*@^K0&=hbSnav zQr+;T5=w+T>H#t?vgU>>)5#}9&rsAh3^gkU4=qZAL@lZ6Dbq=d>bPgttlfPi*PThH z$%o$mXPHKy|O!Tddn0*UWE)l`^=X+9g5}zLt1Hp7~pb( ze9kuUoYV;PQ2m*7*IQybQt3i*QS~_6^pkM2rDFuCQHprM#77(h# zonvyONQr_^GFYVT&Pj#I0VmP3NCK#E-9v0Mnk zlgZGfXD{(x&-VgJ5@E=FM#x`}!MVCz<~mKKPBOSINi@WrTU6o@t&l+amz?2||aUoRjd%0^GWLBL>W>XfYZ@Qj?1%LEvx#!K4O62D+(c#<}c8oFVdcNbjE)!CcQiuekNOMVl zSfb>-fr11NDVQTbsetb=cn-_NJ@<7}0GTLL9ONj-f!;l<(~KZPiH?D!ghWe>f)p8& z6uPFB0tO3-Hk~x-4h=w9K+HC@QFFCVNI=ws8`4f}t2M1jN)*L0u3I^aitfw)aYkut zBAN2jnYwr~m5!Fe7f3SZh;R;Vcy5Uq^LTp-4rr3n{5uc-5KiO`lM zs)Q0_fvNo1Utk!@bM%2=KnUA!grE{Qh>B><>N>S+SRD(Q0?1JiF44ynKp24&2n00| z4?hIbzC_6bij->;DJzJs?<+X;Ko?SKUE?Cpm^gid?{S4dH^2T3ZN4;7Mtk z^f*R^DQNEQ+0}P~ZsAEQQvf*%A|+S!0v=3DWkSajOoVmQLg!#9ULsNP)Sza%FS&Nk_kfaWbI@w(dx4 zQ%KaXZ*U}dEJVnePLW4sR#5{8P(#QgU$5gxOzWl~LlVvPRIg`;E=x+Z3)$sBe?YK3 zulR@2NMXgaYN+Vy5)=WEy1bCOPM-m>B+wA2NV%k%u0Jw5@`n?1_fB4!0?1Ji&Si<( zfS;pAB_{~EL^%|?x?sXIlG3hT1q7E7Wb`UQi4j8etggUCiPVFadJ;?ljhU#rO9-3{ zflC~{mPDOfYY*LJis&`#{UwPJyZBc~L;iIy6DoA6BHKAZKa!qAgGcIf)Mx)kV!z-(qaxZKwuPy$~)HI;B@GRMIYpqz^%a3uUfh!SU-bL2y450o-{JQqkh1PRxyKW8tI5+6yzBN&bg zxCM--#cQvWL~|X%QilK;3gH5y6^R`Mj)Nfqbxe7nMn=%e2-?>M1F=T26c0?5%2LY#6akq;z>LW%w?#~57rOd@b4hAG8CNif1gG*$=_jM?m7 ziHv$sf)taG)R-Jdrb3t-L^XB6J$JsO`{xn z38WZ7hYQT`DW>}bb&Ozm-~NAK1piPd6y?_K+fK~AJIQ4VAV){yYWmGeQ?#K(9E1s? z39=gPj1ldAEeNU$V7o;QE+rB^FeWG(m8m66>W3ofgpdgftRkne(lBvGbfZ!tnbrzw z-_Y*U7}p)9P^UgCkT@s^W~Ueqh7$D*=x_+;xD-u{V07Q!9}n&C`=al8@>jS0Zi;)n zgiHbCCsd$7fSB0XQ#;ZX;==g(RLKnDJJfols!U07NR3fq3e5>J4nZt1 zp$?BkOLZmc9D=k%s(D+$cpevOU$g72q>bt~#|YA)0twJe3F?Rx_dfo_Ukn}`!q)BE zroiz>WC|chL0pH<4kSU?VWi>$7x(jpI$=%@pLLhANy^%B~Hc3|JWUq1fSs;7_Z4LXHo z3LvjgJV;+;M=nhjvr7xlt$Is--VzK~6c3S_6A)tSV8tX#u1SN3t>#Xm)rHJx8@1J| zY;Ce)*`}EciSdO~87_2N1W^%4dqiu9S_$p34kHjk!nQBb&(i|Bz+GkF0M^`l*N#Lf ze}!PEjptt#h!Lr7O(1c|-e{EM*WBLW!~j+5~i)XxLn@F=0UI z>dGjFn^e?~E2Rzwwm1aw%BUEA_*=BQfA8lmp(CH$v2`~NW&>cX(39$(z9xtzo`}y~ zbo)pUPL(mOktu*2rZhQp(N&FwXXh?%#@Z*>qjxZmu|f&M!$mY+dOfBIV2}yjHLAcB zKrE5=rCx%|1rSiBDI^@*g@@Q>e4G;fKet*zyaY%}$~5B!3<=YJN2j*u6)2?vN0Jg< zmQ=mzQG!-sf`N~GY8n}N5!X*p6&%_s(P`ueB0PQQEQ`ZquO)9?I4 z!^}B%%OxxRvgF0K9>?2z(#jM-4pW?6&;NbL@=n}w>%&;LbszGjO0{`T>)eGHkOIS0 zpy&fZph&rd>l2+0lGnWp2^?txd;vGfh9n~4c0EWWFBh>J0nzQ1TAg3u-{DvjiD zTkce88UpP#QygaPJ$GYp*LFN*tD(eVanxlJ=;&&~jM?4z@O!R+_%H9pV^40q_K~~p zT-Er7cQ+ns#m3W7rT}u7((V*5-@5L3JimJoxng<3du^9ojcuXHsVXXB9RtcS35Q5< zM`;K%Xrq?SktZrjDbX3Za$?H^SyOCIPI{gNw71N>C$&ixxqPWTuQKrfX+W00>Ijgq zT&R2b#TeK&UXP(v$mvJlfqtxib|>z*{c(Kyzr7Xjdh<1?@0!Mcw06qFg{h(qhbPHm z_Ogbgo9gN9M_p`UZMBZqT@F6|3}iiuJdv7HC=hTeQDy>xBGk$(QYMrbAI!3bZwMGK zR`lG~bjdx%T?=Qu&b)c%FkL3pz0}RzxZm! zI1X@$gA&^P8pSc95i2N=9HGecQv~rLfDEC@W$5gmgWh3+QbT~z`4W{FgN+wf`-!|1 z2az`AgqhX0)%}I_YH{lg>sbE~Iv@T44m`gHIWiY~-nAI>7qf%z6?~!hG^=lELS1ts z;&qJ>JcJY+BII~#@Ch``9lmLJ8~v%5>im-vdh<^LnF7emNK->2QqSD~KhAp7S=ha4 z2NxLEQNzWVZhb zshE#B|NRy`wKIUb;m5$b?}}7@KNWTLn6dmktbNa4VXSLrl^Alf`nD=uj%P4dthy1k z(R3j}LW!lDAI5nP{Rc{=3eH*7g`I1^g0a_KgA5N*bT4G>az7l`)hefw&)PQBLZ4^H z{(jW86SU6Azk781?ko50PJCn5tTTVSzkhJY@xA*ehfD!vlDI*o+s}_(Gc$?n8~5$K zZuVL2sr9Qipe_}!?sLvr)6rO;z>`1uCc>T_IAg(?Xx+9NiM~B>cmuO<3(6g z?nCnVpX01WU1&Y)9BgWyiR91Uhk4~5uvrcr$u;THpRog*aP_x7iTghK&lu^NTh$o0 z=!uqUo>k5DCI*4}9tuB8;N*b@Ie<%obr7Wj>YEL}NEe^S?#=>yc!(F{2>VM05K@AZ ziUvwpE`z!rLe>Z75=a)JV;OC`=sM?1`*&>plEdUv{kz#MB^KZ8I4mcHbh!{d7s7QN zR`9tz5IWwLP}inEedIL*5Qi7uQV4^&O~iXN*3tdMz|i0Xp4{d+m&AHr`23m8{dP>kWy$*5T)dN40>0Ql;`3`=6_wATF@GKlg;kpcdGNt#Gkl6p=EjaH( zH(>RGi$Lfeq-URr6>>Em9o~j`V-jPzB7B#jxiPJe&*jE&<@Z02JO1*UDAzSkNI=A- z|5*j-SVPgchoO)*-ZM#oT&We?W_=RpguO@vBN_x@JPq04A*fJvyCsO;3MA(mB!p7E z&5w?tTncdWqNVu1!v_$C0);?eV^2TYJ3QQQN#}~@#^j2v+j1D#RY4^X@LZ}>S+a!! zdizGO{e_?$490#kcfr!XJzX@;X%7$@6qn6j=>13A8Kout{RKLBu!Q~tdjluN_LN8B z>!@^hoegnC+rh!5;6)tRFj(ah)ViZ`xeAgoABng>;oOZ4Xu0wh?mHMBE0}yOhv?%o=>%di7sJCtxbbTr z#{(buTMT#2eeo9(5{=s^+O{xVL1n0oqnwf8NvZw4@nMR*6eu+>Msoin$ma_foxM!) zeRft0LF117ArHAjs5QX%{ii1*PMmBc%b9R^d`$U@&LOfeL}R@9D_6UPc?1;GcIbIu|XWVb@u> zOA;)tV*XDCJAY zj^W6cSC?c>i74bnDO1SeHaBHg2vpX%mZSvf=yYI59SgGoHK?(>DMA z?7at=WY={b_`iE!tX!RYx_ffK1P+k_1_&giTxaL+yGKjA;$!uZ+aD6P&ycRh?e@MZAw2)t4O%^`vIs6e%Ij1fYqb_umKqout&oB;ox$&R zuw`N!PI`+e@KIMUN|cfm9gc!orJDPWFJN+kVr~LozW+ELdE`9i=GS050)O|1rna9y z5r=-jAG$WH;Cq+r*2U_q&Hm0${^FKh_dT$ToTX7Kth~<&K}bQ1aCA6AsUR>r&(P9} zK(2_nQXNNTW^mV1f~{#nkcAtlAltx8Wc<&w2J0gP3Sav=v( z=a`#bz+2-^)C@xX-e3Bkk#|g@`{Ycu$5QShN}$*am1oe<7C;Qz7R9%c~3vODrW+Q*qN=sfww62k`9f0X(dSXlnv~6rt;e zWG&hq4?z%NX{m*C({;35PmM9qGUh~}(eg0A)Wp$K^H_+B3G9M?{L7z@^~j_8be)=~ zG+2fXOV^Ra2^eR+#D`QA+cHos=TR)!$mb;fF)=bZitW3`@Pl{n#--o=NtBX#N+#~L z89rLzRLOfN$MD`sKqMZGX=`W+iinN@UJE@q~e;dVR>4wY!b;GEHM z$m8p*F5pK>`%z~0hHGo;2}a9hOjd_zEM=Hndt>s zL#q}yTEF#*FNoJjHkAblx{V)g2c5T<3xj_Y8@YS0_L^!X|B=UzJ@CmpKfD8HF1je> zfl|T1K-B~{1Wp`V#d6}PI;Kb?Whv$W*ORw2K_cA<&M`1K1-Dwp{d0@hv+UwcVMvQ! z0_uh3Hribk&1{2X4I%1@Kr4w3M>kgG?{;|ztBVVG@`*EaoH^Sh?4%ofW09l=1Q%!Vp=}58soGP$ z>)Y`;mYXh2-6vck-(i{Z8pjwLDC5kTHcmWWQ#`|3g6B@0!;TyGe(dCv@h?Rhzx*04 zl~+tQje^jS%KX6Zjc}Hn@0|OJ@b&KQt$RM@dC@bv5UoxWPn6B>dr!`sdGFu-(Q%YY z7T$eV8C%A3oUg8; zc3}~RXV%a$99-aCtO|j}LZs@ROdFfj@X_E7{W+_wkko_h>i zBfzm$JC$6(a>q^*L3qH*spm!V!b+{dEhFH%(Hn^{JXC}pySOpOG2;n1n!sWN_=!M? zYhZ-|1YSs=%QX-mS0n_id?D5t^)jN>^f6e?!|Mhx3H&NAi?OyF#*fg?*x_XF?}F*-mNBMLHvCL0LRVANL4$^d9Ah+!`r_013lS> z5i3D)bPHeMY9k0kiN6{c7%tN9Ue|}6x8OJ?)w1ZOgE;VUGbVA$sN?x?p01f=2~v>>u-AOz!;Bve2v$O~bxh z_mkxd+%CG!Hk!>2iih7BV|*vG88B%xxB?h5H5{o4JXJHXEgxd>_*1C!aTE{Uh6n;% zxQCTzABG>rh@u!_AW*AyFfvjkiyC+Vd_STff??Z=ZYT<{dvGfr?_8i`C|C)~C4o{- z^{}v@f-m2D9Hyn1;tfMuRUOYgtD{nty5?fnLF1;gN5odH=l0{i46NW zzg2zq(y^s?zWHtC!s23w@&%OSONVV}X{0D~Snj%O8`@ri;Qq$GFpNgC#d_;2D(Js zDWFiU;Hkw041;6LHtBnH#$Z?mLO-H_K-Uk@Xu234tzcs31Qir|oi5sIEj;|_865uD z&tg?CY7%@uRTKE?f`A_gv?GC;rhvQUMwHvL@%)otW2Jlk2ed;CmGKFTmkcaE_cX#d zQdlF1QCn@JP_zl(NN^tnAwoYO#(AlrW}@Lhc@Iv8mjNEbOMAxlPL1J9Uw#f=;E^jU z6+~i^d;!?8Q($$4WB#%O+wrmMPOSRUla@6c;gtlL4rGO9Ks)e>Ij~FY94pLdkU>qgd|qU zLAm?w*cuX$?s^~>jIsV+KPB(5ZT$S+Vf?+30^T!_!`-7f+?F?RTh+!*B^$So4&u$j z72G|!1xJ_as0C3kN<|CKbYSF5_~ybaMq`etqC@5Dre&bh_E2xMscP8m#uymNV|;Q% zm5ulw&YhY?<&Fh;O)Mf#g!_G;}bA#1GRu* zV9!D9y!oxs>hsUApwpldeTkWBwKj#JZO2TlSV-k3NgUD!Qr1nF1sj*+mDEZI)az{= zd3qJq3P+`^qg2!>sc9MvmccMQ3RFh~9{P$IFQ2a5-w9XVKfhS}xf>>?j<)>hb>H{C zsTG8a#5sTI_ul8g5o07bw)RuLYR!9T(NM=EyH;3*b?sh>Unaz z28W6m8FkURg~QXRI6P<2|I33d_q6FJ^j#AB( z+is&-IfPsP$uHpXl!9n&Gbu zvAy^FF!tW|Rt$`f1Bs9BS{G|9f}hPyX~cTsNlB z=DAZVxcRmbc)n_`&^aJ+aK@g_xuUa@-Zo?F5w4lAg*_`B%uO$=irG?5SuU#lnhrD^xh3K>ceEPpVhgQRfZE?aYf@`?{ zOXu;P5AManQbeN!#zq+GYe2Il7luX&F@u9L#33ce60|e}jiiMNvvA_*Ma<8xV()=% zC=KSwa!AEUq>oPnI(!JB;}>q(hpB>zPoKFAk&ajs(#K~EV_R>){WA-APqT|r-WNa3 zj=iPILyWNln2U4_=M(HG18#RMx_I%Jc6R=G?)tTOtuxQvZc{o}2v}qoP(cZB`8}!( zKhY9u`%R?UvjjZhy1~jAD3!R*3lVM~V{_9j<|M0#xC`9|)tl+kI#(Df`b7+|JPd;o zR$G|s;@r75YPAq7F~IYpSJK1!*jq|vhSAA$AD=z7_df;D{A;*$Ubbvn1sSXkAaO75 zpI`0*T&L-=BO?xKt3KK-AKg|2Lz)8zlysAe%rH1+E;UgqngmSaM9|QiwYrBV9+}2n zcW=YoQUFtD7#@*|5m1CnDu`5+FjbZy6yWgj^;QS(G&PiL9krDf9((9G_P=QdhDNJM z;&{DGU1$V&1JB28iNHfJF-@sTHO-d7%$knEX@*t9s^?%1I=caLa=L< zElIdI%Z?m-2*=Mp8Lu>F^jslEp%}w76P_Q`P#!l_@=sSR*qtCs@sl!3EFHbT)1)P5 z2{gV6jje!lK~?=XY!zUdMG-kIwVq7G3fnOawN(#mwE(lTUD}Xx4nr}|$@0yfFJi4B zk}bvZY_7z0t=JwZmcYlh0aJ&9vAL7Ye+8}lYu9r9yj;;f_%r|VS|7uAElK;riCyn; z_s20%a!UBd7n}IOAIsy&)5{bhm9C14Y$f!NYoyr-=x_3O-;W8Sblr%o$*$d1+;P_g zTt7i=u8q-cB`mK*lwFtK;rntoXNV)9(T=b*vxMcD1>B*P@xh@2VUT>$#@21aDkq|8 z8>)XZ`J*)t&jbn4vJ-Ak)?X7R5$4XEz>g&shBReK|hc7t$;%958crG6! zSB#O%34DN0V8X~_$TU$cJLIyl)Cx)Kbh5L8zX+d!8$?8C$5XB>!DBUiR8PpQ%vlL+ zGeOZQ!t*1mjy`R|Uz+^A zTMys%4trw|}VQI5_n{;a68y zI=A2Xj*79k)S{g%D<_u=)mRCz^@brdTRzR}kRm}mCEQYKoaN;%S(9zsOGLo%)Z_Cw zaHxtn4%6O^6rV5w+vF&gizp3NFsBPV+-Rcd1{l#T*tUh~ZWkB)E}osO;dsr(rFspQ zS{=-54xSBT%2{YJgLVb$G}9Og1B19wZ(?fG{`;qTcK zxVcoqNV!M}KErVc15y5jF~US6b_uuTccPW}XeKQ%JqFVS3?qSM30S5;!H!`W3Gy~W zK5wF2%EJ%bbdI`)a>c-&y~Egd!ze06xp6dTNRLzwsTj5d<2gnF0Qnx<(XeZuhVh-= zZI|Yzf6n(yOO8|h_vOOw-(IVQi$eoL$6RT~U+1!^6=bMf8qN>8A3XDQ=eJ{h_+RT` z=R*@a%`I!~7J*CYn#iB~4h`efCy$|6u(0*^anzQ(q$GOU*d&!i?e@}jaB==@9eZ{U z;QsqApqMwXYgZM17=beZ(-8Dtje!atEz3f=nujwyh$Y9y*VdNt<=P4!Xt;Q+-o|Of zI1e3-VhQ6zgD{IGTn$+5Af5X0LXk>>QVGZEi`Ywpa@6-V#&bAt%f$#VF0i-Ba4WN5 zIW`Q-fLik~qp35qa z<+Txrps@gl_wU5){31mGa}KBLAwhYeVqj#VKz%0J^(|I3>^#Ku{P5aapM13bvzBK5 zg=QAMuo;vCn_WSoAX<&;184QZ=>HLf0T_}ov+TYz<^lQ5^5#x$tK!@zp2NziRWvTt zaqExW05^;grK|^SgTq*JVsKr+U-NPJ%qr$DEo1up92RGn;B{PzsF{|9&~wpRt)afSh=p@! zF#Y`VXe_V7Sc~B6Kr$R5Z$+>Sz_uCXEhx8P>BReG=q5PVVHzfE%Z6!Ku+0j*j*f3V zbsqKA4p|OqeWfDFYnMa`d^c3tbZJ#`26Rg&H*;{9VgD`6IP?7SkMWLuQ5g1fukC92 z?qpLdh|t)YAL9wB98wB8E4fMSCyJv2QLJI>)(YmnGL17|xu8as1uYQv4!8F>wnP=7hs83Mb2 zg*6}B5aPKp9W1BAFa-k7!-MCR(TEe26AhXlVP&C)vnMVfY^|ZbxP;DH1KmawXO|Z7 zz``=V-{Y6FG+ItI!hi(wdQflKA!nuABbxro3w&~7oTECX}19!{Tj@$At>9C_w4 zE?!)Q?*|k%&ys;kA=I_grJ|V(rmds75aE$On8x&HJ9zH=_>(h7jOWTu?sR+2o4V!T z;R_4(#_N7A`=$ozSBeQ?HE^o&=DT8RxLCls&rRdV=hQ~k&o6c8Ck|l82Y2AuvkUOO znDB=0M=&jpmCJ2t4yWIx7Z64Xf*_$N*!V;dx4&f^qZ2ti`S1dkmpgdJd$(b=rhq&& z0oUd5JQeY3wi2u?EF)a1(`>-E8+q&;tYG)So!GW_2e@gWxl+g9oSMOZTk7=AgG3NMh;o z8W!gos0epVo74XW+b*CWhM<4j}B47Kc zdwvCpND!sXNJ3LBtwE|N61>0p<2Paa)=^x#u!eRsKxx3l6TkErMm~H4F|w?nE35cwU6}eQ+0s#tiB$>9$oNAJZ*r$dcY)94UoaYXorH9Ry7u6Ws{6 z3=Cj7pT~I^Kt93fmH=*-p;0raHca9n(@x+NVx=TGLE&bV-IohJfn_DM*ewSzY>u2A zQy{@IL|PS~T&TbP+%i^csy;C5`5>3bj450@IA~#fw1UaWGNvYn@Z?ixaq+?`yu1V-2qlG13s}le= z5mZf@Wf%kukEdZ?Dz%RomS*gfNd;6u$mQbA$LV4gl%$k6$23&iux%x99Kg&;#fV^A zF&s-pp5)@?OogUtRACaqa#X^P7C1$jqzlLCxxfoCGqZxr(<^v_pF<(fQOI#Re#X=& zYiTv4LKtcJh{PL&-%32~ThU zTy%CJLa~$}@Z>I^(9Uh7z4X#*!;EpLAJ2`jkHD3U)uv~Wv(h9=MzI3ZJM#^Cu>!&Eq{!l)LhU-zc9#0w6+n4IN z|L4Ae%GS#I=R7%w!Gl#Whg11>R$C-32ut$((Dkrj}?%YREZDTpK{ilLcmYKSJGvYudkOuBR$Sqxgp1k4k{9J$nL|i*`kBgt@;sja~oap&n5*?UGuQ;ty4-k|i5m zH^ky>7nZ5E?#07 zKO?aAhRqO9ERr0sbTTVD8SBMyo$rv37!JE>&}#GGG@h=q7;`)E;Wmb&Vl;Xe$wn5nGk6EV(FG99ona zVcohjBA<%Lx^SLA=MjNw5k~~X5&1~K;N&z^@;-_ssiO%xoe0CD4!KYBb1qICZ=hVz zsU$y%5`=zCO;4air-pDgLg#50)i>qg!~hQ zzudseGhM8nX`%M{CXH6$8dKHLX@i(SRx9o0PtUJd$Rn_GaBsNnCmYSirk-_pT`I^x zsl2Ck@ytCr%8swsT4l_I{UUF!+zBZJoFw$RFcBDWO!{3aio4uF`(hj8w~wK)HIMoG zF2fqMVHOnQd*)(DMTzPjxBm@JXre&fdvd|W zq!@;tP%pULxuumTq;ENs=G2-i-6e}T7+J` zT6W!{bQdug>$N&d#i^8vXfU&NBGP~THNN$)xLkJ_M2fHB$ta4zERH1Gujz+s!A-8< zosu`Z;#erzCb~h0b`X)9FjX?K-1X23BGjL+;pty}4C8lCVQk+J&i=_s?D+e8k=s#( z*Ht+M;McfmQ0 zkj~{a0_Bx*0;gc%sV7#j)`-X|Jo8i?mZfNZT1Q(5pH0yCf`;5y2l*)z_6`gAQ42=Z zggK^R;Fcnahx54f`}0`%^a|$F+B3p8MNTu~GD{FdFsp}!^gqZ%~x=VfGGpDiZAMHb7dl_y!LKq~-6)e=HYc{=x(&0gRom3vr zi)e>kn(t8miBt&Ji%~6`X=s;|yQNzuObe9gbIb@<*`{dKnbR#SE(K|6dD?$rFnFg0 zSd!3Um8TQT`t)E=bb90!L@6q9Q-J}2*gy_P?eU$IUWlPbb`d5C>aI^pVsJI+jjD|M zL|#8>G30CI&p6$9$^{1(>#gZm>;Ar$a$PEj#uTLtMTq1{a;9eYr8kgVq3Gqi#zo5@ zLWHG`2QOZ478gl^v;Xh&7`bB{V|Pu!su+lj3b#r69!otPb#t@ z$Q9Bpo!b1kZo$wa)z57vunQcH9pU834o;tJqg>%CjLSgDI#bu+9%)bqWVW#T8?;#J z`bbIq1n`xW$Sj4e>#3WRUKhrw&WieHn2NAvk{Mk!I5Zt;o&H;-iPubWwvBqQ*4i}0 z&o3d@rGg-fwAeO+P|<^erR}R3%SlT4c{N;eH8DBIWGRns7?Il*_AQ8|$LHxWcwh+C z!;@m`yLM_9zVtj=k1S&F0~3^|$Z{t_M6fKqH)lg0i^_3m&{;@fV%rK}I-H_m)92Rk zd7{SpwEuQ5QD_A|T(tAVu^dd&zHHyg6$%4oQr4oq>2g$`I zT`$T>P`NyZX~)oQ19pyK>2ec~Kh#CBqH-1n2jb%){Ln-3?L{>1ZKhTtYwZ;<4fS1= zvvI6+cTb4fF-+-9qd2BWogc*%qP?2L>GjGKLMe1YnxL+uBD#|ok*CQ*QeKUrEkCz9 zG`lHS8NQ8NmkI(QOu4QNLnR93?k8_@Z;W!f`^z1@H@f*M5=Kc{7qy-#Mj8&znFc*Z zgrJ3H8#7$49kb(=+In1JldpA$)%?QaJkSq>vO9#8t(>Vr6yVAj=|;(R#wq0gi@9`RwJdE z0@`tE6~ff*>fcc4{8J2KGoIoSU;|fc`ub+OgHX$@zA`uS+RF8*Ao9dalYHz?h z!HEVaCLMarFpSaZ#;6V$U?!)?)P*xmJo1e;iUkvPE{5Z9I86cXZ|Y#7AU-ck z;wrYDQOS;t6IfS)2qL)?szo?+CA0IC3tZO}akdvl>3c-)^E4{e(R!7+>L+@%u05}c zTsD?IgI;H$RVbX@6x^cUMy>}O^#T!^7%)u(mT5pwt4onCA|oxTQ#-GEzPD&}jx9rF zREkcIjghBi85FUJ1x=Q^GECerCELWdasd;08wEqB%=-EN@;vyOkAlO{{>Bo-a+`38 zt}~R&HfAog;gmQ5?}xv-iU;m%QBh=`GnDiMdZ3~8-)mqU6(HC>F@}*!iIkjE=2}^i zf@7tbd6Cw7X^NK%=;ed55|bo}Nr|azl1U4rk%aAwv5=}tIOEs&cb{rFPeMziB7 zA77|8t0c)3C7}tkEKQtUiBqIFra{Zbb7P1wz}eqFMm;Igwb}ZQ55woGR9<3`#aS2k z{pCEBhDcYeR5VFJoarvA&xUBObiv{n%+Rr8e3%xkRCI^J(J27u9F@G&=kcg004I7M zrQumJPo1w0p5iQ?mcC>gf#_k5?DbmjIrPeML{Cvf5)*@pd_mr^(Fv2*Yk99!}JH5XNI^wi2GG$2-z2X*){?1H6i(H8HFs}+8pjUOE)_iZ~ zlzL6iTCm=@IL0_V??o};zDQ%6y8fzPu3H5$8Bk0Y4bq%|^vexHM;Jy_hvkQH?|Hc} zr2DkI)*?%y%0$#;+eX{#eTG~#6xq1~+-C~YKlWcLO4%~8>iN9@LE+E<;SUv9<8U0- zvrHNjDFFhYT@GPK968Iv?#VHFL62iTjaunKV7Sctjv-3|axidpyeU6cBymO$V{pVG zBE?BWoEF(D9iU$KMD+StLvuny!@PrG&T_q$Sb0 zq6lIdN^h>xd#fWh(F8H3Q)gZ-ujZsXj)8p6fH>BMW2w39yoZO<1>e`&Dlry~a!Z-z zAyu^Sx#1nDV4sbg zg@cCC;Q^doSbAk{;_E=JPYWX8N}s%3E~AvoQExhWqzwX59Kj7jxL!b!o+w$5Ude?d zEkwQ9Rf;2URg97C%<=^iEMM(4nMl_|?(=3f2hCFX5VsYQ<(S%?LjsQ4oD0JUs02Ma z(*|Z+DDRw1E!@?MEYWkRu5t;|EH^2AI>taMl5(Sz`=!`=6Ucw5d7N=?E;?Zt^-apX zOa$dpqA0bxsXE1}VyIk+px}X@XxBxE7uTzTXwY2gHkp<|b20$sBTMT*aevK#&UL!+ z&5nyGi8latmipk??^@r2-0(eGN@Tz^0`6B!I7V?yh(IbxZjYJ;NNnrSFuBVn(zcoN zUFs2`3fxwV_Lo(k(a1o#KSA9Kxk6j#WXu#qONl7B#^8sc0^cd-%HB&%*@@N%)cfkI zL_*diK};nyiku>%xhYvrgb3w0M~_uI{SK9BVPpZN)q-Jc%9-d_lj~AJ80WPl?NHKE zjG+nDNkFDBv79ZUx^#}I*{v9K}PoMU#dU$RT}s&QuivWM-u7g$0&QP_xc~!T5hjSs|RNL z{w-dj{3Mf1QL-`;1>DsDe<{VSMKDJyshPSl3GAGr@F^4wbnab5G_QywBtEJX@}wY0 zb2OP1OVT7H9bbwQLgv|E>3{Olo=3db|dhO)8RFIQrPK%LT&Ud@6rLw#Uu?7keZ*W;?a3|MM z%-MuVJU{HYT54v83J3Rwd1jHKm#`*4mXPCW*AE2(s*+{MjoSzVADU)Bh>(6tsSMia zd|?`^53GaRQa%S}nCVzI6sYDw}u9*SbFSR+cCBK6}p?(R<1h*;UaOo z`I&#TWpF^W+bUm`flH4Uy~u$aRdb5*!ER&&ZT(4L5mRlfo%)XQGN znjl@I66c6GMsAzRVNl``kz!r3G*kw3EPiGIYmaP<{N!zms71{_Ru+*0cF`Apl#5a> z+OS^v@;fgo2&MQl_TA0u!%T;}9@w7mdbFQ9S^Y^>zoASyG@UQ$UiDeM?jv(uS$ zht&LVYt6vfUwa>zQMp_}Apsu68!GX^57k{U9;9 z7K~>0Np~f0o3yZ+iPr<|>Pu4 zUEG@7K1&C<4=ziNoJ zur_tl@VZG9GRBvqD8%r{DE%&PS*=#by~odzKc9&Z>wVQ)AG*kDj#xUk&o*_G^H#5x z>uQTXdn$?r`S-yUH~{^V)pdbF*}=qQ721g|j{NeAD~FVP-suGmvYM~{grU)@)(ta24D%3d;}Oe_w%VJ6`TRd_Br_V?k_Pf76eA^rPsXpDdN+$jl-P+rr_& zBH}1Qn)yphD+s#xtcZ&Is8A}AxEVSMIiS%>NuM+P5sMc@bck#&?W53QMeQkla?4Ny zWa6V;6!&>J^M@zUdA|8=&xb;$Nz(hy40LC8Wb&8`jze9O@<2ugD!u#-($~vHPEAjm zKtdEf4EZ$6o?)n@mpIg3;7ax@Mv{hnlO)+t7N0d!ksBriYK;~qb{aT+`V8Ll?t7+= zJoez{%D3Nj%lCYPuaR6A3R1`ypj|rko1=#hp-sA*5_?Jd3G8|CUBsVODFS- zUeR3!G^xBos*9!;AGs=N*j7HmzUU7lkiY)@$rZ;VD4eP?_Ee6}7+R-mIQnZZkH7d+534CZYlQH1-y_I2EN(@i(eJ^kqCsyE;H;}Nt?mmaw; zT&(8#Q$Kan!TmQq`P8$huPoutx7-1C1+0GR;yh;Be%eU1eq*zuJfuE!mZR=5CTbcL zEK(zqz}3q>UgWqktKvm574%)%M^Y&`*s)~@dOhjrw>Uyj@S#MO#!9J4H+Dv%&t=Pg%GXKdYkD5qen27cZr4TE^Wpj`BBr_# zMemU*RU{QC2;n$39p9;wC$Xhk{YdltnVAE9EX*%vmVpOe!GM`4wG-FXK4n z4y+Uz>)!IaOuLIcDaU@V2+V9hzltP!czc@#WK(vE+t? zIeJY&R}JE>FEr_5Sp;q^S0f4W_hdQ(qasv5RI;z&P5dI zF@Yjc*&@tX3&Sj`)|Z1}S15*|>#z(X?SonWTc#NO|IW%vq(x}DF4np(_1KdlNsA+0 z%#>-7>%7<2s~b8!SZcv~U5CV`8l#w6MEU)5v$OC#*N!ipyVr5MKlnY~^4C;0wSpw` zGatR{mYeQ6fBphlgCL4}eG6U~<9+XWH;psnsRBr4vEvxuy0nPPEf;PS6X{tjQku=4 z>!n^FCF}Nur`d2_=PIGrV-s0-$xN<+y&Q9renX?{n(8xlc$* zwzVrCC|?p2Z%K!rp8zn!N2G0(Nzo+>l-F2(oA@kwb!}UBM6~s zRPwyyD6P6x`3>pzWhs&Dv$(#FxH2Mzq|f!!(=vDYj8u$;)jFD8x0eW&E?*c#$k`@+ zj#TulX{r~c5{f8J^`LMyw3Mt|%G8qPmgM(ZrbVAm%qOW!CK7?ur%z-5{{6-ZG5u~1 z*|Z8W8U-IOI`;nOPM#FSLQ%79o5h(0NP%>_>tgTz1DIc0h6qEjB!*xdEDDk62I45h zs_SFT^>AsWK_m}bt3`|y?G3I;+!xkFugra&c`%@nY>I+MF`y(pcj;;oF0S?Qb@gF~ zOtA`%N>oNs)cd<4Vo=JVakbFd6%nXjd487IOl!CL$>QX()>>`&QAA`7@;q`mhq^DX zR$s=Gjd`7<*EtDQla>VuQukI`u5!7E(D&hRj?ge@?6s7;?!FsOojL#4#-O%oD6=-D zf-v9R6Rpnwhxst1jk4KpCM82>xQWB(D z?wHd|WoUAjTW;Wdt%b5E?BzWD|r{`V$BkSiBRw9U+_^Hu9e4HF67bnJd_;= zdB;)V-&C=BNk(nG4R^hlU2L?l)TycUT)a$?q=io8wbxb8jh-aX9S4guGhhQlpM8~< z#j7HlQbEGS*^f`{+HODm=%Wc|T*w>KX*NWuSk{CDzg!?EQny0a(QUVg&Sv}8t+>%P zpy>uqU7W_k`EzKtTF~MMv2+8X1eSDR0IYNa)LX7}-B7X&jFk&0r=)Dzg2>VU^50P( zc|($95hg|p$dBU}Bo#9y$%OTYqXmXb#h&HqU*y>Ws39QX<~M;TE*Fm7mpX;^3Jb+r}z6> z%BEA0eG?PATdTAG^qb%OCc-FUnx+W}J%TV0Q5b1CCr7(h#8o|#FHOCnBa*v%7+@s~ zz>^r;D|zg=^EO1Di{<4NTwYkhT73>s>aTf;{}GKX~kpJMXYv&&!_baneL#C~sV%b6v9x zQwwNXs{xmGvIL2SUSVEWF6OQaE)on44q|d*oLrF0v-6mnUqGwTf@zs5n;ypqnW_S= zcLJ=sA*!ZFjXK8z0n9sW^y#(OudbXf{j7j+CV(;1DNaZGF(#m+rD@q3^DI(T*H@tyB}-$#8-zq}+rzB2FvJhmBR z(@mHf;M#kcrtMsqpYK(jW?@HiC&G|6&?t#SO5Ci;g)Mh)ns^WfD$$k!-dH8>yda>4 zseC?%vC$C>jSR!GEr=vSH;l;*lfDxpf@zC(|D3k&_e+3HkVtHtJJL^Onkh- zS^>8VNb}0sm6F;0z)c5<<&ZM|+IkKHY2+&D(feqi0Mv%qq9r!f{=!qTAcO5%KcrFEDif=z25wk_&ZH>4i67v`}RqAriF)|KaVe- zoI7&N=f6ID%N_qB)Oh_`tdUnzHk}2DO4a|Xv3U8OBn*2yToOfTc30gwH;$R*IEe%& zTC54KDYo-Q%Vmacpk#2wi4Fq^u8cQk9e2{PDCBMAoH10r0G{Wg)ok^!hLA3VNZ|DG zWo2yWJrJJ_{!HthvIU(*z@jTk*yA{%s@%bH5s~jvf-;jZN|ehbKbI_}`aJ1A9X)%A z&bwO3Ve80{a@$gOh^PO|iWe7y7#CUr99zwBKe<%L#aav728uW^T%iizOjxQ3nFE(y zUujt$?*jg>oXNe8xrjB)JXaIpzz^{DnD>yr|%FS? z{#wYUQxGZL%IHs8OUr+z>-s>quWDDMKDV?e@~7OP<0w)~gsYxzTB;gDD~ymdni#4G zMAE`sv72W}v~>apq(s>3Z2z7B3NI1axw64ZE@~~gA`_n0KSh0WJdh^i(940S&r-eT zs*6#&dlV%yblkXW8sHi);UV!QOWlRhd zdw)~3MWRcOs_6p#M zC!fUJYzNIC>S3#a!77%c1pn?Y?nP+WbBFHvz|W3y^DpJ!);ir+>XyE4Wz&K5Od@Du zacbM2#Ys|+nrk=5ah!Y67=5;r_x;our-kMVjVe|}6sEI4;+|q$S<0QU6MDo$tIUca z5(;U)nDqL{3MbE>c3Vx4-Zzi)%5I45iVy7D_I%w4YH z8%Hnnvhwo$MurD5I5MivU*kO@YWZ0gXXX%v5$?HhKUz%3A3gMR__gWUSF1PP_Vf8e zxBPU6@sqE>?b|f6X%z%C2SkgE>focLZ9D$dy>$KquICQx`b!(d9$!?FP(qNAdm|7e zstQ#uqd1IugYwZEosgBAXmCA`h@+L;CSbFxx8(MJXOGiLY;3SnJrsgw3TCA%E!V?a z4(#f^N9$t|QUA{9LHo+xQ@=0!J)d(>o}9wxzx6zVV4eKIacoR%-9`yi%`k}eNN5bq zFrZsDW-rgc^?Y1dSi-||jR$hKzU_z19eaKoPX5$)cb7J|Y-$C`L@?ei?cDPxRxZE5 zJ@-JT)vWLrQQpKM?e3X=<$M3~Bw(r;huINEY zG3c{25R;2M?{?Qkz0qjvhwu2w+@YKPRjixK-`!ogKIFPk5GZRB=;i9;g{f_yG&PJY zPhYy3r~MQ!`M&gLk}k}QYnGCBy;o@)7ALWNgi$(lM!H!7#>=R4U$1pqXL-y-g61%N zf-_*-=pe=hDp!8OhRWXFIZ(!4B`NKkL&>@aPG3U1>rrke%lqv;co2?lLKs#`vY=tL z={Jn+yMFiEp3wJ!Z0dfHt4XM_mbLFq|8&>i`H{o2AY~^!)oKWYVbg{g&Jj72)*W@GUV{+F-I`r~8JVq+u)74D!Ow5#B zBu-tr`C4PcdwSoQ{+^9=KwrHU;f{20X&l8U7V;RZDzHB`H3i*v5OHOd0?#8xlsJm0 zJvoL3KLNODLNIOYJ3OW9RyJi6>*WY56pvMJyzQS49J=w}`t{X!XsyO%7Hz&d_NzsO1-_<>aaL=oc=;?!1VHI~xDK z#viyIU99g#_})Xmxb+?H`8&|qIhAbG;H3jU3Ajs_Dvq&IU!w`JRGq7_UQ+LS5ku!R z77i&csyEwIN~3MSP+~)kl-3vBRiz}1!q*`ZL}}zIlvpE);khoFwL0~uV8bUW@qHij z^K;Uze4?Ez{^A?Tq2#)^Am6FzgCk!Wf8P)7UVH3;FSb`#K7fq(idK?F3(b&zx&*Xx zL2DWk#?!(5-s^ti7Qh~A>l7mFwlRPpfX3wY|pY07yV+$zm)yOlQ-{1X9GfAwS%53QX%{&VM#JpFTa5?KQV?~S2;x#ESY{!6-anX`BNI(CaDuw45-!=(1jPP&%pFj6;@b>?m-TAKHS-pJmAAaePZ~eyJUAqQ$Om3mq zKmN=SFPhl#VPos~m$EF&i!%hjA=(Fj=3idxV|d*Q3;eB#+uf&^E8qBb^qE{FPPn@K zj?V1m_lU*0_xmf0`>TddRk|-FeiUP=0Emt`63S5@&3wc99 zUS(mvyT5(z^v60E&iuI9YHS~LOqwd&U+Ejh3FcZ|)gzKtfiucae}Wtdur{$h1O?Fdk_9Wha1ma(-XZ;<+{nFzg|V|=Em^Y{rSBI{!gP& zVCT>&K8#O1 ze)7}xop1Vp7~b;#g^Vv;>+`%`qWkv382S6u` zCMKyVe%k3rOS|T@Oyq!HygD;QUezzx-DZJ#!xh4tMt){vlp0 zAG^k<@qHt2xLDUvl4AMjjR&&q7;=;a#W*5);#&72D zyyrunZakSl+l;I^n_k|CV!aM!IG^9Pyf|M)q4eyvK9=uyc>|=s4rRI1xr9RL(zQO0 oH{=bF{)W6EFDd_j00030|EZ1YAqLCMQ~&?~07*qoM6N<$f*@oe(f|Me literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/skull_resource_pack/textures/terrain_texture.json b/core/src/main/resources/bedrock/skull_resource_pack/textures/terrain_texture.json new file mode 100644 index 00000000000..c10c4a1c8bb --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack/textures/terrain_texture.json @@ -0,0 +1,8 @@ +{ + "num_mip_levels": 4, + "padding": 8, + "resource_pack_name": "Geyser Player Skull Resource Pack", + "texture_data": { + ${texture_data} + } +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack_files.txt b/core/src/main/resources/bedrock/skull_resource_pack_files.txt new file mode 100644 index 00000000000..a614edf2ada --- /dev/null +++ b/core/src/main/resources/bedrock/skull_resource_pack_files.txt @@ -0,0 +1,12 @@ +skull_resource_pack/animations/disable.animation.json +skull_resource_pack/animations/player_skull.animation.json +skull_resource_pack/models/blocks/player_skull.geo.json +skull_resource_pack/models/blocks/player_skull_floor_a.geo.json +skull_resource_pack/models/blocks/player_skull_floor_c.geo.json +skull_resource_pack/models/blocks/player_skull_floor_b.geo.json +skull_resource_pack/models/blocks/player_skull_floor_d.geo.json +skull_resource_pack/models/blocks/player_skull_hand.geo.json +skull_resource_pack/models/blocks/player_skull_wall.geo.json +skull_resource_pack/textures/terrain_texture.json +skull_resource_pack/pack_icon.png +skull_resource_pack/manifest.json From 774b300f8daedcf52a513d412653f0abef764280 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sat, 9 Jul 2022 13:36:18 -0400 Subject: [PATCH 006/134] Add config options for custom blocks and custom skull blocks --- .../configuration/GeyserConfiguration.java | 7 + .../GeyserJacksonConfiguration.java | 13 ++ .../geyser/network/UpstreamPacketHandler.java | 2 +- .../geysermc/geyser/pack/ResourcePack.java | 2 +- .../geyser/pack/SkullResourcePackManager.java | 143 +++++++++++++----- .../geyser/registry/BlockRegistries.java | 3 +- .../populator/BlockRegistryPopulator.java | 4 + .../CustomSkullRegistryPopulator.java | 71 +++++++++ core/src/main/resources/config.yml | 13 ++ 9 files changed, 215 insertions(+), 43 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index d74d804dff0..914499e7c55 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -91,6 +91,13 @@ public interface GeyserConfiguration { boolean isAddNonBedrockItems(); + boolean isAddCustomBlocks(); + + boolean isAddCustomSkullBlocks(); + + // TODO this should probably go in a different file? + List getCustomSkullProfiles(); + boolean isAboveBedrockNetherBuilding(); boolean isForceResourcePacks(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 77b35151847..788f519eabb 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -142,6 +142,15 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration @JsonProperty("above-bedrock-nether-building") private boolean aboveBedrockNetherBuilding = false; + @JsonProperty("add-custom-blocks") + boolean addCustomBlocks = true; + + @JsonProperty("add-custom-skull-blocks") + boolean addCustomSkullBlocks = false; + + @JsonProperty("custom-skull-profiles") + List customSkullProfiles = Collections.emptyList(); + @JsonProperty("force-resource-packs") private boolean forceResourcePacks = true; @@ -278,6 +287,10 @@ public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx @JsonProperty("config-version") private int configVersion = 0; + public boolean isAddCustomSkullBlocks() { + return addCustomBlocks && addCustomSkullBlocks; + } + /** * Ensure that the port deserializes in the config as a number no matter what. */ diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 33eca67a970..b0de24225d9 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -108,7 +108,7 @@ public boolean handle(LoginPacket loginPacket) { header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), "", "", "", false, false)); } - resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks()); + resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks() || GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()); session.sendUpstreamPacket(resourcePacksInfo); GeyserLocale.loadGeyserLocale(session.locale()); diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java index 55a95b53caf..4b63095a9b0 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java @@ -85,7 +85,7 @@ public static void loadPacks() { return; } - Path skullResourcePack = SkullResourcePackManager.createResourcePack(BlockRegistries.CUSTOM_SKULLS.get().keySet()); + Path skullResourcePack = SkullResourcePackManager.createResourcePack(); if (skullResourcePack != null) { resourcePacks.add(skullResourcePack); } diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 819811c9be5..434dfaec650 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -26,11 +26,14 @@ package org.geysermc.geyser.pack; import it.unimi.dsi.fastutil.Pair; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.skin.SkinProvider; import org.geysermc.geyser.util.FileUtils; import javax.imageio.ImageIO; +import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.nio.ByteBuffer; @@ -40,26 +43,40 @@ import java.nio.file.StandardOpenOption; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.util.List; import java.util.*; import java.util.function.UnaryOperator; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; public class SkullResourcePackManager { - private static final long RESOURCE_PACK_VERSION = 4; + private static final long RESOURCE_PACK_VERSION = 5; + + private static final Path SKULL_SKIN_CACHE_PATH = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); + + public static final Map SKULL_SKINS = new Object2ObjectOpenHashMap<>(); @SuppressWarnings("ResultOfMethodCallIgnored") - public static Path createResourcePack(Set skins) { - Path packPath = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls.mcpack"); + public static Path createResourcePack() { + Path cachePath = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache"); + try { + Files.createDirectories(cachePath); + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().severe("Unable to create directories for player skull resource pack!", e); + return null; + } + cleanSkullSkinCache(); + + Path packPath = cachePath.resolve("player_skulls.mcpack"); File packFile = packPath.toFile(); - if (skins.isEmpty()) { + if (BlockRegistries.CUSTOM_SKULLS.get().isEmpty() || !GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()) { packFile.delete(); // No need to keep resource pack - GeyserImpl.getInstance().getLogger().debug("No skins to create player skull resource pack."); return null; } - if (packFile.exists() && canReusePack(skins, packFile)) { + if (packFile.exists() && canReusePack(packFile)) { GeyserImpl.getInstance().getLogger().info("Reusing cached player skull resource pack."); return packPath; } @@ -68,19 +85,74 @@ public static Path createResourcePack(Set skins) { GeyserImpl.getInstance().getLogger().info("Creating skull resource pack."); packFile.delete(); try (ZipOutputStream zipOS = new ZipOutputStream(Files.newOutputStream(packPath, StandardOpenOption.WRITE, StandardOpenOption.CREATE))) { - addBaseResources(zipOS, skins); - addSkinTextures(zipOS, skins); - addAttachables(zipOS, skins); + addBaseResources(zipOS); + addSkinTextures(zipOS); + addAttachables(zipOS); GeyserImpl.getInstance().getLogger().info("Finished creating skull resource pack."); return packPath; } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Unable to create player skull resource pack!", e); + GeyserImpl.getInstance().getLogger().severe("Unable to create player skull resource pack!", e); + GeyserImpl.getInstance().getLogger().severe("Bedrock players will see dirt blocks instead of custom skull blocks."); packFile.delete(); } return null; } - private static void addBaseResources(ZipOutputStream zipOS, Set skins) throws IOException { + public static void cacheSkullSkin(String skinUrl, String skinHash) throws IOException { + Path skinPath = SKULL_SKINS.get(skinHash); + if (skinPath != null) { + return; + } + + Files.createDirectories(SKULL_SKIN_CACHE_PATH); + skinPath = SKULL_SKIN_CACHE_PATH.resolve(skinHash + ".png"); + if (Files.exists(skinPath)) { + SKULL_SKINS.put(skinHash, skinPath); + return; + } + + BufferedImage image = SkinProvider.requestImage(skinUrl, null); + if (image.getHeight() != 64) { + // We have to resize legacy skins to 64x64 for them to be displayed properly + BufferedImage modernSkin = new BufferedImage(64, 64, image.getType()); + + Graphics g = modernSkin.createGraphics(); + g.drawImage(image, 0, 0, null); + g.setColor(new Color(0, 0, 0, 0)); + g.fillRect(0, 32, 64, 32); + g.dispose(); + + image.flush(); + image = modernSkin; + } + + ImageIO.write(image, "png", skinPath.toFile()); + SKULL_SKINS.put(skinHash, skinPath); + GeyserImpl.getInstance().getLogger().debug("Cached player skull to " + skinPath + " for " + skinHash); + } + + public static void cleanSkullSkinCache() { + try (Stream stream = Files.list(SKULL_SKIN_CACHE_PATH)) { + int removeCount = 0; + for (Path path : stream.toList()) { + String skinHash = path.getFileName().toString(); + skinHash = skinHash.substring(0, skinHash.length() - ".png".length()); + if (!SKULL_SKINS.containsKey(skinHash) && path.toFile().delete()) { + removeCount++; + } + } + if (removeCount != 0) { + GeyserImpl.getInstance().getLogger().debug("Removed " + removeCount + " unnecessary skull skins."); + } + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().debug("Unable to clean up skull skin cache."); + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + } + } + + private static void addBaseResources(ZipOutputStream zipOS) throws IOException { try (BufferedReader reader = new BufferedReader(new InputStreamReader(GeyserImpl.getInstance().getBootstrap().getResource("bedrock/skull_resource_pack_files.txt")))) { List lines = reader.lines().toList(); for (String path : lines) { @@ -90,9 +162,9 @@ private static void addBaseResources(ZipOutputStream zipOS, Set skins) t String resourcePath = "bedrock/" + path; switch (path) { case "skull_resource_pack/manifest.json" -> - fillTemplate(zipOS, resourcePath, template -> fillManifestJson(template, skins)); + fillTemplate(zipOS, resourcePath, SkullResourcePackManager::fillManifestJson); case "skull_resource_pack/textures/terrain_texture.json" -> - fillTemplate(zipOS, resourcePath, template -> fillTerrainTextureJson(template, skins)); + fillTemplate(zipOS, resourcePath, SkullResourcePackManager::fillTerrainTextureJson); default -> zipOS.write(FileUtils.readAllBytes(resourcePath)); } zipOS.closeEntry(); @@ -100,9 +172,9 @@ private static void addBaseResources(ZipOutputStream zipOS, Set skins) t } } - private static void addAttachables(ZipOutputStream zipOS, Set skins) throws IOException { + private static void addAttachables(ZipOutputStream zipOS) throws IOException { String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/attachables/template_attachable.json"), StandardCharsets.UTF_8); - for (String skinHash : skins) { + for (String skinHash : SKULL_SKINS.keySet()) { ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + skinHash + ".json"); zipOS.putNextEntry(entry); zipOS.write(fillAttachableJson(template, skinHash).getBytes(StandardCharsets.UTF_8)); @@ -110,22 +182,13 @@ private static void addAttachables(ZipOutputStream zipOS, Set skins) thr } } - private static void addSkinTextures(ZipOutputStream zipOS, Set skins) throws IOException { - Path skullSkinCache = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); - Files.createDirectories(skullSkinCache); - for (String skin : skins) { - Path skinPath = skullSkinCache.resolve(skin + ".png"); - if (!Files.exists(skinPath)) { - // TODO this should go somewhere else and be async somehow - BufferedImage image = SkinProvider.requestImage("http://textures.minecraft.net/texture/" + skin, null); - ImageIO.write(image, "png", skinPath.toFile()); - GeyserImpl.getInstance().getLogger().debug("Cached player skull to file " + skinPath + " for " + skin); - } - - ZipEntry entry = new ZipEntry("skull_resource_pack/textures/blocks/" + skin + ".png"); - + private static void addSkinTextures(ZipOutputStream zipOS) throws IOException { + for (Path skinPath : SKULL_SKINS.values()) { + ZipEntry entry = new ZipEntry("skull_resource_pack/textures/blocks/" + skinPath.getFileName()); zipOS.putNextEntry(entry); - zipOS.write(FileUtils.readAllBytes(skinPath.toFile())); + try (InputStream stream = Files.newInputStream(skinPath)) { + stream.transferTo(zipOS); + } zipOS.closeEntry(); } } @@ -141,26 +204,26 @@ private static String fillAttachableJson(String template, String skinHash) { .replace("${texture}", skinHash); } - private static String fillManifestJson(String template, Set skins) { - Pair uuids = generatePackUUIDs(skins); + private static String fillManifestJson(String template) { + Pair uuids = generatePackUUIDs(); return template.replace("${uuid1}", uuids.first().toString()) .replace("${uuid2}", uuids.second().toString()); } - private static String fillTerrainTextureJson(String template, Set skins) { + private static String fillTerrainTextureJson(String template) { StringBuilder textures = new StringBuilder(); - for (String skinHash : skins) { - String texture = String.format("\"geyser.%s_player_skin\":{\"textures\":\"textures/blocks/%s\"},", skinHash, skinHash); + for (String skinHash : SKULL_SKINS.keySet()) { + String texture = String.format("\"geyser.%s_player_skin\":{\"textures\":\"textures/blocks/%s\"},\n", skinHash, skinHash); textures.append(texture); } if (textures.length() != 0) { // Remove trailing comma - textures.deleteCharAt(textures.length() - 1); + textures.delete(textures.length() - 2, textures.length()); } return template.replace("${texture_data}", textures); } - private static Pair generatePackUUIDs(Set skins) { + private static Pair generatePackUUIDs() { UUID uuid1 = UUID.randomUUID(); UUID uuid2 = UUID.randomUUID(); try { @@ -168,7 +231,7 @@ private static Pair generatePackUUIDs(Set skins) { for (int i = 0; i < 8; i++) { md.update((byte) ((RESOURCE_PACK_VERSION >> (i * 8)) & 0xFF)); } - skins.stream() + SKULL_SKINS.keySet().stream() .sorted() .map(hash -> hash.getBytes(StandardCharsets.UTF_8)) .forEach(md::update); @@ -183,8 +246,8 @@ private static Pair generatePackUUIDs(Set skins) { return Pair.of(uuid1, uuid2); } - private static boolean canReusePack(Set skins, File packFile) { - Pair uuids = generatePackUUIDs(skins); + private static boolean canReusePack(File packFile) { + Pair uuids = generatePackUUIDs(); try (ZipFile zipFile = new ZipFile(packFile)) { Optional manifestEntry = zipFile.stream() .filter(entry -> entry.getName().contains("manifest.json")) diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 1d13e1acff5..7e4c0f5c739 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -32,6 +32,7 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; +import org.geysermc.geyser.registry.populator.CustomSkullRegistryPopulator; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.CustomSkull; @@ -81,11 +82,11 @@ public class BlockRegistries { /** * A registry which stores skin texture hashes to custom skull blocks. - * TODO add loader/populator */ public static final SimpleMappedRegistry CUSTOM_SKULLS = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); static { + CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index e6a210f18c8..2fbefe03dbf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -86,7 +86,11 @@ public static void populate() { BLOCKS_JSON = null; } + private static void registerCustomBedrockBlocks() { + if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { + return; + } List customBlocks = new ArrayList<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java new file mode 100644 index 00000000000..c2719ae2d5d --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.populator; + +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.pack.SkullResourcePackManager; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; +import org.geysermc.geyser.skin.SkinManager; + +import java.io.IOException; +import java.util.Map; + +public class CustomSkullRegistryPopulator { + + public static void populate() { + SkullResourcePackManager.SKULL_SKINS.clear(); // Remove skins after reloading + if (!GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()) { + BlockRegistries.CUSTOM_SKULLS.set(Object2ObjectMaps.emptyMap()); + return; + } + + Map customSkulls = new Object2ObjectOpenHashMap<>(); + for (String skullProfile : GeyserImpl.getInstance().getConfig().getCustomSkullProfiles()) { + try { + SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(skullProfile); + if (profileData == null) { + GeyserImpl.getInstance().getLogger().warning("Skull profile " + skullProfile + " contained no skins and will not be added as a custom block."); + continue; + } + try { + String skinUrl = profileData.skinUrl(); + String skinHash = skinUrl.substring(skinUrl.lastIndexOf("/") + 1); + SkullResourcePackManager.cacheSkullSkin(skinUrl, skinHash); + customSkulls.put(skinHash, new CustomSkull(skinHash)); + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull profile " + skullProfile + " This skull will not be added as a custom block.", e); + } + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().error("Skull profile " + skullProfile + " is invalid and will not be added as a custom block.", e); + } + } + GeyserImpl.getInstance().getLogger().debug("Registered " + customSkulls.size() + " custom skulls as custom blocks."); + BlockRegistries.CUSTOM_SKULLS.set(customSkulls); + } +} diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index d1a956187fe..4d8e6e0fc95 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -161,6 +161,19 @@ custom-skull-render-distance: 32 # This option requires a restart of Geyser in order to change its setting. add-non-bedrock-items: true +# Whether to allow custom blocks to be added. +# This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching. +add-custom-blocks: true + +# Whether to allow some custom skulls to be translated as custom blocks. This requires `add-custom-blocks` and `allow-custom-skulls` to be +# enabled. This will generate a resource pack for Bedrock players and enables `force-resource-packs` +add-custom-skull-blocks: true + +# List of custom skull profiles to translate as custom blocks. This requires `add-custom-skull-blocks` to be enabled. +# This is the Value stored in the SkullOwner of the custom skull +custom-skull-profiles: + - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ + # Bedrock prevents building and displaying blocks above Y127 in the Nether. # This config option works around that by changing the Nether dimension ID to the End ID. # The main downside to this is that the entire Nether will have the same red fog rather than having different fog for each biome. From d07a06cd3b49c6c14ddbc77dedcfc79b6f446932 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sat, 9 Jul 2022 15:16:29 -0400 Subject: [PATCH 007/134] Fix formatting and names for player skulls --- .../item/nbt/PlayerHeadTranslator.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java index d4975f81a67..3f44357a09b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/nbt/PlayerHeadTranslator.java @@ -30,37 +30,46 @@ import com.github.steveice10.opennbt.tag.builtin.Tag; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.inventory.item.ItemRemapper; import org.geysermc.geyser.translator.inventory.item.NbtItemStackTranslator; +import org.geysermc.geyser.translator.text.MessageTranslator; @ItemRemapper public class PlayerHeadTranslator extends NbtItemStackTranslator { @Override public void translateToBedrock(GeyserSession session, CompoundTag itemTag, ItemMapping mapping) { - if (!itemTag.contains("display") || !((CompoundTag) itemTag.get("display")).contains("Name")) { + CompoundTag displayTag; + if (itemTag.get("display") instanceof CompoundTag tag) { + displayTag = tag; + } else { + displayTag = new CompoundTag("display"); + itemTag.put(displayTag); + } + + if (displayTag.get("Name") instanceof StringTag nameTag) { + // Custom names are always yellow and italic + displayTag.put(new StringTag("Name", ChatColor.YELLOW + ChatColor.ITALIC + MessageTranslator.convertMessageLenient(nameTag.getValue(), session.locale()))); + } else { if (itemTag.contains("SkullOwner")) { StringTag name; Tag skullOwner = itemTag.get("SkullOwner"); - if (skullOwner instanceof StringTag) { - name = (StringTag) skullOwner; + if (skullOwner instanceof StringTag skullName) { + name = skullName; } else { - StringTag skullName; - if (skullOwner instanceof CompoundTag && (skullName = ((CompoundTag) skullOwner).get("Name")) != null) { + if (skullOwner instanceof CompoundTag && ((CompoundTag) skullOwner).get("Name") instanceof StringTag skullName) { name = skullName; } else { - session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + itemTag); + // No name found so default to "Player Head" + displayTag.put(new StringTag("Name", ChatColor.RESET + ChatColor.YELLOW + MinecraftLocale.getLocaleString("block.minecraft.player_head", session.locale()))); return; } } // Add correct name of player skull - // TODO: It's always yellow, even with a custom name. Handle? - String displayName = "\u00a7r\u00a7e" + MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name.getValue()); - if (!itemTag.contains("display")) { - itemTag.put(new CompoundTag("display")); - } - ((CompoundTag) itemTag.get("display")).put(new StringTag("Name", displayName)); + String displayName = ChatColor.RESET + ChatColor.YELLOW + MinecraftLocale.getLocaleString("block.minecraft.player_head.named", session.locale()).replace("%s", name.getValue()); + displayTag.put(new StringTag("Name", displayName)); } } } From 08c24cb46276f9223d51bde7256a14532733c5cf Mon Sep 17 00:00:00 2001 From: davchoo Date: Sat, 9 Jul 2022 21:05:22 -0400 Subject: [PATCH 008/134] Use block states more efficiently for custom skulls 21 block states vs 48 block states --- .../geyser/registry/type/CustomSkull.java | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 49486dcdc78..3e695d64d18 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -48,8 +48,8 @@ public class CustomSkull { private CustomBlockData customBlockData; - private static final String DIRECTION_PROPERTY = "geyser_skull:direction"; - private static final String TYPE_PROPERTY = "geyser_skull:type"; + private static final String BITS_A_PROPERTY = "geyser_skull:bits_a"; + private static final String BITS_B_PROPERTY = "geyser_skull:bits_b"; private static final int[] ROTATIONS = {0, -90, 180, 90}; @@ -70,16 +70,16 @@ public CustomSkull(String skinHash) { customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() .name("player_skull_" + skinHash) .components(components) - .intProperty(DIRECTION_PROPERTY, IntStream.rangeClosed(0, 15).boxed().toList()) - .intProperty(TYPE_PROPERTY, IntStream.rangeClosed(0, 2).boxed().toList()) + .intProperty(BITS_A_PROPERTY, IntStream.rangeClosed(0, 6).boxed().toList()) // This gives us exactly 21 block states + .intProperty(BITS_B_PROPERTY, IntStream.rangeClosed(0, 2).boxed().toList()) .permutations(permutations) .build(); } public CustomBlockState getDefaultBlockState() { return customBlockData.blockStateBuilder() - .intProperty(DIRECTION_PROPERTY, 0) - .intProperty(TYPE_PROPERTY, 0) + .intProperty(BITS_A_PROPERTY, 0) + .intProperty(BITS_B_PROPERTY, 0) .build(); } @@ -93,15 +93,15 @@ public CustomBlockState getWallBlockState(int wallDirection) { }; return customBlockData.blockStateBuilder() - .intProperty(DIRECTION_PROPERTY, wallDirection) - .intProperty(TYPE_PROPERTY, 1) + .intProperty(BITS_A_PROPERTY, wallDirection + 1) + .intProperty(BITS_B_PROPERTY, 0) .build(); } public CustomBlockState getFloorBlockState(int floorRotation) { return customBlockData.blockStateBuilder() - .intProperty(DIRECTION_PROPERTY, floorRotation) - .intProperty(TYPE_PROPERTY, 2) + .intProperty(BITS_A_PROPERTY, (5 + floorRotation) % 7) + .intProperty(BITS_B_PROPERTY, (5 + floorRotation) / 7) .build(); } @@ -111,7 +111,7 @@ private void addDefaultPermutation(List permutations) { .rotation(new RotationComponent(0, 180, 0)) .build(); - String condition = String.format("query.block_property('%s') == 0 && query.block_property('%s') == 0", DIRECTION_PROPERTY, TYPE_PROPERTY); + String condition = String.format("query.block_property('%s') == 0 && query.block_property('%s') == 0", BITS_A_PROPERTY, BITS_B_PROPERTY); permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() .condition(condition) .components(components) @@ -129,7 +129,7 @@ private void addFloorPermutations(List permutations) { for (int quadrant = 0; quadrant < 4; quadrant++) { RotationComponent rotation = new RotationComponent(0, ROTATIONS[quadrant], 0); for (int i = 0; i < 4; i++) { - int floorDirection = 4 * quadrant + i; + int floorRotation = 4 * quadrant + i; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .aimCollision(box) .entityCollision(box) @@ -137,7 +137,9 @@ private void addFloorPermutations(List permutations) { .rotation(rotation) .build(); - String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", DIRECTION_PROPERTY, floorDirection, TYPE_PROPERTY, 2); + int bitsA = (5 + floorRotation) % 7; + int bitsB = (5 + floorRotation) / 7; + String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, bitsA, BITS_B_PROPERTY, bitsB); permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() .condition(condition) .components(components) @@ -154,7 +156,7 @@ private void addWallPermutations(List permutations) { for (int i = 0; i < 4; i++) { RotationComponent rotation = new RotationComponent(0, ROTATIONS[i], 0); - String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", DIRECTION_PROPERTY, i, TYPE_PROPERTY, 1); + String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, i + 1, BITS_B_PROPERTY, 0); CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .aimCollision(box) From 86c822631c025e9f82771e79e5ceb91d3087f285 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sun, 10 Jul 2022 12:26:52 -0400 Subject: [PATCH 009/134] Clean up custom block api a bit --- .../api/block/custom/CustomBlockData.java | 3 +- .../api/block/custom/CustomBlockState.java | 2 ++ .../custom/property/CustomBlockProperty.java | 2 +- .../block/custom/property/PropertyType.java | 15 +++++----- .../level/block/GeyserCustomBlockData.java | 15 ++++++++-- .../block/GeyserCustomBlockProperty.java | 28 ++----------------- .../level/block/GeyserCustomBlockState.java | 13 ++++++--- .../populator/BlockRegistryPopulator.java | 2 +- 8 files changed, 35 insertions(+), 45 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 5d842249938..8e2a7886f4e 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -53,13 +53,12 @@ interface Builder { Builder components(@NonNull CustomBlockComponents components); - Builder booleanProperty(@NonNull String propertyName, List values); + Builder booleanProperty(@NonNull String propertyName); Builder intProperty(@NonNull String propertyName, List values); Builder stringProperty(@NonNull String propertyName, List values); - Builder permutations(@NonNull List permutations); CustomBlockData build(); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index a630ecd6987..14af446a0a6 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -30,6 +30,8 @@ import java.util.Map; public interface CustomBlockState { + @NonNull CustomBlockData block(); + @NonNull String name(); @NonNull T property(String propertyName); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java index 194e2dd7d5f..697cfe2680a 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -34,5 +34,5 @@ public interface CustomBlockProperty { @NonNull List values(); - @NonNull PropertyType type(); + @NonNull PropertyType type(); } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index d3027f8469f..e4ac0f339f4 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -25,18 +25,17 @@ package org.geysermc.geyser.api.block.custom.property; -public class PropertyType { - public static final PropertyType BOOLEAN = new PropertyType<>(Boolean.class); - public static final PropertyType INTEGER = new PropertyType<>(Integer.class); - public static final PropertyType STRING = new PropertyType<>(String.class); +import lombok.Getter; +public class PropertyType { + public static final PropertyType BOOLEAN = new PropertyType(Boolean.class); + public static final PropertyType INTEGER = new PropertyType(Integer.class); + public static final PropertyType STRING = new PropertyType(String.class); + + @Getter private final Class typeClass; private PropertyType(Class typeClass) { this.typeClass = typeClass; } - - public Class getTypeClass() { - return typeClass; - } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index caf04203895..5801305aa0d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -28,6 +28,8 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectLists; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -41,7 +43,11 @@ import java.util.Map; @Value +@AllArgsConstructor(access = AccessLevel.PRIVATE) public class GeyserCustomBlockData implements CustomBlockData { + + public static final String GEYSER_NAMESPACE = "geyser:"; + String name; CustomBlockComponents components; Map> properties; @@ -54,7 +60,7 @@ public class GeyserCustomBlockData implements CustomBlockData { @Override public @NonNull String identifier() { - return "geyser:" + name; + return GEYSER_NAMESPACE + name; } @Override @@ -96,8 +102,8 @@ public Builder components(@NonNull CustomBlockComponents components) { } @Override - public Builder booleanProperty(@NonNull String propertyName, List values) { - this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.BOOLEAN)); + public Builder booleanProperty(@NonNull String propertyName) { + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, List.of(false, true), PropertyType.BOOLEAN)); return this; } @@ -131,6 +137,9 @@ public CustomBlockData build() { if (property.values().isEmpty() || property.values().size() > 16) { throw new IllegalArgumentException(property.name() + " must contain 1 to 16 values."); } + if (property.values().stream().distinct().count() != property.values().size()) { + throw new IllegalArgumentException(property.name() + " has duplicate values."); + } } } if (permutations == null) { diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java index b91e5cf8da6..882b8c9f722 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -31,30 +31,6 @@ import java.util.List; -public class GeyserCustomBlockProperty implements CustomBlockProperty { - private final String name; - private final List values; - - private final PropertyType type; - - public GeyserCustomBlockProperty(String name, List values, PropertyType type) { - this.name = name; - this.values = values; - this.type = type; - } - - @Override - public @NonNull String name() { - return name; - } - - @Override - public @NonNull List values(){ - return values; - } - - @Override - public @NonNull PropertyType type() { - return type; - } +public record GeyserCustomBlockProperty(@NonNull String name, @NonNull List values, + @NonNull PropertyType type) implements CustomBlockProperty { } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index 506a72a9392..5e195962afe 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -39,12 +39,17 @@ @Value public class GeyserCustomBlockState implements CustomBlockState { - String name; + CustomBlockData block; Map properties; + @Override + public @NonNull CustomBlockData block() { + return block; + } + @Override public @NonNull String name() { - return name; + return block.name(); } @SuppressWarnings("unchecked") @@ -97,11 +102,11 @@ public CustomBlockState build() { if (property == null) { throw new IllegalArgumentException("Unknown property: " + propertyName); } else if (!property.values().contains(propertyValue)) { - throw new IllegalArgumentException("Invalid value for property: " + propertyName + " Value: " + propertyValue); + throw new IllegalArgumentException("Invalid value: " + propertyValue + " for property: " + propertyName); } } - return new GeyserCustomBlockState(blockData.name(), Object2ObjectMaps.unmodifiable(properties)); + return new GeyserCustomBlockState(blockData, Object2ObjectMaps.unmodifiable(properties)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 2fbefe03dbf..e13c65adead 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -135,7 +135,7 @@ private static void generateCustomBlockStates(CustomBlockData customBlock, List< .putInt("version", stateVersion) .putCompound("states", states) .build()); - customExtBlockStates.add(new GeyserCustomBlockState(customBlock.name(), states)); + customExtBlockStates.add(new GeyserCustomBlockState(customBlock, states)); } } From a577512dac73bc2c2f9fc0ae0cf6e7d3b9717f42 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sun, 10 Jul 2022 18:42:38 -0400 Subject: [PATCH 010/134] Apply some suggestions from Camotoy --- .../GeyserDefineCustomBlocksEvent.java | 2 +- .../java/org/geysermc/geyser/Constants.java | 2 ++ .../level/block/GeyserCustomBlockData.java | 5 ++--- .../geyser/pack/SkullResourcePackManager.java | 5 +++++ .../populator/BlockRegistryPopulator.java | 3 +-- .../bedrock/skull_resource_pack/pack_icon.png | Bin 36264 -> 0 bytes .../bedrock/skull_resource_pack_files.txt | 1 - .../src/main/resources/icon.png | Bin 8 files changed, 11 insertions(+), 7 deletions(-) delete mode 100644 core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png rename {bootstrap/standalone => core}/src/main/resources/icon.png (100%) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 5ed6e4f4f2d..05659fa42a8 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -31,6 +31,6 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { - public abstract boolean registerCustomBlock(@NonNull CustomBlockData customBlockData); + public abstract void registerCustomBlock(@NonNull CustomBlockData customBlockData); } diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 23fb76d1653..360ef83471f 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -39,6 +39,8 @@ public final class Constants { static final String SAVED_REFRESH_TOKEN_FILE = "saved-refresh-tokens.json"; + public static final String GEYSER_NAMESPACE = "geyser:"; + static { URI wsUri = null; try { diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 5801305aa0d..5cb3221e56a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -32,6 +32,7 @@ import lombok.AllArgsConstructor; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.Constants; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; @@ -46,8 +47,6 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) public class GeyserCustomBlockData implements CustomBlockData { - public static final String GEYSER_NAMESPACE = "geyser:"; - String name; CustomBlockComponents components; Map> properties; @@ -60,7 +59,7 @@ public class GeyserCustomBlockData implements CustomBlockData { @Override public @NonNull String identifier() { - return GEYSER_NAMESPACE + name; + return Constants.GEYSER_NAMESPACE + name; } @Override diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 434dfaec650..2e6c603399a 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -169,6 +169,11 @@ private static void addBaseResources(ZipOutputStream zipOS) throws IOException { } zipOS.closeEntry(); } + + ZipEntry entry = new ZipEntry("skull_resource_pack/pack_icon.png"); + zipOS.putNextEntry(entry); + zipOS.write(FileUtils.readAllBytes("icon.png")); + zipOS.closeEntry(); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index e13c65adead..486bebf23bf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -94,9 +94,8 @@ private static void registerCustomBedrockBlocks() { List customBlocks = new ArrayList<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override - public boolean registerCustomBlock(@NonNull CustomBlockData customBlockData) { + public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { customBlocks.add(customBlockData); - return true; } }); diff --git a/core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png b/core/src/main/resources/bedrock/skull_resource_pack/pack_icon.png deleted file mode 100644 index f64fdce4b33f39466c03336dec679c025d4fe9e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36264 zcmV*2KzF~1P)YR(7BM)$esxz4z+XtNXv_ z{LeY}9OuSA|1_p#N~Yw{LQnJsOv#j-%;KEr3wW){qJ@hRyNY3V2+|aSq$L3hIg-)) zjG{~kLiInDGIStEU0{F=?cY5%HpWlr#lMDR3LwW=rkydraU|VxjnmjX$2nv11^YNw z?0DjPxL(62Y(zeN<1OLloY$u zL;Ic%_U>Ng9O&7I{@%yJd^UfKzUpg6rU3FPq@|_R$#&2Clh~|9SME=>ym^GOy6Qle zlK^mt0WK%MFD)uw>Krd|o11IuKs5}kk?LbH&=14~?pLi|9_eX*Wxzjya+ zdm!lV-S!H;`fF0A0CJepdfp{B_bs^W9}ZADhX{ZQ0zoAtt-%2ykkt`92?&vyG+8tJ zG0jp73TmHB2F77(6}_tjS_b#unc4R2ck*i|RYrz}kI9WZg=GpLlcc`Avo+f^`(5R(Wq+Pa zG%gTQKrlP795Qb45CTCYs5IN^L|-$ACuo%_kj91BovZs1`%Fqu!nB5}74^O}IGkXT z5e?cJ*DECf5fToOXe*39TtC=z>)5&{@0c>fj7$Ntx_4K&br{7^(mx6hi4Fd$`^Q z5)^a-04YdS3rQj;s1fy?Sj0?zPi@tE3gpT(H2VUK5(qBA2mx2uB#ib_rlUhdW&XZr zKY8HZUw`ws{s@p>W_@9cW@Aj7oF78rW)(t3gUE07&GlveUjgH?_yAnVwqpLxtVX zB8+fpkB`m?vlUh==xa8gL%IDtb$x0-`x!*oYY~x3QlCSs=T#ykVS~x`8#|U?@ur|$ zD9eG~^(XAdIl=Op)*$Wk7cJPk{HEWHl-+r55%9~@m?Csy+(HdRPNf}BRs%2!WqwsP zK$Q}h*9DVR4q_}Rq631`L3JS3ikjIYO%rJ)bsbf6D$*Pi;w3etpB+9?e<@L*aXBDu zoIV0_oy+%mkNxZ&rQOdz_NqVR6qDDa2C2)`(bBx-pV@WJwLdAAX@^q+5?KlonDDW4cfGaO3MrPz5Bq^D}Qrjcm33q*OUh7 zm_2`1|LflR`+-!;b!u=qWr}pxffEoo9B_o4jn!6h0X0Kg&7ieMWV3SvAR1cjqBKWn zJxDf2QR7Uq*D=TRQ1~8kpy< z(sZG9dD&|Vy>ZYGYX%x(Z(cK+#(pP8;5%SJ^Q?EqW-VBj3bGrE!$YUFHhIkegv^+K z)sBnaa$n9%&Qs650!4a^Y2M+41T-My1Gk3E!UBU@vdb)hh~g@>@dajPb7d~68CkIs z#Z8ovM9b2cLZLCi)c<ktqIu=;se1Aq_)nCc?~Vn7fYv(2&Jq1H?i zQrhdc8b?^Oj+*NYV$x)|R5i&s*Rk_~b~h`Hqj1F>3MV0frn>oJ{*sS$&s#W?4eVQ2 z$c>Gjz@PV+$!h{2q+`Yf{g=G`t`e6S^;``)uSAi_GO!96_wYpCB}AMd^7zyS;mjsv z*2IDxi4;{}XmV}eP#}qwtX8rEReP%x7z8!^#14KZG$&WDD-NUh4UP5zfvaAVYCooV zh~hX#GcW@r%TGejIuz)*+gO=_LYS=rvv7=d2;$@4LtlRlCyAUAlGzvyqaZ}Wb0j?9 zfv3JoI=$3cbnZJ#yS6_la-#>1*Kc~f6S(3eyra2_73mfw)TYl(8owl>-8W` z`}C!K7vA*aihyUlONOyJ0YyB=wCCqV$+C7U?0}Kh^iaf{D>$eDB-AKosL&9?C8&5p z17rLoBwR`n6B1ki^~6jpo<|V7 z_|pGa*3f?4n&1B5?Z@N?JpppsYLL3NX*2d*^6tmW9I5IrY`3v8)BJ-@_V`%Qvn-L| z)C^|zP+CH1gwO@bafyN-YWqF#te4Bq);a=jO%+9sV-V7O~i~j!);`I0{^Kc z>f#V7?-5@KjcMqbXWu8>Nr18jo1Sc{K271XgS2SaL0y z2`q|GfQ1T-5(ov{fWRpUt+DhYG+D=7sUf8qlvZ&iLLxMnv?@f7cOtiwG`74Ne9X+& zn#c;PDTIVqrbreXO`N0IniGLg4R*y@nDKIHUO`CJa|G)EP}dRxNn1Y*TI)o~l2P(v zHQ7;E(747-(;A8rR1)U3Py^bYPhGETIf@vM)hJ%%Q-Tx)T&*#Pw!@V+@sw5}fX4_j zgd*+$DUTun3SSa<5{NTnt)=QS(`U{<>+Q6Vy?bbI;FQf0KJ7S2Q$r)l7u|GAc{Fge zX~L}$O;KI3S0O;btsqu$3@NoXf55n&{mTh6SQIFfozFEmq&78(O+u6rPpMrA2x|_7 zCiLzFMnNkc!wI(jZGdy-|*&`WOXDH?Vw1TK8=f zd{qD2V4sNM84xzZ*l-m>ZQ^8PzuAlc8D+180=~zzxdn@RYPV9GSAfq5(wu_nq)P=H zb1GMJeS+qWjzu%y@ty}N-~ZM{J9~Eb9aMs6miV zbCk4sVoe=l>~hY8wx=Z#pv3t9l|3#kFlZD6xA|2(lnCe{Le(-#Cm|YK6-S~NC5yF+mt;-qF+E6D@Qtda;gnm4UQR*0p z;N0p-yGBI_L(Zik>00|piK-)`5>~Z~+PE(Y`V*~95)MJ!G2ozfUuMDK*ufQ2HvLT> z{`l&9e)gjqHgDdv?pXcq$4X8sfHXI^_#I0w{OseqbJd)v7cCYd(6f2qKo4x92qvYV z)XcgrH8Zh8qiQ2&#=@MBKznt7AP|#^E0_-|cxA{qN1#kFMUu5YS@8gq)1u8I zhhQvif_z#i(ar#9!Y@pWqMDRw2Cy3NOnr{hYM#jr(|J~EHn*uQCYQ>%f|WLi)}mAs zA#1i1d=-R%QWI|>A=iYzAx7Ydi8)(JlX#LKp-eIBprCd@DWFgrsdpW1Gj`nY?)Tk^ zpZ(|6n>TOTcx*?((UsE*AZK6shW|atWxFQd5|d0HG9fQXfP*o>rwoLc0jEegrQ?2! z>N+V+l#TsOn3?I-YsHGtW>yI`+A7jiHfUJ#xp4sK!EUsPuv$WmB1Xo&P10sWavgKA zs}~gyp}IDfKCRXa4j>$6QrSbH-zQ8nc5Q+w?czuVDFp&@geA13M43zdUCWB7ha5C; z(3o&cVx~eMm!OW}SqZCjShSvuYTW93t27g{gN!iRe$%_&v-aS>ePwpvz`)*D_e&o? zIc)&a+1b@yH*Myp#tOXZjj0tGX%wPZ2U(_XXEuvYS1z#$HZlt@diyQZ%>>zNcO%s7M)ESk+Z`+$xB2C^ZqS zP=X-^l+b=AHRq}+*&N*QG&7&DbxtzvJDem-N?>^EO|`4#V3zkdBsa;HGmuG0n}%`;|y%xBQE zaEwxfay;s+2Ds7|%8XI~P=nj0Kup=!K10f5@Fy*qO-%CKL=p;tKq}56kS&Bd2I1-% z(-3X-870n95|e6NaaltS$RSGtRWUQcJe1?ltz&@FaW-J+w;6$43S(+f5hdl?On`~! zq~M6B7-AtHV~){I!uZJ|o}-RSiV#W0kS0c}5*tW#$asMkqdmxkHC#3h2~v~QPsS-7 zu73Ts-+y7-3#*2P51#bv-cJjFESR_8!uqC$d5T6Rm_W0u2I=_woEY%3@cs*D&1rEjvfi{2QE``IT)=0iR2M;95(FNE+Dam+zq)NDH zRN_Rwh$D?xEHO{1p1~P>>rz!FOHl&((85=Y2l=2)GV6Yh?n9)3D5;vDjmo_A7zh`r zI3`p7;YX5yNZ2jDX9wR6hID|tH=axu&M8B@i;V^1qW|0Lotq#6kH)L>NnNT+cq``&odl%|R?f>43*5a}}10!!K=5mi81l&c9NSqZ^B zhP0H3`wSH|(1qbbTI;BLXYWsfQSH{HFp+$%F|0Pz1BejJnLGCjk3O>Uv!#6Dohz0t zOZ6Vue^I)=VV)3T@r>!y7ZXb76UGwKoB|`GBm0ldXgIoZS^#AJqQ&noz|4RNhhS+- z9J@v^WtUy? zHOj+}tXsGC=B4K>eJr0HyH^My@44&FP;GtJxvIIjZTZOXz~Jh2&wlG@{PxFMPI-X5 z`Au(mA1G_~wdw{~NYUa^G&IMmzjNei(F2ECK0*vPiL`|&Fe0nLI#jI|6C{+3Y48k` z0u3(3Ihs>S8!?@35m9h1Y+%h+Ihjz$iqY`_ZFz)aIfZLeJJjs16aOqv(m^+3G*sGS zsBiDJ68)vD)3Ne@ww-ocmMizYdm!E zkBp2yG;79m?C9A`hK3KmM7rq7Bd0V#GU+r~vh2LSFQ`Fee^lQkXpK22aWi9@nU`wb z;979NE{fuo0FS3>kx9>u28pbrGMAW{av%~6aW%VJ(@c|d`~Sf}Vz|PqC3>RKqzJAy zTNpLRm~|9JD>%l4((h4|6`S-Zntg_(OU=WfdLTN)0BNKmv}RD|Pt2j(3#WKO%4M1t zDUbyM2tuL1LnRb2`HUtDHyvY0yA<_4Lz{0tt0~S5L6@?|gpztfaLJ455t&53t3C%t zyH_k*`paM6e#eq@GPPSBGyjaagiu1_u{gpoL^hW@>A`_h9UwEhx|T_Yb-0pf?V$-I z1zIRYF&v-mn2mKroH)u|WH#|g3RH8DqF*`MN4*jKk})RHA(-JJmJ7IcwuaSG*)Y_R zb>dJRRMcz9l}SfPH5EgVd8#yp8x4A6#wb&*EA65^#*lP~)>y7J1q}x=yeVcuu6{ga zKKj-prv~yF^*%b{#{XIp5~CG?fwDkRNN{dI8gKzm0m%d{^l=S7MZFhM=^C#TNR?pM z){v+^qBQ?7+(Rg7C6xKv(LrfC<~eV>{q8&eNxgsj-6pyBqUGn4J-vJ7{=QRV@!=^A zkYs(+Ty3Vtj9!n-?@sL*v#mX&{f3wF|uR0|(M zJgMS2jS}(fRu>GdPJcGbcGCHjZ7yo2NHr+AsIjl@jO{Tq>r3m2;+EX2!95yC4G`CA zEm%!sT(d-*LerBjx>K%pAVfC28_XOOOevE+yBWsa`9DQfr*{w1YD;t~SBc zV2?9`gljW!m1)JHxknwRnv-b4E`%oV%H&Egf(DOjkhydsDCDF%*uT2{j&mH>+dgmZ zJXRPRz5dKI&%E4Y^jgM9huZzTvloAKDfI>&4_^G+jJJ!Y8U;UEw~UFc(vD{ z9t-O|wD=4u*SxMsyaJ|r9&w^jT963CJ=C_s1u9(eFXO3Gz*Z((%({}R-wWgSGPWBk(}H#wyNa-gq& z_gQ58hn*bYBNKjLf_;1T{NUHO-S!vxY&L)OWtY<#-7~63xSq4}={3*%>y4e$eq;_d z1E`jKMq0`tn6M5DI!0pNJG0(HcXHxwb)q~k%OgCi71W@nk)|Ny0X0I#i(J>Hr;wWZ zaR~)DpK5L4Y3~<7+`6x$Ym11sus~57qarCr%Ulz91*qsd=-jiYYP~e|h@)O`E1?gL1hP6iP+$tKa>$(mkz9A8@LfQ-_jM8X()Z zZ++l;Tw5TZiCVrf!LuS|xp&|GJ65e;_3cNVc;cSu*kAniH&yljnNR#B+ugG#Tz1Ym z*VGbHH4}@P^D#2+y`f~Bv&g9Cfix)@%$jf}%au$>yU@JCiQKp5eOa^as+uuhQ-H2^ zE27wp0O~xdUCc2$&V|UhvaDX4&PJ97K-xqLDF%xsV>c0}RZm>B?uC+ZPhV}|R9){G z)4ML7F|A|csx|9=Rtn|!THD&Ux3{&io;`cY`COjw+1HCb`+84#U_^4tmmY0xX_%Y!TCR} zCFiwfhBl+ZaMQZyo?TOy$rR?!n)Ro?>mj4F<}Fdb4pXpQYEPMZQT?xG`=m$5 zQ>+f5`6e%8QKnEOl;Fx#sz{Ur!1sZ;M>PPHc@`1;aqV+x8OjT6J0Q@I1TqOA=9%kp ztX4zK=X2|90C_Qi7ea_#d-tu}zGvS*?cB5Ho=2W|{IqLNeaZtQl9rZMXUT#Evkwdo z4Q$xF@vzrGcXv+1MdzP?*%cRG_|T!IJt+m>^!y7y-LQGf*ZKzs*Isy3$U@5qpN|TK0%O*1L=ez>Ph#=>v(V>_}_f> z-&btkwQJ20AAFL_DQ#la%D_N>c;7(()+0S`!Q3-0xbmX&e^t9QLQRlCD0Zz{yY~CJ zZ0;vP$agN7JC7_mbHU%8y>P+*KrJ(n#u0#Mtu{3k3R^Zb;Xu7C=9rS0PqE%F+Hda z=qaF-$`bpBIR-|6J%b^}iW0Ni8Rj&bQOI=p-*Hb^nb(+7fz+VlS_?^R-5+9CKSwDv zQT^V70(%cq%xYz5uQTUUgIfWEQCVHDL8$?k5~Y1|MPR64UI;~qQos;$hJn8QPu}{6 z-@W_H*|Xk$!P0Zy)Y;MY`h@Q#Cx5@mGMX>0x&7Yz{_z<6L?>Kc(*U{l$}8WYzyU*i z3s0?G_rrTvKKxbRk3Fx(!$1G~*Q!?6wU=LVlVgJeqLwrZHN*3wkaASlVsKdtBg83% z5(8O|kvxzs5sc;p@)e1EAkjZ&>v2JvbP!>JdR&=L%A5+#|HTT>GsLlHkYg|>G)Mxy zKFe&&OzHq%|A>I^g-H1X9m;G<5~O29n_H7jz;Yn5V<5!vnAA&hg#}f8f}*3L^Nn+7 z&$;IAhaULB-48wV1GWEI3(oAKj4pB+O)WWVaf(RMMhMdCy;LgQ*FSV{S1cA^dC~Io z$?4#=nk=trfZYAygLgF6)y?%|e)$JK|HW4)t(BheWA8oCe>WxMa|#(@$b)h@c;t@z z@4u}Qir?M0@}XVPeyz>Tsb!1L`rwsUUi&wckc{t`^l~@GK}QJ!A>cSbJ~Sqj(1AN+ zM(J`s!p!p9`Z%`qhT0q|N1)N~5tIX}bF5;X=1AHkbSeZR1z<2MOw^qbB;y24X{z~& zF&ibaMUJ7Y(8rHt)$1lRc_7KrkZ^F_)z|!N{f6i22L}hr>icZivUzWJ=d`_7U3NKb zY-p-+iyK31cBY+3WT?eP*oSx6krO6=_8=p7cwmyI_}&G?EN zRX9PhM8G+(R)mC3GiSQ=r(fI00B z=65*gY9e^@$%j9G+ns;-Ka;=Hyg6r(bSj0;_6~hA#mkgwx^??DdD~roIOU_}hmzAC zAT2Ge&KqvH@e@z4dg9g%TQ>I`@6Z2#Kl|l%72z#8n3vezA7ak{M^_WYrDuAE50oW# z4sz`7<62vkAT^mTN~tS@@G?PBP=uU7aDk8qrXdcjgP^A0A=TxJDB`{WiX!VNk09<6 z#9~APQeo?0UZ5DrDlbX;1k+m_Ea-4By_q28%brjD&(F;`-uLQcl+)V8nzQ86cinLL z1z!wG<^By@Hh=Y%oTDyNN4q;aXOCsaMtXXC2aojlU;Xyy?|tXn{`ApgNHZ;Iifln( z|ER#->nq3>B}!64@s%<)xnf0~ZA(F2Tc?)-%oRHMF$e$=ItWl1?`0xQ{VQr?EF|Oz zLxM2oAQ_X89??LkRAf!ykRa(16a%BBoJmB*by(N*uC7GS-o1raa?egDIb{LT+}z@4 z(#?xXW!lox)#a{#>h3$D_v$ju-EG}}_U-d7Y`CtqiH1M_*^l0Or0371)2Z{XxbCx^ z^A>%AGN-=IrJ#k8XP$lLslU5#|rGskUb`X(tI^ zqApG~anB@)4k%_4RBI7szU4|1xgycq7d6Nwgl1CdZUE08>3uuhQj$!ik6Nx3XjND8#iy-e59Xq(N)*~bz=5e z|9xjk>ZMgpzCdTZ{@jbMzV26`^#8fB@)d#*%5(}5SxbJ5p|KvA*6bUOLO2?vql?$|?BmFmsjbXD-fUABqlN@^pmVeu z5){pK6b(s&wmKIvSA-3*@TpK@TREgR9xOPGny}|2^2Ha^2MKvftQkMna!LRsozA!` z&OP_NnTB)!a@Y2zB|rVXgj2_{@LY+p-upiJF4oeytb&Z= z;JJ;@-gl&*clM%1Gg{}J^%vW60)5#~bAr(XwJ8@4F1q5H|3joK-uuvl|8}_Nynp3` z-#UBo@{gze#&hDfMpd2z#mHP@<4G&NC(+T&K$!q_q^-5ZAwq`kR)T?Sh;oQ(pFv=} zr%2LgnsYR!DO&3orqz?|t{rQ>7AK|e_J+Ji2onxjH|s-d@lcbqPFo-$M_sJlylHTfh2i=Uwvp@1+_TNFf9%OAtYAL_}6KNHWRb zd8Xc$NpmN*hMWL%Br-{g{i78VxTEG+SGr&hftMmk#}qgyI_nt*dRBkvyhU^Gs8lLE zsOZKhkwLXbJ@)kO{dMn_yZ&pT!alI%`s>bq@S*#+uiyCGH==7+;P~{Pf8uL7j*Ca~ za?Snst>4LFLw9Ug{qSkkYVD=uqzA~1?(Rj8?r8Y0&+ROOcL=o31(wfu&{!I{<7Yqp z!57p%sbmT_-SEL5|L#_zzfZoagr7Q8r$;QZ7;03eJqRd8>c@7^dCu2yK?34kMz7JyPWhb*m`oJWll!|SIw`-W$iJZ80r7^EkFI?J8Jit*1h7d z8X6^%O%lTm1=QC`y}mmL#SxoV-P5|5<1oG6S_kN)L^0sVbBW=yz(6s?-fRT}6{#zW zgoMq#?wV`9bhzh#rGIZ%SRqikaRb zN~hR`FA3_RG0o7D0qWCA!e(~GiRKf9TWXJB^J8t{sPj6l_lNGuy z4UwN-fDC|#?{&NK#cS{Q)PMQRZ`)d0X1(eUI*H_@2gttFEC1K~&xrr>^=Rk9zW90D-;SZBBMl_ z0&ICj){7xVD;z^5j*&p<^&iWYobx|t&zLd$aLylaxhmmMWMUL4Lctsd)N$a(2+}Uo zgWo3(94SGiu8CraxM?4)dv3(-by2DTIYon{WE7PyY9$-G0_Q%do7(3uIf|M)aCOGOS zM_idllp*DDBs~ewhpzVM5TP@JsqJ4VY#+qh;tC2paq6HU#n7R&hewfO!L1`>V}18L zaQ`v!JUz4anXfq`eRrJO;lo{6!ok*}e*NG9iEn>bI+t8}%^hbgTzJm0`0V2?Cp|!3 zP8Ka#(88H});TRPOlvfa$~)^lEU0r)967k^+0C1teI@5@^5t4J&>G^7Hr1jsI=byx z+|gSlqk%9$2_zcZ+Ru5@jW>RwqpkfV&#T^Jf}a&v;PZio1Vb{z(Ujuor~}&TJpDaV zO2c@}6jOjH^rjh!sY0PUTSdYcP#2?UPE&Ly7}72YITwHZ=o3#=j)qxvC>a|Yx7_RA{j@URtHjWk|&sI+9Eme`DZ}NGW!%Uc2U)Cl792zxw|!YVa_x zGlu=sM=;hlZ8F6QWB&yFrqEw%ROEryzt&GyMBH7sNLk3ku__c`Bjr6 zx1ZJIqb=iMThlOB%V9JvE92pTG0d7f_g!7nx?WnPo&s{xyLn$uHm-YS_`_GdVMkBG zpFJ&+KzD*^)8y{E@BDNvkv~#-Zu6#RZl z3KT=8m)MpBF!!u;{%Yl2cYN#o^Ohet@0_JoTgZ=jPClQ%9?Y3jC<`515k%^A^in7h zkP3Lk19O;O|G}tfkQu0B8Q=t_TxqE!biS77dPq7U;t8NRY08Gi9PqHjf3s@!>dH~O z$uA?L*=*_22k!skIhSAa$ zX$_)e+v=5{SkdHRZqh-LQVb0a-ha=74}R~}o_F)c=YE-TqoU3Z8j~)XVveq6NNnBP zEC>2I!JZ;VPd>!{Vu=1S+__7a-@bk4juzK*nF2;U5pxgp_4%o~x-X9e5`#sK!HU3e znPV{E7!d*^W#b_`mIGU0rsMVLujPf3Xehk#Lzl*^HHO<=Gs&a|l|xmdNc zr)O}_zT?-D{J}>a{7I7|Us&AYVOqThNtGs*a2={O?BYd>rXRP9IR#0yL7OtQT+?GDF9foJ;s6Kw0*-w`VrxLK zufVad7(zC+pOcw3^Oh%`ewqyo4vL+-ck@g`!@s-f`o+V6#NHCeo_vV@02t*C`U403 zp}=4vz>s={6_)Cp=hgZr(HD1j0wiMxa;|?TaJ5G!_AwX z`_Y_?gM}?|3O2D9luv;u zbKRzZ+BF^R38Kv_mjOl2?|x?8y5MNtgTs|aAA9r{=PzCQ#q*kDtT!9#bt!Ywt`1=C z>e;*Fcwf)a6gF@9g(vzNj*9dT4vrn|bMD%?AzmnPJYV40#0mC=Lig+#B@{(RLQrY? zsWYMf52(~jYjwf7kRZpQwTU`!S(r+P3MloCb@94Xcg`vY;+9oUJy|?a_v!~f|HT&$ z?BBm;ddkJ@w1eW{fhT_V+go3k&5j*+jdnEUv@o%br9Aw|BmcZ?$=QEaVuU3f)0;zy zpcCt!DC$nQX-+e$UtuT_(}uxOd?FASRGO#4F{-m~P5Lg^?UikRb3!4Rgm4G~hw9je z0!4uWS=%tQ5DGYs0tH3dfhOuiic%o(yInm!;R(7;TK?_3-@X2(8{Y7akRO zbz3*abXvMAjhCy@XS%0|t4yFcMSF@OS?_=)sLslDIYXlCz^hQW6{?ras)rviFv}kN zxan1>P^Q2VQi1}2ZAF1$E>UsKdJ&(Rit9qkZBIV+Wd20or_)iU0CJe})KgD=QE8Bd zq=!}_k&HPyPYN|1{X8n+x~BAK)WAolqI(208X1}!7#L-!2SG#8MXJaUFEGT%82mf| z3!wvrG2ak=K};}Fn^u%)F4J3)DA?9PE~8p&g&|+N<%O-MT~))AL8bt5nDW3w5B@qB zJ@|N?OVF5dQO_u1ai*6RMm1|W%*^j8^T(m4aGUK%sH7!BFuRi=l>z*iL_!dx0|$wK zARaKdl);G+G_=SGtrrwXN}<5MK;l3kFcO+~O$SDY?G&AD1Wp=oT)=Z3y;9JLOYk~@ zuC$~3DpE4u&?fR`4RMKKlVV>5=Fs545m#-QlEafJfE_lhs(bEye-lI4>}dq4RtZtZk#8UFHQkb!T+plYN=~oxa?~K9zk9b6a_)( zm>wXbMTxj4G#Erpw^(9(3r20K9sQ7)-7FC_8uxA7Wje;;9-_@asU&rQYITM%WeQqL z5R@z7BSS+&uP8V;Z_XKH=-@$ltk#X34l)IhS0K0k`j)T1Eta^fdB*&k3j!EbW{(eu zyu@e`XwAI%7-_+xK;zl&QP9O7Oo8dRQ)8A*0*Egqa%I4ktlB-wmex||eR|)4{YOO5 zn;IJN7a#pt-19w$hoQLp{`-rMt$Om5k69cGnKH3nq5SG6KX_Y1?%*@^K0&=hbSnav zQr+;T5=w+T>H#t?vgU>>)5#}9&rsAh3^gkU4=qZAL@lZ6Dbq=d>bPgttlfPi*PThH z$%o$mXPHKy|O!Tddn0*UWE)l`^=X+9g5}zLt1Hp7~pb( ze9kuUoYV;PQ2m*7*IQybQt3i*QS~_6^pkM2rDFuCQHprM#77(h# zonvyONQr_^GFYVT&Pj#I0VmP3NCK#E-9v0Mnk zlgZGfXD{(x&-VgJ5@E=FM#x`}!MVCz<~mKKPBOSINi@WrTU6o@t&l+amz?2||aUoRjd%0^GWLBL>W>XfYZ@Qj?1%LEvx#!K4O62D+(c#<}c8oFVdcNbjE)!CcQiuekNOMVl zSfb>-fr11NDVQTbsetb=cn-_NJ@<7}0GTLL9ONj-f!;l<(~KZPiH?D!ghWe>f)p8& z6uPFB0tO3-Hk~x-4h=w9K+HC@QFFCVNI=ws8`4f}t2M1jN)*L0u3I^aitfw)aYkut zBAN2jnYwr~m5!Fe7f3SZh;R;Vcy5Uq^LTp-4rr3n{5uc-5KiO`lM zs)Q0_fvNo1Utk!@bM%2=KnUA!grE{Qh>B><>N>S+SRD(Q0?1JiF44ynKp24&2n00| z4?hIbzC_6bij->;DJzJs?<+X;Ko?SKUE?Cpm^gid?{S4dH^2T3ZN4;7Mtk z^f*R^DQNEQ+0}P~ZsAEQQvf*%A|+S!0v=3DWkSajOoVmQLg!#9ULsNP)Sza%FS&Nk_kfaWbI@w(dx4 zQ%KaXZ*U}dEJVnePLW4sR#5{8P(#QgU$5gxOzWl~LlVvPRIg`;E=x+Z3)$sBe?YK3 zulR@2NMXgaYN+Vy5)=WEy1bCOPM-m>B+wA2NV%k%u0Jw5@`n?1_fB4!0?1Ji&Si<( zfS;pAB_{~EL^%|?x?sXIlG3hT1q7E7Wb`UQi4j8etggUCiPVFadJ;?ljhU#rO9-3{ zflC~{mPDOfYY*LJis&`#{UwPJyZBc~L;iIy6DoA6BHKAZKa!qAgGcIf)Mx)kV!z-(qaxZKwuPy$~)HI;B@GRMIYpqz^%a3uUfh!SU-bL2y450o-{JQqkh1PRxyKW8tI5+6yzBN&bg zxCM--#cQvWL~|X%QilK;3gH5y6^R`Mj)Nfqbxe7nMn=%e2-?>M1F=T26c0?5%2LY#6akq;z>LW%w?#~57rOd@b4hAG8CNif1gG*$=_jM?m7 ziHv$sf)taG)R-Jdrb3t-L^XB6J$JsO`{xn z38WZ7hYQT`DW>}bb&Ozm-~NAK1piPd6y?_K+fK~AJIQ4VAV){yYWmGeQ?#K(9E1s? z39=gPj1ldAEeNU$V7o;QE+rB^FeWG(m8m66>W3ofgpdgftRkne(lBvGbfZ!tnbrzw z-_Y*U7}p)9P^UgCkT@s^W~Ueqh7$D*=x_+;xD-u{V07Q!9}n&C`=al8@>jS0Zi;)n zgiHbCCsd$7fSB0XQ#;ZX;==g(RLKnDJJfols!U07NR3fq3e5>J4nZt1 zp$?BkOLZmc9D=k%s(D+$cpevOU$g72q>bt~#|YA)0twJe3F?Rx_dfo_Ukn}`!q)BE zroiz>WC|chL0pH<4kSU?VWi>$7x(jpI$=%@pLLhANy^%B~Hc3|JWUq1fSs;7_Z4LXHo z3LvjgJV;+;M=nhjvr7xlt$Is--VzK~6c3S_6A)tSV8tX#u1SN3t>#Xm)rHJx8@1J| zY;Ce)*`}EciSdO~87_2N1W^%4dqiu9S_$p34kHjk!nQBb&(i|Bz+GkF0M^`l*N#Lf ze}!PEjptt#h!Lr7O(1c|-e{EM*WBLW!~j+5~i)XxLn@F=0UI z>dGjFn^e?~E2Rzwwm1aw%BUEA_*=BQfA8lmp(CH$v2`~NW&>cX(39$(z9xtzo`}y~ zbo)pUPL(mOktu*2rZhQp(N&FwXXh?%#@Z*>qjxZmu|f&M!$mY+dOfBIV2}yjHLAcB zKrE5=rCx%|1rSiBDI^@*g@@Q>e4G;fKet*zyaY%}$~5B!3<=YJN2j*u6)2?vN0Jg< zmQ=mzQG!-sf`N~GY8n}N5!X*p6&%_s(P`ueB0PQQEQ`ZquO)9?I4 z!^}B%%OxxRvgF0K9>?2z(#jM-4pW?6&;NbL@=n}w>%&;LbszGjO0{`T>)eGHkOIS0 zpy&fZph&rd>l2+0lGnWp2^?txd;vGfh9n~4c0EWWFBh>J0nzQ1TAg3u-{DvjiD zTkce88UpP#QygaPJ$GYp*LFN*tD(eVanxlJ=;&&~jM?4z@O!R+_%H9pV^40q_K~~p zT-Er7cQ+ns#m3W7rT}u7((V*5-@5L3JimJoxng<3du^9ojcuXHsVXXB9RtcS35Q5< zM`;K%Xrq?SktZrjDbX3Za$?H^SyOCIPI{gNw71N>C$&ixxqPWTuQKrfX+W00>Ijgq zT&R2b#TeK&UXP(v$mvJlfqtxib|>z*{c(Kyzr7Xjdh<1?@0!Mcw06qFg{h(qhbPHm z_Ogbgo9gN9M_p`UZMBZqT@F6|3}iiuJdv7HC=hTeQDy>xBGk$(QYMrbAI!3bZwMGK zR`lG~bjdx%T?=Qu&b)c%FkL3pz0}RzxZm! zI1X@$gA&^P8pSc95i2N=9HGecQv~rLfDEC@W$5gmgWh3+QbT~z`4W{FgN+wf`-!|1 z2az`AgqhX0)%}I_YH{lg>sbE~Iv@T44m`gHIWiY~-nAI>7qf%z6?~!hG^=lELS1ts z;&qJ>JcJY+BII~#@Ch``9lmLJ8~v%5>im-vdh<^LnF7emNK->2QqSD~KhAp7S=ha4 z2NxLEQNzWVZhb zshE#B|NRy`wKIUb;m5$b?}}7@KNWTLn6dmktbNa4VXSLrl^Alf`nD=uj%P4dthy1k z(R3j}LW!lDAI5nP{Rc{=3eH*7g`I1^g0a_KgA5N*bT4G>az7l`)hefw&)PQBLZ4^H z{(jW86SU6Azk781?ko50PJCn5tTTVSzkhJY@xA*ehfD!vlDI*o+s}_(Gc$?n8~5$K zZuVL2sr9Qipe_}!?sLvr)6rO;z>`1uCc>T_IAg(?Xx+9NiM~B>cmuO<3(6g z?nCnVpX01WU1&Y)9BgWyiR91Uhk4~5uvrcr$u;THpRog*aP_x7iTghK&lu^NTh$o0 z=!uqUo>k5DCI*4}9tuB8;N*b@Ie<%obr7Wj>YEL}NEe^S?#=>yc!(F{2>VM05K@AZ ziUvwpE`z!rLe>Z75=a)JV;OC`=sM?1`*&>plEdUv{kz#MB^KZ8I4mcHbh!{d7s7QN zR`9tz5IWwLP}inEedIL*5Qi7uQV4^&O~iXN*3tdMz|i0Xp4{d+m&AHr`23m8{dP>kWy$*5T)dN40>0Ql;`3`=6_wATF@GKlg;kpcdGNt#Gkl6p=EjaH( zH(>RGi$Lfeq-URr6>>Em9o~j`V-jPzB7B#jxiPJe&*jE&<@Z02JO1*UDAzSkNI=A- z|5*j-SVPgchoO)*-ZM#oT&We?W_=RpguO@vBN_x@JPq04A*fJvyCsO;3MA(mB!p7E z&5w?tTncdWqNVu1!v_$C0);?eV^2TYJ3QQQN#}~@#^j2v+j1D#RY4^X@LZ}>S+a!! zdizGO{e_?$490#kcfr!XJzX@;X%7$@6qn6j=>13A8Kout{RKLBu!Q~tdjluN_LN8B z>!@^hoegnC+rh!5;6)tRFj(ah)ViZ`xeAgoABng>;oOZ4Xu0wh?mHMBE0}yOhv?%o=>%di7sJCtxbbTr z#{(buTMT#2eeo9(5{=s^+O{xVL1n0oqnwf8NvZw4@nMR*6eu+>Msoin$ma_foxM!) zeRft0LF117ArHAjs5QX%{ii1*PMmBc%b9R^d`$U@&LOfeL}R@9D_6UPc?1;GcIbIu|XWVb@u> zOA;)tV*XDCJAY zj^W6cSC?c>i74bnDO1SeHaBHg2vpX%mZSvf=yYI59SgGoHK?(>DMA z?7at=WY={b_`iE!tX!RYx_ffK1P+k_1_&giTxaL+yGKjA;$!uZ+aD6P&ycRh?e@MZAw2)t4O%^`vIs6e%Ij1fYqb_umKqout&oB;ox$&R zuw`N!PI`+e@KIMUN|cfm9gc!orJDPWFJN+kVr~LozW+ELdE`9i=GS050)O|1rna9y z5r=-jAG$WH;Cq+r*2U_q&Hm0${^FKh_dT$ToTX7Kth~<&K}bQ1aCA6AsUR>r&(P9} zK(2_nQXNNTW^mV1f~{#nkcAtlAltx8Wc<&w2J0gP3Sav=v( z=a`#bz+2-^)C@xX-e3Bkk#|g@`{Ycu$5QShN}$*am1oe<7C;Qz7R9%c~3vODrW+Q*qN=sfww62k`9f0X(dSXlnv~6rt;e zWG&hq4?z%NX{m*C({;35PmM9qGUh~}(eg0A)Wp$K^H_+B3G9M?{L7z@^~j_8be)=~ zG+2fXOV^Ra2^eR+#D`QA+cHos=TR)!$mb;fF)=bZitW3`@Pl{n#--o=NtBX#N+#~L z89rLzRLOfN$MD`sKqMZGX=`W+iinN@UJE@q~e;dVR>4wY!b;GEHM z$m8p*F5pK>`%z~0hHGo;2}a9hOjd_zEM=Hndt>s zL#q}yTEF#*FNoJjHkAblx{V)g2c5T<3xj_Y8@YS0_L^!X|B=UzJ@CmpKfD8HF1je> zfl|T1K-B~{1Wp`V#d6}PI;Kb?Whv$W*ORw2K_cA<&M`1K1-Dwp{d0@hv+UwcVMvQ! z0_uh3Hribk&1{2X4I%1@Kr4w3M>kgG?{;|ztBVVG@`*EaoH^Sh?4%ofW09l=1Q%!Vp=}58soGP$ z>)Y`;mYXh2-6vck-(i{Z8pjwLDC5kTHcmWWQ#`|3g6B@0!;TyGe(dCv@h?Rhzx*04 zl~+tQje^jS%KX6Zjc}Hn@0|OJ@b&KQt$RM@dC@bv5UoxWPn6B>dr!`sdGFu-(Q%YY z7T$eV8C%A3oUg8; zc3}~RXV%a$99-aCtO|j}LZs@ROdFfj@X_E7{W+_wkko_h>i zBfzm$JC$6(a>q^*L3qH*spm!V!b+{dEhFH%(Hn^{JXC}pySOpOG2;n1n!sWN_=!M? zYhZ-|1YSs=%QX-mS0n_id?D5t^)jN>^f6e?!|Mhx3H&NAi?OyF#*fg?*x_XF?}F*-mNBMLHvCL0LRVANL4$^d9Ah+!`r_013lS> z5i3D)bPHeMY9k0kiN6{c7%tN9Ue|}6x8OJ?)w1ZOgE;VUGbVA$sN?x?p01f=2~v>>u-AOz!;Bve2v$O~bxh z_mkxd+%CG!Hk!>2iih7BV|*vG88B%xxB?h5H5{o4JXJHXEgxd>_*1C!aTE{Uh6n;% zxQCTzABG>rh@u!_AW*AyFfvjkiyC+Vd_STff??Z=ZYT<{dvGfr?_8i`C|C)~C4o{- z^{}v@f-m2D9Hyn1;tfMuRUOYgtD{nty5?fnLF1;gN5odH=l0{i46NW zzg2zq(y^s?zWHtC!s23w@&%OSONVV}X{0D~Snj%O8`@ri;Qq$GFpNgC#d_;2D(Js zDWFiU;Hkw041;6LHtBnH#$Z?mLO-H_K-Uk@Xu234tzcs31Qir|oi5sIEj;|_865uD z&tg?CY7%@uRTKE?f`A_gv?GC;rhvQUMwHvL@%)otW2Jlk2ed;CmGKFTmkcaE_cX#d zQdlF1QCn@JP_zl(NN^tnAwoYO#(AlrW}@Lhc@Iv8mjNEbOMAxlPL1J9Uw#f=;E^jU z6+~i^d;!?8Q($$4WB#%O+wrmMPOSRUla@6c;gtlL4rGO9Ks)e>Ij~FY94pLdkU>qgd|qU zLAm?w*cuX$?s^~>jIsV+KPB(5ZT$S+Vf?+30^T!_!`-7f+?F?RTh+!*B^$So4&u$j z72G|!1xJ_as0C3kN<|CKbYSF5_~ybaMq`etqC@5Dre&bh_E2xMscP8m#uymNV|;Q% zm5ulw&YhY?<&Fh;O)Mf#g!_G;}bA#1GRu* zV9!D9y!oxs>hsUApwpldeTkWBwKj#JZO2TlSV-k3NgUD!Qr1nF1sj*+mDEZI)az{= zd3qJq3P+`^qg2!>sc9MvmccMQ3RFh~9{P$IFQ2a5-w9XVKfhS}xf>>?j<)>hb>H{C zsTG8a#5sTI_ul8g5o07bw)RuLYR!9T(NM=EyH;3*b?sh>Unaz z28W6m8FkURg~QXRI6P<2|I33d_q6FJ^j#AB( z+is&-IfPsP$uHpXl!9n&Gbu zvAy^FF!tW|Rt$`f1Bs9BS{G|9f}hPyX~cTsNlB z=DAZVxcRmbc)n_`&^aJ+aK@g_xuUa@-Zo?F5w4lAg*_`B%uO$=irG?5SuU#lnhrD^xh3K>ceEPpVhgQRfZE?aYf@`?{ zOXu;P5AManQbeN!#zq+GYe2Il7luX&F@u9L#33ce60|e}jiiMNvvA_*Ma<8xV()=% zC=KSwa!AEUq>oPnI(!JB;}>q(hpB>zPoKFAk&ajs(#K~EV_R>){WA-APqT|r-WNa3 zj=iPILyWNln2U4_=M(HG18#RMx_I%Jc6R=G?)tTOtuxQvZc{o}2v}qoP(cZB`8}!( zKhY9u`%R?UvjjZhy1~jAD3!R*3lVM~V{_9j<|M0#xC`9|)tl+kI#(Df`b7+|JPd;o zR$G|s;@r75YPAq7F~IYpSJK1!*jq|vhSAA$AD=z7_df;D{A;*$Ubbvn1sSXkAaO75 zpI`0*T&L-=BO?xKt3KK-AKg|2Lz)8zlysAe%rH1+E;UgqngmSaM9|QiwYrBV9+}2n zcW=YoQUFtD7#@*|5m1CnDu`5+FjbZy6yWgj^;QS(G&PiL9krDf9((9G_P=QdhDNJM z;&{DGU1$V&1JB28iNHfJF-@sTHO-d7%$knEX@*t9s^?%1I=caLa=L< zElIdI%Z?m-2*=Mp8Lu>F^jslEp%}w76P_Q`P#!l_@=sSR*qtCs@sl!3EFHbT)1)P5 z2{gV6jje!lK~?=XY!zUdMG-kIwVq7G3fnOawN(#mwE(lTUD}Xx4nr}|$@0yfFJi4B zk}bvZY_7z0t=JwZmcYlh0aJ&9vAL7Ye+8}lYu9r9yj;;f_%r|VS|7uAElK;riCyn; z_s20%a!UBd7n}IOAIsy&)5{bhm9C14Y$f!NYoyr-=x_3O-;W8Sblr%o$*$d1+;P_g zTt7i=u8q-cB`mK*lwFtK;rntoXNV)9(T=b*vxMcD1>B*P@xh@2VUT>$#@21aDkq|8 z8>)XZ`J*)t&jbn4vJ-Ak)?X7R5$4XEz>g&shBReK|hc7t$;%958crG6! zSB#O%34DN0V8X~_$TU$cJLIyl)Cx)Kbh5L8zX+d!8$?8C$5XB>!DBUiR8PpQ%vlL+ zGeOZQ!t*1mjy`R|Uz+^A zTMys%4trw|}VQI5_n{;a68y zI=A2Xj*79k)S{g%D<_u=)mRCz^@brdTRzR}kRm}mCEQYKoaN;%S(9zsOGLo%)Z_Cw zaHxtn4%6O^6rV5w+vF&gizp3NFsBPV+-Rcd1{l#T*tUh~ZWkB)E}osO;dsr(rFspQ zS{=-54xSBT%2{YJgLVb$G}9Og1B19wZ(?fG{`;qTcK zxVcoqNV!M}KErVc15y5jF~US6b_uuTccPW}XeKQ%JqFVS3?qSM30S5;!H!`W3Gy~W zK5wF2%EJ%bbdI`)a>c-&y~Egd!ze06xp6dTNRLzwsTj5d<2gnF0Qnx<(XeZuhVh-= zZI|Yzf6n(yOO8|h_vOOw-(IVQi$eoL$6RT~U+1!^6=bMf8qN>8A3XDQ=eJ{h_+RT` z=R*@a%`I!~7J*CYn#iB~4h`efCy$|6u(0*^anzQ(q$GOU*d&!i?e@}jaB==@9eZ{U z;QsqApqMwXYgZM17=beZ(-8Dtje!atEz3f=nujwyh$Y9y*VdNt<=P4!Xt;Q+-o|Of zI1e3-VhQ6zgD{IGTn$+5Af5X0LXk>>QVGZEi`Ywpa@6-V#&bAt%f$#VF0i-Ba4WN5 zIW`Q-fLik~qp35qa z<+Txrps@gl_wU5){31mGa}KBLAwhYeVqj#VKz%0J^(|I3>^#Ku{P5aapM13bvzBK5 zg=QAMuo;vCn_WSoAX<&;184QZ=>HLf0T_}ov+TYz<^lQ5^5#x$tK!@zp2NziRWvTt zaqExW05^;grK|^SgTq*JVsKr+U-NPJ%qr$DEo1up92RGn;B{PzsF{|9&~wpRt)afSh=p@! zF#Y`VXe_V7Sc~B6Kr$R5Z$+>Sz_uCXEhx8P>BReG=q5PVVHzfE%Z6!Ku+0j*j*f3V zbsqKA4p|OqeWfDFYnMa`d^c3tbZJ#`26Rg&H*;{9VgD`6IP?7SkMWLuQ5g1fukC92 z?qpLdh|t)YAL9wB98wB8E4fMSCyJv2QLJI>)(YmnGL17|xu8as1uYQv4!8F>wnP=7hs83Mb2 zg*6}B5aPKp9W1BAFa-k7!-MCR(TEe26AhXlVP&C)vnMVfY^|ZbxP;DH1KmawXO|Z7 zz``=V-{Y6FG+ItI!hi(wdQflKA!nuABbxro3w&~7oTECX}19!{Tj@$At>9C_w4 zE?!)Q?*|k%&ys;kA=I_grJ|V(rmds75aE$On8x&HJ9zH=_>(h7jOWTu?sR+2o4V!T z;R_4(#_N7A`=$ozSBeQ?HE^o&=DT8RxLCls&rRdV=hQ~k&o6c8Ck|l82Y2AuvkUOO znDB=0M=&jpmCJ2t4yWIx7Z64Xf*_$N*!V;dx4&f^qZ2ti`S1dkmpgdJd$(b=rhq&& z0oUd5JQeY3wi2u?EF)a1(`>-E8+q&;tYG)So!GW_2e@gWxl+g9oSMOZTk7=AgG3NMh;o z8W!gos0epVo74XW+b*CWhM<4j}B47Kc zdwvCpND!sXNJ3LBtwE|N61>0p<2Paa)=^x#u!eRsKxx3l6TkErMm~H4F|w?nE35cwU6}eQ+0s#tiB$>9$oNAJZ*r$dcY)94UoaYXorH9Ry7u6Ws{6 z3=Cj7pT~I^Kt93fmH=*-p;0raHca9n(@x+NVx=TGLE&bV-IohJfn_DM*ewSzY>u2A zQy{@IL|PS~T&TbP+%i^csy;C5`5>3bj450@IA~#fw1UaWGNvYn@Z?ixaq+?`yu1V-2qlG13s}le= z5mZf@Wf%kukEdZ?Dz%RomS*gfNd;6u$mQbA$LV4gl%$k6$23&iux%x99Kg&;#fV^A zF&s-pp5)@?OogUtRACaqa#X^P7C1$jqzlLCxxfoCGqZxr(<^v_pF<(fQOI#Re#X=& zYiTv4LKtcJh{PL&-%32~ThU zTy%CJLa~$}@Z>I^(9Uh7z4X#*!;EpLAJ2`jkHD3U)uv~Wv(h9=MzI3ZJM#^Cu>!&Eq{!l)LhU-zc9#0w6+n4IN z|L4Ae%GS#I=R7%w!Gl#Whg11>R$C-32ut$((Dkrj}?%YREZDTpK{ilLcmYKSJGvYudkOuBR$Sqxgp1k4k{9J$nL|i*`kBgt@;sja~oap&n5*?UGuQ;ty4-k|i5m zH^ky>7nZ5E?#07 zKO?aAhRqO9ERr0sbTTVD8SBMyo$rv37!JE>&}#GGG@h=q7;`)E;Wmb&Vl;Xe$wn5nGk6EV(FG99ona zVcohjBA<%Lx^SLA=MjNw5k~~X5&1~K;N&z^@;-_ssiO%xoe0CD4!KYBb1qICZ=hVz zsU$y%5`=zCO;4air-pDgLg#50)i>qg!~hQ zzudseGhM8nX`%M{CXH6$8dKHLX@i(SRx9o0PtUJd$Rn_GaBsNnCmYSirk-_pT`I^x zsl2Ck@ytCr%8swsT4l_I{UUF!+zBZJoFw$RFcBDWO!{3aio4uF`(hj8w~wK)HIMoG zF2fqMVHOnQd*)(DMTzPjxBm@JXre&fdvd|W zq!@;tP%pULxuumTq;ENs=G2-i-6e}T7+J` zT6W!{bQdug>$N&d#i^8vXfU&NBGP~THNN$)xLkJ_M2fHB$ta4zERH1Gujz+s!A-8< zosu`Z;#erzCb~h0b`X)9FjX?K-1X23BGjL+;pty}4C8lCVQk+J&i=_s?D+e8k=s#( z*Ht+M;McfmQ0 zkj~{a0_Bx*0;gc%sV7#j)`-X|Jo8i?mZfNZT1Q(5pH0yCf`;5y2l*)z_6`gAQ42=Z zggK^R;Fcnahx54f`}0`%^a|$F+B3p8MNTu~GD{FdFsp}!^gqZ%~x=VfGGpDiZAMHb7dl_y!LKq~-6)e=HYc{=x(&0gRom3vr zi)e>kn(t8miBt&Ji%~6`X=s;|yQNzuObe9gbIb@<*`{dKnbR#SE(K|6dD?$rFnFg0 zSd!3Um8TQT`t)E=bb90!L@6q9Q-J}2*gy_P?eU$IUWlPbb`d5C>aI^pVsJI+jjD|M zL|#8>G30CI&p6$9$^{1(>#gZm>;Ar$a$PEj#uTLtMTq1{a;9eYr8kgVq3Gqi#zo5@ zLWHG`2QOZ478gl^v;Xh&7`bB{V|Pu!su+lj3b#r69!otPb#t@ z$Q9Bpo!b1kZo$wa)z57vunQcH9pU834o;tJqg>%CjLSgDI#bu+9%)bqWVW#T8?;#J z`bbIq1n`xW$Sj4e>#3WRUKhrw&WieHn2NAvk{Mk!I5Zt;o&H;-iPubWwvBqQ*4i}0 z&o3d@rGg-fwAeO+P|<^erR}R3%SlT4c{N;eH8DBIWGRns7?Il*_AQ8|$LHxWcwh+C z!;@m`yLM_9zVtj=k1S&F0~3^|$Z{t_M6fKqH)lg0i^_3m&{;@fV%rK}I-H_m)92Rk zd7{SpwEuQ5QD_A|T(tAVu^dd&zHHyg6$%4oQr4oq>2g$`I zT`$T>P`NyZX~)oQ19pyK>2ec~Kh#CBqH-1n2jb%){Ln-3?L{>1ZKhTtYwZ;<4fS1= zvvI6+cTb4fF-+-9qd2BWogc*%qP?2L>GjGKLMe1YnxL+uBD#|ok*CQ*QeKUrEkCz9 zG`lHS8NQ8NmkI(QOu4QNLnR93?k8_@Z;W!f`^z1@H@f*M5=Kc{7qy-#Mj8&znFc*Z zgrJ3H8#7$49kb(=+In1JldpA$)%?QaJkSq>vO9#8t(>Vr6yVAj=|;(R#wq0gi@9`RwJdE z0@`tE6~ff*>fcc4{8J2KGoIoSU;|fc`ub+OgHX$@zA`uS+RF8*Ao9dalYHz?h z!HEVaCLMarFpSaZ#;6V$U?!)?)P*xmJo1e;iUkvPE{5Z9I86cXZ|Y#7AU-ck z;wrYDQOS;t6IfS)2qL)?szo?+CA0IC3tZO}akdvl>3c-)^E4{e(R!7+>L+@%u05}c zTsD?IgI;H$RVbX@6x^cUMy>}O^#T!^7%)u(mT5pwt4onCA|oxTQ#-GEzPD&}jx9rF zREkcIjghBi85FUJ1x=Q^GECerCELWdasd;08wEqB%=-EN@;vyOkAlO{{>Bo-a+`38 zt}~R&HfAog;gmQ5?}xv-iU;m%QBh=`GnDiMdZ3~8-)mqU6(HC>F@}*!iIkjE=2}^i zf@7tbd6Cw7X^NK%=;ed55|bo}Nr|azl1U4rk%aAwv5=}tIOEs&cb{rFPeMziB7 zA77|8t0c)3C7}tkEKQtUiBqIFra{Zbb7P1wz}eqFMm;Igwb}ZQ55woGR9<3`#aS2k z{pCEBhDcYeR5VFJoarvA&xUBObiv{n%+Rr8e3%xkRCI^J(J27u9F@G&=kcg004I7M zrQumJPo1w0p5iQ?mcC>gf#_k5?DbmjIrPeML{Cvf5)*@pd_mr^(Fv2*Yk99!}JH5XNI^wi2GG$2-z2X*){?1H6i(H8HFs}+8pjUOE)_iZ~ zlzL6iTCm=@IL0_V??o};zDQ%6y8fzPu3H5$8Bk0Y4bq%|^vexHM;Jy_hvkQH?|Hc} zr2DkI)*?%y%0$#;+eX{#eTG~#6xq1~+-C~YKlWcLO4%~8>iN9@LE+E<;SUv9<8U0- zvrHNjDFFhYT@GPK968Iv?#VHFL62iTjaunKV7Sctjv-3|axidpyeU6cBymO$V{pVG zBE?BWoEF(D9iU$KMD+StLvuny!@PrG&T_q$Sb0 zq6lIdN^h>xd#fWh(F8H3Q)gZ-ujZsXj)8p6fH>BMW2w39yoZO<1>e`&Dlry~a!Z-z zAyu^Sx#1nDV4sbg zg@cCC;Q^doSbAk{;_E=JPYWX8N}s%3E~AvoQExhWqzwX59Kj7jxL!b!o+w$5Ude?d zEkwQ9Rf;2URg97C%<=^iEMM(4nMl_|?(=3f2hCFX5VsYQ<(S%?LjsQ4oD0JUs02Ma z(*|Z+DDRw1E!@?MEYWkRu5t;|EH^2AI>taMl5(Sz`=!`=6Ucw5d7N=?E;?Zt^-apX zOa$dpqA0bxsXE1}VyIk+px}X@XxBxE7uTzTXwY2gHkp<|b20$sBTMT*aevK#&UL!+ z&5nyGi8latmipk??^@r2-0(eGN@Tz^0`6B!I7V?yh(IbxZjYJ;NNnrSFuBVn(zcoN zUFs2`3fxwV_Lo(k(a1o#KSA9Kxk6j#WXu#qONl7B#^8sc0^cd-%HB&%*@@N%)cfkI zL_*diK};nyiku>%xhYvrgb3w0M~_uI{SK9BVPpZN)q-Jc%9-d_lj~AJ80WPl?NHKE zjG+nDNkFDBv79ZUx^#}I*{v9K}PoMU#dU$RT}s&QuivWM-u7g$0&QP_xc~!T5hjSs|RNL z{w-dj{3Mf1QL-`;1>DsDe<{VSMKDJyshPSl3GAGr@F^4wbnab5G_QywBtEJX@}wY0 zb2OP1OVT7H9bbwQLgv|E>3{Olo=3db|dhO)8RFIQrPK%LT&Ud@6rLw#Uu?7keZ*W;?a3|MM z%-MuVJU{HYT54v83J3Rwd1jHKm#`*4mXPCW*AE2(s*+{MjoSzVADU)Bh>(6tsSMia zd|?`^53GaRQa%S}nCVzI6sYDw}u9*SbFSR+cCBK6}p?(R<1h*;UaOo z`I&#TWpF^W+bUm`flH4Uy~u$aRdb5*!ER&&ZT(4L5mRlfo%)XQGN znjl@I66c6GMsAzRVNl``kz!r3G*kw3EPiGIYmaP<{N!zms71{_Ru+*0cF`Apl#5a> z+OS^v@;fgo2&MQl_TA0u!%T;}9@w7mdbFQ9S^Y^>zoASyG@UQ$UiDeM?jv(uS$ zht&LVYt6vfUwa>zQMp_}Apsu68!GX^57k{U9;9 z7K~>0Np~f0o3yZ+iPr<|>Pu4 zUEG@7K1&C<4=ziNoJ zur_tl@VZG9GRBvqD8%r{DE%&PS*=#by~odzKc9&Z>wVQ)AG*kDj#xUk&o*_G^H#5x z>uQTXdn$?r`S-yUH~{^V)pdbF*}=qQ721g|j{NeAD~FVP-suGmvYM~{grU)@)(ta24D%3d;}Oe_w%VJ6`TRd_Br_V?k_Pf76eA^rPsXpDdN+$jl-P+rr_& zBH}1Qn)yphD+s#xtcZ&Is8A}AxEVSMIiS%>NuM+P5sMc@bck#&?W53QMeQkla?4Ny zWa6V;6!&>J^M@zUdA|8=&xb;$Nz(hy40LC8Wb&8`jze9O@<2ugD!u#-($~vHPEAjm zKtdEf4EZ$6o?)n@mpIg3;7ax@Mv{hnlO)+t7N0d!ksBriYK;~qb{aT+`V8Ll?t7+= zJoez{%D3Nj%lCYPuaR6A3R1`ypj|rko1=#hp-sA*5_?Jd3G8|CUBsVODFS- zUeR3!G^xBos*9!;AGs=N*j7HmzUU7lkiY)@$rZ;VD4eP?_Ee6}7+R-mIQnZZkH7d+534CZYlQH1-y_I2EN(@i(eJ^kqCsyE;H;}Nt?mmaw; zT&(8#Q$Kan!TmQq`P8$huPoutx7-1C1+0GR;yh;Be%eU1eq*zuJfuE!mZR=5CTbcL zEK(zqz}3q>UgWqktKvm574%)%M^Y&`*s)~@dOhjrw>Uyj@S#MO#!9J4H+Dv%&t=Pg%GXKdYkD5qen27cZr4TE^Wpj`BBr_# zMemU*RU{QC2;n$39p9;wC$Xhk{YdltnVAE9EX*%vmVpOe!GM`4wG-FXK4n z4y+Uz>)!IaOuLIcDaU@V2+V9hzltP!czc@#WK(vE+t? zIeJY&R}JE>FEr_5Sp;q^S0f4W_hdQ(qasv5RI;z&P5dI zF@Yjc*&@tX3&Sj`)|Z1}S15*|>#z(X?SonWTc#NO|IW%vq(x}DF4np(_1KdlNsA+0 z%#>-7>%7<2s~b8!SZcv~U5CV`8l#w6MEU)5v$OC#*N!ipyVr5MKlnY~^4C;0wSpw` zGatR{mYeQ6fBphlgCL4}eG6U~<9+XWH;psnsRBr4vEvxuy0nPPEf;PS6X{tjQku=4 z>!n^FCF}Nur`d2_=PIGrV-s0-$xN<+y&Q9renX?{n(8xlc$* zwzVrCC|?p2Z%K!rp8zn!N2G0(Nzo+>l-F2(oA@kwb!}UBM6~s zRPwyyD6P6x`3>pzWhs&Dv$(#FxH2Mzq|f!!(=vDYj8u$;)jFD8x0eW&E?*c#$k`@+ zj#TulX{r~c5{f8J^`LMyw3Mt|%G8qPmgM(ZrbVAm%qOW!CK7?ur%z-5{{6-ZG5u~1 z*|Z8W8U-IOI`;nOPM#FSLQ%79o5h(0NP%>_>tgTz1DIc0h6qEjB!*xdEDDk62I45h zs_SFT^>AsWK_m}bt3`|y?G3I;+!xkFugra&c`%@nY>I+MF`y(pcj;;oF0S?Qb@gF~ zOtA`%N>oNs)cd<4Vo=JVakbFd6%nXjd487IOl!CL$>QX()>>`&QAA`7@;q`mhq^DX zR$s=Gjd`7<*EtDQla>VuQukI`u5!7E(D&hRj?ge@?6s7;?!FsOojL#4#-O%oD6=-D zf-v9R6Rpnwhxst1jk4KpCM82>xQWB(D z?wHd|WoUAjTW;Wdt%b5E?BzWD|r{`V$BkSiBRw9U+_^Hu9e4HF67bnJd_;= zdB;)V-&C=BNk(nG4R^hlU2L?l)TycUT)a$?q=io8wbxb8jh-aX9S4guGhhQlpM8~< z#j7HlQbEGS*^f`{+HODm=%Wc|T*w>KX*NWuSk{CDzg!?EQny0a(QUVg&Sv}8t+>%P zpy>uqU7W_k`EzKtTF~MMv2+8X1eSDR0IYNa)LX7}-B7X&jFk&0r=)Dzg2>VU^50P( zc|($95hg|p$dBU}Bo#9y$%OTYqXmXb#h&HqU*y>Ws39QX<~M;TE*Fm7mpX;^3Jb+r}z6> z%BEA0eG?PATdTAG^qb%OCc-FUnx+W}J%TV0Q5b1CCr7(h#8o|#FHOCnBa*v%7+@s~ zz>^r;D|zg=^EO1Di{<4NTwYkhT73>s>aTf;{}GKX~kpJMXYv&&!_baneL#C~sV%b6v9x zQwwNXs{xmGvIL2SUSVEWF6OQaE)on44q|d*oLrF0v-6mnUqGwTf@zs5n;ypqnW_S= zcLJ=sA*!ZFjXK8z0n9sW^y#(OudbXf{j7j+CV(;1DNaZGF(#m+rD@q3^DI(T*H@tyB}-$#8-zq}+rzB2FvJhmBR z(@mHf;M#kcrtMsqpYK(jW?@HiC&G|6&?t#SO5Ci;g)Mh)ns^WfD$$k!-dH8>yda>4 zseC?%vC$C>jSR!GEr=vSH;l;*lfDxpf@zC(|D3k&_e+3HkVtHtJJL^Onkh- zS^>8VNb}0sm6F;0z)c5<<&ZM|+IkKHY2+&D(feqi0Mv%qq9r!f{=!qTAcO5%KcrFEDif=z25wk_&ZH>4i67v`}RqAriF)|KaVe- zoI7&N=f6ID%N_qB)Oh_`tdUnzHk}2DO4a|Xv3U8OBn*2yToOfTc30gwH;$R*IEe%& zTC54KDYo-Q%Vmacpk#2wi4Fq^u8cQk9e2{PDCBMAoH10r0G{Wg)ok^!hLA3VNZ|DG zWo2yWJrJJ_{!HthvIU(*z@jTk*yA{%s@%bH5s~jvf-;jZN|ehbKbI_}`aJ1A9X)%A z&bwO3Ve80{a@$gOh^PO|iWe7y7#CUr99zwBKe<%L#aav728uW^T%iizOjxQ3nFE(y zUujt$?*jg>oXNe8xrjB)JXaIpzz^{DnD>yr|%FS? z{#wYUQxGZL%IHs8OUr+z>-s>quWDDMKDV?e@~7OP<0w)~gsYxzTB;gDD~ymdni#4G zMAE`sv72W}v~>apq(s>3Z2z7B3NI1axw64ZE@~~gA`_n0KSh0WJdh^i(940S&r-eT zs*6#&dlV%yblkXW8sHi);UV!QOWlRhd zdw)~3MWRcOs_6p#M zC!fUJYzNIC>S3#a!77%c1pn?Y?nP+WbBFHvz|W3y^DpJ!);ir+>XyE4Wz&K5Od@Du zacbM2#Ys|+nrk=5ah!Y67=5;r_x;our-kMVjVe|}6sEI4;+|q$S<0QU6MDo$tIUca z5(;U)nDqL{3MbE>c3Vx4-Zzi)%5I45iVy7D_I%w4YH z8%Hnnvhwo$MurD5I5MivU*kO@YWZ0gXXX%v5$?HhKUz%3A3gMR__gWUSF1PP_Vf8e zxBPU6@sqE>?b|f6X%z%C2SkgE>focLZ9D$dy>$KquICQx`b!(d9$!?FP(qNAdm|7e zstQ#uqd1IugYwZEosgBAXmCA`h@+L;CSbFxx8(MJXOGiLY;3SnJrsgw3TCA%E!V?a z4(#f^N9$t|QUA{9LHo+xQ@=0!J)d(>o}9wxzx6zVV4eKIacoR%-9`yi%`k}eNN5bq zFrZsDW-rgc^?Y1dSi-||jR$hKzU_z19eaKoPX5$)cb7J|Y-$C`L@?ei?cDPxRxZE5 zJ@-JT)vWLrQQpKM?e3X=<$M3~Bw(r;huINEY zG3c{25R;2M?{?Qkz0qjvhwu2w+@YKPRjixK-`!ogKIFPk5GZRB=;i9;g{f_yG&PJY zPhYy3r~MQ!`M&gLk}k}QYnGCBy;o@)7ALWNgi$(lM!H!7#>=R4U$1pqXL-y-g61%N zf-_*-=pe=hDp!8OhRWXFIZ(!4B`NKkL&>@aPG3U1>rrke%lqv;co2?lLKs#`vY=tL z={Jn+yMFiEp3wJ!Z0dfHt4XM_mbLFq|8&>i`H{o2AY~^!)oKWYVbg{g&Jj72)*W@GUV{+F-I`r~8JVq+u)74D!Ow5#B zBu-tr`C4PcdwSoQ{+^9=KwrHU;f{20X&l8U7V;RZDzHB`H3i*v5OHOd0?#8xlsJm0 zJvoL3KLNODLNIOYJ3OW9RyJi6>*WY56pvMJyzQS49J=w}`t{X!XsyO%7Hz&d_NzsO1-_<>aaL=oc=;?!1VHI~xDK z#viyIU99g#_})Xmxb+?H`8&|qIhAbG;H3jU3Ajs_Dvq&IU!w`JRGq7_UQ+LS5ku!R z77i&csyEwIN~3MSP+~)kl-3vBRiz}1!q*`ZL}}zIlvpE);khoFwL0~uV8bUW@qHij z^K;Uze4?Ez{^A?Tq2#)^Am6FzgCk!Wf8P)7UVH3;FSb`#K7fq(idK?F3(b&zx&*Xx zL2DWk#?!(5-s^ti7Qh~A>l7mFwlRPpfX3wY|pY07yV+$zm)yOlQ-{1X9GfAwS%53QX%{&VM#JpFTa5?KQV?~S2;x#ESY{!6-anX`BNI(CaDuw45-!=(1jPP&%pFj6;@b>?m-TAKHS-pJmAAaePZ~eyJUAqQ$Om3mq zKmN=SFPhl#VPos~m$EF&i!%hjA=(Fj=3idxV|d*Q3;eB#+uf&^E8qBb^qE{FPPn@K zj?V1m_lU*0_xmf0`>TddRk|-FeiUP=0Emt`63S5@&3wc99 zUS(mvyT5(z^v60E&iuI9YHS~LOqwd&U+Ejh3FcZ|)gzKtfiucae}Wtdur{$h1O?Fdk_9Wha1ma(-XZ;<+{nFzg|V|=Em^Y{rSBI{!gP& zVCT>&K8#O1 ze)7}xop1Vp7~b;#g^Vv;>+`%`qWkv382S6u` zCMKyVe%k3rOS|T@Oyq!HygD;QUezzx-DZJ#!xh4tMt){vlp0 zAG^k<@qHt2xLDUvl4AMjjR&&q7;=;a#W*5);#&72D zyyrunZakSl+l;I^n_k|CV!aM!IG^9Pyf|M)q4eyvK9=uyc>|=s4rRI1xr9RL(zQO0 oH{=bF{)W6EFDd_j00030|EZ1YAqLCMQ~&?~07*qoM6N<$f*@oe(f|Me diff --git a/core/src/main/resources/bedrock/skull_resource_pack_files.txt b/core/src/main/resources/bedrock/skull_resource_pack_files.txt index a614edf2ada..ecb441cadba 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack_files.txt +++ b/core/src/main/resources/bedrock/skull_resource_pack_files.txt @@ -8,5 +8,4 @@ skull_resource_pack/models/blocks/player_skull_floor_d.geo.json skull_resource_pack/models/blocks/player_skull_hand.geo.json skull_resource_pack/models/blocks/player_skull_wall.geo.json skull_resource_pack/textures/terrain_texture.json -skull_resource_pack/pack_icon.png skull_resource_pack/manifest.json diff --git a/bootstrap/standalone/src/main/resources/icon.png b/core/src/main/resources/icon.png similarity index 100% rename from bootstrap/standalone/src/main/resources/icon.png rename to core/src/main/resources/icon.png From 49550a513cb894171c7f3108c90598cb522662e9 Mon Sep 17 00:00:00 2001 From: davchoo Date: Sun, 10 Jul 2022 21:08:07 -0400 Subject: [PATCH 011/134] Move custom skull config stuff to its own file Custom skulls can now be added by username, uuid, and textures Move skull nbt stuff from requestTexturesFromUsername to SkullBlockEntityTranslator Add requestTexturesFromUUID --- .../configuration/GeyserConfiguration.java | 3 - .../GeyserCustomSkullConfiguration.java | 58 ++++++++++++++ .../GeyserJacksonConfiguration.java | 3 - .../CustomSkullRegistryPopulator.java | 77 ++++++++++++++++--- .../geysermc/geyser/skin/SkinProvider.java | 68 ++++++++-------- .../entity/SkullBlockEntityTranslator.java | 18 ++++- core/src/main/resources/config.yml | 13 ++-- core/src/main/resources/custom-skulls.yml | 25 ++++++ 8 files changed, 208 insertions(+), 57 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java create mode 100644 core/src/main/resources/custom-skulls.yml diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index 914499e7c55..ad0e8ecd06f 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -95,9 +95,6 @@ public interface GeyserConfiguration { boolean isAddCustomSkullBlocks(); - // TODO this should probably go in a different file? - List getCustomSkullProfiles(); - boolean isAboveBedrockNetherBuilding(); boolean isForceResourcePacks(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java new file mode 100644 index 00000000000..497fb37ed82 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.configuration; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +@JsonIgnoreProperties(ignoreUnknown = true) +@SuppressWarnings("FieldMayBeFinal") // Jackson requires that the fields are not final +public class GeyserCustomSkullConfiguration { + @JsonProperty("player-usernames") + private List playerUsernames; + + @JsonProperty("player-uuids") + private List playerUUIDs; + + @JsonProperty("textures") + private List textures; + + public List getPlayerUsernames() { + return Objects.requireNonNullElse(playerUsernames, Collections.emptyList()); + } + + public List getPlayerUUIDs() { + return Objects.requireNonNullElse(playerUUIDs, Collections.emptyList()); + } + + public List getTextures() { + return Objects.requireNonNullElse(textures, Collections.emptyList()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 788f519eabb..329cf1912f4 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -148,9 +148,6 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration @JsonProperty("add-custom-skull-blocks") boolean addCustomSkullBlocks = false; - @JsonProperty("custom-skull-profiles") - List customSkullProfiles = Collections.emptyList(); - @JsonProperty("force-resource-packs") private boolean forceResourcePacks = true; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index c2719ae2d5d..c0b24bc656c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -27,45 +27,100 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.configuration.GeyserCustomSkullConfiguration; import org.geysermc.geyser.pack.SkullResourcePackManager; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.geyser.skin.SkinProvider; +import org.geysermc.geyser.text.GeyserLocale; +import org.geysermc.geyser.util.FileUtils; +import java.io.File; import java.io.IOException; -import java.util.Map; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.function.Function; public class CustomSkullRegistryPopulator { public static void populate() { SkullResourcePackManager.SKULL_SKINS.clear(); // Remove skins after reloading + BlockRegistries.CUSTOM_SKULLS.set(Object2ObjectMaps.emptyMap()); + if (!GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()) { - BlockRegistries.CUSTOM_SKULLS.set(Object2ObjectMaps.emptyMap()); return; } - Map customSkulls = new Object2ObjectOpenHashMap<>(); - for (String skullProfile : GeyserImpl.getInstance().getConfig().getCustomSkullProfiles()) { + GeyserCustomSkullConfiguration skullConfig; + try { + GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); + Path skullConfigPath = bootstrap.getConfigFolder().resolve("custom-skulls.yml"); + File skullConfigFile = FileUtils.fileOrCopiedFromResource(skullConfigPath.toFile(), "custom-skulls.yml", Function.identity(), bootstrap); + skullConfig = FileUtils.loadConfig(skullConfigFile, GeyserCustomSkullConfiguration.class); + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.config.failed"), e); + return; + } + + BlockRegistries.CUSTOM_SKULLS.set(new Object2ObjectOpenHashMap<>()); + + List textures = new ArrayList<>(skullConfig.getTextures()); + // TODO see if this can be cleaned up any better + for (String username : skullConfig.getPlayerUsernames()) { + try { + String texture = SkinProvider.requestTexturesFromUsername(username).get(); + if (texture == null) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block."); + continue; + } + textures.add(texture); + } catch (InterruptedException | ExecutionException e) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block.", e); + } + } + for (String uuid : skullConfig.getPlayerUUIDs()) { try { - SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(skullProfile); + String uuidDigits = uuid.replace("-", ""); + if (uuidDigits.length() != 32) { + GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); + continue; + } + String texture = SkinProvider.requestTexturesFromUUID(uuid).get(); + if (texture == null) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block."); + continue; + } + textures.add(texture); + } catch (InterruptedException | ExecutionException e) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); + } + } + + for (String texture : textures) { + try { + SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(texture); if (profileData == null) { - GeyserImpl.getInstance().getLogger().warning("Skull profile " + skullProfile + " contained no skins and will not be added as a custom block."); + GeyserImpl.getInstance().getLogger().warning("Skull texture " + texture + " contained no skins and will not be added as a custom block."); continue; } try { String skinUrl = profileData.skinUrl(); String skinHash = skinUrl.substring(skinUrl.lastIndexOf("/") + 1); SkullResourcePackManager.cacheSkullSkin(skinUrl, skinHash); - customSkulls.put(skinHash, new CustomSkull(skinHash)); + BlockRegistries.CUSTOM_SKULLS.register(skinHash, new CustomSkull(skinHash)); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull profile " + skullProfile + " This skull will not be added as a custom block.", e); + GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + texture + " This skull will not be added as a custom block.", e); } } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Skull profile " + skullProfile + " is invalid and will not be added as a custom block.", e); + GeyserImpl.getInstance().getLogger().error("Skull texture " + texture + " is invalid and will not be added as a custom block.", e); } } - GeyserImpl.getInstance().getLogger().debug("Registered " + customSkulls.size() + " custom skulls as custom blocks."); - BlockRegistries.CUSTOM_SKULLS.set(customSkulls); + + GeyserImpl.getInstance().getLogger().debug("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); } } diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index d6b16f6fd40..903ad432e12 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -544,48 +544,23 @@ private static byte[] requestImageData(String imageUrl, CapeProvider provider) t } /** - * If a skull has a username but no textures, request them. + * Request textures from a player's UUID * - * @param skullOwner the CompoundTag of the skull with no textures + * @param uuid the player's UUID without any hyphens * @return a completable GameProfile with textures included */ - public static CompletableFuture requestTexturesFromUsername(CompoundTag skullOwner) { + public static CompletableFuture requestTexturesFromUUID(String uuid) { return CompletableFuture.supplyAsync(() -> { - Tag uuidTag = skullOwner.get("Id"); - String uuidToString = ""; - JsonNode node; - boolean retrieveUuidFromInternet = !(uuidTag instanceof IntArrayTag); // also covers null check - - if (!retrieveUuidFromInternet) { - int[] uuidAsArray = ((IntArrayTag) uuidTag).getValue(); - // thank u viaversion - UUID uuid = new UUID((long) uuidAsArray[0] << 32 | ((long) uuidAsArray[1] & 0xFFFFFFFFL), - (long) uuidAsArray[2] << 32 | ((long) uuidAsArray[3] & 0xFFFFFFFFL)); - retrieveUuidFromInternet = uuid.version() != 4; - uuidToString = uuid.toString().replace("-", ""); - } - try { - if (retrieveUuidFromInternet) { - // Offline skin, or no present UUID - node = WebUtils.getJson("https://api.mojang.com/users/profiles/minecraft/" + skullOwner.get("Name").getValue()); - JsonNode id = node.get("id"); - if (id == null) { - GeyserImpl.getInstance().getLogger().debug("No UUID found in Mojang response for " + skullOwner.get("Name").getValue()); - return null; - } - uuidToString = id.asText(); - } - - // Get textures from UUID - node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + uuidToString); + JsonNode node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid); JsonNode properties = node.get("properties"); if (properties == null) { - GeyserImpl.getInstance().getLogger().debug("No properties found in Mojang response for " + uuidToString); + GeyserImpl.getInstance().getLogger().debug("No properties found in Mojang response for " + uuid); return null; } return node.get("properties").get(0).get("value").asText(); } catch (Exception e) { + GeyserImpl.getInstance().getLogger().debug("Unable to request textures for " + uuid); if (GeyserImpl.getInstance().getConfig().isDebugMode()) { e.printStackTrace(); } @@ -594,6 +569,37 @@ public static CompletableFuture requestTexturesFromUsername(CompoundTag }, EXECUTOR_SERVICE); } + /** + * Request textures from a player's username + * + * @param username the player's username + * @return a completable GameProfile with textures included + */ + public static CompletableFuture requestTexturesFromUsername(String username) { + return CompletableFuture.supplyAsync(() -> { + try { + // Offline skin, or no present UUID + JsonNode node = WebUtils.getJson("https://api.mojang.com/users/profiles/minecraft/" + username); + JsonNode id = node.get("id"); + if (id == null) { + GeyserImpl.getInstance().getLogger().debug("No UUID found in Mojang response for " + username); + return null; + } + return id.asText(); + } catch (Exception e) { + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + e.printStackTrace(); + } + return null; + } + }, EXECUTOR_SERVICE).thenCompose(uuid -> { + if (uuid == null) { + return CompletableFuture.completedFuture(null); + } + return requestTexturesFromUUID(uuid); + }); + } + private static BufferedImage downloadImage(String imageUrl, CapeProvider provider) throws IOException { if (provider == CapeProvider.FIVEZIG) return readFiveZigCape(imageUrl); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 58ed9c6306a..00835cd1acc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -27,6 +27,7 @@ import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.nukkitx.math.vector.Vector3i; @@ -39,6 +40,7 @@ import org.geysermc.geyser.skin.SkinProvider; import java.util.LinkedHashMap; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; @@ -62,7 +64,21 @@ private static CompletableFuture getTextures(CompoundTag tag) { if (owner != null) { CompoundTag properties = owner.get("Properties"); if (properties == null) { - return SkinProvider.requestTexturesFromUsername(owner); + if (owner.get("Id") instanceof IntArrayTag uuidTag) { + int[] uuidAsArray = uuidTag.getValue(); + // thank u viaversion + UUID uuid = new UUID((long) uuidAsArray[0] << 32 | ((long) uuidAsArray[1] & 0xFFFFFFFFL), + (long) uuidAsArray[2] << 32 | ((long) uuidAsArray[3] & 0xFFFFFFFFL)); + if (uuid.version() == 4) { + String uuidString = uuid.toString().replace("-", ""); + return SkinProvider.requestTexturesFromUUID(uuidString); + } + } + if (owner.get("Name") instanceof StringTag nameTag) { + // Fall back to username if UUID was missing or was an offline mode UUID + return SkinProvider.requestTexturesFromUsername(nameTag.getValue()); + } + return CompletableFuture.completedFuture(null); } ListTag textures = properties.get("textures"); diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 4d8e6e0fc95..6d1ab9d523e 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -165,14 +165,11 @@ add-non-bedrock-items: true # This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching. add-custom-blocks: true -# Whether to allow some custom skulls to be translated as custom blocks. This requires `add-custom-blocks` and `allow-custom-skulls` to be -# enabled. This will generate a resource pack for Bedrock players and enables `force-resource-packs` -add-custom-skull-blocks: true - -# List of custom skull profiles to translate as custom blocks. This requires `add-custom-skull-blocks` to be enabled. -# This is the Value stored in the SkullOwner of the custom skull -custom-skull-profiles: - - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ +# Whether to allow some custom skulls to be translated as custom blocks and displayed in the inventory and on entities. +# This requires `add-custom-blocks` and `allow-custom-skulls` to be enabled. +# This will generate a resource pack for Bedrock players and enables `force-resource-packs`. +# Custom skulls can be added in `custom-skulls.yml` +add-custom-skull-blocks: false # Bedrock prevents building and displaying blocks above Y127 in the Nether. # This config option works around that by changing the Nether dimension ID to the End ID. diff --git a/core/src/main/resources/custom-skulls.yml b/core/src/main/resources/custom-skulls.yml new file mode 100644 index 00000000000..6658c444812 --- /dev/null +++ b/core/src/main/resources/custom-skulls.yml @@ -0,0 +1,25 @@ +# -------------------------------- +# Geyser Custom Skull Configuration Files +# +# This file is ignored with `add-custom-skull-blocks` disabled. +# See `config.yml` for the main set of configuration values +# +# Custom skulls with the player username, UUID, or texture specified in this file +# will be translated as custom blocks and be displayed in the inventory and on entities. +# -------------------------------- + +# Java player usernames +# Skins will be updated when Geyser starts and players will have to re-download +# the resource pack if any players had changed their skin. +player-usernames: +# - GeyserMC + +# Java player UUIDs +# Skins will be updated when Geyser starts and players will have to re-download +# the resource pack if any players had changed their skin. +player-uuids: +# - 8b8d8e8f-2759-47c6-acb5-5827de8a72b8 + +# The long string of characters found in the NBT of custom player heads +textures: +# - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ From e9e89b4b5c6bd27fa2ec42e54feff2fe6c657724 Mon Sep 17 00:00:00 2001 From: davchoo Date: Mon, 25 Jul 2022 11:55:34 -0400 Subject: [PATCH 012/134] Update custom block nbt for v534 --- .../populator/BlockRegistryPopulator.java | 33 ++++++++++--------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 710ddc9c090..dfc82fe4b92 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -31,6 +31,7 @@ import com.nukkitx.nbt.*; import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; +import com.nukkitx.protocol.bedrock.v534.Bedrock_v534; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.*; @@ -70,7 +71,8 @@ public class BlockRegistryPopulator { static { ImmutableMap.Builder, BiFunction> stateMapperBuilder = ImmutableMap., BiFunction>builder() - .put(ObjectIntPair.of("1_19_0", Bedrock_v527.V527_CODEC.getProtocolVersion()), EMPTY_MAPPER); + .put(ObjectIntPair.of("1_19_0", Bedrock_v527.V527_CODEC.getProtocolVersion()), EMPTY_MAPPER) + .put(ObjectIntPair.of("1_19_0", Bedrock_v534.V534_CODEC.getProtocolVersion()), EMPTY_MAPPER); // Block palette hasn't changed, but the custom block nbt format has changed BLOCK_MAPPERS = stateMapperBuilder.build(); } @@ -140,11 +142,11 @@ private static void generateCustomBlockStates(CustomBlockData customBlock, List< } @SuppressWarnings("unchecked") - private static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock) { + private static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, int protocolVersion) { List permutations = new ArrayList<>(); for (CustomBlockPermutation permutation : customBlock.permutations()) { permutations.add(NbtMap.builder() - .putCompound("components", convertComponents(permutation.components())) + .putCompound("components", convertComponents(permutation.components(), protocolVersion)) .putString("condition", permutation.condition()) .build()); } @@ -155,11 +157,7 @@ private static BlockPropertyData generateBlockPropertyData(CustomBlockData custo NbtMapBuilder propertyBuilder = NbtMap.builder() .putString("name", property.name()); if (property.type() == PropertyType.BOOLEAN) { - List values = new ArrayList<>(); - for (boolean value : (List) property.values()) { - values.add((byte) (value ? 1 : 0)); - } - propertyBuilder.putList("enum", NbtType.BYTE, values); + propertyBuilder.putList("enum", NbtType.BYTE, List.of((byte) 0, (byte) 1)); } else if (property.type() == PropertyType.INTEGER) { propertyBuilder.putList("enum", NbtType.INT, (List) property.values()); } else if (property.type() == PropertyType.STRING) { @@ -169,7 +167,7 @@ private static BlockPropertyData generateBlockPropertyData(CustomBlockData custo } NbtMap propertyTag = NbtMap.builder() - .putCompound("components", convertComponents(customBlock.components())) + .putCompound("components", convertComponents(customBlock.components(), protocolVersion)) .putInt("molangVersion", 0) .putList("permutations", NbtType.COMPOUND, permutations) .putList("properties", NbtType.COMPOUND, properties) @@ -179,6 +177,9 @@ private static BlockPropertyData generateBlockPropertyData(CustomBlockData custo private static void registerBedrockBlocks() { for (Map.Entry, BiFunction> palette : BLOCK_MAPPERS.entrySet()) { + BiFunction stateMapper = palette.getValue(); + int protocolVersion = palette.getKey().valueInt(); + NbtList blocksTag; List blockStates; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key())); @@ -197,11 +198,11 @@ private static void registerBedrockBlocks() { int[] remappedVanillaIds = new int[0]; if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { - customBlockProperties.add(generateBlockPropertyData(customBlock)); + customBlockProperties.add(generateBlockPropertyData(customBlock, protocolVersion)); generateCustomBlockStates(customBlock, customBlockStates, customExtBlockStates, stateVersion); } blockStates.addAll(customBlockStates); - GeyserImpl.getInstance().getLogger().debug("Added " + customBlockStates.size() + " custom block states to v" + palette.getKey().valueInt() + " palette."); + GeyserImpl.getInstance().getLogger().debug("Added " + customBlockStates.size() + " custom block states to v" + protocolVersion + " palette."); // The palette is sorted by the FNV1 64-bit hash of the name blockStates.sort((a, b) -> Long.compareUnsigned(fnv164(a.getString("name")), fnv164(b.getString("name")))); @@ -240,8 +241,6 @@ private static void registerBedrockBlocks() { int movingBlockRuntimeId = -1; Iterator> blocksIterator = BLOCKS_JSON.fields(); - BiFunction stateMapper = BLOCK_MAPPERS.getOrDefault(palette.getKey(), EMPTY_MAPPER); - int[] javaToBedrockBlocks = new int[BLOCKS_JSON.size()]; Map flowerPotBlocks = new Object2ObjectOpenHashMap<>(); @@ -331,7 +330,7 @@ private static void registerBedrockBlocks() { } } - private static NbtMap convertComponents(CustomBlockComponents components) { + private static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { if (components == null) { return NbtMap.EMPTY; } @@ -346,7 +345,11 @@ private static NbtMap convertComponents(CustomBlockComponents components) { } if (components.collisionBox() != null) { BoxComponent collisionBox = components.collisionBox(); - builder.putCompound("minecraft:block_collision", NbtMap.builder() + String tagName = "minecraft:block_collision"; + if (protocolVersion >= Bedrock_v534.V534_CODEC.getProtocolVersion()) { + tagName = "minecraft:collision_box"; + } + builder.putCompound(tagName, NbtMap.builder() .putBoolean("enabled", true) .putList("origin", NbtType.FLOAT, collisionBox.originX(), collisionBox.originY(), collisionBox.originZ()) .putList("size", NbtType.FLOAT, collisionBox.sizeX(), collisionBox.sizeY(), collisionBox.sizeZ()) From cb0b52b99719a5949a40044e623bf2948113bc3a Mon Sep 17 00:00:00 2001 From: davchoo Date: Mon, 25 Jul 2022 15:59:24 -0400 Subject: [PATCH 013/134] Disable collision box & selection box when box is empty Fix incorrect collision names used in CustomBlockComponentsBuilder --- .../block/custom/component/BoxComponent.java | 6 +++++ .../component/CustomBlockComponents.java | 4 ++-- .../block/GeyserCustomBlockComponents.java | 24 +++++++++---------- .../populator/BlockRegistryPopulator.java | 24 +++++++++---------- .../geyser/registry/type/CustomSkull.java | 8 +++---- 5 files changed, 35 insertions(+), 31 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index b114a361c4e..142878c5b53 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -27,4 +27,10 @@ public record BoxComponent(float originX, float originY, float originZ, float sizeX, float sizeY, float sizeZ) { + public static final BoxComponent FULL_BLOCK = new BoxComponent(-8, 0, -8, 16, 16, 16); + public static final BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); + + public boolean isEmpty() { + return sizeX == 0 && sizeY == 0 && sizeZ == 0; + } } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 92da81db821..f18440b33b7 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -47,9 +47,9 @@ public interface CustomBlockComponents { RotationComponent rotation(); interface Builder { - Builder aimCollision(BoxComponent aimCollision); + Builder selectionBox(BoxComponent selectionBox); - Builder entityCollision(BoxComponent entityCollision); + Builder collisionBox(BoxComponent collisionBox); Builder geometry(String geometry); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 61e43b63f69..5ac7e261317 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -33,8 +33,8 @@ import java.util.Map; public class GeyserCustomBlockComponents implements CustomBlockComponents { - private final BoxComponent aimCollision; - private final BoxComponent entityCollision; + private final BoxComponent selectionBox; + private final BoxComponent collisionBox; private final String geometry; private final Map materialInstances; private final Float destroyTime; @@ -44,8 +44,8 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { private final RotationComponent rotation; private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { - this.aimCollision = builder.aimCollision; - this.entityCollision = builder.entityCollision; + this.selectionBox = builder.selectionBox; + this.collisionBox = builder.collisionBox; this.geometry = builder.geometry; this.materialInstances = builder.materialInstances; this.destroyTime = builder.destroyTime; @@ -57,12 +57,12 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { @Override public BoxComponent selectionBox() { - return aimCollision; + return selectionBox; } @Override public BoxComponent collisionBox() { - return entityCollision; + return collisionBox; } @Override @@ -101,8 +101,8 @@ public RotationComponent rotation() { } public static class CustomBlockComponentsBuilder implements Builder { - protected BoxComponent aimCollision; - protected BoxComponent entityCollision; + protected BoxComponent selectionBox; + protected BoxComponent collisionBox; protected String geometry; protected Map materialInstances; protected Float destroyTime; @@ -112,14 +112,14 @@ public static class CustomBlockComponentsBuilder implements Builder { protected RotationComponent rotation; @Override - public Builder aimCollision(BoxComponent aimCollision) { - this.aimCollision = aimCollision; + public Builder selectionBox(BoxComponent selectionBox) { + this.selectionBox = selectionBox; return this; } @Override - public Builder entityCollision(BoxComponent entityCollision) { - this.entityCollision = entityCollision; + public Builder collisionBox(BoxComponent collisionBox) { + this.collisionBox = collisionBox; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index dfc82fe4b92..0b37cc3132a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -336,31 +336,21 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr } NbtMapBuilder builder = NbtMap.builder(); if (components.selectionBox() != null) { - BoxComponent selectionBox = components.selectionBox(); - builder.putCompound("minecraft:aim_collision", NbtMap.builder() - .putBoolean("enabled", true) - .putList("origin", NbtType.FLOAT, selectionBox.originX(), selectionBox.originY(), selectionBox.originZ()) - .putList("size", NbtType.FLOAT, selectionBox.sizeX(), selectionBox.sizeY(), selectionBox.sizeZ()) - .build()); + builder.putCompound("minecraft:aim_collision", convertBox(components.selectionBox())); } if (components.collisionBox() != null) { - BoxComponent collisionBox = components.collisionBox(); String tagName = "minecraft:block_collision"; if (protocolVersion >= Bedrock_v534.V534_CODEC.getProtocolVersion()) { tagName = "minecraft:collision_box"; } - builder.putCompound(tagName, NbtMap.builder() - .putBoolean("enabled", true) - .putList("origin", NbtType.FLOAT, collisionBox.originX(), collisionBox.originY(), collisionBox.originZ()) - .putList("size", NbtType.FLOAT, collisionBox.sizeX(), collisionBox.sizeY(), collisionBox.sizeZ()) - .build()); + builder.putCompound(tagName, convertBox(components.collisionBox())); } if (components.geometry() != null) { builder.putCompound("minecraft:geometry", NbtMap.builder() .putString("value", components.geometry()) .build()); } - if (components.materialInstances() != null) { + if (components.materialInstances() != null && !components.materialInstances().isEmpty()) { NbtMapBuilder materialsBuilder = NbtMap.builder(); for (Map.Entry entry : components.materialInstances().entrySet()) { MaterialInstance materialInstance = entry.getValue(); @@ -406,6 +396,14 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr return builder.build(); } + private static NbtMap convertBox(BoxComponent boxComponent) { + return NbtMap.builder() + .putBoolean("enabled", !boxComponent.isEmpty()) + .putList("origin", NbtType.FLOAT, boxComponent.originX(), boxComponent.originY(), boxComponent.originZ()) + .putList("size", NbtType.FLOAT, boxComponent.sizeX(), boxComponent.sizeY(), boxComponent.sizeZ()) + .build(); + } + private static void registerJavaBlocks() { JsonNode blocksJson; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/blocks.json")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 3e695d64d18..c3b8beb8e6a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -131,8 +131,8 @@ private void addFloorPermutations(List permutations) { for (int i = 0; i < 4; i++) { int floorRotation = 4 * quadrant + i; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .aimCollision(box) - .entityCollision(box) + .selectionBox(box) + .collisionBox(box) .geometry("geometry.geyser.player_skull_floor_" + quadrantNames[i]) .rotation(rotation) .build(); @@ -159,8 +159,8 @@ private void addWallPermutations(List permutations) { String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, i + 1, BITS_B_PROPERTY, 0); CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .aimCollision(box) - .entityCollision(box) + .selectionBox(box) + .collisionBox(box) .geometry("geometry.geyser.player_skull_wall") .rotation(rotation) .build(); From f5d23a6d0025d7ffe94fa9b46f0ff787acc09901 Mon Sep 17 00:00:00 2001 From: davchoo Date: Tue, 26 Jul 2022 20:25:37 -0400 Subject: [PATCH 014/134] Add custom block stuff to provider registry loader --- .../registry/loader/ProviderRegistryLoader.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 449f6574e6e..5e97ccf6896 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -25,6 +25,9 @@ package org.geysermc.geyser.registry.loader; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.command.CommandSource; import org.geysermc.geyser.api.item.custom.CustomItemData; @@ -34,6 +37,9 @@ import org.geysermc.geyser.item.GeyserCustomItemData; import org.geysermc.geyser.item.GeyserCustomItemOptions; import org.geysermc.geyser.item.GeyserNonVanillaCustomItemData; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserCustomBlockPermutation; import org.geysermc.geyser.registry.provider.ProviderSupplier; import java.util.Map; @@ -47,6 +53,11 @@ public class ProviderRegistryLoader implements RegistryLoader, Prov @Override public Map, ProviderSupplier> load(Map, ProviderSupplier> providers) { providers.put(Command.Builder.class, args -> new GeyserCommandManager.CommandBuilder<>((Class) args[0])); + + providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.CustomBlockComponentsBuilder()); + providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); + providers.put(CustomBlockPermutation.Builder.class, args -> new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder()); + providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); providers.put(NonVanillaCustomItemData.Builder.class, args -> new GeyserNonVanillaCustomItemData.NonVanillaCustomItemDataBuilder()); From 5676870dd809ce29453f7365e6f88e145855f38c Mon Sep 17 00:00:00 2001 From: davchoo Date: Wed, 27 Jul 2022 18:25:04 -0400 Subject: [PATCH 015/134] More API changes Convert CustomBlockPermutation into a record Change materialInstances in CustomBlockComponents Builder to materialInstance Reuse box components in CustomSkull --- .../api/block/custom/CustomBlockData.java | 2 +- .../block/custom/CustomBlockPermutation.java | 13 +--- .../component/CustomBlockComponents.java | 6 +- .../block/GeyserCustomBlockComponents.java | 20 +++-- .../level/block/GeyserCustomBlockData.java | 31 ++++---- .../block/GeyserCustomBlockPermutation.java | 76 ------------------- .../loader/ProviderRegistryLoader.java | 3 - .../geyser/registry/type/CustomSkull.java | 50 +++++------- 8 files changed, 57 insertions(+), 144 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 8e2a7886f4e..6d4d7b662b5 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -46,7 +46,7 @@ public interface CustomBlockData { @NonNull List permutations(); - CustomBlockState.Builder blockStateBuilder(); + CustomBlockState.@NonNull Builder blockStateBuilder(); interface Builder { Builder name(@NonNull String name); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index 5766565d21a..dfaf626f330 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -28,16 +28,5 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; -public interface CustomBlockPermutation { - @NonNull String condition(); - - CustomBlockComponents components(); - - interface Builder { - Builder condition(@NonNull String condition); - - Builder components(CustomBlockComponents components); - - CustomBlockPermutation build(); - } +public record CustomBlockPermutation(@NonNull CustomBlockComponents components, @NonNull String condition) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index f18440b33b7..e1c63d753fb 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.api.block.custom.component; +import org.checkerframework.checker.nullness.qual.NonNull; + import java.util.Map; public interface CustomBlockComponents { @@ -34,7 +36,7 @@ public interface CustomBlockComponents { String geometry(); - Map materialInstances(); + @NonNull Map materialInstances(); Float destroyTime(); @@ -53,7 +55,7 @@ interface Builder { Builder geometry(String geometry); - Builder materialInstances(Map materialInstances); + Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); Builder destroyTime(Float destroyTime); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 5ac7e261317..6a9faeb5cae 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,10 +25,16 @@ package org.geysermc.geyser.level.block; +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -47,7 +53,11 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; this.collisionBox = builder.collisionBox; this.geometry = builder.geometry; - this.materialInstances = builder.materialInstances; + if (builder.materialInstances.isEmpty()) { + this.materialInstances = Object2ObjectMaps.emptyMap(); + } else { + this.materialInstances = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.materialInstances)); + } this.destroyTime = builder.destroyTime; this.friction = builder.friction; this.lightEmission = builder.lightEmission; @@ -71,7 +81,7 @@ public String geometry() { } @Override - public Map materialInstances() { + public @NonNull Map materialInstances() { return materialInstances; } @@ -104,7 +114,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; protected String geometry; - protected Map materialInstances; + protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); protected Float destroyTime; protected Float friction; protected Integer lightEmission; @@ -130,8 +140,8 @@ public Builder geometry(String geometry) { } @Override - public Builder materialInstances(Map materialInstances) { - this.materialInstances = materialInstances; + public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance materialInstance) { + this.materialInstances.put(name, materialInstance); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 5cb3221e56a..6cf4bf860a7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -25,9 +25,7 @@ package org.geysermc.geyser.level.block; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectLists; +import it.unimi.dsi.fastutil.objects.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Value; @@ -39,6 +37,7 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; +import org.jetbrains.annotations.NotNull; import java.util.List; import java.util.Map; @@ -78,15 +77,15 @@ public CustomBlockComponents components() { } @Override - public CustomBlockState.Builder blockStateBuilder() { + public CustomBlockState.@NotNull Builder blockStateBuilder() { return new GeyserCustomBlockState.CustomBlockStateBuilder(this); } public static class CustomBlockDataBuilder implements Builder { private String name; private CustomBlockComponents components; - private Map> properties = new Object2ObjectOpenHashMap<>(); - private List permutations; + private final Object2ObjectMap> properties = new Object2ObjectOpenHashMap<>(); + private List permutations = ObjectLists.emptyList(); @Override public Builder name(@NonNull String name) { @@ -127,23 +126,27 @@ public Builder permutations(@NonNull List permutations) @Override public CustomBlockData build() { if (name == null) { - throw new IllegalArgumentException("Name must be set"); + throw new IllegalStateException("Name must be set"); } - if (properties == null) { - properties = Object2ObjectMaps.emptyMap(); - } else { + + Object2ObjectMap> properties = Object2ObjectMaps.emptyMap(); + if (!this.properties.isEmpty()) { + properties = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(this.properties)); for (CustomBlockProperty property : properties.values()) { if (property.values().isEmpty() || property.values().size() > 16) { - throw new IllegalArgumentException(property.name() + " must contain 1 to 16 values."); + throw new IllegalStateException(property.name() + " must contain 1 to 16 values."); } if (property.values().stream().distinct().count() != property.values().size()) { - throw new IllegalArgumentException(property.name() + " has duplicate values."); + throw new IllegalStateException(property.name() + " has duplicate values."); } } } - if (permutations == null) { - permutations = ObjectLists.emptyList(); + + List permutations = ObjectLists.emptyList(); + if (!this.permutations.isEmpty()) { + permutations = ObjectLists.unmodifiable(new ObjectArrayList<>(this.permutations)); } + return new GeyserCustomBlockData(name, components, properties, permutations); } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java deleted file mode 100644 index 22e03c99a94..00000000000 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockPermutation.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.level.block; - -import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; -import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; - - -public class GeyserCustomBlockPermutation implements CustomBlockPermutation { - private final String condition; - private final CustomBlockComponents components; - - public GeyserCustomBlockPermutation(String condition, CustomBlockComponents components) { - this.condition = condition; - this.components = components; - } - - @Override - public @NonNull String condition() { - return condition; - } - - @Override - public CustomBlockComponents components() { - return components; - } - - public static class CustomBlockPermutationBuilder implements Builder { - private String condition; - private CustomBlockComponents components; - - @Override - public Builder condition(@NonNull String condition) { - this.condition = condition; - return this; - } - - @Override - public Builder components(CustomBlockComponents components) { - this.components = components; - return this; - } - - @Override - public CustomBlockPermutation build() { - if (condition == null) { - throw new IllegalArgumentException("Condition must be set"); - } - return new GeyserCustomBlockPermutation(condition, components); - } - } -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 5e97ccf6896..1c31901ff37 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.registry.loader; import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.command.CommandSource; @@ -39,7 +38,6 @@ import org.geysermc.geyser.item.GeyserNonVanillaCustomItemData; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; -import org.geysermc.geyser.level.block.GeyserCustomBlockPermutation; import org.geysermc.geyser.registry.provider.ProviderSupplier; import java.util.Map; @@ -56,7 +54,6 @@ public Map, ProviderSupplier> load(Map, ProviderSupplier> prov providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.CustomBlockComponentsBuilder()); providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); - providers.put(CustomBlockPermutation.Builder.class, args -> new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder()); providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index c3b8beb8e6a..390e3a8d9a7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -35,11 +35,9 @@ import org.geysermc.geyser.api.block.custom.component.RotationComponent; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; -import org.geysermc.geyser.level.block.GeyserCustomBlockPermutation; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.stream.IntStream; @Data @@ -53,12 +51,22 @@ public class CustomSkull { private static final int[] ROTATIONS = {0, -90, 180, 90}; + private static final BoxComponent FLOOR_BOX = new BoxComponent( + -4, 0, -4, + 8, 8, 8 + ); + + private static final BoxComponent WALL_BOX = new BoxComponent( + -4, 4, 0, + 8, 8, 8 + ); + public CustomSkull(String skinHash) { this.skinHash = skinHash; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .destroyTime(1.5f) - .materialInstances(Map.of("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true))) + .materialInstance("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true)) .lightFilter(0) .build(); @@ -112,18 +120,10 @@ private void addDefaultPermutation(List permutations) { .build(); String condition = String.format("query.block_property('%s') == 0 && query.block_property('%s') == 0", BITS_A_PROPERTY, BITS_B_PROPERTY); - permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() - .condition(condition) - .components(components) - .build()); + permutations.add(new CustomBlockPermutation(components, condition)); } private void addFloorPermutations(List permutations) { - BoxComponent box = new BoxComponent( - -4, 0, -4, - 8, 8, 8 - ); - String[] quadrantNames = {"a", "b", "c", "d"}; for (int quadrant = 0; quadrant < 4; quadrant++) { @@ -131,8 +131,8 @@ private void addFloorPermutations(List permutations) { for (int i = 0; i < 4; i++) { int floorRotation = 4 * quadrant + i; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .selectionBox(box) - .collisionBox(box) + .selectionBox(FLOOR_BOX) + .collisionBox(FLOOR_BOX) .geometry("geometry.geyser.player_skull_floor_" + quadrantNames[i]) .rotation(rotation) .build(); @@ -140,35 +140,23 @@ private void addFloorPermutations(List permutations) { int bitsA = (5 + floorRotation) % 7; int bitsB = (5 + floorRotation) / 7; String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, bitsA, BITS_B_PROPERTY, bitsB); - permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() - .condition(condition) - .components(components) - .build()); + permutations.add(new CustomBlockPermutation(components, condition)); } } } private void addWallPermutations(List permutations) { - BoxComponent box = new BoxComponent( - -4, 4, 0, - 8, 8, 8 - ); - for (int i = 0; i < 4; i++) { RotationComponent rotation = new RotationComponent(0, ROTATIONS[i], 0); - String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, i + 1, BITS_B_PROPERTY, 0); - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .selectionBox(box) - .collisionBox(box) + .selectionBox(WALL_BOX) + .collisionBox(WALL_BOX) .geometry("geometry.geyser.player_skull_wall") .rotation(rotation) .build(); - permutations.add(new GeyserCustomBlockPermutation.CustomBlockPermutationBuilder() - .condition(condition) - .components(components) - .build()); + String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, i + 1, BITS_B_PROPERTY, 0); + permutations.add(new CustomBlockPermutation(components, condition)); } } } From 8244afa8c7889cfc40fdeed894db74513aea108b Mon Sep 17 00:00:00 2001 From: davchoo Date: Wed, 27 Jul 2022 18:43:42 -0400 Subject: [PATCH 016/134] Convert skull floor geometries into a template Should be easier to modify in needed in the future. --- .../geyser/pack/SkullResourcePackManager.java | 21 ++++++++++++- ...a.geo.json => player_skull_floor.geo.json} | 3 +- .../blocks/player_skull_floor_b.geo.json | 30 ------------------- .../blocks/player_skull_floor_c.geo.json | 30 ------------------- .../blocks/player_skull_floor_d.geo.json | 30 ------------------- .../bedrock/skull_resource_pack_files.txt | 4 --- 6 files changed, 22 insertions(+), 96 deletions(-) rename core/src/main/resources/bedrock/skull_resource_pack/models/blocks/{player_skull_floor_a.geo.json => player_skull_floor.geo.json} (92%) delete mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json delete mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json delete mode 100644 core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 2e6c603399a..e61b9190d90 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -53,7 +53,7 @@ public class SkullResourcePackManager { - private static final long RESOURCE_PACK_VERSION = 5; + private static final long RESOURCE_PACK_VERSION = 6; private static final Path SKULL_SKIN_CACHE_PATH = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); @@ -170,6 +170,8 @@ private static void addBaseResources(ZipOutputStream zipOS) throws IOException { zipOS.closeEntry(); } + addFloorGeometries(zipOS); + ZipEntry entry = new ZipEntry("skull_resource_pack/pack_icon.png"); zipOS.putNextEntry(entry); zipOS.write(FileUtils.readAllBytes("icon.png")); @@ -177,6 +179,23 @@ private static void addBaseResources(ZipOutputStream zipOS) throws IOException { } } + private static void addFloorGeometries(ZipOutputStream zipOS) throws IOException { + String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json"), StandardCharsets.UTF_8); + String[] quadrants = {"a", "b", "c", "d"}; + for (int i = 0; i < quadrants.length; i++) { + String quadrant = quadrants[i]; + float yRotation = i * 22.5f; + String contents = template + .replace("${quadrant}", quadrant) + .replace("${y_rotation}", String.valueOf(yRotation)); + + ZipEntry entry = new ZipEntry("skull_resource_pack/models/blocks/player_skull_floor_" + quadrant + ".geo.json"); + zipOS.putNextEntry(entry); + zipOS.write(contents.getBytes(StandardCharsets.UTF_8)); + zipOS.closeEntry(); + } + } + private static void addAttachables(ZipOutputStream zipOS) throws IOException { String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/attachables/template_attachable.json"), StandardCharsets.UTF_8); for (String skinHash : SKULL_SKINS.keySet()) { diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json similarity index 92% rename from core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json rename to core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json index 743236a5d2f..992ab4aabf1 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_a.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json @@ -3,7 +3,7 @@ "minecraft:geometry": [ { "description": { - "identifier": "geometry.geyser.player_skull_floor_a", + "identifier": "geometry.geyser.player_skull_floor_${quadrant}", "texture_width": 64, "texture_height": 64 }, @@ -11,6 +11,7 @@ { "name": "head", "pivot": [0, 24, 0], + "rotation": [0, ${y_rotation}, 0], "cubes": [ {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json deleted file mode 100644 index 0bbe1c1f653..00000000000 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_b.geo.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.geyser.player_skull_floor_b", - "texture_width": 64, - "texture_height": 64 - }, - "bones": [ - { - "name": "head", - "pivot": [0, 24, 0], - "rotation": [0, 22.5, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} - ] - }, - { - "name": "hat", - "parent": "head", - "pivot": [0, 24, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json deleted file mode 100644 index c633977abe4..00000000000 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_c.geo.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.geyser.player_skull_floor_c", - "texture_width": 64, - "texture_height": 64 - }, - "bones": [ - { - "name": "head", - "pivot": [0, 24, 0], - "rotation": [0, 45, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} - ] - }, - { - "name": "hat", - "parent": "head", - "pivot": [0, 24, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json deleted file mode 100644 index 7436944e774..00000000000 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor_d.geo.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "format_version": "1.12.0", - "minecraft:geometry": [ - { - "description": { - "identifier": "geometry.geyser.player_skull_floor_d", - "texture_width": 64, - "texture_height": 64 - }, - "bones": [ - { - "name": "head", - "pivot": [0, 24, 0], - "rotation": [0, 67.5, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} - ] - }, - { - "name": "hat", - "parent": "head", - "pivot": [0, 24, 0], - "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack_files.txt b/core/src/main/resources/bedrock/skull_resource_pack_files.txt index ecb441cadba..83a82b5d2c9 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack_files.txt +++ b/core/src/main/resources/bedrock/skull_resource_pack_files.txt @@ -1,10 +1,6 @@ skull_resource_pack/animations/disable.animation.json skull_resource_pack/animations/player_skull.animation.json skull_resource_pack/models/blocks/player_skull.geo.json -skull_resource_pack/models/blocks/player_skull_floor_a.geo.json -skull_resource_pack/models/blocks/player_skull_floor_c.geo.json -skull_resource_pack/models/blocks/player_skull_floor_b.geo.json -skull_resource_pack/models/blocks/player_skull_floor_d.geo.json skull_resource_pack/models/blocks/player_skull_hand.geo.json skull_resource_pack/models/blocks/player_skull_wall.geo.json skull_resource_pack/textures/terrain_texture.json From 15fd5353e1c2b8bcffd6d5986095a3646a6e7bf9 Mon Sep 17 00:00:00 2001 From: davchoo Date: Wed, 27 Jul 2022 22:32:18 -0400 Subject: [PATCH 017/134] Crop and reorder skull textures to eliminate unused space Should reduce memory & storage usage for Bedrock clients --- .../geyser/pack/SkullResourcePackManager.java | 35 ++++++++++--------- .../models/blocks/player_skull.geo.json | 33 ++++++++++++++--- .../models/blocks/player_skull_floor.geo.json | 31 +++++++++++++--- .../models/blocks/player_skull_hand.geo.json | 31 +++++++++++++--- .../models/blocks/player_skull_wall.geo.json | 31 +++++++++++++--- 5 files changed, 128 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index e61b9190d90..0fda6e49d77 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -53,7 +53,7 @@ public class SkullResourcePackManager { - private static final long RESOURCE_PACK_VERSION = 6; + private static final long RESOURCE_PACK_VERSION = 9; private static final Path SKULL_SKIN_CACHE_PATH = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); @@ -112,21 +112,24 @@ public static void cacheSkullSkin(String skinUrl, String skinHash) throws IOExce } BufferedImage image = SkinProvider.requestImage(skinUrl, null); - if (image.getHeight() != 64) { - // We have to resize legacy skins to 64x64 for them to be displayed properly - BufferedImage modernSkin = new BufferedImage(64, 64, image.getType()); - - Graphics g = modernSkin.createGraphics(); - g.drawImage(image, 0, 0, null); - g.setColor(new Color(0, 0, 0, 0)); - g.fillRect(0, 32, 64, 32); - g.dispose(); - - image.flush(); - image = modernSkin; - } - - ImageIO.write(image, "png", skinPath.toFile()); + // Resize skins to 48x16 to save on space and memory + BufferedImage skullTexture = new BufferedImage(48, 16, image.getType()); + // Reorder skin parts to fit into the space + // Right, Front, Left, Back, Top, Bottom - head + // Right, Front, Left, Back, Top, Bottom - hat + Graphics g = skullTexture.createGraphics(); + // Right, Front, Left, Back of the head + g.drawImage(image, 0, 0, 32, 8, 0, 8, 32, 16, null); + // Right, Front, Left, Back of the hat + g.drawImage(image, 0, 8, 32, 16, 32, 8, 64, 16, null); + // Top and bottom of the head + g.drawImage(image, 32, 0, 48, 8, 8, 0, 24, 8, null); + // Top and bottom of the hat + g.drawImage(image, 32, 8, 48, 16, 40, 0, 56, 8, null); + g.dispose(); + image.flush(); + + ImageIO.write(skullTexture, "png", skinPath.toFile()); SKULL_SKINS.put(skinHash, skinPath); GeyserImpl.getInstance().getLogger().debug("Cached player skull to " + skinPath + " for " + skinHash); } diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json index 2681b406f3d..18bd5ea12fa 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { @@ -33,7 +33,18 @@ "parent": "root_z", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 8, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -41,10 +52,22 @@ "parent": "player_skull", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.25} + { + "origin": [-4, 8, -4], + "size": [8, 8, 8], + "inflate": 0.25, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] } ] -} +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json index 992ab4aabf1..da35cb4de25 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull_floor_${quadrant}", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { @@ -13,7 +13,18 @@ "pivot": [0, 24, 0], "rotation": [0, ${y_rotation}, 0], "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 0.5, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -21,7 +32,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 0.5, -4], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json index 6ad5bea1b28..5bd9e95a8f9 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json @@ -4,15 +4,26 @@ { "description": { "identifier": "geometry.geyser.player_skull_hand", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 4, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -20,7 +31,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 4, -4], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json index 5c39733dd74..676a6e7f114 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json @@ -4,15 +4,26 @@ { "description": { "identifier": "geometry.geyser.player_skull_wall", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 4, -0.5], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -20,7 +31,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 4, -0.5], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] From 9f4f2aca94194ce0aca506dd4b8473dce90fb0ab Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 28 Jul 2022 14:33:22 -0400 Subject: [PATCH 018/134] Revert "Crop and reorder skull textures to eliminate unused space" This reverts commit 15fd5353e1c2b8bcffd6d5986095a3646a6e7bf9. --- .../geyser/pack/SkullResourcePackManager.java | 35 +++++++++---------- .../models/blocks/player_skull.geo.json | 33 +++-------------- .../models/blocks/player_skull_floor.geo.json | 31 +++------------- .../models/blocks/player_skull_hand.geo.json | 31 +++------------- .../models/blocks/player_skull_wall.geo.json | 31 +++------------- 5 files changed, 33 insertions(+), 128 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 0fda6e49d77..e61b9190d90 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -53,7 +53,7 @@ public class SkullResourcePackManager { - private static final long RESOURCE_PACK_VERSION = 9; + private static final long RESOURCE_PACK_VERSION = 6; private static final Path SKULL_SKIN_CACHE_PATH = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); @@ -112,24 +112,21 @@ public static void cacheSkullSkin(String skinUrl, String skinHash) throws IOExce } BufferedImage image = SkinProvider.requestImage(skinUrl, null); - // Resize skins to 48x16 to save on space and memory - BufferedImage skullTexture = new BufferedImage(48, 16, image.getType()); - // Reorder skin parts to fit into the space - // Right, Front, Left, Back, Top, Bottom - head - // Right, Front, Left, Back, Top, Bottom - hat - Graphics g = skullTexture.createGraphics(); - // Right, Front, Left, Back of the head - g.drawImage(image, 0, 0, 32, 8, 0, 8, 32, 16, null); - // Right, Front, Left, Back of the hat - g.drawImage(image, 0, 8, 32, 16, 32, 8, 64, 16, null); - // Top and bottom of the head - g.drawImage(image, 32, 0, 48, 8, 8, 0, 24, 8, null); - // Top and bottom of the hat - g.drawImage(image, 32, 8, 48, 16, 40, 0, 56, 8, null); - g.dispose(); - image.flush(); - - ImageIO.write(skullTexture, "png", skinPath.toFile()); + if (image.getHeight() != 64) { + // We have to resize legacy skins to 64x64 for them to be displayed properly + BufferedImage modernSkin = new BufferedImage(64, 64, image.getType()); + + Graphics g = modernSkin.createGraphics(); + g.drawImage(image, 0, 0, null); + g.setColor(new Color(0, 0, 0, 0)); + g.fillRect(0, 32, 64, 32); + g.dispose(); + + image.flush(); + image = modernSkin; + } + + ImageIO.write(image, "png", skinPath.toFile()); SKULL_SKINS.put(skinHash, skinPath); GeyserImpl.getInstance().getLogger().debug("Cached player skull to " + skinPath + " for " + skinHash); } diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json index 18bd5ea12fa..2681b406f3d 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull", - "texture_width": 48, - "texture_height": 16 + "texture_width": 64, + "texture_height": 64 }, "bones": [ { @@ -33,18 +33,7 @@ "parent": "root_z", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 8, -4], - "size": [8, 8, 8], - "uv": { - "north": {"uv": [8, 0], "uv_size": [8, 8]}, - "east": {"uv": [0, 0], "uv_size": [8, 8]}, - "south": {"uv": [24, 0], "uv_size": [8, 8]}, - "west": {"uv": [16, 0], "uv_size": [8, 8]}, - "up": {"uv": [32, 0], "uv_size": [8, 8]}, - "down": {"uv": [40, 8], "uv_size": [8, -8]} - } - } + {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [0, 0]} ] }, { @@ -52,22 +41,10 @@ "parent": "player_skull", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 8, -4], - "size": [8, 8, 8], - "inflate": 0.25, - "uv": { - "north": {"uv": [8, 8], "uv_size": [8, 8]}, - "east": {"uv": [0, 8], "uv_size": [8, 8]}, - "south": {"uv": [24, 8], "uv_size": [8, 8]}, - "west": {"uv": [16, 8], "uv_size": [8, 8]}, - "up": {"uv": [32, 8], "uv_size": [8, 8]}, - "down": {"uv": [40, 16], "uv_size": [8, -8]} - } - } + {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.25} ] } ] } ] -} \ No newline at end of file +} diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json index da35cb4de25..992ab4aabf1 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull_floor_${quadrant}", - "texture_width": 48, - "texture_height": 16 + "texture_width": 64, + "texture_height": 64 }, "bones": [ { @@ -13,18 +13,7 @@ "pivot": [0, 24, 0], "rotation": [0, ${y_rotation}, 0], "cubes": [ - { - "origin": [-4, 0.5, -4], - "size": [8, 8, 8], - "uv": { - "north": {"uv": [8, 0], "uv_size": [8, 8]}, - "east": {"uv": [0, 0], "uv_size": [8, 8]}, - "south": {"uv": [24, 0], "uv_size": [8, 8]}, - "west": {"uv": [16, 0], "uv_size": [8, 8]}, - "up": {"uv": [32, 0], "uv_size": [8, 8]}, - "down": {"uv": [40, 8], "uv_size": [8, -8]} - } - } + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} ] }, { @@ -32,19 +21,7 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 0.5, -4], - "size": [8, 8, 8], - "inflate": 0.5, - "uv": { - "north": {"uv": [8, 8], "uv_size": [8, 8]}, - "east": {"uv": [0, 8], "uv_size": [8, 8]}, - "south": {"uv": [24, 8], "uv_size": [8, 8]}, - "west": {"uv": [16, 8], "uv_size": [8, 8]}, - "up": {"uv": [32, 8], "uv_size": [8, 8]}, - "down": {"uv": [40, 16], "uv_size": [8, -8]} - } - } + {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json index 5bd9e95a8f9..6ad5bea1b28 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json @@ -4,26 +4,15 @@ { "description": { "identifier": "geometry.geyser.player_skull_hand", - "texture_width": 48, - "texture_height": 16 + "texture_width": 64, + "texture_height": 64 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 4, -4], - "size": [8, 8, 8], - "uv": { - "north": {"uv": [8, 0], "uv_size": [8, 8]}, - "east": {"uv": [0, 0], "uv_size": [8, 8]}, - "south": {"uv": [24, 0], "uv_size": [8, 8]}, - "west": {"uv": [16, 0], "uv_size": [8, 8]}, - "up": {"uv": [32, 0], "uv_size": [8, 8]}, - "down": {"uv": [40, 8], "uv_size": [8, -8]} - } - } + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [0, 0]} ] }, { @@ -31,19 +20,7 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 4, -4], - "size": [8, 8, 8], - "inflate": 0.5, - "uv": { - "north": {"uv": [8, 8], "uv_size": [8, 8]}, - "east": {"uv": [0, 8], "uv_size": [8, 8]}, - "south": {"uv": [24, 8], "uv_size": [8, 8]}, - "west": {"uv": [16, 8], "uv_size": [8, 8]}, - "up": {"uv": [32, 8], "uv_size": [8, 8]}, - "down": {"uv": [40, 16], "uv_size": [8, -8]} - } - } + {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json index 676a6e7f114..5c39733dd74 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json @@ -4,26 +4,15 @@ { "description": { "identifier": "geometry.geyser.player_skull_wall", - "texture_width": 48, - "texture_height": 16 + "texture_width": 64, + "texture_height": 64 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 4, -0.5], - "size": [8, 8, 8], - "uv": { - "north": {"uv": [8, 0], "uv_size": [8, 8]}, - "east": {"uv": [0, 0], "uv_size": [8, 8]}, - "south": {"uv": [24, 0], "uv_size": [8, 8]}, - "west": {"uv": [16, 0], "uv_size": [8, 8]}, - "up": {"uv": [32, 0], "uv_size": [8, 8]}, - "down": {"uv": [40, 8], "uv_size": [8, -8]} - } - } + {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [0, 0]} ] }, { @@ -31,19 +20,7 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - { - "origin": [-4, 4, -0.5], - "size": [8, 8, 8], - "inflate": 0.5, - "uv": { - "north": {"uv": [8, 8], "uv_size": [8, 8]}, - "east": {"uv": [0, 8], "uv_size": [8, 8]}, - "south": {"uv": [24, 8], "uv_size": [8, 8]}, - "west": {"uv": [16, 8], "uv_size": [8, 8]}, - "up": {"uv": [32, 8], "uv_size": [8, 8]}, - "down": {"uv": [40, 16], "uv_size": [8, -8]} - } - } + {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} ] } ] From 2ca368019c5a10199ca49ec426cc545a14681555 Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 28 Jul 2022 19:43:03 -0400 Subject: [PATCH 019/134] Use identifier from CustomBlockData in SkullResourcePackManager --- .../geyser/pack/SkullResourcePackManager.java | 19 ++++++++++--------- .../org/geysermc/geyser/util/FileUtils.java | 8 ++++++++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index e61b9190d90..c8fc20bf866 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.skin.SkinProvider; import org.geysermc.geyser.util.FileUtils; @@ -180,7 +181,7 @@ private static void addBaseResources(ZipOutputStream zipOS) throws IOException { } private static void addFloorGeometries(ZipOutputStream zipOS) throws IOException { - String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json"), StandardCharsets.UTF_8); + String template = FileUtils.readToString("bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json"); String[] quadrants = {"a", "b", "c", "d"}; for (int i = 0; i < quadrants.length; i++) { String quadrant = quadrants[i]; @@ -197,11 +198,11 @@ private static void addFloorGeometries(ZipOutputStream zipOS) throws IOException } private static void addAttachables(ZipOutputStream zipOS) throws IOException { - String template = new String(FileUtils.readAllBytes("bedrock/skull_resource_pack/attachables/template_attachable.json"), StandardCharsets.UTF_8); - for (String skinHash : SKULL_SKINS.keySet()) { - ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + skinHash + ".json"); + String template = FileUtils.readToString("bedrock/skull_resource_pack/attachables/template_attachable.json"); + for (CustomSkull skull : BlockRegistries.CUSTOM_SKULLS.get().values()) { + ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + skull.getSkinHash() + ".json"); zipOS.putNextEntry(entry); - zipOS.write(fillAttachableJson(template, skinHash).getBytes(StandardCharsets.UTF_8)); + zipOS.write(fillAttachableJson(template, skull).getBytes(StandardCharsets.UTF_8)); zipOS.closeEntry(); } } @@ -218,14 +219,14 @@ private static void addSkinTextures(ZipOutputStream zipOS) throws IOException { } private static void fillTemplate(ZipOutputStream zipOS, String path, UnaryOperator filler) throws IOException { - String template = new String(FileUtils.readAllBytes(path), StandardCharsets.UTF_8); + String template = FileUtils.readToString(path); String result = filler.apply(template); zipOS.write(result.getBytes(StandardCharsets.UTF_8)); } - private static String fillAttachableJson(String template, String skinHash) { - return template.replace("${identifier}", "geyser:player_skull_" + skinHash) // TOOD use CustomSkull for this - .replace("${texture}", skinHash); + private static String fillAttachableJson(String template, CustomSkull skull) { + return template.replace("${identifier}", skull.getCustomBlockData().identifier()) + .replace("${texture}", skull.getSkinHash()); } private static String fillManifestJson(String template) { diff --git a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java index 6df9c2177a5..e6c7b41fa7c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java @@ -188,6 +188,14 @@ public static byte[] readAllBytes(String resource) { } } + /** + * @param resource the internal resource to read off from + * @return the contents decoded as a UTF-8 String + */ + public static String readToString(String resource) { + return new String(readAllBytes(resource), StandardCharsets.UTF_8); + } + /** * Read the lines of a file and return it as a stream * From 36f540f40118948582decb64a4b01f9f4829c2fb Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 28 Jul 2022 20:43:06 -0400 Subject: [PATCH 020/134] Fix isIncorrectHeldItem check for custom skull blocks Add defaultBlockState to CustomBlockData --- .../api/block/custom/CustomBlockData.java | 2 + .../block/GeyserCustomBlockComponents.java | 20 +++--- .../level/block/GeyserCustomBlockData.java | 70 ++++++++++++------- .../populator/BlockRegistryPopulator.java | 2 +- .../geyser/registry/type/CustomSkull.java | 7 -- .../inventory/item/ItemTranslator.java | 42 +++++++---- 6 files changed, 86 insertions(+), 57 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 6d4d7b662b5..52d90892da9 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -46,6 +46,8 @@ public interface CustomBlockData { @NonNull List permutations(); + @NonNull CustomBlockState defaultBlockState(); + CustomBlockState.@NonNull Builder blockStateBuilder(); interface Builder { diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 6a9faeb5cae..85795970a82 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; @@ -38,16 +39,17 @@ import java.util.Map; +@Value public class GeyserCustomBlockComponents implements CustomBlockComponents { - private final BoxComponent selectionBox; - private final BoxComponent collisionBox; - private final String geometry; - private final Map materialInstances; - private final Float destroyTime; - private final Float friction; - private final Integer lightEmission; - private final Integer lightDampening; - private final RotationComponent rotation; + BoxComponent selectionBox; + BoxComponent collisionBox; + String geometry; + Map materialInstances; + Float destroyTime; + Float friction; + Integer lightEmission; + Integer lightDampening; + RotationComponent rotation; private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 6cf4bf860a7..a7085c3e8c7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -26,8 +26,7 @@ package org.geysermc.geyser.level.block; import it.unimi.dsi.fastutil.objects.*; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; @@ -43,7 +42,6 @@ import java.util.Map; @Value -@AllArgsConstructor(access = AccessLevel.PRIVATE) public class GeyserCustomBlockData implements CustomBlockData { String name; @@ -51,6 +49,43 @@ public class GeyserCustomBlockData implements CustomBlockData { Map> properties; List permutations; + @EqualsAndHashCode.Exclude // Otherwise this will a StackOverflowError in hashCode/equals + CustomBlockState defaultBlockState; + + private GeyserCustomBlockData(CustomBlockDataBuilder builder) { + this.name = builder.name; + if (name == null) { + throw new IllegalStateException("Name must be set"); + } + + this.components = builder.components; + + Object2ObjectMap defaultProperties; + if (!builder.properties.isEmpty()) { + this.properties = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.properties)); + defaultProperties = new Object2ObjectOpenHashMap<>(this.properties.size()); + for (CustomBlockProperty property : properties.values()) { + if (property.values().isEmpty() || property.values().size() > 16) { + throw new IllegalStateException(property.name() + " must contain 1 to 16 values."); + } + if (property.values().stream().distinct().count() != property.values().size()) { + throw new IllegalStateException(property.name() + " has duplicate values."); + } + defaultProperties.put(property.name(), property.values().get(0)); + } + this.defaultBlockState = new GeyserCustomBlockState(this, Object2ObjectMaps.unmodifiable(defaultProperties)); + } else { + this.properties = Object2ObjectMaps.emptyMap(); + this.defaultBlockState = new GeyserCustomBlockState(this, Object2ObjectMaps.emptyMap()); + } + + if (!builder.permutations.isEmpty()) { + this.permutations = ObjectLists.unmodifiable(new ObjectArrayList<>(builder.permutations)); + } else { + this.permutations = ObjectLists.emptyList(); + } + } + @Override public @NonNull String name() { return name; @@ -76,6 +111,11 @@ public CustomBlockComponents components() { return permutations; } + @Override + public @NonNull CustomBlockState defaultBlockState() { + return defaultBlockState; + } + @Override public CustomBlockState.@NotNull Builder blockStateBuilder() { return new GeyserCustomBlockState.CustomBlockStateBuilder(this); @@ -125,29 +165,7 @@ public Builder permutations(@NonNull List permutations) @Override public CustomBlockData build() { - if (name == null) { - throw new IllegalStateException("Name must be set"); - } - - Object2ObjectMap> properties = Object2ObjectMaps.emptyMap(); - if (!this.properties.isEmpty()) { - properties = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(this.properties)); - for (CustomBlockProperty property : properties.values()) { - if (property.values().isEmpty() || property.values().size() > 16) { - throw new IllegalStateException(property.name() + " must contain 1 to 16 values."); - } - if (property.values().stream().distinct().count() != property.values().size()) { - throw new IllegalStateException(property.name() + " has duplicate values."); - } - } - } - - List permutations = ObjectLists.emptyList(); - if (!this.permutations.isEmpty()) { - permutations = ObjectLists.unmodifiable(new ObjectArrayList<>(this.permutations)); - } - - return new GeyserCustomBlockData(name, components, properties, permutations); + return new GeyserCustomBlockData(this); } } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 0b37cc3132a..d88985df2f7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -350,7 +350,7 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr .putString("value", components.geometry()) .build()); } - if (components.materialInstances() != null && !components.materialInstances().isEmpty()) { + if (!components.materialInstances().isEmpty()) { NbtMapBuilder materialsBuilder = NbtMap.builder(); for (Map.Entry entry : components.materialInstances().entrySet()) { MaterialInstance materialInstance = entry.getValue(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 390e3a8d9a7..1f5c62b3500 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -84,13 +84,6 @@ public CustomSkull(String skinHash) { .build(); } - public CustomBlockState getDefaultBlockState() { - return customBlockData.blockStateBuilder() - .intProperty(BITS_A_PROPERTY, 0) - .intProperty(BITS_B_PROPERTY, 0) - .build(); - } - public CustomBlockState getWallBlockState(int wallDirection) { wallDirection = switch (wallDirection) { case 0 -> 2; // South diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 694d98e99d4..1a8062c188a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -38,6 +38,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -276,16 +277,24 @@ private static String[] getCanModify(ListTag canModifyJava, String[] canModifyBe */ public static int getBedrockItemId(GeyserSession session, @Nonnull GeyserItemStack itemStack) { if (itemStack.isEmpty()) { - return ItemMapping.AIR.getJavaId(); + return ItemMapping.AIR.getBedrockId(); } int javaId = itemStack.getJavaId(); ItemMapping mapping = ITEM_STACK_TRANSLATORS.getOrDefault(javaId, DEFAULT_TRANSLATOR) .getItemMapping(javaId, itemStack.getNbt(), session.getItemMappings()); + int itemId = mapping.getBedrockId(); + if (mapping == session.getItemMappings().getStoredItems().playerHead()) { + CustomSkull customSkull = getCustomSkull(session, itemStack.getNbt()); + if (customSkull != null) { + itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customSkull.getCustomBlockData()); + } + } + int customItemId = getCustomItem(itemStack.getNbt(), mapping); if (customItemId == -1) { // No custom item - return mapping.getBedrockId(); + return itemId; } else { return customItemId; } @@ -556,29 +565,34 @@ private static void translateCustomItem(CompoundTag nbt, ItemData.Builder builde builder.blockRuntimeId(0); } } - - private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder) { + + private static CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) { if (nbt != null && nbt.contains("SkullOwner")) { if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) { // It's a username give up d: - return; + return null; } SkinManager.GameProfileData data = SkinManager.GameProfileData.from(skullOwner); if (data == null) { session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt); - return; + return null; } String skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); + return BlockRegistries.CUSTOM_SKULLS.get(skinHash); + } + return null; + } - CustomSkull customSkull = BlockRegistries.CUSTOM_SKULLS.get(skinHash); - if (customSkull != null) { - int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customSkull.getCustomBlockData()); - int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customSkull.getDefaultBlockState()); - - builder.id(itemId); - builder.blockRuntimeId(blockRuntimeId); - } + private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder) { + CustomSkull customSkull = getCustomSkull(session, nbt); + if (customSkull != null) { + CustomBlockData customBlockData = customSkull.getCustomBlockData(); + int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customBlockData); + int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customBlockData.defaultBlockState()); + + builder.id(itemId); + builder.blockRuntimeId(blockRuntimeId); } } From d00886e12a225df70828d473a8c214c8046e1298 Mon Sep 17 00:00:00 2001 From: davchoo Date: Thu, 28 Jul 2022 23:24:01 -0400 Subject: [PATCH 021/134] Fix adding duplicate block states for custom blocks with 0 properties Remove defaultBlockState CustomBlockState field from GeyserCustomBlockData since it creates a circular reference --- .../geyser/level/block/GeyserCustomBlockData.java | 12 +++++------- .../registry/populator/BlockRegistryPopulator.java | 7 ------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index a7085c3e8c7..de97d38d4e3 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -49,8 +49,7 @@ public class GeyserCustomBlockData implements CustomBlockData { Map> properties; List permutations; - @EqualsAndHashCode.Exclude // Otherwise this will a StackOverflowError in hashCode/equals - CustomBlockState defaultBlockState; + Map defaultProperties; private GeyserCustomBlockData(CustomBlockDataBuilder builder) { this.name = builder.name; @@ -60,10 +59,9 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { this.components = builder.components; - Object2ObjectMap defaultProperties; if (!builder.properties.isEmpty()) { this.properties = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.properties)); - defaultProperties = new Object2ObjectOpenHashMap<>(this.properties.size()); + Object2ObjectMap defaultProperties = new Object2ObjectOpenHashMap<>(this.properties.size()); for (CustomBlockProperty property : properties.values()) { if (property.values().isEmpty() || property.values().size() > 16) { throw new IllegalStateException(property.name() + " must contain 1 to 16 values."); @@ -73,10 +71,10 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { } defaultProperties.put(property.name(), property.values().get(0)); } - this.defaultBlockState = new GeyserCustomBlockState(this, Object2ObjectMaps.unmodifiable(defaultProperties)); + this.defaultProperties = Object2ObjectMaps.unmodifiable(defaultProperties); } else { this.properties = Object2ObjectMaps.emptyMap(); - this.defaultBlockState = new GeyserCustomBlockState(this, Object2ObjectMaps.emptyMap()); + this.defaultProperties = Object2ObjectMaps.emptyMap(); } if (!builder.permutations.isEmpty()) { @@ -113,7 +111,7 @@ public CustomBlockComponents components() { @Override public @NonNull CustomBlockState defaultBlockState() { - return defaultBlockState; + return new GeyserCustomBlockState(this, defaultProperties); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index d88985df2f7..fadc21dae68 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -111,13 +111,6 @@ public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { } private static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { - if (customBlock.properties().isEmpty()) { - blockStates.add(NbtMap.builder() - .putString("name", customBlock.identifier()) - .putInt("version", stateVersion) - .putCompound("states", NbtMap.EMPTY) - .build()); - } int totalPermutations = 1; for (CustomBlockProperty property : customBlock.properties().values()) { totalPermutations *= property.values().size(); From 42fdbeb64797cd54ccf098a68a97889f75e62a0c Mon Sep 17 00:00:00 2001 From: davchoo Date: Fri, 29 Jul 2022 18:21:14 -0400 Subject: [PATCH 022/134] Add basis for overriding Bedrock block states Fix missing providers when used in GeyserDefineCustomBlocksEvent --- .../GeyserDefineCustomBlocksEvent.java | 2 + .../geyser/registry/BlockRegistries.java | 7 +++ .../geysermc/geyser/registry/Registries.java | 11 +++-- .../populator/BlockRegistryPopulator.java | 49 +++++++++++++++++-- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 05659fa42a8..211457af190 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -27,10 +27,12 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.event.Event; public abstract class GeyserDefineCustomBlocksEvent implements Event { public abstract void registerCustomBlock(@NonNull CustomBlockData customBlockData); + public abstract void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 8d3312dca6d..0103e1762e1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -25,11 +25,13 @@ package org.geysermc.geyser.registry; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; import org.geysermc.geyser.registry.populator.CustomSkullRegistryPopulator; @@ -90,6 +92,11 @@ public class BlockRegistries { */ public static final ArrayRegistry CUSTOM_BLOCKS = ArrayRegistry.create(RegistryLoaders.empty(() -> new CustomBlockData[] {})); + /** + * A registry which stores Java Ids and the custom block state it should be replaced with. + */ + public static final MappedRegistry> CUSTOM_BLOCK_STATE_OVERRIDES = MappedRegistry.create(RegistryLoaders.empty(Int2ObjectOpenHashMap::new)); + /** * A registry which stores skin texture hashes to custom skull blocks. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 4b361ba4faa..48740d7434c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -64,6 +64,12 @@ * Holds all the common registries in Geyser. */ public final class Registries { + /** + * A registry holding all the providers. + * This has to be initialized first to allow extensions to access providers during other registry events. + */ + public static final SimpleMappedRegistry, ProviderSupplier> PROVIDERS = SimpleMappedRegistry.create(new IdentityHashMap<>(), ProviderRegistryLoader::new); + /** * A registry holding a CompoundTag of the known entity identifiers. */ @@ -136,11 +142,6 @@ public final class Registries { */ public static final SimpleRegistry> POTION_MIXES; - /** - * A registry holding all the - */ - public static final SimpleMappedRegistry, ProviderSupplier> PROVIDERS = SimpleMappedRegistry.create(new IdentityHashMap<>(), ProviderRegistryLoader::new); - /** * A versioned registry holding all the recipes, with the net ID being the key, and {@link GeyserRecipe} as the value. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index fadc21dae68..058cf06617e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -32,6 +32,8 @@ import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; import com.nukkitx.protocol.bedrock.v534.Bedrock_v534; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.*; @@ -94,12 +96,36 @@ private static void registerCustomBedrockBlocks() { if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { return; } - List customBlocks = new ArrayList<>(); + Set customBlockNames = new HashSet<>(); + Set customBlocks = new HashSet<>(); + Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { + if (!customBlockNames.add(customBlockData.name())) { + throw new IllegalArgumentException("Another custom block was already registered under the name: " + customBlockData.name()); + } + // TODO validate collision+selection box bounds + // TODO validate names customBlocks.add(customBlockData); } + + @Override + public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { + int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); + if (id == -1) { + throw new IllegalArgumentException("Unknown Java block state. Identifier: " + javaIdentifier); + } + if (!customBlocks.contains(customBlockState.block())) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); + } + CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); + if (oldBlockState != null) { + // TODO should this be an error? Allow extensions to query block state overrides? + GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + + javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); + } + } }); for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { @@ -108,6 +134,9 @@ public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); + + BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); + GeyserImpl.getInstance().getLogger().debug("Registered " + blockStateOverrides.size() + " custom block overrides."); } private static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { @@ -247,10 +276,20 @@ private static void registerBedrockBlocks() { Map.Entry entry = blocksIterator.next(); String javaId = entry.getKey(); - int bedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1); - if (bedrockRuntimeId == -1) { - throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Built NBT tag: \n" + - buildBedrockState(entry.getValue(), stateVersion, stateMapper)); + int bedrockRuntimeId; + CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId); + if (blockStateOverride == null) { + bedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1); + if (bedrockRuntimeId == -1) { + throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Built NBT tag: \n" + + buildBedrockState(entry.getValue(), stateVersion, stateMapper)); + } + } else { + bedrockRuntimeId = customBlockStateIds.getOrDefault(blockStateOverride, -1); + if (bedrockRuntimeId == -1) { + throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Custom block override: \n" + + blockStateOverride); + } } switch (javaId) { From 3257f3cef32db59027b54cb0bd83dfd9b82a4cc3 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 20 Dec 2022 22:22:09 -0800 Subject: [PATCH 023/134] Fix custom blocks in 1.19.50 --- .../GeyserDefineCustomBlocksEvent.java | 2 +- .../geyser/network/UpstreamPacketHandler.java | 2 +- .../populator/BlockRegistryPopulator.java | 24 +++++++-------- .../inventory/item/ItemTranslator.java | 30 ------------------- 4 files changed, 14 insertions(+), 44 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 211457af190..b57bec8557e 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -28,7 +28,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.event.Event; +import org.geysermc.event.Event; public abstract class GeyserDefineCustomBlocksEvent implements Event { diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 17bf80c12ad..227f0ed5ac3 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -144,7 +144,7 @@ public boolean handle(LoginPacket loginPacket) { header.getUuid().toString(), header.getVersionString(), resourcePack.getFile().length(), resourcePack.getContentKey(), "", header.getUuid().toString(), false, false)); } - resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks() || GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()); + resourcePacksInfo.setForcedToAccept(GeyserImpl.getInstance().getConfig().isForceResourcePacks()); session.sendUpstreamPacket(resourcePacksInfo); GeyserLocale.loadGeyserLocale(session.locale()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index f16258d6860..666778f6bda 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -30,7 +30,6 @@ import com.google.common.collect.ImmutableMap; import com.nukkitx.nbt.*; import com.nukkitx.protocol.bedrock.data.BlockPropertyData; -import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -180,7 +179,12 @@ private static BlockPropertyData generateBlockPropertyData(CustomBlockData custo NbtMap propertyTag = NbtMap.builder() .putCompound("components", convertComponents(customBlock.components(), protocolVersion)) - .putInt("molangVersion", 0) + .putCompound("menu_category", NbtMap.builder() + .putString("category", "none") + .putString("group", "") + .putBoolean("is_hidden_in_commands", false) + .build()) + .putInt("molangVersion", 1) .putList("permutations", NbtType.COMPOUND, permutations) .putList("properties", NbtType.COMPOUND, properties) .build(); @@ -199,7 +203,7 @@ private static void registerBedrockBlocks() { NbtList blocksTag; List blockStates; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key())); - NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { + NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { NbtMap blockPalette = (NbtMap) nbtInputStream.readTag(); blocksTag = (NbtList) blockPalette.getList("blocks", NbtType.COMPOUND); blockStates = new ArrayList<>(blocksTag); @@ -366,14 +370,10 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr } NbtMapBuilder builder = NbtMap.builder(); if (components.selectionBox() != null) { - builder.putCompound("minecraft:aim_collision", convertBox(components.selectionBox())); + builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox())); } if (components.collisionBox() != null) { - String tagName = "minecraft:block_collision"; - if (protocolVersion >= Bedrock_v534.V534_CODEC.getProtocolVersion()) { - tagName = "minecraft:collision_box"; - } - builder.putCompound(tagName, convertBox(components.collisionBox())); + builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox())); } if (components.geometry() != null) { builder.putCompound("minecraft:geometry", NbtMap.builder() @@ -397,7 +397,7 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr .build()); } if (components.destroyTime() != null) { - builder.putCompound("minecraft:destroy_time", NbtMap.builder() + builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() .putFloat("value", components.destroyTime()) .build()); } @@ -407,8 +407,8 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr .build()); } if (components.lightEmission() != null) { - builder.putCompound("minecraft:block_light_emission", NbtMap.builder() - .putFloat("value", ((float) components.lightEmission()) / 15f) + builder.putCompound("minecraft:light_emission", NbtMap.builder() + .putInt("value", components.lightEmission()) .build()); } if (components.lightDampening() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 0f83444ba97..4d436485732 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -560,34 +560,4 @@ private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, } } - private static CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) { - if (nbt != null && nbt.contains("SkullOwner")) { - if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) { - // It's a username give up d: - return null; - } - SkinManager.GameProfileData data = SkinManager.GameProfileData.from(skullOwner); - if (data == null) { - session.getGeyser().getLogger().debug("Not sure how to handle skull head item display. " + nbt); - return null; - } - - String skinHash = data.skinUrl().substring(data.skinUrl().lastIndexOf('/') + 1); - return BlockRegistries.CUSTOM_SKULLS.get(skinHash); - } - return null; - } - - private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, ItemData.Builder builder) { - CustomSkull customSkull = getCustomSkull(session, nbt); - if (customSkull != null) { - CustomBlockData customBlockData = customSkull.getCustomBlockData(); - int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customBlockData); - int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customBlockData.defaultBlockState()); - - builder.id(itemId); - builder.blockRuntimeId(blockRuntimeId); - } - } - } From 928b2528dd728f24dca9076e3a37e1e97dc60ae2 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:10:08 -0800 Subject: [PATCH 024/134] Decouple mappings from items --- .../geyser/{item => registry}/mappings/MappingsConfigReader.java | 0 .../{item => registry}/mappings/versions/MappingsReader.java | 0 .../{item => registry}/mappings/versions/MappingsReader_v1.java | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename core/src/main/java/org/geysermc/geyser/{item => registry}/mappings/MappingsConfigReader.java (100%) rename core/src/main/java/org/geysermc/geyser/{item => registry}/mappings/versions/MappingsReader.java (100%) rename core/src/main/java/org/geysermc/geyser/{item => registry}/mappings/versions/MappingsReader_v1.java (100%) diff --git a/core/src/main/java/org/geysermc/geyser/item/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java similarity index 100% rename from core/src/main/java/org/geysermc/geyser/item/mappings/MappingsConfigReader.java rename to core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java diff --git a/core/src/main/java/org/geysermc/geyser/item/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java similarity index 100% rename from core/src/main/java/org/geysermc/geyser/item/mappings/versions/MappingsReader.java rename to core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java diff --git a/core/src/main/java/org/geysermc/geyser/item/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java similarity index 100% rename from core/src/main/java/org/geysermc/geyser/item/mappings/versions/MappingsReader_v1.java rename to core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java From e3dcb6d65ae2ce8bc29114868ca6c14893c9f395 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 27 Dec 2022 23:10:30 -0800 Subject: [PATCH 025/134] Decouple mappings from items --- .../mappings/MappingsConfigReader.java | 74 ++++++++++++++---- .../mappings/versions/MappingsReader.java | 8 +- .../mappings/versions/MappingsReader_v1.java | 49 ++++++++++-- .../populator/ItemRegistryPopulator.java | 76 ++++++++++++------- 4 files changed, 157 insertions(+), 50 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index eaf07c382e8..f1cde175993 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -23,15 +23,16 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.item.mappings; +package org.geysermc.geyser.registry.mappings; import com.fasterxml.jackson.databind.JsonNode; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.item.custom.CustomItemData; -import org.geysermc.geyser.item.mappings.versions.MappingsReader; -import org.geysermc.geyser.item.mappings.versions.MappingsReader_v1; +import org.geysermc.geyser.registry.mappings.versions.MappingsReader; +import org.geysermc.geyser.registry.mappings.versions.MappingsReader_v1; import java.io.IOException; import java.nio.file.Files; @@ -56,43 +57,86 @@ public Path[] getCustomMappingsFiles() { } } - public void loadMappingsFromJson(BiConsumer consumer) { - Path customMappingsDirectory = this.customMappingsDirectory; - if (!Files.exists(customMappingsDirectory)) { + public boolean ensureMappingsDirectory(Path mappingsDirectory) { + if (!Files.exists(mappingsDirectory)) { try { - Files.createDirectories(customMappingsDirectory); + Files.createDirectories(mappingsDirectory); + return true; } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to create custom mappings directory", e); - return; + GeyserImpl.getInstance().getLogger().error("Failed to create mappings directory", e); + return false; } } + return true; + } + + public void loadItemMappingsFromJson(BiConsumer consumer) { + if (!ensureMappingsDirectory(this.customMappingsDirectory)) { + return; + } Path[] mappingsFiles = this.getCustomMappingsFiles(); for (Path mappingsFile : mappingsFiles) { - this.readMappingsFromJson(mappingsFile, consumer); + this.readItemMappingsFromJson(mappingsFile, consumer); } } - public void readMappingsFromJson(Path file, BiConsumer consumer) { + public void loadBlockMappingsFromJson(BiConsumer consumer) { + if (!ensureMappingsDirectory(this.customMappingsDirectory)) { + return; + } + + Path[] mappingsFiles = this.getCustomMappingsFiles(); + for (Path mappingsFile : mappingsFiles) { + this.readBlockMappingsFromJson(mappingsFile, consumer); + } + } + + public JsonNode getMappingsRoot(Path file) { JsonNode mappingsRoot; try { mappingsRoot = GeyserImpl.JSON_MAPPER.readTree(file.toFile()); } catch (IOException e) { GeyserImpl.getInstance().getLogger().error("Failed to read custom mapping file: " + file, e); - return; + return null; } if (!mappingsRoot.has("format_version")) { GeyserImpl.getInstance().getLogger().error("Mappings file " + file + " is missing the format version field!"); - return; + return null; } - int formatVersion = mappingsRoot.get("format_version").asInt(); + return mappingsRoot; + } + + public int getFormatVersion(JsonNode mappingsRoot, Path file) { + int formatVersion = mappingsRoot.get("format_version").asInt(); if (!this.mappingReaders.containsKey(formatVersion)) { GeyserImpl.getInstance().getLogger().error("Mappings file " + file + " has an unknown format version: " + formatVersion); + return -1; + } + return formatVersion; + } + + public void readItemMappingsFromJson(Path file, BiConsumer consumer) { + JsonNode mappingsRoot = getMappingsRoot(file); + + int formatVersion = getFormatVersion(mappingsRoot, file); + if (formatVersion < 0) { + return; + } + + this.mappingReaders.get(formatVersion).readItemMappings(file, mappingsRoot, consumer); + } + + public void readBlockMappingsFromJson(Path file, BiConsumer consumer) { + JsonNode mappingsRoot = getMappingsRoot(file); + + int formatVersion = getFormatVersion(mappingsRoot, file); + if (formatVersion < 0) { return; } - this.mappingReaders.get(formatVersion).readMappings(file, mappingsRoot, consumer); + this.mappingReaders.get(formatVersion).readBlockMappings(file, mappingsRoot, consumer); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index ef553f488ba..2d7d3322804 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -23,9 +23,11 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.item.mappings.versions; +package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; + +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -34,9 +36,11 @@ import java.util.function.BiConsumer; public abstract class MappingsReader { - public abstract void readMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); + public abstract void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); + public abstract void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); public abstract CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException; + public abstract CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException; protected CustomRenderOffsets fromJsonNode(JsonNode node) { if (node == null || !node.isObject()) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 217ff844e1c..6f46c7f5688 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -23,10 +23,11 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.item.mappings.versions; +package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -36,11 +37,16 @@ public class MappingsReader_v1 extends MappingsReader { @Override - public void readMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { - this.readItemMappings(file, mappingsRoot, consumer); + public void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + this.readItemMappingsV1(file, mappingsRoot, consumer); } - public void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + @Override + public void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + this.readBlockMappingsV1(file, mappingsRoot, consumer); + } + + public void readItemMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer consumer) { JsonNode itemsNode = mappingsRoot.get("items"); if (itemsNode != null && itemsNode.isObject()) { @@ -51,7 +57,26 @@ public void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + JsonNode blocksNode = mappingsRoot.get("blocks"); + + if (blocksNode != null && blocksNode.isObject()) { + blocksNode.fields().forEachRemaining(entry -> { + if (entry.getValue().isObject()) { + entry.getValue().forEach(data -> { + try { + CustomBlockData customBlockData = this.readBlockMappingEntry(data); + consumer.accept(entry.getKey(), customBlockData); + } catch (InvalidCustomMappingsFileException e) { + GeyserImpl.getInstance().getLogger().error("Error in registering blocks for custom mapping file: " + file.toString(), e); } }); } @@ -120,4 +145,18 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa return customItemData.build(); } + + @Override + public CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException { + if (node == null || !node.isObject()) { + throw new InvalidCustomMappingsFileException("Invalid block mappings entry"); + } + + String name = node.get("name").asText(); + if (name == null || name.isEmpty()) { + throw new InvalidCustomMappingsFileException("A block entry has no name"); + } + + return null; + } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index ed9f08f361a..bfb34bca435 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -25,6 +25,40 @@ package org.geysermc.geyser.registry.populator; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.GeyserBootstrap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.item.custom.CustomItemData; +import org.geysermc.geyser.api.item.custom.CustomItemOptions; +import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; +import org.geysermc.geyser.event.type.GeyserDefineCustomItemsEventImpl; +import org.geysermc.geyser.inventory.item.StoredItemMappings; +import org.geysermc.geyser.item.GeyserCustomMappingData; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.mappings.MappingsConfigReader; +import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.registry.type.GeyserMappingItem; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; +import org.geysermc.geyser.registry.type.PaletteItem; +import org.geysermc.geyser.util.ItemUtils; +import org.geysermc.geyser.util.collection.FixedInt2IntMap; + import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Multimap; @@ -37,37 +71,23 @@ import com.nukkitx.protocol.bedrock.data.inventory.ComponentItemData; import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.StartGamePacket; -import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; -import it.unimi.dsi.fastutil.ints.*; -import com.nukkitx.protocol.bedrock.v527.Bedrock_v527; -import com.nukkitx.protocol.bedrock.v534.Bedrock_v534; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; +import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; + import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; -import it.unimi.dsi.fastutil.objects.*; -import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.GeyserBootstrap; -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomItemsEvent; -import org.geysermc.geyser.api.item.custom.CustomItemData; -import org.geysermc.geyser.api.item.custom.CustomItemOptions; -import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; -import org.geysermc.geyser.event.type.GeyserDefineCustomItemsEventImpl; -import org.geysermc.geyser.inventory.item.StoredItemMappings; -import org.geysermc.geyser.item.GeyserCustomMappingData; -import org.geysermc.geyser.item.mappings.MappingsConfigReader; -import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.type.*; -import org.geysermc.geyser.util.ItemUtils; -import org.geysermc.geyser.util.collection.FixedInt2IntMap; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.*; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntMaps; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.ObjectIntPair; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; /** * Populates the item registries. @@ -105,7 +125,7 @@ public static void populate() { MappingsConfigReader mappingsConfigReader = new MappingsConfigReader(); if (customItemsAllowed) { // Load custom items from mappings files - mappingsConfigReader.loadMappingsFromJson((key, item) -> { + mappingsConfigReader.loadItemMappingsFromJson((key, item) -> { if (CustomItemRegistryPopulator.initialCheck(key, item, items)) { customItems.get(key).add(item); } From 7988882f91ae098a5a947f7b2831ecedd2b21e75 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 28 Dec 2022 02:16:52 -0800 Subject: [PATCH 026/134] Null check --- .../geyser/registry/mappings/MappingsConfigReader.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index f1cde175993..d4e8b0d93e9 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -122,7 +122,8 @@ public void readItemMappingsFromJson(Path file, BiConsumer Date: Thu, 29 Dec 2022 22:54:04 -0800 Subject: [PATCH 027/134] Move to CustomBlockRegistryPopulator --- .../populator/BlockRegistryPopulator.java | 193 +---------------- .../CustomBlockRegistryPopulator.java | 205 ++++++++++++++++++ .../inventory/item/ItemTranslator.java | 53 +++-- 3 files changed, 247 insertions(+), 204 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 666778f6bda..71d35ebf73b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -32,29 +32,20 @@ import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.*; -import org.checkerframework.checker.nullness.qual.NonNull; + import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.BoxComponent; -import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; -import org.geysermc.geyser.api.block.custom.component.MaterialInstance; -import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; -import org.geysermc.geyser.api.block.custom.property.PropertyType; -import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.BlockMappings; -import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.util.BlockUtils; import java.io.DataInputStream; @@ -75,122 +66,12 @@ public final class BlockRegistryPopulator { public static void populate() { registerJavaBlocks(); - registerCustomBedrockBlocks(); + CustomBlockRegistryPopulator.registerCustomBedrockBlocks(); registerBedrockBlocks(); BLOCKS_JSON = null; } - private static void registerCustomBedrockBlocks() { - if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { - return; - } - Set customBlockNames = new HashSet<>(); - Set customBlocks = new HashSet<>(); - Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); - GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { - @Override - public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { - if (!customBlockNames.add(customBlockData.name())) { - throw new IllegalArgumentException("Another custom block was already registered under the name: " + customBlockData.name()); - } - // TODO validate collision+selection box bounds - // TODO validate names - customBlocks.add(customBlockData); - } - - @Override - public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { - int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); - if (id == -1) { - throw new IllegalArgumentException("Unknown Java block state. Identifier: " + javaIdentifier); - } - if (!customBlocks.contains(customBlockState.block())) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); - } - CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); - if (oldBlockState != null) { - // TODO should this be an error? Allow extensions to query block state overrides? - GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + - javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); - } - } - }); - - for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { - customBlocks.add(customSkull.getCustomBlockData()); - } - - BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); - GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); - - BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); - GeyserImpl.getInstance().getLogger().debug("Registered " + blockStateOverrides.size() + " custom block overrides."); - } - - private static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { - int totalPermutations = 1; - for (CustomBlockProperty property : customBlock.properties().values()) { - totalPermutations *= property.values().size(); - } - - for (int i = 0; i < totalPermutations; i++) { - NbtMapBuilder statesBuilder = NbtMap.builder(); - int permIndex = i; - for (CustomBlockProperty property : customBlock.properties().values()) { - statesBuilder.put(property.name(), property.values().get(permIndex % property.values().size())); - permIndex /= property.values().size(); - } - NbtMap states = statesBuilder.build(); - - blockStates.add(NbtMap.builder() - .putString("name", customBlock.identifier()) - .putInt("version", stateVersion) - .putCompound("states", states) - .build()); - customExtBlockStates.add(new GeyserCustomBlockState(customBlock, states)); - } - } - - @SuppressWarnings("unchecked") - private static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, int protocolVersion) { - List permutations = new ArrayList<>(); - for (CustomBlockPermutation permutation : customBlock.permutations()) { - permutations.add(NbtMap.builder() - .putCompound("components", convertComponents(permutation.components(), protocolVersion)) - .putString("condition", permutation.condition()) - .build()); - } - - // The order that properties are defined influences the order that block states are generated - List properties = new ArrayList<>(); - for (CustomBlockProperty property : customBlock.properties().values()) { - NbtMapBuilder propertyBuilder = NbtMap.builder() - .putString("name", property.name()); - if (property.type() == PropertyType.BOOLEAN) { - propertyBuilder.putList("enum", NbtType.BYTE, List.of((byte) 0, (byte) 1)); - } else if (property.type() == PropertyType.INTEGER) { - propertyBuilder.putList("enum", NbtType.INT, (List) property.values()); - } else if (property.type() == PropertyType.STRING) { - propertyBuilder.putList("enum", NbtType.STRING, (List) property.values()); - } - properties.add(propertyBuilder.build()); - } - - NbtMap propertyTag = NbtMap.builder() - .putCompound("components", convertComponents(customBlock.components(), protocolVersion)) - .putCompound("menu_category", NbtMap.builder() - .putString("category", "none") - .putString("group", "") - .putBoolean("is_hidden_in_commands", false) - .build()) - .putInt("molangVersion", 1) - .putList("permutations", NbtType.COMPOUND, permutations) - .putList("properties", NbtType.COMPOUND, properties) - .build(); - return new BlockPropertyData(customBlock.identifier(), propertyTag); - } - private static void registerBedrockBlocks() { BiFunction emptyMapper = (bedrockIdentifier, statesBuilder) -> null; ImmutableMap, BiFunction> blockMappers = ImmutableMap., BiFunction>builder() @@ -218,8 +99,8 @@ private static void registerBedrockBlocks() { int[] remappedVanillaIds = new int[0]; if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { - customBlockProperties.add(generateBlockPropertyData(customBlock, protocolVersion)); - generateCustomBlockStates(customBlock, customBlockStates, customExtBlockStates, stateVersion); + customBlockProperties.add(CustomBlockRegistryPopulator.generateBlockPropertyData(customBlock, protocolVersion)); + CustomBlockRegistryPopulator.generateCustomBlockStates(customBlock, customBlockStates, customExtBlockStates, stateVersion); } blockStates.addAll(customBlockStates); GeyserImpl.getInstance().getLogger().debug("Added " + customBlockStates.size() + " custom block states to v" + protocolVersion + " palette."); @@ -364,69 +245,7 @@ private static void registerBedrockBlocks() { } } - private static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { - if (components == null) { - return NbtMap.EMPTY; - } - NbtMapBuilder builder = NbtMap.builder(); - if (components.selectionBox() != null) { - builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox())); - } - if (components.collisionBox() != null) { - builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox())); - } - if (components.geometry() != null) { - builder.putCompound("minecraft:geometry", NbtMap.builder() - .putString("value", components.geometry()) - .build()); - } - if (!components.materialInstances().isEmpty()) { - NbtMapBuilder materialsBuilder = NbtMap.builder(); - for (Map.Entry entry : components.materialInstances().entrySet()) { - MaterialInstance materialInstance = entry.getValue(); - materialsBuilder.putCompound(entry.getKey(), NbtMap.builder() - .putString("texture", materialInstance.texture()) - .putString("render_method", materialInstance.renderMethod()) - .putBoolean("face_dimming", materialInstance.faceDimming()) - .putBoolean("ambient_occlusion", materialInstance.faceDimming()) - .build()); - } - builder.putCompound("minecraft:material_instances", NbtMap.builder() - .putCompound("mappings", NbtMap.EMPTY) - .putCompound("materials", materialsBuilder.build()) - .build()); - } - if (components.destroyTime() != null) { - builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() - .putFloat("value", components.destroyTime()) - .build()); - } - if (components.friction() != null) { - builder.putCompound("minecraft:friction", NbtMap.builder() - .putFloat("value", components.friction()) - .build()); - } - if (components.lightEmission() != null) { - builder.putCompound("minecraft:light_emission", NbtMap.builder() - .putInt("value", components.lightEmission()) - .build()); - } - if (components.lightDampening() != null) { - builder.putCompound("minecraft:block_light_filter", NbtMap.builder() - .putByte("value", components.lightDampening().byteValue()) - .build()); - } - if (components.rotation() != null) { - builder.putCompound("minecraft:rotation", NbtMap.builder() - .putFloat("x", components.rotation().x()) - .putFloat("y", components.rotation().y()) - .putFloat("z", components.rotation().z()) - .build()); - } - return builder.build(); - } - - private static NbtMap convertBox(BoxComponent boxComponent) { + static NbtMap convertBox(BoxComponent boxComponent) { return NbtMap.builder() .putBoolean("enabled", !boxComponent.isEmpty()) .putList("origin", NbtType.FLOAT, boxComponent.originX(), boxComponent.originY(), boxComponent.originZ()) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java new file mode 100644 index 00000000000..227c9b6dd8e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -0,0 +1,205 @@ +package org.geysermc.geyser.registry.populator; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; +import org.geysermc.geyser.api.block.custom.property.PropertyType; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; +import org.geysermc.geyser.level.block.GeyserCustomBlockState; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; + +import com.nukkitx.nbt.NbtMap; +import com.nukkitx.nbt.NbtMapBuilder; +import com.nukkitx.nbt.NbtType; +import com.nukkitx.protocol.bedrock.data.BlockPropertyData; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + +public class CustomBlockRegistryPopulator { + + static void registerCustomBedrockBlocks() { + if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { + return; + } + Set customBlockNames = new HashSet<>(); + Set customBlocks = new HashSet<>(); + Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { + @Override + public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { + if (!customBlockNames.add(customBlockData.name())) { + throw new IllegalArgumentException("Another custom block was already registered under the name: " + customBlockData.name()); + } + // TODO validate collision+selection box bounds + // TODO validate names + customBlocks.add(customBlockData); + } + + @Override + public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { + int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); + if (id == -1) { + throw new IllegalArgumentException("Unknown Java block state. Identifier: " + javaIdentifier); + } + if (!customBlocks.contains(customBlockState.block())) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); + } + CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); + if (oldBlockState != null) { + // TODO should this be an error? Allow extensions to query block state overrides? + GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + + javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); + } + } + }); + + for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { + customBlocks.add(customSkull.getCustomBlockData()); + } + + BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); + GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); + + BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); + GeyserImpl.getInstance().getLogger().debug("Registered " + blockStateOverrides.size() + " custom block overrides."); + } + + static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { + int totalPermutations = 1; + for (CustomBlockProperty property : customBlock.properties().values()) { + totalPermutations *= property.values().size(); + } + + for (int i = 0; i < totalPermutations; i++) { + NbtMapBuilder statesBuilder = NbtMap.builder(); + int permIndex = i; + for (CustomBlockProperty property : customBlock.properties().values()) { + statesBuilder.put(property.name(), property.values().get(permIndex % property.values().size())); + permIndex /= property.values().size(); + } + NbtMap states = statesBuilder.build(); + + blockStates.add(NbtMap.builder() + .putString("name", customBlock.identifier()) + .putInt("version", stateVersion) + .putCompound("states", states) + .build()); + customExtBlockStates.add(new GeyserCustomBlockState(customBlock, states)); + } + } + + @SuppressWarnings("unchecked") + static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, int protocolVersion) { + List permutations = new ArrayList<>(); + for (CustomBlockPermutation permutation : customBlock.permutations()) { + permutations.add(NbtMap.builder() + .putCompound("components", CustomBlockRegistryPopulator.convertComponents(permutation.components(), protocolVersion)) + .putString("condition", permutation.condition()) + .build()); + } + + // The order that properties are defined influences the order that block states are generated + List properties = new ArrayList<>(); + for (CustomBlockProperty property : customBlock.properties().values()) { + NbtMapBuilder propertyBuilder = NbtMap.builder() + .putString("name", property.name()); + if (property.type() == PropertyType.BOOLEAN) { + propertyBuilder.putList("enum", NbtType.BYTE, List.of((byte) 0, (byte) 1)); + } else if (property.type() == PropertyType.INTEGER) { + propertyBuilder.putList("enum", NbtType.INT, (List) property.values()); + } else if (property.type() == PropertyType.STRING) { + propertyBuilder.putList("enum", NbtType.STRING, (List) property.values()); + } + properties.add(propertyBuilder.build()); + } + + NbtMap propertyTag = NbtMap.builder() + .putCompound("components", CustomBlockRegistryPopulator.convertComponents(customBlock.components(), protocolVersion)) + .putCompound("menu_category", NbtMap.builder() + .putString("category", "none") + .putString("group", "") + .putBoolean("is_hidden_in_commands", false) + .build()) + .putInt("molangVersion", 1) + .putList("permutations", NbtType.COMPOUND, permutations) + .putList("properties", NbtType.COMPOUND, properties) + .build(); + return new BlockPropertyData(customBlock.identifier(), propertyTag); + } + + static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { + if (components == null) { + return NbtMap.EMPTY; + } + NbtMapBuilder builder = NbtMap.builder(); + if (components.selectionBox() != null) { + builder.putCompound("minecraft:selection_box", BlockRegistryPopulator.convertBox(components.selectionBox())); + } + if (components.collisionBox() != null) { + builder.putCompound("minecraft:collision_box", BlockRegistryPopulator.convertBox(components.collisionBox())); + } + if (components.geometry() != null) { + builder.putCompound("minecraft:geometry", NbtMap.builder() + .putString("value", components.geometry()) + .build()); + } + if (!components.materialInstances().isEmpty()) { + NbtMapBuilder materialsBuilder = NbtMap.builder(); + for (Map.Entry entry : components.materialInstances().entrySet()) { + MaterialInstance materialInstance = entry.getValue(); + materialsBuilder.putCompound(entry.getKey(), NbtMap.builder() + .putString("texture", materialInstance.texture()) + .putString("render_method", materialInstance.renderMethod()) + .putBoolean("face_dimming", materialInstance.faceDimming()) + .putBoolean("ambient_occlusion", materialInstance.faceDimming()) + .build()); + } + builder.putCompound("minecraft:material_instances", NbtMap.builder() + .putCompound("mappings", NbtMap.EMPTY) + .putCompound("materials", materialsBuilder.build()) + .build()); + } + if (components.destroyTime() != null) { + builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() + .putFloat("value", components.destroyTime()) + .build()); + } + if (components.friction() != null) { + builder.putCompound("minecraft:friction", NbtMap.builder() + .putFloat("value", components.friction()) + .build()); + } + if (components.lightEmission() != null) { + builder.putCompound("minecraft:light_emission", NbtMap.builder() + .putInt("value", components.lightEmission()) + .build()); + } + if (components.lightDampening() != null) { + builder.putCompound("minecraft:block_light_filter", NbtMap.builder() + .putByte("value", components.lightDampening().byteValue()) + .build()); + } + if (components.rotation() != null) { + builder.putCompound("minecraft:rotation", NbtMap.builder() + .putFloat("x", components.rotation().x()) + .putFloat("y", components.rotation().y()) + .putFloat("z", components.rotation().z()) + .build()); + } + return builder.build(); + } + +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 4d436485732..3a2a18d5a0d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -25,21 +25,18 @@ package org.geysermc.geyser.translator.inventory.item; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; -import com.github.steveice10.opennbt.tag.builtin.*; -import com.nukkitx.nbt.NbtList; -import com.nukkitx.nbt.NbtMap; -import com.nukkitx.nbt.NbtMapBuilder; -import com.nukkitx.nbt.NbtType; -import com.nukkitx.protocol.bedrock.data.inventory.ItemData; -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.format.NamedTextColor; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.item.custom.CustomItemOptions; -import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.CustomSkull; @@ -51,10 +48,30 @@ import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.FileUtils; -import javax.annotation.Nonnull; -import java.lang.reflect.InvocationTargetException; -import java.util.*; -import java.util.stream.Collectors; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; +import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag; +import com.github.steveice10.opennbt.tag.builtin.ByteTag; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.DoubleTag; +import com.github.steveice10.opennbt.tag.builtin.FloatTag; +import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; +import com.github.steveice10.opennbt.tag.builtin.IntTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.LongArrayTag; +import com.github.steveice10.opennbt.tag.builtin.LongTag; +import com.github.steveice10.opennbt.tag.builtin.ShortTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; +import com.nukkitx.nbt.NbtList; +import com.nukkitx.nbt.NbtMap; +import com.nukkitx.nbt.NbtMapBuilder; +import com.nukkitx.nbt.NbtType; +import com.nukkitx.protocol.bedrock.data.inventory.ItemData; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; public abstract class ItemTranslator { private static final Int2ObjectMap ITEM_STACK_TRANSLATORS = new Int2ObjectOpenHashMap<>(); @@ -560,4 +577,6 @@ private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, } } + // TODO: Add translator for generic custom blocks + } From 4b1ffa3d2af39e780764971ad5339e14b1d2b56c Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:39:11 -0500 Subject: [PATCH 028/134] Remove name_hash from blocksTag/vanillaBlockStates Fixes creative inventory contents with custom blocks registered --- .../populator/BlockRegistryPopulator.java | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 71d35ebf73b..b73ec8c2760 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -81,17 +81,24 @@ private static void registerBedrockBlocks() { for (Map.Entry, BiFunction> palette : blockMappers.entrySet()) { int protocolVersion = palette.getKey().valueInt(); - NbtList blocksTag; + List vanillaBlockStates; List blockStates; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.getKey().key())); NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { NbtMap blockPalette = (NbtMap) nbtInputStream.readTag(); - blocksTag = (NbtList) blockPalette.getList("blocks", NbtType.COMPOUND); - blockStates = new ArrayList<>(blocksTag); + + vanillaBlockStates = new ArrayList<>(blockPalette.getList("blocks", NbtType.COMPOUND)); + for (int i = 0; i < vanillaBlockStates.size(); i++) { + NbtMapBuilder builder = vanillaBlockStates.get(i).toBuilder(); + builder.remove("name_hash"); // Quick workaround - was added in 1.19.20 + vanillaBlockStates.set(i, builder.build()); + } + + blockStates = new ArrayList<>(vanillaBlockStates); } catch (Exception e) { throw new AssertionError("Unable to get blocks from runtime block states", e); } - int stateVersion = blocksTag.get(0).getInt("version"); + int stateVersion = vanillaBlockStates.get(0).getInt("version"); List customBlockProperties = new ArrayList<>(); List customBlockStates = new ArrayList<>(); @@ -113,9 +120,7 @@ private static void registerBedrockBlocks() { // as we no longer send a block palette Object2IntMap blockStateOrderedMap = new Object2IntOpenHashMap<>(blockStates.size()); for (int i = 0; i < blockStates.size(); i++) { - NbtMapBuilder builder = blockStates.get(i).toBuilder(); - builder.remove("name_hash"); // Quick workaround - was added in 1.19.20 - NbtMap tag = builder.build(); + NbtMap tag = blockStates.get(i); if (blockStateOrderedMap.containsKey(tag)) { throw new AssertionError("Duplicate block states in Bedrock palette: " + tag); } @@ -128,12 +133,12 @@ private static void registerBedrockBlocks() { for (int i = 0; i < customExtBlockStates.size(); i++) { NbtMap tag = customBlockStates.get(i); CustomBlockState blockState = customExtBlockStates.get(i); - customBlockStateIds.put(blockState, blockStateOrderedMap.getInt(tag)); + customBlockStateIds.put(blockState, blockStateOrderedMap.getOrDefault(tag, -1)); } - remappedVanillaIds = new int[blocksTag.size()]; - for (int i = 0; i < blocksTag.size(); i++) { - remappedVanillaIds[i] = blockStateOrderedMap.getInt(blocksTag.get(i)); + remappedVanillaIds = new int[vanillaBlockStates.size()]; + for (int i = 0; i < vanillaBlockStates.size(); i++) { + remappedVanillaIds[i] = blockStateOrderedMap.getOrDefault(vanillaBlockStates.get(i), -1); } } From 88ad6cee00b80dfdee89a65dc615dac442c39843 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Thu, 22 Dec 2022 20:58:41 -0500 Subject: [PATCH 029/134] Limit Bedrock versions to 1.19.40+ Custom blocks were released in 1.19.40 --- .../geysermc/geyser/network/GameProtocol.java | 14 ------- .../BedrockAdventureSettingsTranslator.java | 42 ------------------- .../BedrockRequestAbilityTranslator.java | 6 --- 3 files changed, 62 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAdventureSettingsTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 6b46f805641..2a1bb19a99a 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -28,9 +28,6 @@ import com.github.steveice10.mc.protocol.codec.MinecraftCodec; import com.github.steveice10.mc.protocol.codec.PacketCodec; import com.nukkitx.protocol.bedrock.BedrockPacketCodec; -import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; -import com.nukkitx.protocol.bedrock.v545.Bedrock_v545; -import com.nukkitx.protocol.bedrock.v554.Bedrock_v554; import com.nukkitx.protocol.bedrock.v557.Bedrock_v557; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; import org.geysermc.geyser.session.GeyserSession; @@ -60,13 +57,6 @@ public final class GameProtocol { private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC; static { - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v544.V544_CODEC); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v545.V545_CODEC.toBuilder() - .minecraftVersion("1.19.21/1.19.22") - .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v554.V554_CODEC.toBuilder() - .minecraftVersion("1.19.30/1.19.31") - .build()); SUPPORTED_BEDROCK_CODECS.add(Bedrock_v557.V557_CODEC.toBuilder() .minecraftVersion("1.19.40/1.19.41") .build()); @@ -91,10 +81,6 @@ public static BedrockPacketCodec getBedrockCodec(int protocolVersion) { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean supports1_19_30(GeyserSession session) { - return session.getUpstream().getProtocolVersion() >= Bedrock_v554.V554_CODEC.getProtocolVersion(); - } - public static boolean supports1_19_50(GeyserSession session) { return session.getUpstream().getProtocolVersion() >= Bedrock_v560.V560_CODEC.getProtocolVersion(); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAdventureSettingsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAdventureSettingsTranslator.java deleted file mode 100644 index aabc39e12d2..00000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAdventureSettingsTranslator.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.protocol.bedrock; - -import com.nukkitx.protocol.bedrock.data.AdventureSetting; -import com.nukkitx.protocol.bedrock.packet.AdventureSettingsPacket; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.translator.protocol.PacketTranslator; -import org.geysermc.geyser.translator.protocol.Translator; - -@Translator(packet = AdventureSettingsPacket.class) -public class BedrockAdventureSettingsTranslator extends PacketTranslator { - - @Override - public void translate(GeyserSession session, AdventureSettingsPacket packet) { - boolean isFlying = packet.getSettings().contains(AdventureSetting.FLYING); - BedrockRequestAbilityTranslator.handle(session, isFlying); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java index fe8150d406b..1ac75079c22 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java @@ -30,7 +30,6 @@ import com.nukkitx.protocol.bedrock.data.Ability; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.packet.RequestAbilityPacket; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; @@ -43,11 +42,6 @@ public class BedrockRequestAbilityTranslator extends PacketTranslator Date: Thu, 22 Dec 2022 21:11:22 -0500 Subject: [PATCH 030/134] Un-revert Crop and reorder skull textures to eliminate unused space Should reduce memory & storage usage for Bedrock clients Bug with top face flipping + per-face uv's was fixed in 1.19.40+ https://bugs.mojang.com/browse/MCPE-160073 Geometry is still offset by 0.5 to prevent lighting bugs --- .../geyser/pack/SkullResourcePackManager.java | 35 ++++++++++--------- .../models/blocks/player_skull.geo.json | 33 ++++++++++++++--- .../models/blocks/player_skull_floor.geo.json | 31 +++++++++++++--- .../models/blocks/player_skull_hand.geo.json | 31 +++++++++++++--- .../models/blocks/player_skull_wall.geo.json | 31 +++++++++++++--- 5 files changed, 128 insertions(+), 33 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index c8fc20bf866..199cd64f097 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -54,7 +54,7 @@ public class SkullResourcePackManager { - private static final long RESOURCE_PACK_VERSION = 6; + private static final long RESOURCE_PACK_VERSION = 8; private static final Path SKULL_SKIN_CACHE_PATH = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("player_skulls"); @@ -113,21 +113,24 @@ public static void cacheSkullSkin(String skinUrl, String skinHash) throws IOExce } BufferedImage image = SkinProvider.requestImage(skinUrl, null); - if (image.getHeight() != 64) { - // We have to resize legacy skins to 64x64 for them to be displayed properly - BufferedImage modernSkin = new BufferedImage(64, 64, image.getType()); - - Graphics g = modernSkin.createGraphics(); - g.drawImage(image, 0, 0, null); - g.setColor(new Color(0, 0, 0, 0)); - g.fillRect(0, 32, 64, 32); - g.dispose(); - - image.flush(); - image = modernSkin; - } - - ImageIO.write(image, "png", skinPath.toFile()); + // Resize skins to 48x16 to save on space and memory + BufferedImage skullTexture = new BufferedImage(48, 16, image.getType()); + // Reorder skin parts to fit into the space + // Right, Front, Left, Back, Top, Bottom - head + // Right, Front, Left, Back, Top, Bottom - hat + Graphics g = skullTexture.createGraphics(); + // Right, Front, Left, Back of the head + g.drawImage(image, 0, 0, 32, 8, 0, 8, 32, 16, null); + // Right, Front, Left, Back of the hat + g.drawImage(image, 0, 8, 32, 16, 32, 8, 64, 16, null); + // Top and bottom of the head + g.drawImage(image, 32, 0, 48, 8, 8, 0, 24, 8, null); + // Top and bottom of the hat + g.drawImage(image, 32, 8, 48, 16, 40, 0, 56, 8, null); + g.dispose(); + image.flush(); + + ImageIO.write(skullTexture, "png", skinPath.toFile()); SKULL_SKINS.put(skinHash, skinPath); GeyserImpl.getInstance().getLogger().debug("Cached player skull to " + skinPath + " for " + skinHash); } diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json index 2681b406f3d..18bd5ea12fa 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { @@ -33,7 +33,18 @@ "parent": "root_z", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 8, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -41,10 +52,22 @@ "parent": "player_skull", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 8, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.25} + { + "origin": [-4, 8, -4], + "size": [8, 8, 8], + "inflate": 0.25, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] } ] -} +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json index 992ab4aabf1..da35cb4de25 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_floor.geo.json @@ -4,8 +4,8 @@ { "description": { "identifier": "geometry.geyser.player_skull_floor_${quadrant}", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { @@ -13,7 +13,18 @@ "pivot": [0, 24, 0], "rotation": [0, ${y_rotation}, 0], "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 0.5, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -21,7 +32,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 0.5, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 0.5, -4], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json index 6ad5bea1b28..5bd9e95a8f9 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_hand.geo.json @@ -4,15 +4,26 @@ { "description": { "identifier": "geometry.geyser.player_skull_hand", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 4, -4], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -20,7 +31,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -4], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 4, -4], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] diff --git a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json index 5c39733dd74..676a6e7f114 100644 --- a/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json +++ b/core/src/main/resources/bedrock/skull_resource_pack/models/blocks/player_skull_wall.geo.json @@ -4,15 +4,26 @@ { "description": { "identifier": "geometry.geyser.player_skull_wall", - "texture_width": 64, - "texture_height": 64 + "texture_width": 48, + "texture_height": 16 }, "bones": [ { "name": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [0, 0]} + { + "origin": [-4, 4, -0.5], + "size": [8, 8, 8], + "uv": { + "north": {"uv": [8, 0], "uv_size": [8, 8]}, + "east": {"uv": [0, 0], "uv_size": [8, 8]}, + "south": {"uv": [24, 0], "uv_size": [8, 8]}, + "west": {"uv": [16, 0], "uv_size": [8, 8]}, + "up": {"uv": [32, 0], "uv_size": [8, 8]}, + "down": {"uv": [40, 8], "uv_size": [8, -8]} + } + } ] }, { @@ -20,7 +31,19 @@ "parent": "head", "pivot": [0, 24, 0], "cubes": [ - {"origin": [-4, 4, -0.5], "size": [8, 8, 8], "uv": [32, 0], "inflate": 0.5} + { + "origin": [-4, 4, -0.5], + "size": [8, 8, 8], + "inflate": 0.5, + "uv": { + "north": {"uv": [8, 8], "uv_size": [8, 8]}, + "east": {"uv": [0, 8], "uv_size": [8, 8]}, + "south": {"uv": [24, 8], "uv_size": [8, 8]}, + "west": {"uv": [16, 8], "uv_size": [8, 8]}, + "up": {"uv": [32, 8], "uv_size": [8, 8]}, + "down": {"uv": [40, 16], "uv_size": [8, -8]} + } + } ] } ] From f495c8522d3e3047f5f60e52f9edb0511b63de0b Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Thu, 22 Dec 2022 22:45:43 -0500 Subject: [PATCH 031/134] Add validation custom block components and s/lightFilter/lightDampening/ Also validate custom block names --- .../component/CustomBlockComponents.java | 2 +- .../block/GeyserCustomBlockComponents.java | 57 +++++++++++++++++-- .../populator/BlockRegistryPopulator.java | 8 --- .../CustomBlockRegistryPopulator.java | 28 ++++++--- .../geyser/registry/type/CustomSkull.java | 2 +- 5 files changed, 75 insertions(+), 22 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index e1c63d753fb..d3c337ce5fd 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -63,7 +63,7 @@ interface Builder { Builder lightEmission(Integer lightEmission); - Builder lightFilter(Integer lightFilter); + Builder lightDampening(Integer lightDampening); Builder rotation(RotationComponent rotation); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 85795970a82..1dbda3434e0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.level.block; +import com.google.common.collect.ImmutableSet; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; @@ -38,6 +39,7 @@ import org.jetbrains.annotations.NotNull; import java.util.Map; +import java.util.Set; @Value public class GeyserCustomBlockComponents implements CustomBlockComponents { @@ -63,7 +65,7 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.destroyTime = builder.destroyTime; this.friction = builder.friction; this.lightEmission = builder.lightEmission; - this.lightDampening = builder.lightFilter; + this.lightDampening = builder.lightDampening; this.rotation = builder.rotation; } @@ -115,22 +117,45 @@ public RotationComponent rotation() { public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; + protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); protected Float destroyTime; protected Float friction; protected Integer lightEmission; - protected Integer lightFilter; + protected Integer lightDampening; protected RotationComponent rotation; + private static final Set VALID_MATERIAL_INSTANCE_NAMES = ImmutableSet.of("*", "up", "down", "north", "south", "west", "east"); + + private void validateBox(BoxComponent box) { + if (box == null) { + return; + } + if (box.sizeX() < 0 || box.sizeY() < 0 || box.sizeZ() < 0) { + throw new IllegalArgumentException("Box size must be non-negative."); + } + float minX = box.originX() + 8; + float minY = box.originY(); + float minZ = box.originZ() + 8; + float maxX = minX + box.sizeX(); + float maxY = minY + box.sizeY(); + float maxZ = minZ + box.sizeZ(); + if (minX < 0 || minY < 0 || minZ < 0 || maxX > 16 || maxY > 16 || maxZ > 16) { + throw new IllegalArgumentException("Box bounds must be within (0, 0, 0) and (16, 16, 16)"); + } + } + @Override public Builder selectionBox(BoxComponent selectionBox) { + validateBox(selectionBox); this.selectionBox = selectionBox; return this; } @Override public Builder collisionBox(BoxComponent collisionBox) { + validateBox(collisionBox); this.collisionBox = collisionBox; return this; } @@ -143,36 +168,60 @@ public Builder geometry(String geometry) { @Override public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance materialInstance) { + if (!VALID_MATERIAL_INSTANCE_NAMES.contains(name)) { + throw new IllegalArgumentException("Material instance name must be one of " + VALID_MATERIAL_INSTANCE_NAMES); + } this.materialInstances.put(name, materialInstance); return this; } @Override public Builder destroyTime(Float destroyTime) { + if (destroyTime != null && destroyTime < 0) { + throw new IllegalArgumentException("Destroy time must be non-negative"); + } this.destroyTime = destroyTime; return this; } @Override public Builder friction(Float friction) { + if (friction != null) { + if (friction < 0 || friction > 1) { + throw new IllegalArgumentException("Friction must be in the range 0-1"); + } + } this.friction = friction; return this; } @Override public Builder lightEmission(Integer lightEmission) { + if (lightEmission != null) { + if (lightEmission < 0 || lightEmission > 15) { + throw new IllegalArgumentException("Light emission must be in the range 0-15"); + } + } this.lightEmission = lightEmission; return this; } @Override - public Builder lightFilter(Integer lightFilter) { - this.lightFilter = lightFilter; + public Builder lightDampening(Integer lightDampening) { + if (lightDampening != null) { + if (lightDampening < 0 || lightDampening > 15) { + throw new IllegalArgumentException("Light dampening must be in the range 0-15"); + } + } + this.lightDampening = lightDampening; return this; } @Override public Builder rotation(RotationComponent rotation) { + if (rotation.x() % 90 != 0 || rotation.y() % 90 != 0 || rotation.z() % 90 != 0) { + throw new IllegalArgumentException("Rotation must be a multiple of 90 degrees."); + } this.rotation = rotation; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index b73ec8c2760..f5027d9ca60 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -250,14 +250,6 @@ private static void registerBedrockBlocks() { } } - static NbtMap convertBox(BoxComponent boxComponent) { - return NbtMap.builder() - .putBoolean("enabled", !boxComponent.isEmpty()) - .putList("origin", NbtType.FLOAT, boxComponent.originX(), boxComponent.originY(), boxComponent.originZ()) - .putList("size", NbtType.FLOAT, boxComponent.sizeX(), boxComponent.sizeY(), boxComponent.sizeZ()) - .build(); - } - private static void registerJavaBlocks() { JsonNode blocksJson; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/blocks.json")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 227c9b6dd8e..db59fc3a188 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -1,16 +1,17 @@ package org.geysermc.geyser.registry.populator; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; @@ -34,17 +35,21 @@ static void registerCustomBedrockBlocks() { if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { return; } - Set customBlockNames = new HashSet<>(); - Set customBlocks = new HashSet<>(); + Set customBlockNames = new ObjectOpenHashSet<>(); + Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { + if (customBlockData.name().length() == 0) { + throw new IllegalArgumentException("Custom block name must have at least 1 character."); + } if (!customBlockNames.add(customBlockData.name())) { throw new IllegalArgumentException("Another custom block was already registered under the name: " + customBlockData.name()); } - // TODO validate collision+selection box bounds - // TODO validate names + if (Character.isDigit(customBlockData.name().charAt(0))) { + throw new IllegalArgumentException("Custom block can not start with a digit. Name: " + customBlockData.name()); + } customBlocks.add(customBlockData); } @@ -146,10 +151,10 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe } NbtMapBuilder builder = NbtMap.builder(); if (components.selectionBox() != null) { - builder.putCompound("minecraft:selection_box", BlockRegistryPopulator.convertBox(components.selectionBox())); + builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox())); } if (components.collisionBox() != null) { - builder.putCompound("minecraft:collision_box", BlockRegistryPopulator.convertBox(components.collisionBox())); + builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox())); } if (components.geometry() != null) { builder.putCompound("minecraft:geometry", NbtMap.builder() @@ -201,5 +206,12 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe } return builder.build(); } - + + private static NbtMap convertBox(BoxComponent boxComponent) { + return NbtMap.builder() + .putBoolean("enabled", !boxComponent.isEmpty()) + .putList("origin", NbtType.FLOAT, boxComponent.originX(), boxComponent.originY(), boxComponent.originZ()) + .putList("size", NbtType.FLOAT, boxComponent.sizeX(), boxComponent.sizeY(), boxComponent.sizeZ()) + .build(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 1f5c62b3500..9f54b23c075 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -67,7 +67,7 @@ public CustomSkull(String skinHash) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .destroyTime(1.5f) .materialInstance("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true)) - .lightFilter(0) + .lightDampening(0) .build(); List permutations = new ArrayList<>(); From 8f7d67bde085612f64b20fb26331110d12a8757b Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Fri, 23 Dec 2022 11:16:50 -0500 Subject: [PATCH 032/134] Add display name component and add toggle for client block placing The display name component allows blocks to use other locale keys. placeAir will prevent the client from placing the default block state. --- .../component/CustomBlockComponents.java | 7 +++++ .../block/GeyserCustomBlockComponents.java | 27 +++++++++++++++++++ .../CustomBlockRegistryPopulator.java | 5 ++++ .../geyser/registry/type/CustomSkull.java | 1 + 4 files changed, 40 insertions(+) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index d3c337ce5fd..4786bccbe3a 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -33,6 +33,7 @@ public interface CustomBlockComponents { BoxComponent selectionBox(); BoxComponent collisionBox(); + String displayName(); String geometry(); @@ -48,11 +49,15 @@ public interface CustomBlockComponents { RotationComponent rotation(); + boolean placeAir(); + interface Builder { Builder selectionBox(BoxComponent selectionBox); Builder collisionBox(BoxComponent collisionBox); + Builder displayName(String displayName); + Builder geometry(String geometry); Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); @@ -67,6 +72,8 @@ interface Builder { Builder rotation(RotationComponent rotation); + Builder placeAir(boolean placeAir); + CustomBlockComponents build(); } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 1dbda3434e0..8a44638f45e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -45,6 +45,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { BoxComponent selectionBox; BoxComponent collisionBox; + String displayName; String geometry; Map materialInstances; Float destroyTime; @@ -52,10 +53,12 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { Integer lightEmission; Integer lightDampening; RotationComponent rotation; + boolean placeAir; private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; this.collisionBox = builder.collisionBox; + this.displayName = builder.displayName; this.geometry = builder.geometry; if (builder.materialInstances.isEmpty()) { this.materialInstances = Object2ObjectMaps.emptyMap(); @@ -67,6 +70,7 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.lightEmission = builder.lightEmission; this.lightDampening = builder.lightDampening; this.rotation = builder.rotation; + this.placeAir = builder.placeAir; } @Override @@ -79,6 +83,11 @@ public BoxComponent collisionBox() { return collisionBox; } + @Override + public String displayName() { + return displayName; + } + @Override public String geometry() { return geometry; @@ -114,6 +123,11 @@ public RotationComponent rotation() { return rotation; } + @Override + public boolean placeAir() { + return placeAir; + } + public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; @@ -125,6 +139,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected Integer lightEmission; protected Integer lightDampening; protected RotationComponent rotation; + protected boolean placeAir = false; private static final Set VALID_MATERIAL_INSTANCE_NAMES = ImmutableSet.of("*", "up", "down", "north", "south", "west", "east"); @@ -160,6 +175,12 @@ public Builder collisionBox(BoxComponent collisionBox) { return this; } + @Override + public Builder displayName(String displayName) { + this.displayName = displayName; + return this; + } + @Override public Builder geometry(String geometry) { this.geometry = geometry; @@ -226,6 +247,12 @@ public Builder rotation(RotationComponent rotation) { return this; } + @Override + public Builder placeAir(boolean placeAir) { + this.placeAir = placeAir; + return this; + } + @Override public CustomBlockComponents build() { return new GeyserCustomBlockComponents(this); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index db59fc3a188..6d569bfb5b2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -204,6 +204,11 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putFloat("z", components.rotation().z()) .build()); } + if (components.placeAir()) { + builder.putCompound("minecraft:on_player_placing", NbtMap.builder() + .putString("triggerType", "geyser:place_event") + .build()); + } return builder.build(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 9f54b23c075..658dbf04446 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -68,6 +68,7 @@ public CustomSkull(String skinHash) { .destroyTime(1.5f) .materialInstance("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true)) .lightDampening(0) + .placeAir(true) .build(); List permutations = new ArrayList<>(); From 2029ba800d5a00b9e85eefeff1e737f01a55341e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 30 Dec 2022 04:00:06 -0800 Subject: [PATCH 033/134] Begin parsing block mappings (still much to do!) --- .../mappings/versions/MappingsReader_v1.java | 82 ++++++++++++++++++- .../populator/BlockRegistryPopulator.java | 48 +++++++---- 2 files changed, 111 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 6f46c7f5688..88a31b35b39 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -28,11 +28,17 @@ import com.fasterxml.jackson.databind.JsonNode; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; import java.util.function.BiConsumer; public class MappingsReader_v1 extends MappingsReader { @@ -157,6 +163,80 @@ public CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustom throw new InvalidCustomMappingsFileException("A block entry has no name"); } - return null; + JsonNode stateOverrides = node.get("state_overrides"); + + CustomBlockData customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() + .name(name) + .components(createCustomBlockComponents(node)) + // TODO: need to parse state data to find these, e.g. [east=none,north=none,power=1,south=none,west=none] + // TODO: add possible values for all blockstates to mappings generator + // .booleanProperty() + // .intProperty() + // .stringProperty() + .permutations(createCustomBlockPermutations(stateOverrides)) + .build(); + + return customBlockData; } + + private List createCustomBlockPermutations(JsonNode node) { + List permutations = new ArrayList<>(); + + if (node != null && node.isObject()) { + node.fields().forEachRemaining(entry -> { + String key = entry.getKey(); + JsonNode value = entry.getValue(); + if (value.isObject()) { + value.forEach(data -> { + permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data), createCustomBlockPropertyQuery(key))); + }); + } + }); + } + + return permutations; + } + + private CustomBlockComponents createCustomBlockComponents(JsonNode node) { + CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + // .selectionBox() + // .collisionBox() + // .displayName() + // .geometry() + // .materialInstance() + // .destroyTime() + // .friction() + // .lightEmission() + // .lightDampening() + // .rotation() + // .placeAir() + .build(); + + JsonNode materialInstances = node.get("material_instances"); + // TODO: loop through material instances and add component for each to components + + return components; + } + + private String createCustomBlockPropertyQuery(String state) { + String list = state.substring(1, state.length() - 1); + String[] conditions = list.split(","); + String[] queries = new String[conditions.length]; + + for (int i = 0; i < conditions.length; i++) { + String[] keyval = conditions[i].split("=", 2); + if (keyval[1].equals("true")) { + queries[i] = String.format("query.block_property('%s') == %b", keyval[0], 1); + } else if (keyval[1].equals("false")) { + queries[i] = String.format("query.block_property('%s') == %b", keyval[0], 0); + } else if (keyval[1].matches("-?\\d+")) { + queries[i] = String.format("query.block_property('%s') == %b", keyval[0], Integer.parseInt(keyval[1])); + } else { + queries[i] = String.format("query.block_property('%s') == '%b'", keyval[0], keyval[1]); + } + } + + return String.join(" && ", queries); + } + } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index f5027d9ca60..c007a17e366 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -25,22 +25,21 @@ package org.geysermc.geyser.registry.populator; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.google.common.collect.ImmutableMap; -import com.nukkitx.nbt.*; -import com.nukkitx.protocol.bedrock.data.BlockPropertyData; -import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; -import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; - -import it.unimi.dsi.fastutil.ints.IntOpenHashSet; -import it.unimi.dsi.fastutil.ints.IntSet; -import it.unimi.dsi.fastutil.objects.*; +import java.io.DataInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.zip.GZIPInputStream; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; @@ -48,12 +47,25 @@ import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.util.BlockUtils; -import java.io.DataInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.*; -import java.util.function.BiFunction; -import java.util.zip.GZIPInputStream; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.google.common.collect.ImmutableMap; +import com.nukkitx.nbt.NBTInputStream; +import com.nukkitx.nbt.NbtList; +import com.nukkitx.nbt.NbtMap; +import com.nukkitx.nbt.NbtMapBuilder; +import com.nukkitx.nbt.NbtType; +import com.nukkitx.protocol.bedrock.data.BlockPropertyData; +import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; +import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; + +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; +import it.unimi.dsi.fastutil.objects.Object2IntMap; +import it.unimi.dsi.fastutil.objects.Object2IntMaps; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectIntPair; /** * Populates the block registries. From d9cdacc1db6f15fc1c7bfdc2246fc4b76083b6cb Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 30 Dec 2022 22:38:28 -0800 Subject: [PATCH 034/134] CustomBlockMapping stores block w/ all states --- .../api/block/custom/CustomBlockMapping.java | 8 +++ .../mappings/MappingsConfigReader.java | 6 +- .../mappings/versions/MappingsReader.java | 6 +- .../mappings/versions/MappingsReader_v1.java | 57 +++++++++++++++---- 4 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java new file mode 100644 index 00000000000..c868e100ade --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java @@ -0,0 +1,8 @@ +package org.geysermc.geyser.api.block.custom; + +import java.util.Map; + +import org.checkerframework.checker.nullness.qual.NonNull; + +public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index d4e8b0d93e9..3eb1955176a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -29,7 +29,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.registry.mappings.versions.MappingsReader; import org.geysermc.geyser.registry.mappings.versions.MappingsReader_v1; @@ -81,7 +81,7 @@ public void loadItemMappingsFromJson(BiConsumer consumer } } - public void loadBlockMappingsFromJson(BiConsumer consumer) { + public void loadBlockMappingsFromJson(BiConsumer consumer) { if (!ensureMappingsDirectory(this.customMappingsDirectory)) { return; } @@ -130,7 +130,7 @@ public void readItemMappingsFromJson(Path file, BiConsumer consumer) { + public void readBlockMappingsFromJson(Path file, BiConsumer consumer) { JsonNode mappingsRoot = getMappingsRoot(file); int formatVersion = getFormatVersion(mappingsRoot, file); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index 2d7d3322804..a49e9fcc68e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -27,7 +27,7 @@ import com.fasterxml.jackson.databind.JsonNode; -import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -37,10 +37,10 @@ public abstract class MappingsReader { public abstract void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); - public abstract void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); + public abstract void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer); public abstract CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException; - public abstract CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException; + public abstract CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException; protected CustomRenderOffsets fromJsonNode(JsonNode node) { if (node == null || !node.isObject()) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 88a31b35b39..cdf4b102377 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -28,18 +28,25 @@ import com.fasterxml.jackson.databind.JsonNode; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.registry.BlockRegistries; import java.nio.file.Path; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.function.BiConsumer; +import java.util.stream.Collectors; public class MappingsReader_v1 extends MappingsReader { @Override @@ -48,7 +55,7 @@ public void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + public void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { this.readBlockMappingsV1(file, mappingsRoot, consumer); } @@ -71,7 +78,7 @@ public void readItemMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer consumer) { + public void readBlockMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer consumer) { JsonNode blocksNode = mappingsRoot.get("blocks"); if (blocksNode != null && blocksNode.isObject()) { @@ -79,8 +86,9 @@ public void readBlockMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer { try { - CustomBlockData customBlockData = this.readBlockMappingEntry(data); - consumer.accept(entry.getKey(), customBlockData); + String identifier = entry.getKey(); + CustomBlockMapping customBlockMapping = this.readBlockMappingEntry(identifier, data); + consumer.accept(identifier, customBlockMapping); } catch (InvalidCustomMappingsFileException e) { GeyserImpl.getInstance().getLogger().error("Error in registering blocks for custom mapping file: " + file.toString(), e); } @@ -153,7 +161,7 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa } @Override - public CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException { + public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException { if (node == null || !node.isObject()) { throw new InvalidCustomMappingsFileException("Invalid block mappings entry"); } @@ -168,7 +176,7 @@ public CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustom CustomBlockData customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() .name(name) .components(createCustomBlockComponents(node)) - // TODO: need to parse state data to find these, e.g. [east=none,north=none,power=1,south=none,west=none] + // TODO: need to parse state data to find these, e.g. [east=none,north=none,power=1,south=none,west=none] and note these are range, not value // TODO: add possible values for all blockstates to mappings generator // .booleanProperty() // .intProperty() @@ -176,7 +184,9 @@ public CustomBlockData readBlockMappingEntry(JsonNode node) throws InvalidCustom .permutations(createCustomBlockPermutations(stateOverrides)) .build(); - return customBlockData; + Map states = new HashMap<>(); + + return new CustomBlockMapping(customBlockData, states); } private List createCustomBlockPermutations(JsonNode node) { @@ -197,6 +207,31 @@ private List createCustomBlockPermutations(JsonNode node return permutations; } + private Map createCustomBlockStatesMap(String identifier, JsonNode node, CustomBlockData customBlockData) { + // TODO: The goal here is that we need to register state overrides with the same permutations + // really we need to be able to figure out what properties correspond to what permutations as they need to match... this is probably going to require some fairly complex parsing of stateKeys and tbh we should probably do it up in readBlockMappingEntry + // basically going to need to infer what the property type is... which we already sort of do in createCustomBlockPropertyQuery + // alternatively, it might be easier to just use int properties for everything and just handle the types on the fly... so I think we can just parse stateKeys sort of how we already to in createCustomBlockPropertyQuery in terms of getting the conditions array + // we will want to make an array list from that of all the possible values for each property + // then we can just keep them all strings and map each one to a unique int Map + List stateKeys = new ArrayList<>(); + Iterator> fields = node.fields(); + while (fields.hasNext()) { + stateKeys.add(identifier + fields.next().getKey()); + } + + List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) + .stream() + .filter(s -> s.startsWith(identifier + "[")) + .collect(Collectors.toList()); + + defaultStates.removeAll(stateKeys); + + Map states = new HashMap<>(); + + return states; + } + private CustomBlockComponents createCustomBlockComponents(JsonNode node) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() // .selectionBox() @@ -226,13 +261,13 @@ private String createCustomBlockPropertyQuery(String state) { for (int i = 0; i < conditions.length; i++) { String[] keyval = conditions[i].split("=", 2); if (keyval[1].equals("true")) { - queries[i] = String.format("query.block_property('%s') == %b", keyval[0], 1); + queries[i] = String.format("q.block_property('%s') == %b", keyval[0], 1); } else if (keyval[1].equals("false")) { - queries[i] = String.format("query.block_property('%s') == %b", keyval[0], 0); + queries[i] = String.format("q.block_property('%s') == %b", keyval[0], 0); } else if (keyval[1].matches("-?\\d+")) { - queries[i] = String.format("query.block_property('%s') == %b", keyval[0], Integer.parseInt(keyval[1])); + queries[i] = String.format("q.block_property('%s') == %b", keyval[0], Integer.parseInt(keyval[1])); } else { - queries[i] = String.format("query.block_property('%s') == '%b'", keyval[0], keyval[1]); + queries[i] = String.format("q.block_property('%s') == '%b'", keyval[0], keyval[1]); } } From c71f2c559762c5c9e89d42b09eaa41ee7a33ccbc Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 31 Dec 2022 20:28:59 -0800 Subject: [PATCH 035/134] Mappings almost :/ --- .../mappings/util/BlockPropertyTypeMaps.java | 13 ++ .../mappings/versions/MappingsReader_v1.java | 180 ++++++++++++++---- .../CustomBlockRegistryPopulator.java | 11 ++ 3 files changed, 165 insertions(+), 39 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java new file mode 100644 index 00000000000..0157cc47ce3 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java @@ -0,0 +1,13 @@ +package org.geysermc.geyser.registry.mappings.util; + +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +import org.checkerframework.checker.nullness.qual.NonNull; + +public record BlockPropertyTypeMaps( + @NonNull Map> stringValuesMap, @NonNull Map> stateKeyStrings, + @NonNull Map> intValuesMap, @NonNull Map> stateKeyInts, + @NonNull Set booleanValuesSet, @NonNull Map> stateKeyBools) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index cdf4b102377..ba661af582f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -26,6 +26,8 @@ package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.base.CharMatcher; + import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockMapping; @@ -36,15 +38,21 @@ import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; -import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; +import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; import java.nio.file.Path; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BiConsumer; import java.util.stream.Collectors; @@ -84,15 +92,13 @@ public void readBlockMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer { if (entry.getValue().isObject()) { - entry.getValue().forEach(data -> { - try { - String identifier = entry.getKey(); - CustomBlockMapping customBlockMapping = this.readBlockMappingEntry(identifier, data); - consumer.accept(identifier, customBlockMapping); - } catch (InvalidCustomMappingsFileException e) { - GeyserImpl.getInstance().getLogger().error("Error in registering blocks for custom mapping file: " + file.toString(), e); - } - }); + try { + String identifier = entry.getKey(); + CustomBlockMapping customBlockMapping = this.readBlockMappingEntry(identifier, entry.getValue()); + consumer.accept(identifier, customBlockMapping); + } catch (InvalidCustomMappingsFileException e) { + GeyserImpl.getInstance().getLogger().error("Error in registering blocks for custom mapping file: " + file.toString(), e); + } } }); } @@ -163,7 +169,7 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa @Override public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException { if (node == null || !node.isObject()) { - throw new InvalidCustomMappingsFileException("Invalid block mappings entry"); + throw new InvalidCustomMappingsFileException("Invalid block mappings entry:" + node.toString()); } String name = node.get("name").asText(); @@ -173,18 +179,34 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node JsonNode stateOverrides = node.get("state_overrides"); - CustomBlockData customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() + List stateKeys = new ArrayList<>(); + Iterator> fields = stateOverrides.fields(); + while (fields.hasNext()) { + stateKeys.add(identifier + fields.next().getKey()); + } + + List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) + .stream() + .filter(s -> s.startsWith(identifier + "[")) + .collect(Collectors.toList()); + + CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); + + customBlockDataBuilder .name(name) .components(createCustomBlockComponents(node)) - // TODO: need to parse state data to find these, e.g. [east=none,north=none,power=1,south=none,west=none] and note these are range, not value - // TODO: add possible values for all blockstates to mappings generator - // .booleanProperty() - // .intProperty() - // .stringProperty() .permutations(createCustomBlockPermutations(stateOverrides)) - .build(); + .booleanProperty("geyser_custom:default"); - Map states = new HashMap<>(); + BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(defaultStates); + blockPropertyTypeMaps.stringValuesMap().forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList(value))); + blockPropertyTypeMaps.intValuesMap().forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList(value))); + blockPropertyTypeMaps.booleanValuesSet().forEach((value) -> customBlockDataBuilder.booleanProperty(value)); + + CustomBlockData customBlockData = customBlockDataBuilder.build(); + + Map states = createCustomBlockStatesMap(identifier, stateKeys, defaultStates, customBlockData, + blockPropertyTypeMaps.stateKeyStrings(), blockPropertyTypeMaps.stateKeyInts(), blockPropertyTypeMaps.stateKeyBools()); return new CustomBlockMapping(customBlockData, states); } @@ -203,37 +225,114 @@ private List createCustomBlockPermutations(JsonNode node } }); } + + permutations.add(new CustomBlockPermutation( + new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), + "q.block_property('geyser_custom:default') == 1")); return permutations; } - private Map createCustomBlockStatesMap(String identifier, JsonNode node, CustomBlockData customBlockData) { - // TODO: The goal here is that we need to register state overrides with the same permutations - // really we need to be able to figure out what properties correspond to what permutations as they need to match... this is probably going to require some fairly complex parsing of stateKeys and tbh we should probably do it up in readBlockMappingEntry - // basically going to need to infer what the property type is... which we already sort of do in createCustomBlockPropertyQuery - // alternatively, it might be easier to just use int properties for everything and just handle the types on the fly... so I think we can just parse stateKeys sort of how we already to in createCustomBlockPropertyQuery in terms of getting the conditions array - // we will want to make an array list from that of all the possible values for each property - // then we can just keep them all strings and map each one to a unique int Map - List stateKeys = new ArrayList<>(); - Iterator> fields = node.fields(); - while (fields.hasNext()) { - stateKeys.add(identifier + fields.next().getKey()); - } + private Map createCustomBlockStatesMap( + String identifier, + List stateKeys, + List defaultStates, + CustomBlockData customBlockData, + Map> stateKeyStrings, + Map> stateKeyInts, + Map> stateKeyBools) { - List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) - .stream() - .filter(s -> s.startsWith(identifier + "[")) - .collect(Collectors.toList()); + Map states = new HashMap<>(); defaultStates.removeAll(stateKeys); - Map states = new HashMap<>(); + defaultStates.forEach(key -> { + CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); + builder.booleanProperty("geyser_custom:default", true); + + stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); + stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); + stateKeyBools.getOrDefault(key, Collections.emptyMap()).forEach((property, boolValue) -> builder.booleanProperty(property, boolValue)); + + CustomBlockState blockState = builder.build(); + + states.put(key, blockState); + }); + + stateKeys.forEach((key) -> { + CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); + builder.booleanProperty("geyser_custom:default", false); + + stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); + stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); + stateKeyBools.getOrDefault(key, Collections.emptyMap()).forEach((property, boolValue) -> builder.booleanProperty(property, boolValue)); + + CustomBlockState blockState = builder.build(); + + states.put(key, blockState); + }); return states; } + private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List stateKeys) { + Map> stringValuesMap = new HashMap<>(); + Map> stateKeyStrings = new HashMap<>(); + + Map> intValuesMap = new HashMap<>(); + Map> stateKeyInts = new HashMap<>(); + + Set booleanValuesSet = new HashSet<>(); + Map> stateKeyBools = new HashMap<>(); + + for (String state : stateKeys) { + int openBracketIndex = state.indexOf("["); + int closeBracketIndex = state.indexOf("]"); + + String cleanStates = state.substring(openBracketIndex + 1, closeBracketIndex); + + String[] pairs = cleanStates.split("\\s*,\\s*"); + + for (String pair : pairs) { + String[] parts = pair.split("="); + String property = parts[0]; + String value = parts[1]; + if (value.equals("true") || value.equals("false")) { + booleanValuesSet.add(property); + Map propertyMap = stateKeyBools.getOrDefault(state, new HashMap<>()); + propertyMap.put(property, Boolean.parseBoolean(value)); + stateKeyBools.put(state, propertyMap); + } else if (CharMatcher.inRange('0', '9').matchesAllOf(value)) { + int intValue = Integer.parseInt(value); + LinkedHashSet values = intValuesMap.get(property); + if (values == null) { + values = new LinkedHashSet<>(); + intValuesMap.put(property, values); + } + values.add(intValue); + Map propertyMap = stateKeyInts.getOrDefault(state, new HashMap<>()); + propertyMap.put(property, intValue); + stateKeyInts.put(state, propertyMap); + } else { + LinkedHashSet values = stringValuesMap.get(property); + if (values == null) { + values = new LinkedHashSet<>(); + stringValuesMap.put(property, values); + } + values.add(value); + Map propertyMap = stateKeyStrings.getOrDefault(state, new HashMap<>()); + propertyMap.put(property, value); + stateKeyStrings.put(state, propertyMap); + } + } + } + return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); + } + private CustomBlockComponents createCustomBlockComponents(JsonNode node) { - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); + builder + .geometry("geometry.some.geometry"); // .selectionBox() // .collisionBox() // .displayName() @@ -245,11 +344,12 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node) { // .lightDampening() // .rotation() // .placeAir() - .build(); JsonNode materialInstances = node.get("material_instances"); // TODO: loop through material instances and add component for each to components + CustomBlockComponents components = builder.build(); + return components; } @@ -271,7 +371,9 @@ private String createCustomBlockPropertyQuery(String state) { } } - return String.join(" && ", queries); + String query = String.join(" && ", queries); + + return String.format("q.block_property('geyser_custom:default') == 0 && %s", query); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 6d569bfb5b2..1833c4dff32 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -19,6 +19,7 @@ import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; import com.nukkitx.nbt.NbtMap; @@ -74,6 +75,16 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { customBlocks.add(customSkull.getCustomBlockData()); } + + MappingsConfigReader mappingsConfigReader = new MappingsConfigReader(); + mappingsConfigReader.loadBlockMappingsFromJson((key, block) -> { + customBlocks.add(block.data()); + block.states().forEach((javaIdentifier, customBlockState) -> { + int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); + GeyserImpl.getInstance().getLogger().info("CUSTOM RUNTIME ID: " + id + " for " + javaIdentifier); + blockStateOverrides.put(id, customBlockState); + }); + }); BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); From 461bff61f1bb932014cee24893ee65b4f61a2cc4 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 1 Jan 2023 00:08:01 -0800 Subject: [PATCH 036/134] Ok now they work at least --- .../block/GeyserCustomBlockComponents.java | 5 - .../level/block/GeyserCustomBlockData.java | 2 +- .../level/block/GeyserCustomBlockState.java | 2 +- .../mappings/versions/MappingsReader_v1.java | 107 +++++++++--------- 4 files changed, 58 insertions(+), 58 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 8a44638f45e..42197a8ccef 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -141,8 +141,6 @@ public static class CustomBlockComponentsBuilder implements Builder { protected RotationComponent rotation; protected boolean placeAir = false; - private static final Set VALID_MATERIAL_INSTANCE_NAMES = ImmutableSet.of("*", "up", "down", "north", "south", "west", "east"); - private void validateBox(BoxComponent box) { if (box == null) { return; @@ -189,9 +187,6 @@ public Builder geometry(String geometry) { @Override public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance materialInstance) { - if (!VALID_MATERIAL_INSTANCE_NAMES.contains(name)) { - throw new IllegalArgumentException("Material instance name must be one of " + VALID_MATERIAL_INSTANCE_NAMES); - } this.materialInstances.put(name, materialInstance); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index de97d38d4e3..ba0fdf17dcc 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -139,7 +139,7 @@ public Builder components(@NonNull CustomBlockComponents components) { @Override public Builder booleanProperty(@NonNull String propertyName) { - this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, List.of(false, true), PropertyType.BOOLEAN)); + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, List.of((byte) 0, (byte) 1), PropertyType.BOOLEAN)); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index 5e195962afe..576bd9743a8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -70,7 +70,7 @@ public static class CustomBlockStateBuilder implements CustomBlockState.Builder @Override public Builder booleanProperty(@NonNull String propertyName, boolean value) { - properties.put(propertyName, value); + properties.put(propertyName, value ? (byte) 1 : (byte) 0); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index ba661af582f..cb5fb1c6437 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -42,6 +42,7 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; +import org.geysermc.geyser.util.BlockUtils; import java.nio.file.Path; import java.util.ArrayList; @@ -169,7 +170,7 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa @Override public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException { if (node == null || !node.isObject()) { - throw new InvalidCustomMappingsFileException("Invalid block mappings entry:" + node.toString()); + throw new InvalidCustomMappingsFileException("Invalid block mappings entry:" + node); } String name = node.get("name").asText(); @@ -177,41 +178,49 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node throw new InvalidCustomMappingsFileException("A block entry has no name"); } + boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); JsonNode stateOverrides = node.get("state_overrides"); + + if (onlyOverrideStates && (stateOverrides == null || !stateOverrides.isObject())) { + throw new InvalidCustomMappingsFileException("A block entry has only_override_states set to true but no state_overrides"); + } + List stateKeys = new ArrayList<>(); - Iterator> fields = stateOverrides.fields(); - while (fields.hasNext()) { - stateKeys.add(identifier + fields.next().getKey()); + + if (stateOverrides != null && stateOverrides.isObject()) { + Iterator> fields = stateOverrides.fields(); + while (fields.hasNext()) { + stateKeys.add(identifier + fields.next().getKey()); + } } List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) .stream() .filter(s -> s.startsWith(identifier + "[")) .collect(Collectors.toList()); + if (defaultStates.isEmpty()) defaultStates.add(""); CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); - - customBlockDataBuilder - .name(name) - .components(createCustomBlockComponents(node)) - .permutations(createCustomBlockPermutations(stateOverrides)) + customBlockDataBuilder.name(name) + .components(createCustomBlockComponents(node, defaultStates.get(0), identifier)) + .permutations(createCustomBlockPermutations(stateOverrides, identifier)) .booleanProperty("geyser_custom:default"); - BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(defaultStates); + BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(onlyOverrideStates ? stateKeys : defaultStates); blockPropertyTypeMaps.stringValuesMap().forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList(value))); blockPropertyTypeMaps.intValuesMap().forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList(value))); blockPropertyTypeMaps.booleanValuesSet().forEach((value) -> customBlockDataBuilder.booleanProperty(value)); CustomBlockData customBlockData = customBlockDataBuilder.build(); - Map states = createCustomBlockStatesMap(identifier, stateKeys, defaultStates, customBlockData, + Map states = createCustomBlockStatesMap(identifier, stateKeys, defaultStates, onlyOverrideStates, customBlockData, blockPropertyTypeMaps.stateKeyStrings(), blockPropertyTypeMaps.stateKeyInts(), blockPropertyTypeMaps.stateKeyBools()); return new CustomBlockMapping(customBlockData, states); } - private List createCustomBlockPermutations(JsonNode node) { + private List createCustomBlockPermutations(JsonNode node, String identifier) { List permutations = new ArrayList<>(); if (node != null && node.isObject()) { @@ -220,48 +229,37 @@ private List createCustomBlockPermutations(JsonNode node JsonNode value = entry.getValue(); if (value.isObject()) { value.forEach(data -> { - permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data), createCustomBlockPropertyQuery(key))); + permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data, key, identifier), createCustomBlockPropertyQuery(key))); }); } }); } - permutations.add(new CustomBlockPermutation( - new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), - "q.block_property('geyser_custom:default') == 1")); + permutations.add(new CustomBlockPermutation(new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), "q.block_property('geyser_custom:default') == 1")); return permutations; } - private Map createCustomBlockStatesMap( - String identifier, - List stateKeys, - List defaultStates, - CustomBlockData customBlockData, - Map> stateKeyStrings, - Map> stateKeyInts, - Map> stateKeyBools) { + private Map createCustomBlockStatesMap(String identifier, List stateKeys,List defaultStates, boolean onlyOverrideStates, CustomBlockData customBlockData, + Map> stateKeyStrings, Map> stateKeyInts, Map> stateKeyBools) { Map states = new HashMap<>(); - defaultStates.removeAll(stateKeys); - - defaultStates.forEach(key -> { - CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); - builder.booleanProperty("geyser_custom:default", true); - - stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); - stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); - stateKeyBools.getOrDefault(key, Collections.emptyMap()).forEach((property, boolValue) -> builder.booleanProperty(property, boolValue)); - - CustomBlockState blockState = builder.build(); + if (!onlyOverrideStates) { + defaultStates.removeAll(stateKeys); + createCustomBlockStates(defaultStates, true, customBlockData, stateKeyStrings, stateKeyInts, stateKeyBools, states); + } + createCustomBlockStates(stateKeys, false, customBlockData, stateKeyStrings, stateKeyInts, stateKeyBools, states); - states.put(key, blockState); - }); + return states; + } + private void createCustomBlockStates(List stateKeys, boolean defaultState, CustomBlockData customBlockData, + Map> stateKeyStrings, Map> stateKeyInts, + Map> stateKeyBools, Map states) { stateKeys.forEach((key) -> { CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); - builder.booleanProperty("geyser_custom:default", false); + builder.booleanProperty("geyser_custom:default", defaultState); stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); @@ -271,11 +269,9 @@ private Map createCustomBlockStatesMap( states.put(key, blockState); }); - - return states; } - private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List stateKeys) { + private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedStateKeys) { Map> stringValuesMap = new HashMap<>(); Map> stateKeyStrings = new HashMap<>(); @@ -285,13 +281,8 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List stateKeys Set booleanValuesSet = new HashSet<>(); Map> stateKeyBools = new HashMap<>(); - for (String state : stateKeys) { - int openBracketIndex = state.indexOf("["); - int closeBracketIndex = state.indexOf("]"); - - String cleanStates = state.substring(openBracketIndex + 1, closeBracketIndex); - - String[] pairs = cleanStates.split("\\s*,\\s*"); + for (String state : usedStateKeys) { + String[] pairs = splitStateString(state); for (String pair : pairs) { String[] parts = pair.split("="); @@ -329,7 +320,11 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List stateKeys return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); } - private CustomBlockComponents createCustomBlockComponents(JsonNode node) { + private CustomBlockComponents createCustomBlockComponents(JsonNode node, String state, String identifier) { + String stateIdentifier = identifier + state; + int test = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateIdentifier, -1); + BlockUtils.getCollision(test); + CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); builder .geometry("geometry.some.geometry"); @@ -354,8 +349,7 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node) { } private String createCustomBlockPropertyQuery(String state) { - String list = state.substring(1, state.length() - 1); - String[] conditions = list.split(","); + String[] conditions = splitStateString(state); String[] queries = new String[conditions.length]; for (int i = 0; i < conditions.length; i++) { @@ -376,4 +370,15 @@ private String createCustomBlockPropertyQuery(String state) { return String.format("q.block_property('geyser_custom:default') == 0 && %s", query); } + private String[] splitStateString(String state) { + int openBracketIndex = state.indexOf("["); + int closeBracketIndex = state.indexOf("]"); + + String cleanStates = state.substring(openBracketIndex + 1, closeBracketIndex); + + String[] pairs = cleanStates.split("\\s*,\\s*"); + + return pairs; + } + } From f4071f4945682c892be5d6ea8764b6c2a3efb186 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 1 Jan 2023 17:31:56 -0800 Subject: [PATCH 037/134] Read most mapping components --- .../mappings/versions/MappingsReader_v1.java | 98 +++++++++++++++---- 1 file changed, 79 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index cb5fb1c6437..b78649ba869 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -33,13 +33,17 @@ import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.RotationComponent; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; +import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; import org.geysermc.geyser.util.BlockUtils; @@ -203,8 +207,8 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); customBlockDataBuilder.name(name) - .components(createCustomBlockComponents(node, defaultStates.get(0), identifier)) - .permutations(createCustomBlockPermutations(stateOverrides, identifier)) + .components(createCustomBlockComponents(node, defaultStates.get(0), identifier, name)) + .permutations(createCustomBlockPermutations(stateOverrides, identifier, name)) .booleanProperty("geyser_custom:default"); BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(onlyOverrideStates ? stateKeys : defaultStates); @@ -220,7 +224,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node return new CustomBlockMapping(customBlockData, states); } - private List createCustomBlockPermutations(JsonNode node, String identifier) { + private List createCustomBlockPermutations(JsonNode node, String identifier, String name) { List permutations = new ArrayList<>(); if (node != null && node.isObject()) { @@ -229,7 +233,7 @@ private List createCustomBlockPermutations(JsonNode node JsonNode value = entry.getValue(); if (value.isObject()) { value.forEach(data -> { - permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data, key, identifier), createCustomBlockPropertyQuery(key))); + permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data, key, identifier, name), createCustomBlockPropertyQuery(key))); }); } }); @@ -320,28 +324,84 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); } - private CustomBlockComponents createCustomBlockComponents(JsonNode node, String state, String identifier) { + private CustomBlockComponents createCustomBlockComponents(JsonNode node, String state, String identifier, String name) { String stateIdentifier = identifier + state; - int test = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateIdentifier, -1); - BlockUtils.getCollision(test); + int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateIdentifier, -1); CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); - builder - .geometry("geometry.some.geometry"); - // .selectionBox() - // .collisionBox() - // .displayName() - // .geometry() - // .materialInstance() // .destroyTime() // .friction() - // .lightEmission() - // .lightDampening() - // .rotation() // .placeAir() + BoundingBox boundingBox = BlockUtils.getCollision(id).getBoundingBoxes()[0]; + BoxComponent boxComponent = new BoxComponent( + (float) boundingBox.getMiddleX(), (float) boundingBox.getMiddleY(), (float) boundingBox.getMiddleZ(), + (float) boundingBox.getSizeX(), (float) boundingBox.getSizeY(), (float) boundingBox.getSizeZ()); + builder.selectionBox(boxComponent).collisionBox(boxComponent); + + if (node.has("geometry")) { + builder.geometry(node.get("geometry").asText()); + } + + if (node.has("display_name")) { + builder.displayName(node.get("display_name").asText()); + } + + if (node.has("light_emission")) { + builder.lightEmission(node.get("light_emission").asInt()); + } + + if (node.has("light_dampening")) { + builder.lightDampening(node.get("light_dampening").asInt()); + } + + boolean placeAir = true; + if (node.has("place_air")) { + placeAir = node.get("place_air").asBoolean(); + } + builder.placeAir(placeAir); + + if (node.has("rotation")) { + JsonNode rotation = node.get("rotation"); + int rotationX = rotation.get(0).asInt(); + int rotationY = rotation.get(1).asInt(); + int rotationZ = rotation.get(2).asInt(); + builder.rotation(new RotationComponent(rotationX, rotationY, rotationZ)); + } - JsonNode materialInstances = node.get("material_instances"); - // TODO: loop through material instances and add component for each to components + if (node.has("material_instances")) { + JsonNode materialInstances = node.get("material_instances"); + if (materialInstances.isObject()) { + materialInstances.fields().forEachRemaining(entry -> { + String key = entry.getKey(); + JsonNode value = entry.getValue(); + if (value.isObject()) { + value.forEach(data -> { + String texture = name; + if (node.has("texture")) { + texture = data.get("texture").asText(); + } + + String renderMethod = data.get("render_method").asText(); + if (node.has("render_method")) { + renderMethod = data.get("render_method").asText(); + } + + boolean faceDimming = false; + if (node.has("face_dimming")) { + faceDimming = data.get("face_dimming").asBoolean(); + } + + boolean ambientOcclusion = false; + if (node.has("ambient_occlusion")) { + ambientOcclusion = data.get("ambient_occlusion").asBoolean(); + } + + builder.materialInstance(key, new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion)); + }); + } + }); + } + } CustomBlockComponents components = builder.build(); From fb15b94b7ba227d26fccf7e86af667de8a1a2d33 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 2 Jan 2023 02:14:55 -0800 Subject: [PATCH 038/134] Block mappings mostly done --- .../component/CustomBlockComponents.java | 5 +- .../block/GeyserCustomBlockComponents.java | 33 +++-- .../geyser/registry/BlockRegistries.java | 13 ++ .../geysermc/geyser/registry/Registries.java | 8 +- .../mappings/versions/MappingsReader_v1.java | 113 +++++++++++------- .../populator/BlockRegistryPopulator.java | 8 +- .../CustomBlockRegistryPopulator.java | 7 +- .../geyser/registry/type/CustomSkull.java | 2 +- .../level/block/entity/PistonBlockEntity.java | 6 +- .../org/geysermc/geyser/util/BlockUtils.java | 4 +- 10 files changed, 117 insertions(+), 82 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 4786bccbe3a..847205c6aaa 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -33,13 +33,14 @@ public interface CustomBlockComponents { BoxComponent selectionBox(); BoxComponent collisionBox(); + String displayName(); String geometry(); @NonNull Map materialInstances(); - Float destroyTime(); + Float destructibleByMining(); Float friction(); @@ -62,7 +63,7 @@ interface Builder { Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); - Builder destroyTime(Float destroyTime); + Builder destructibleByMining(Float destructibleByMining); Builder friction(Float friction); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 42197a8ccef..7af10c33545 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,12 +25,8 @@ package org.geysermc.geyser.level.block; -import com.google.common.collect.ImmutableSet; -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.Value; +import java.util.Map; + import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; @@ -38,8 +34,11 @@ import org.geysermc.geyser.api.block.custom.component.RotationComponent; import org.jetbrains.annotations.NotNull; -import java.util.Map; -import java.util.Set; +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.Value; @Value public class GeyserCustomBlockComponents implements CustomBlockComponents { @@ -48,7 +47,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { String displayName; String geometry; Map materialInstances; - Float destroyTime; + Float destructibleByMining; Float friction; Integer lightEmission; Integer lightDampening; @@ -65,7 +64,7 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { } else { this.materialInstances = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.materialInstances)); } - this.destroyTime = builder.destroyTime; + this.destructibleByMining = builder.destructibleByMining; this.friction = builder.friction; this.lightEmission = builder.lightEmission; this.lightDampening = builder.lightDampening; @@ -99,8 +98,8 @@ public String geometry() { } @Override - public Float destroyTime() { - return destroyTime; + public Float destructibleByMining() { + return destructibleByMining; } @Override @@ -134,7 +133,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); - protected Float destroyTime; + protected Float destructibleByMining; protected Float friction; protected Integer lightEmission; protected Integer lightDampening; @@ -192,11 +191,11 @@ public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance } @Override - public Builder destroyTime(Float destroyTime) { - if (destroyTime != null && destroyTime < 0) { - throw new IllegalArgumentException("Destroy time must be non-negative"); + public Builder destructibleByMining(Float destructibleByMining) { + if (destructibleByMining != null && destructibleByMining < 0) { + throw new IllegalArgumentException("Destructible by mining must be non-negative"); } - this.destroyTime = destroyTime; + this.destructibleByMining = destructibleByMining; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 0103e1762e1..1de8772de03 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.registry; +import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; @@ -32,12 +33,15 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.registry.loader.CollisionRegistryLoader; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; +import org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator; import org.geysermc.geyser.registry.populator.CustomSkullRegistryPopulator; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.BlockMappings; import org.geysermc.geyser.registry.type.CustomSkull; +import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.collection.Object2IntBiMap; /** @@ -61,6 +65,11 @@ public class BlockRegistries { */ public static final ArrayRegistry JAVA_BLOCKS = ArrayRegistry.create(RegistryLoaders.empty(() -> new BlockMapping[] {})); + /** + * A mapped registry containing which holds block IDs to its {@link BlockCollision}. + */ + public static final IntMappedRegistry COLLISIONS; + /** * A (bi)mapped registry containing the Java IDs to identifiers. */ @@ -105,9 +114,13 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(); + COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); + CustomBlockRegistryPopulator.registerCustomBedrockBlocks(); + BlockRegistryPopulator.registerBedrockBlocks(); } public static void init() { // no-op } + } \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 2a1b595d8b8..e1b23e37196 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -36,7 +36,7 @@ import com.nukkitx.protocol.bedrock.BedrockPacket; import com.nukkitx.protocol.bedrock.data.inventory.CraftingData; import com.nukkitx.protocol.bedrock.data.inventory.PotionMixData; -import it.unimi.dsi.fastutil.Pair; + import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -53,7 +53,6 @@ import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.registry.type.ParticleMapping; import org.geysermc.geyser.registry.type.SoundMapping; -import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; import org.geysermc.geyser.translator.level.event.LevelEventTranslator; import org.geysermc.geyser.translator.sound.SoundInteractionTranslator; @@ -96,11 +95,6 @@ public final class Registries { */ public static final SimpleMappedRegistry BLOCK_ENTITIES = SimpleMappedRegistry.create("org.geysermc.geyser.translator.level.block.entity.BlockEntity", BlockEntityRegistryLoader::new); - /** - * A mapped registry containing which holds block IDs to its {@link BlockCollision}. - */ - public static final IntMappedRegistry COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); - /** * A versioned registry which holds a {@link RecipeType} to a corresponding list of {@link CraftingData}. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index b78649ba869..d7d49ee818d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -46,6 +46,7 @@ import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; +import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.util.BlockUtils; import java.nio.file.Path; @@ -203,11 +204,11 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node .stream() .filter(s -> s.startsWith(identifier + "[")) .collect(Collectors.toList()); - if (defaultStates.isEmpty()) defaultStates.add(""); + if (defaultStates.isEmpty()) defaultStates.add(identifier); CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); customBlockDataBuilder.name(name) - .components(createCustomBlockComponents(node, defaultStates.get(0), identifier, name)) + .components(createCustomBlockComponents(node, defaultStates.get(0), name)) .permutations(createCustomBlockPermutations(stateOverrides, identifier, name)) .booleanProperty("geyser_custom:default"); @@ -232,9 +233,7 @@ private List createCustomBlockPermutations(JsonNode node String key = entry.getKey(); JsonNode value = entry.getValue(); if (value.isObject()) { - value.forEach(data -> { - permutations.add(new CustomBlockPermutation(createCustomBlockComponents(data, key, identifier, name), createCustomBlockPropertyQuery(key))); - }); + permutations.add(new CustomBlockPermutation(createCustomBlockComponents(value, (identifier + key), name), createCustomBlockPropertyQuery(key))); } }); } @@ -324,20 +323,22 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); } - private CustomBlockComponents createCustomBlockComponents(JsonNode node, String state, String identifier, String name) { - String stateIdentifier = identifier + state; - int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateIdentifier, -1); + private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { + int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); - // .destroyTime() // .friction() - // .placeAir() - BoundingBox boundingBox = BlockUtils.getCollision(id).getBoundingBoxes()[0]; - BoxComponent boxComponent = new BoxComponent( - (float) boundingBox.getMiddleX(), (float) boundingBox.getMiddleY(), (float) boundingBox.getMiddleZ(), - (float) boundingBox.getSizeX(), (float) boundingBox.getSizeY(), (float) boundingBox.getSizeZ()); + BoxComponent boxComponent = createBoxComponent(id); builder.selectionBox(boxComponent).collisionBox(boxComponent); + // Ideally we would just be able to calculate the right value for this, but it seems that hardness value on bedrock does not follow Java + // As such this might as well just be configured for now if people so choose + float destructibleByMining = BlockRegistries.JAVA_BLOCKS.getOrDefault(id, BlockMapping.AIR).getHardness() * 3.25F; + if (node.has("destructible_by_mining")) { + destructibleByMining = node.get("destructible_by_mining").floatValue(); + } + builder.destructibleByMining(destructibleByMining); + if (node.has("geometry")) { builder.geometry(node.get("geometry").asText()); } @@ -375,29 +376,8 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String String key = entry.getKey(); JsonNode value = entry.getValue(); if (value.isObject()) { - value.forEach(data -> { - String texture = name; - if (node.has("texture")) { - texture = data.get("texture").asText(); - } - - String renderMethod = data.get("render_method").asText(); - if (node.has("render_method")) { - renderMethod = data.get("render_method").asText(); - } - - boolean faceDimming = false; - if (node.has("face_dimming")) { - faceDimming = data.get("face_dimming").asBoolean(); - } - - boolean ambientOcclusion = false; - if (node.has("ambient_occlusion")) { - ambientOcclusion = data.get("ambient_occlusion").asBoolean(); - } - - builder.materialInstance(key, new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion)); - }); + MaterialInstance materialInstance = createMaterialInstanceComponent(value, name); + builder.materialInstance(key, materialInstance); } }); } @@ -408,20 +388,65 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String return components; } + private BoxComponent createBoxComponent(int id) { + BoundingBox boundingBox = BlockUtils.getCollision(id).getBoundingBoxes()[0]; + + float offsetX = (float) boundingBox.getSizeX() * 8; + float offsetY = (float) boundingBox.getSizeY() * 8; + float offsetZ = (float) boundingBox.getSizeZ() * 8; + + float cornerX = clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); + float cornerY = clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); + float cornerZ = clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); + + float sizeX = clamp((float) boundingBox.getSizeX() * 16, -8, 8); + float sizeY = clamp((float) boundingBox.getSizeY() * 16, 0, 16); + float sizeZ = clamp((float) boundingBox.getSizeZ() * 16, -8, 8); + + BoxComponent boxComponent = new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); + + return boxComponent; + } + + private MaterialInstance createMaterialInstanceComponent(JsonNode node, String name) { + String texture = name; + if (node.has("texture")) { + texture = node.get("texture").asText(); + } + + String renderMethod = "alpha_test"; + if (node.has("render_method")) { + renderMethod = node.get("render_method").asText(); + } + + boolean faceDimming = false; + if (node.has("face_dimming")) { + faceDimming = node.get("face_dimming").asBoolean(); + } + + boolean ambientOcclusion = false; + if (node.has("ambient_occlusion")) { + ambientOcclusion = node.get("ambient_occlusion").asBoolean(); + } + + return new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion); + } + private String createCustomBlockPropertyQuery(String state) { String[] conditions = splitStateString(state); String[] queries = new String[conditions.length]; for (int i = 0; i < conditions.length; i++) { String[] keyval = conditions[i].split("=", 2); + if (keyval[1].equals("true")) { - queries[i] = String.format("q.block_property('%s') == %b", keyval[0], 1); + queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], 1); } else if (keyval[1].equals("false")) { - queries[i] = String.format("q.block_property('%s') == %b", keyval[0], 0); - } else if (keyval[1].matches("-?\\d+")) { - queries[i] = String.format("q.block_property('%s') == %b", keyval[0], Integer.parseInt(keyval[1])); + queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], 0); + } else if (CharMatcher.inRange('0', '9').matchesAllOf(keyval[1])) { + queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], Integer.parseInt(keyval[1])); } else { - queries[i] = String.format("q.block_property('%s') == '%b'", keyval[0], keyval[1]); + queries[i] = String.format("q.block_property('%1$s') == '%2$s'", keyval[0], keyval[1]); } } @@ -441,4 +466,8 @@ private String[] splitStateString(String state) { return pairs; } + public float clamp(float value, float min, float max) { + return Math.max(min, Math.min(value, max)); + } + } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index c007a17e366..366e0655679 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -78,13 +78,13 @@ public final class BlockRegistryPopulator { public static void populate() { registerJavaBlocks(); - CustomBlockRegistryPopulator.registerCustomBedrockBlocks(); - registerBedrockBlocks(); + // CustomBlockRegistryPopulator.registerCustomBedrockBlocks() and registerBedrockBlocks() moved to BlockRegistries to ensure correct load order - BLOCKS_JSON = null; + // Needs to be placed somewhere at some point + //BLOCKS_JSON = null; } - private static void registerBedrockBlocks() { + public static void registerBedrockBlocks() { BiFunction emptyMapper = (bedrockIdentifier, statesBuilder) -> null; ImmutableMap, BiFunction> blockMappers = ImmutableMap., BiFunction>builder() .put(ObjectIntPair.of("1_19_20", Bedrock_v544.V544_CODEC.getProtocolVersion()), emptyMapper) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 1833c4dff32..a180935d60a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -32,7 +32,7 @@ public class CustomBlockRegistryPopulator { - static void registerCustomBedrockBlocks() { + public static void registerCustomBedrockBlocks() { if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { return; } @@ -81,7 +81,6 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull customBlocks.add(block.data()); block.states().forEach((javaIdentifier, customBlockState) -> { int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); - GeyserImpl.getInstance().getLogger().info("CUSTOM RUNTIME ID: " + id + " for " + javaIdentifier); blockStateOverrides.put(id, customBlockState); }); }); @@ -188,9 +187,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putCompound("materials", materialsBuilder.build()) .build()); } - if (components.destroyTime() != null) { + if (components.destructibleByMining() != null) { builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() - .putFloat("value", components.destroyTime()) + .putFloat("value", components.destructibleByMining()) .build()); } if (components.friction() != null) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 658dbf04446..08c0b80a4a4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -65,7 +65,7 @@ public CustomSkull(String skinHash) { this.skinHash = skinHash; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .destroyTime(1.5f) + .destructibleByMining(1.5f) .materialInstance("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true)) .lightDampening(0) .placeAir(true) diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java index c5268901492..591737b588b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java @@ -43,7 +43,7 @@ import org.geysermc.geyser.level.physics.CollisionManager; import org.geysermc.geyser.level.physics.Direction; import org.geysermc.geyser.network.GameProtocol; -import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.PistonCache; import org.geysermc.geyser.translator.collision.BlockCollision; @@ -96,7 +96,7 @@ public class PistonBlockEntity { static { // Create a ~1 x ~0.5 x ~1 bounding box above the honey block - BlockCollision blockCollision = Registries.COLLISIONS.get(BlockStateValues.JAVA_HONEY_BLOCK_ID); + BlockCollision blockCollision = BlockRegistries.COLLISIONS.get(BlockStateValues.JAVA_HONEY_BLOCK_ID); if (blockCollision == null) { throw new RuntimeException("Failed to find honey block collision"); } @@ -486,7 +486,7 @@ private void pushPlayerBlock(int javaId, Vector3d startingPos, double blockMovem pistonCache.displacePlayer(movement.mul(delta)); } else { // Move the player out of collision - BlockCollision blockCollision = Registries.COLLISIONS.get(javaId); + BlockCollision blockCollision = BlockRegistries.COLLISIONS.get(javaId); if (blockCollision != null) { Vector3d extend = movement.mul(Math.min(1 - blockMovement, 0.5)); Direction movementDirection = orientation; diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java index c0d4849191f..6450ed161b8 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -30,7 +30,7 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.PlayerInventory; import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; @@ -219,7 +219,7 @@ public static String getCleanIdentifier(String fullJavaIdentifier) { } public static BlockCollision getCollision(int blockId) { - return Registries.COLLISIONS.get(blockId); + return BlockRegistries.COLLISIONS.get(blockId); } public static BlockCollision getCollisionAt(GeyserSession session, Vector3i blockPos) { From 96967dafa27f57a5f55a96cb19e057fbd4c82196 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 4 Jan 2023 22:44:28 -0800 Subject: [PATCH 039/134] Translate block item --- .../api/block/custom/CustomBlockMapping.java | 2 +- .../geyser/registry/BlockRegistries.java | 5 ++++ .../mappings/versions/MappingsReader_v1.java | 2 +- .../CustomBlockRegistryPopulator.java | 8 ++++++ .../inventory/item/ItemTranslator.java | 26 ++++++++++++++++--- 5 files changed, 38 insertions(+), 5 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java index c868e100ade..d2ccfade653 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java @@ -4,5 +4,5 @@ import org.checkerframework.checker.nullness.qual.NonNull; -public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states) { +public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, @NonNull boolean overrideItem) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 1de8772de03..4beeff34f69 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -106,6 +106,11 @@ public class BlockRegistries { */ public static final MappedRegistry> CUSTOM_BLOCK_STATE_OVERRIDES = MappedRegistry.create(RegistryLoaders.empty(Int2ObjectOpenHashMap::new)); + /** + * A registry which stores clean Java Ids and the custom block it should be replaced with in the context of items. + */ + public static final SimpleMappedRegistry CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** * A registry which stores skin texture hashes to custom skull blocks. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index d7d49ee818d..90a1eeadbb4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -222,7 +222,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node Map states = createCustomBlockStatesMap(identifier, stateKeys, defaultStates, onlyOverrideStates, customBlockData, blockPropertyTypeMaps.stateKeyStrings(), blockPropertyTypeMaps.stateKeyInts(), blockPropertyTypeMaps.stateKeyBools()); - return new CustomBlockMapping(customBlockData, states); + return new CustomBlockMapping(customBlockData, states, identifier, !onlyOverrideStates); } private List createCustomBlockPermutations(JsonNode node, String identifier, String name) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index a180935d60a..1858006f990 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -1,6 +1,7 @@ package org.geysermc.geyser.registry.populator; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -39,6 +40,7 @@ public static void registerCustomBedrockBlocks() { Set customBlockNames = new ObjectOpenHashSet<>(); Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); + Map customBlockItemOverrides = new HashMap<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { @@ -79,6 +81,9 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull MappingsConfigReader mappingsConfigReader = new MappingsConfigReader(); mappingsConfigReader.loadBlockMappingsFromJson((key, block) -> { customBlocks.add(block.data()); + if (block.overrideItem()) { + customBlockItemOverrides.put(block.javaIdentifier(), block.data()); + } block.states().forEach((javaIdentifier, customBlockState) -> { int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); blockStateOverrides.put(id, customBlockState); @@ -90,6 +95,9 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); GeyserImpl.getInstance().getLogger().debug("Registered " + blockStateOverrides.size() + " custom block overrides."); + + BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); + GeyserImpl.getInstance().getLogger().debug("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); } static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 3a2a18d5a0d..7a801048478 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -188,8 +188,14 @@ public static ItemData translateToBedrock(GeyserSession session, ItemStack stack ItemTranslator itemStackTranslator = ITEM_STACK_TRANSLATORS.getOrDefault(bedrockItem.getJavaId(), DEFAULT_TRANSLATOR); ItemData.Builder builder = itemStackTranslator.translateToBedrock(itemStack, bedrockItem, session.getItemMappings()); + if (bedrockItem.isBlock()) { - builder.blockRuntimeId(bedrockItem.getBedrockBlockId()); + CustomBlockData customBlockData = BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.getOrDefault(bedrockItem.getJavaIdentifier(), null); + if (customBlockData != null) { + translateCustomBlock(customBlockData, session, builder); + } else { + builder.blockRuntimeId(bedrockItem.getBedrockBlockId()); + } } if (bedrockItem == session.getItemMappings().getStoredItems().playerHead()) { @@ -302,6 +308,12 @@ public static int getBedrockItemId(GeyserSession session, @Nonnull GeyserItemSta .getItemMapping(javaId, itemStack.getNbt(), session.getItemMappings()); int itemId = mapping.getBedrockId(); + + CustomBlockData customBlockData = BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.getOrDefault(mapping.getJavaIdentifier(), null); + if (customBlockData != null) { + itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customBlockData); + } + if (mapping == session.getItemMappings().getStoredItems().playerHead()) { CustomSkull customSkull = getCustomSkull(session, itemStack.getNbt()); if (customSkull != null) { @@ -547,6 +559,16 @@ private static void translateCustomItem(CompoundTag nbt, ItemData.Builder builde } } + /** + * Translates a custom block override + */ + private static void translateCustomBlock(CustomBlockData customBlockData, GeyserSession session, ItemData.Builder builder) { + int itemId = session.getItemMappings().getCustomBlockItemIds().getInt(customBlockData); + int blockRuntimeId = session.getBlockMappings().getCustomBlockStateIds().getInt(customBlockData.defaultBlockState()); + builder.id(itemId); + builder.blockRuntimeId(blockRuntimeId); + } + private static CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) { if (nbt != null && nbt.contains("SkullOwner")) { if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) { @@ -577,6 +599,4 @@ private static void translatePlayerHead(GeyserSession session, CompoundTag nbt, } } - // TODO: Add translator for generic custom blocks - } From a51ff5797c27775329ea56354ef363540411378d Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 15:59:29 -0800 Subject: [PATCH 040/134] Add docs for custom blocks --- .../api/block/custom/CustomBlockData.java | 33 +++++++- .../api/block/custom/CustomBlockMapping.java | 30 ++++++++ .../block/custom/CustomBlockPermutation.java | 4 + .../api/block/custom/CustomBlockState.java | 20 +++++ .../block/custom/component/BoxComponent.java | 9 +++ .../component/CustomBlockComponents.java | 76 ++++++++++++++++++- .../custom/component/MaterialInstance.java | 3 + .../custom/component/RotationComponent.java | 3 + .../custom/property/CustomBlockProperty.java | 3 + .../block/custom/property/PropertyType.java | 3 + .../GeyserDefineCustomBlocksEvent.java | 19 +++++ 11 files changed, 201 insertions(+), 2 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 52d90892da9..14b2a5957e8 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -33,19 +33,50 @@ import java.util.Map; /** - * This is used to store data for a custom block. + * This class is used to store data for a custom block. */ public interface CustomBlockData { + /** + * Gets the name of the custom block + * + * @return The name of the custom block. + */ @NonNull String name(); + /** + * Gets the identifier of the custom block + * + * @return The identifier of the custom block. + */ @NonNull String identifier(); + /** + * Gets the components of the custom block + * + * @return The components of the custom block. + */ CustomBlockComponents components(); + /** + * Gets the custom block's map of block property names to CustomBlockProperty + * objects + * + * @return The custom block's map of block property names to CustomBlockProperty objects. + */ @NonNull Map> properties(); + /** + * Gets the list of the custom block's permutations + * + * @return The permutations of the custom block. + */ @NonNull List permutations(); + /** + * Gets the custom block's default block state + * + * @return The default block state of the custom block. + */ @NonNull CustomBlockState defaultBlockState(); CustomBlockState.@NonNull Builder blockStateBuilder(); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java index d2ccfade653..ccd5e8ad83a 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java @@ -1,8 +1,38 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + package org.geysermc.geyser.api.block.custom; import java.util.Map; import org.checkerframework.checker.nullness.qual.NonNull; +/** + * This class is used to store a custom block mappings, which contain all of the + * data required to register a custom block that overrides a group of java block + * states. + */ public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, @NonNull boolean overrideItem) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index dfaf626f330..0d52a2a9ea3 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -28,5 +28,9 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +/** + * This class is used to store a custom block permutations, which contain custom + * block components mapped to a Molang query that should return true or false + */ public record CustomBlockPermutation(@NonNull CustomBlockComponents components, @NonNull String condition) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 14af446a0a6..9fae9e79924 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -29,11 +29,31 @@ import java.util.Map; +/** + * This class is used to store a custom block state, which contains CustomBlockData + * tied to defined properties and values + */ public interface CustomBlockState { + /** + * Gets the custom block data associated with the state + * + * @return The custom block data for the state. + */ @NonNull CustomBlockData block(); + /** + * Gets the name of the state + * + * @return The name of the state. + */ @NonNull String name(); + /** + * Gets the given property for the state + * + * @param propertyName the property name + * @return The java identifier for this item. + */ @NonNull T property(String propertyName); @NonNull Map properties(); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 142878c5b53..5da8e422a9e 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -25,11 +25,20 @@ package org.geysermc.geyser.api.block.custom.component; +/** + * This class is used to store a box component for the selection and + * collision boxes of a custom block. + */ public record BoxComponent(float originX, float originY, float originZ, float sizeX, float sizeY, float sizeZ) { public static final BoxComponent FULL_BLOCK = new BoxComponent(-8, 0, -8, 16, 16, 16); public static final BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); + /** + * Gets if the box component is empty + * + * @return If the box component is empty. + */ public boolean isEmpty() { return sizeX == 0 && sizeY == 0 && sizeZ == 0; } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 847205c6aaa..5e8c2c7b891 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -29,27 +29,101 @@ import java.util.Map; +/** + * This class is used to store components for a custom block or custom block permutation. + */ public interface CustomBlockComponents { + /** + * Gets the name component + * + * @return The name. + */ + @NonNull String name(); + + /** + * Gets the selection box component + * Equivalent to "minecraft:selection_box" + * + * @return The selection box. + */ BoxComponent selectionBox(); + /** + * Gets the collision box component + * Equivalent to "minecraft:collision_box" + * @return The collision box. + */ BoxComponent collisionBox(); - + + /** + * Gets the display name component + * Equivalent to "minecraft:display_name" + * + * @return The display name. + */ String displayName(); + /** + * Gets the geometry component + * Equivalent to "minecraft:geometry" + * + * @return The geometry. + */ String geometry(); + /** + * Gets the material instances component + * Equivalent to "minecraft:material_instances" + * + * @return The material instances. + */ @NonNull Map materialInstances(); + /** + * Gets the destructible by mining component + * Equivalent to "minecraft:destructible_by_mining" + * + * @return The destructible by mining value. + */ Float destructibleByMining(); + /** + * Gets the friction component + * Equivalent to "minecraft:friction" + * + * @return The friction value. + */ Float friction(); + /** + * Gets the light emission component + * Equivalent to "minecraft:light_emission" + * + * @return The light emission value. + */ Integer lightEmission(); + /** + * Gets the light dampening component + * Equivalent to "minecraft:light_dampening" + * + * @return The light dampening value. + */ Integer lightDampening(); + /** + * Gets the rotation component + * Equivalent to "minecraft:rotation" + * + * @return The rotation. + */ RotationComponent rotation(); + /** + * Gets if the block should place only air + * Equivalent to setting a dummy event to run on "minecraft:on_player_placing" + * @return If the block should place only air. + */ boolean placeAir(); interface Builder { diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index 19ba0906d5c..bea22d3215a 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -27,6 +27,9 @@ import org.checkerframework.checker.nullness.qual.NonNull; +/** + * This class is used to store a material instance for a custom block. + */ public record MaterialInstance(@NonNull String texture, @NonNull String renderMethod, boolean faceDimming, boolean ambientOcclusion) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java index 6fab3c1ba95..610b5365bf7 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java @@ -25,5 +25,8 @@ package org.geysermc.geyser.api.block.custom.component; +/** + * This class is used to store a rotation component for a custom block. + */ public record RotationComponent(int x, int y, int z) { } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java index 697cfe2680a..6cf90b320f5 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -29,6 +29,9 @@ import java.util.List; +/** + * This class is used to store a property of a custom block of a generic type. + */ public interface CustomBlockProperty { @NonNull String name(); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index e4ac0f339f4..099bc0a4522 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -27,6 +27,9 @@ import lombok.Getter; +/** + * This class is used to define a custom block property's type. + */ public class PropertyType { public static final PropertyType BOOLEAN = new PropertyType(Boolean.class); public static final PropertyType INTEGER = new PropertyType(Integer.class); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index b57bec8557e..bc8db82b8d2 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -30,9 +30,28 @@ import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.event.Event; +/** + * Called on Geyser's startup when looking for custom blocks. Custom blocks must be registered through this event. + * + * This event will not be called if the "add-custom-blocks" setting is disabled in the Geyser config. + */ public abstract class GeyserDefineCustomBlocksEvent implements Event { + /** + * Registers the given {@link CustomBlockData} as a custom block + * + * @param customBlockData the custom block to register + */ public abstract void registerCustomBlock(@NonNull CustomBlockData customBlockData); + /** + * Registers the given {@link CustomBlockState} as an override for the + * given java state identifier + * Java state identifiers are listed in + * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json + * + * @param javaIdentifier the java state identifier to override + * @param customBlockState the custom block state with which to override java state identifier + */ public abstract void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); } From 010e99d2dc3b2dfda52d47a4d58594e381b2fa42 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 19:46:33 -0800 Subject: [PATCH 041/134] Add tags --- .../component/CustomBlockComponents.java | 5 +++++ .../block/GeyserCustomBlockComponents.java | 20 +++++++++++++++++++ .../mappings/versions/MappingsReader_v1.java | 12 +++++++++++ .../CustomBlockRegistryPopulator.java | 3 +++ 4 files changed, 40 insertions(+) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 847205c6aaa..e3d5f081f90 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -28,6 +28,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Map; +import java.util.Set; public interface CustomBlockComponents { BoxComponent selectionBox(); @@ -52,6 +53,8 @@ public interface CustomBlockComponents { boolean placeAir(); + Set tags(); + interface Builder { Builder selectionBox(BoxComponent selectionBox); @@ -75,6 +78,8 @@ interface Builder { Builder placeAir(boolean placeAir); + Builder tags(Set tags); + CustomBlockComponents build(); } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 7af10c33545..dc9f6a39c56 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,7 +25,9 @@ package org.geysermc.geyser.level.block; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; @@ -53,6 +55,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { Integer lightDampening; RotationComponent rotation; boolean placeAir; + Set tags; private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; @@ -70,6 +73,11 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.lightDampening = builder.lightDampening; this.rotation = builder.rotation; this.placeAir = builder.placeAir; + if (builder.tags.isEmpty()) { + this.tags = Set.of(); + } else { + this.tags = Set.copyOf(builder.tags); + } } @Override @@ -127,6 +135,11 @@ public boolean placeAir() { return placeAir; } + @Override + public Set tags() { + return tags; + } + public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; @@ -139,6 +152,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected Integer lightDampening; protected RotationComponent rotation; protected boolean placeAir = false; + protected final Set tags = new HashSet<>(); private void validateBox(BoxComponent box) { if (box == null) { @@ -247,6 +261,12 @@ public Builder placeAir(boolean placeAir) { return this; } + @Override + public Builder tags(Set tags) { + this.tags.addAll(tags); + return this; + } + @Override public CustomBlockComponents build() { return new GeyserCustomBlockComponents(this); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 90a1eeadbb4..a2afc6b3ff2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -26,6 +26,8 @@ package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.base.CharMatcher; import org.geysermc.geyser.GeyserImpl; @@ -383,6 +385,16 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String } } + if (node.has("tags")) { + JsonNode tags = node.get("tags"); + if (tags.isArray()) { + ArrayNode tagsArray = (ArrayNode) tags; + Set tagsSet = new HashSet<>(); + tagsArray.forEach(tag -> tagsSet.add(tag.asText())); + builder.tags(tagsSet); + } + } + CustomBlockComponents components = builder.build(); return components; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 1858006f990..f3a75415c73 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -227,6 +227,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putString("triggerType", "geyser:place_event") .build()); } + if (!components.tags().isEmpty()) { + components.tags().forEach(tag -> builder.putCompound("tag:" + tag, NbtMap.EMPTY)); + } return builder.build(); } From 00837d97b2e19f733b76ca9ed7f5cd0aa57dba2e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 19:48:57 -0800 Subject: [PATCH 042/134] More docs --- .../api/block/custom/component/CustomBlockComponents.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 9c09e603171..c22038898f9 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -123,10 +123,17 @@ public interface CustomBlockComponents { /** * Gets if the block should place only air * Equivalent to setting a dummy event to run on "minecraft:on_player_placing" + * * @return If the block should place only air. */ boolean placeAir(); + /** + * Gets the set of tags + * Equivalent to "tag:some_tag" + * + * @return The set of tags. + */ Set tags(); interface Builder { From a8e60b6fbcd89c1a584b225087abd75bac5f23da Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 19:52:45 -0800 Subject: [PATCH 043/134] Accidentally added name comp. --- .../api/block/custom/component/CustomBlockComponents.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index c22038898f9..dad3bed30dc 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -34,12 +34,6 @@ * This class is used to store components for a custom block or custom block permutation. */ public interface CustomBlockComponents { - /** - * Gets the name component - * - * @return The name. - */ - @NonNull String name(); /** * Gets the selection box component From 880d8e528ed8a9d16ae3004b237b46b82f2c5f90 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 21:54:08 -0800 Subject: [PATCH 044/134] Fix collide box and warn for >16 props --- .../geyser/level/block/GeyserCustomBlockData.java | 9 ++++++--- .../registry/mappings/versions/MappingsReader_v1.java | 10 ++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index ba0fdf17dcc..a454687f3dc 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -26,10 +26,10 @@ package org.geysermc.geyser.level.block; import it.unimi.dsi.fastutil.objects.*; -import lombok.EqualsAndHashCode; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; @@ -63,12 +63,15 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { this.properties = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.properties)); Object2ObjectMap defaultProperties = new Object2ObjectOpenHashMap<>(this.properties.size()); for (CustomBlockProperty property : properties.values()) { - if (property.values().isEmpty() || property.values().size() > 16) { - throw new IllegalStateException(property.name() + " must contain 1 to 16 values."); + if (property.values().size() > 16) { + GeyserImpl.getInstance().getLogger().warning(property.name() + " contains more than 16 values, but BDS specifies it should not. This may break in future versions."); } if (property.values().stream().distinct().count() != property.values().size()) { throw new IllegalStateException(property.name() + " has duplicate values."); } + if (property.values().isEmpty()) { + throw new IllegalStateException(property.name() + " contains no values."); + } defaultProperties.put(property.name(), property.values().get(0)); } this.defaultProperties = Object2ObjectMaps.unmodifiable(defaultProperties); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index a2afc6b3ff2..99aa0890216 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.base.CharMatcher; @@ -286,7 +285,10 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState Set booleanValuesSet = new HashSet<>(); Map> stateKeyBools = new HashMap<>(); + for (String state : usedStateKeys) { + if (!state.contains("[")) continue; + String[] pairs = splitStateString(state); for (String pair : pairs) { @@ -411,9 +413,9 @@ private BoxComponent createBoxComponent(int id) { float cornerY = clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); float cornerZ = clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); - float sizeX = clamp((float) boundingBox.getSizeX() * 16, -8, 8); + float sizeX = clamp((float) boundingBox.getSizeX() * 16, 0, 16); float sizeY = clamp((float) boundingBox.getSizeY() * 16, 0, 16); - float sizeZ = clamp((float) boundingBox.getSizeZ() * 16, -8, 8); + float sizeZ = clamp((float) boundingBox.getSizeZ() * 16, 0, 16); BoxComponent boxComponent = new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); @@ -479,7 +481,7 @@ private String[] splitStateString(String state) { } public float clamp(float value, float min, float max) { - return Math.max(min, Math.min(value, max)); + return Math.max(min, Math.min(max, value)); } } From d019160939402d96df3fd37dd64b8c203b4b624b Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 5 Jan 2023 22:28:32 -0800 Subject: [PATCH 045/134] add registerBlockItemOverride event + refactor --- .../event/lifecycle/GeyserDefineCustomBlocksEvent.java | 9 +++++++++ .../geyser/registry/mappings/MappingsConfigReader.java | 2 +- .../registry/mappings/util}/CustomBlockMapping.java | 4 +++- .../registry/mappings/versions/MappingsReader.java | 2 +- .../registry/mappings/versions/MappingsReader_v1.java | 4 ++-- .../registry/populator/CustomBlockRegistryPopulator.java | 8 ++++++++ 6 files changed, 24 insertions(+), 5 deletions(-) rename {api/geyser/src/main/java/org/geysermc/geyser/api/block/custom => core/src/main/java/org/geysermc/geyser/registry/mappings/util}/CustomBlockMapping.java (90%) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index bc8db82b8d2..c821c593aae 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -54,4 +54,13 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param customBlockState the custom block state with which to override java state identifier */ public abstract void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); + + /** + * Registers the given {@link CustomBlockData} as an override for the + * given java item identifier + * + * @param javaIdentifier the java item identifier to override + * @param customBlockData the custom block data with which to override java item identifier + */ + public abstract void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index 3eb1955176a..039412957f2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -29,8 +29,8 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.item.custom.CustomItemData; +import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; import org.geysermc.geyser.registry.mappings.versions.MappingsReader; import org.geysermc.geyser.registry.mappings.versions.MappingsReader_v1; diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java similarity index 90% rename from api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java rename to core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index ccd5e8ad83a..a4a5253170e 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -23,11 +23,13 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.api.block.custom; +package org.geysermc.geyser.registry.mappings.util; import java.util.Map; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; /** * This class is used to store a custom block mappings, which contain all of the diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index a49e9fcc68e..d94f7825141 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -27,10 +27,10 @@ import com.fasterxml.jackson.databind.JsonNode; -import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; +import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; import java.nio.file.Path; import java.util.function.BiConsumer; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 99aa0890216..f72ef59865d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -31,7 +31,6 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockMapping; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.BoxComponent; @@ -47,6 +46,7 @@ import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; +import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.util.BlockUtils; @@ -480,7 +480,7 @@ private String[] splitStateString(String state) { return pairs; } - public float clamp(float value, float min, float max) { + private float clamp(float value, float min, float max) { return Math.max(min, Math.min(max, value)); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index f3a75415c73..3ff0ac58e54 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -72,6 +72,14 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); } } + + @Override + public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData) { + if (!customBlocks.contains(customBlockData)) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); + } + customBlockItemOverrides.put(javaIdentifier, customBlockData); + } }); for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { From 3d1d51d19820789bf7ea295f193ad5fbfb5f2195 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 15 Jan 2023 00:00:19 -0800 Subject: [PATCH 046/134] Inventory overrides for multistate bedrock blocks --- .../geyser/registry/populator/BlockRegistryPopulator.java | 6 +++++- .../geyser/registry/populator/ItemRegistryPopulator.java | 2 +- .../org/geysermc/geyser/registry/type/BlockMappings.java | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 366e0655679..ceacf8a2b30 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -164,6 +164,7 @@ public static void registerBedrockBlocks() { BiFunction stateMapper = blockMappers.getOrDefault(palette.getKey(), emptyMapper); int[] javaToBedrockBlocks = new int[BLOCKS_JSON.size()]; + int[] javaToVanillaBedrockBlocks = new int[BLOCKS_JSON.size()]; Map flowerPotBlocks = new Object2ObjectOpenHashMap<>(); Object2IntMap itemFrames = new Object2IntOpenHashMap<>(); @@ -175,11 +176,12 @@ public static void registerBedrockBlocks() { javaRuntimeId++; Map.Entry entry = blocksIterator.next(); String javaId = entry.getKey(); + int vanillaBedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1); int bedrockRuntimeId; CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(javaRuntimeId); if (blockStateOverride == null) { - bedrockRuntimeId = blockStateOrderedMap.getOrDefault(buildBedrockState(entry.getValue(), stateVersion, stateMapper), -1); + bedrockRuntimeId = vanillaBedrockRuntimeId; if (bedrockRuntimeId == -1) { throw new RuntimeException("Unable to find " + javaId + " Bedrock runtime ID! Built NBT tag: \n" + buildBedrockState(entry.getValue(), stateVersion, stateMapper)); @@ -218,6 +220,7 @@ public static void registerBedrockBlocks() { flowerPotBlocks.put(cleanJavaIdentifier.intern(), blockStates.get(bedrockRuntimeId)); } + javaToVanillaBedrockBlocks[javaRuntimeId] = vanillaBedrockRuntimeId; javaToBedrockBlocks[javaRuntimeId] = bedrockRuntimeId; } @@ -252,6 +255,7 @@ public static void registerBedrockBlocks() { BlockRegistries.BLOCKS.register(palette.getKey().valueInt(), builder.blockStateVersion(stateVersion) .javaToBedrockBlocks(javaToBedrockBlocks) + .javaToVanillaBedrockBlocks(javaToVanillaBedrockBlocks) .itemFrames(itemFrames) .flowerPotBlocks(flowerPotBlocks) .jigsawStateIds(jigsawStateIds) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index bfb34bca435..87d487ea65a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -375,7 +375,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { // and the last, if relevant. We then iterate over all those values and get their Bedrock equivalents Integer lastBlockRuntimeId = entry.getValue().getLastBlockRuntimeId() == null ? firstBlockRuntimeId : entry.getValue().getLastBlockRuntimeId(); for (int i = firstBlockRuntimeId; i <= lastBlockRuntimeId; i++) { - int bedrockBlockRuntimeId = blockMappings.getBedrockBlockId(i); + int bedrockBlockRuntimeId = blockMappings.getVanillaBedrockBlockId(i); NbtMap blockTag = blockMappings.getBedrockBlockStates().get(bedrockBlockRuntimeId); String bedrockName = blockTag.getString("name"); if (!bedrockName.equals(correctBedrockIdentifier)) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index e2e99d5e799..7c3cc0c79e4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -47,6 +47,7 @@ public class BlockMappings { int blockStateVersion; int[] javaToBedrockBlocks; + int[] javaToVanillaBedrockBlocks; NbtList bedrockBlockStates; int[] remappedVanillaIds; @@ -68,6 +69,13 @@ public int getBedrockBlockId(int state) { return this.javaToBedrockBlocks[state]; } + public int getVanillaBedrockBlockId(int state) { + if (state >= this.javaToVanillaBedrockBlocks.length) { + return bedrockAirId; + } + return this.javaToVanillaBedrockBlocks[state]; + } + public int getItemFrame(NbtMap tag) { return this.itemFrames.getOrDefault(tag, -1); } From bfdebadacc6f829743ea9d026146ed7dc77c0260 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 15 Jan 2023 04:24:52 -0800 Subject: [PATCH 047/134] Implement all remaining block components --- .../component/CustomBlockComponents.java | 22 +++++++ .../component/placementfilter/Conditions.java | 59 +++++++++++++++++ .../placementfilter/PlacementFilter.java | 37 +++++++++++ .../block/GeyserCustomBlockComponents.java | 29 +++++++++ .../mappings/versions/MappingsReader_v1.java | 63 ++++++++++++++++++- .../CustomBlockRegistryPopulator.java | 40 ++++++++++++ 6 files changed, 249 insertions(+), 1 deletion(-) create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index dad3bed30dc..1c284b38c11 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.api.block.custom.component; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import java.util.Map; import java.util.Set; @@ -74,6 +75,15 @@ public interface CustomBlockComponents { */ @NonNull Map materialInstances(); + + /** + * Gets the placement filter component + * Equivalent to "minecraft:material_instances" + * + * @return The placement filter. + */ + PlacementFilter placementFilter(); + /** * Gets the destructible by mining component * Equivalent to "minecraft:destructible_by_mining" @@ -114,6 +124,14 @@ public interface CustomBlockComponents { */ RotationComponent rotation(); + /** + * Gets the unit cube component + * Equivalent to "minecraft:unit_cube" + * + * @return The rotation. + */ + boolean unitCube(); + /** * Gets if the block should place only air * Equivalent to setting a dummy event to run on "minecraft:on_player_placing" @@ -141,6 +159,8 @@ interface Builder { Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); + Builder placementFilter(PlacementFilter placementFilter); + Builder destructibleByMining(Float destructibleByMining); Builder friction(Float friction); @@ -151,6 +171,8 @@ interface Builder { Builder rotation(RotationComponent rotation); + Builder unitCube(boolean unitCube); + Builder placeAir(boolean placeAir); Builder tags(Set tags); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java new file mode 100644 index 00000000000..b122385849b --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser +*/ + +package org.geysermc.geyser.api.block.custom.component.placementfilter; + +import java.util.LinkedHashMap; +import java.util.Set; + +import org.checkerframework.checker.nullness.qual.NonNull; + +/* + * This class is used to store conditions for a placement filter for a custom block. + */ +public record Conditions(@NonNull Set allowedFaces, @NonNull LinkedHashMap blockFilters) { + public enum Face { + DOWN(1), + UP(2), + NORTH(4), + SOUTH(8), + WEST(16), + EAST(32); + + private final byte value; + + Face(int value) { + this.value = (byte) value; + } + + public byte getValue() { + return value; + } + } + public enum BlockFilterType { + BLOCK, + TAG + } +} \ No newline at end of file diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java new file mode 100644 index 00000000000..14a25adeb85 --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component.placementfilter; + +import java.util.List; + +import org.checkerframework.checker.nullness.qual.NonNull; + +/* + * This class is used to store a placement filter for a custom block. + */ +public record PlacementFilter(@NonNull List conditions) { + +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index dc9f6a39c56..47ccb4f41ee 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import org.jetbrains.annotations.NotNull; import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; @@ -49,11 +50,13 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { String displayName; String geometry; Map materialInstances; + PlacementFilter placementFilter; Float destructibleByMining; Float friction; Integer lightEmission; Integer lightDampening; RotationComponent rotation; + boolean unitCube; boolean placeAir; Set tags; @@ -67,11 +70,13 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { } else { this.materialInstances = Object2ObjectMaps.unmodifiable(new Object2ObjectArrayMap<>(builder.materialInstances)); } + this.placementFilter = builder.placementFilter; this.destructibleByMining = builder.destructibleByMining; this.friction = builder.friction; this.lightEmission = builder.lightEmission; this.lightDampening = builder.lightDampening; this.rotation = builder.rotation; + this.unitCube = builder.unitCube; this.placeAir = builder.placeAir; if (builder.tags.isEmpty()) { this.tags = Set.of(); @@ -105,6 +110,11 @@ public String geometry() { return materialInstances; } + @Override + public PlacementFilter placementFilter() { + return placementFilter; + } + @Override public Float destructibleByMining() { return destructibleByMining; @@ -130,6 +140,11 @@ public RotationComponent rotation() { return rotation; } + @Override + public boolean unitCube() { + return unitCube; + } + @Override public boolean placeAir() { return placeAir; @@ -146,11 +161,13 @@ public static class CustomBlockComponentsBuilder implements Builder { protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); + protected PlacementFilter placementFilter; protected Float destructibleByMining; protected Float friction; protected Integer lightEmission; protected Integer lightDampening; protected RotationComponent rotation; + protected boolean unitCube = false; protected boolean placeAir = false; protected final Set tags = new HashSet<>(); @@ -204,6 +221,12 @@ public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance return this; } + @Override + public Builder placementFilter(PlacementFilter placementFilter) { + this.placementFilter = placementFilter; + return this; + } + @Override public Builder destructibleByMining(Float destructibleByMining) { if (destructibleByMining != null && destructibleByMining < 0) { @@ -255,6 +278,12 @@ public Builder rotation(RotationComponent rotation) { return this; } + @Override + public Builder unitCube(boolean unitCube) { + this.unitCube = unitCube; + return this; + } + @Override public Builder placeAir(boolean placeAir) { this.placeAir = placeAir; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index f72ef59865d..4e1cc23b6d5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -37,6 +37,10 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions; +import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; +import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.BlockFilterType; +import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.Face; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -56,6 +60,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -347,9 +352,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String builder.geometry(node.get("geometry").asText()); } + String displayName = name; if (node.has("display_name")) { - builder.displayName(node.get("display_name").asText()); + displayName = node.get("display_name").asText(); } + builder.displayName(displayName); if (node.has("light_emission")) { builder.lightEmission(node.get("light_emission").asInt()); @@ -373,6 +380,10 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String builder.rotation(new RotationComponent(rotationX, rotationY, rotationZ)); } + if (node.has("unit_cube")) { + builder.unitCube(node.get("unit_cube").asBoolean()); + } + if (node.has("material_instances")) { JsonNode materialInstances = node.get("material_instances"); if (materialInstances.isObject()) { @@ -387,6 +398,19 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String } } + if (node.has("placement_filter")) { + JsonNode placementFilter = node.get("placement_filter"); + if (placementFilter.isObject()) { + if (placementFilter.has("conditions")) { + JsonNode conditions = placementFilter.get("conditions"); + if (conditions.isArray()) { + PlacementFilter filter = createPlacementFilterComponent(conditions); + builder.placementFilter(filter); + } + } + } + } + if (node.has("tags")) { JsonNode tags = node.get("tags"); if (tags.isArray()) { @@ -446,6 +470,43 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n return new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion); } + private PlacementFilter createPlacementFilterComponent(JsonNode node) { + List conditions = new ArrayList<>(); + + node.forEach(condition -> { + Set faces = new HashSet<>(); + if (condition.has("allowed_faces")) { + JsonNode allowedFaces = condition.get("allowed_faces"); + if (allowedFaces.isArray()) { + allowedFaces.forEach(face -> { + faces.add(Face.valueOf(face.asText().toUpperCase())); + }); + } + } + + LinkedHashMap blockFilters = new LinkedHashMap<>(); + if (condition.has("block_filter")) { + JsonNode blockFilter = condition.get("block_filter"); + if (blockFilter.isArray()) { + blockFilter.forEach(filter -> { + if (filter.isObject()) { + if (filter.has("tags")) { + JsonNode tags = filter.get("tags"); + blockFilters.put(tags.asText(), BlockFilterType.TAG); + } + } else if (filter.isTextual()) { + blockFilters.put(filter.asText(), BlockFilterType.BLOCK); + } + }); + } + } + + conditions.add(new Conditions(faces, blockFilters)); + }); + + return new PlacementFilter(conditions); + } + private String createCustomBlockPropertyQuery(String state) { String[] conditions = splitStateString(state); String[] queries = new String[conditions.length]; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 3ff0ac58e54..a59af09d850 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -15,6 +15,8 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; +import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.Face; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; @@ -176,6 +178,11 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe return NbtMap.EMPTY; } NbtMapBuilder builder = NbtMap.builder(); + if (components.displayName() != null) { + builder.putCompound("minecraft:display_name", NbtMap.builder() + .putString("value", components.displayName()) + .build()); + } if (components.selectionBox() != null) { builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox())); } @@ -203,6 +210,11 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putCompound("materials", materialsBuilder.build()) .build()); } + if (components.placementFilter() != null) { + builder.putCompound("minecraft:placement_filter", NbtMap.builder() + .putList("conditions", NbtType.COMPOUND, convertPlacementFilter(components.placementFilter())) + .build()); + } if (components.destructibleByMining() != null) { builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() .putFloat("value", components.destructibleByMining()) @@ -230,6 +242,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putFloat("z", components.rotation().z()) .build()); } + if (components.unitCube()) { + builder.putCompound("minecraft:unit_cube", NbtMap.EMPTY); + } if (components.placeAir()) { builder.putCompound("minecraft:on_player_placing", NbtMap.builder() .putString("triggerType", "geyser:place_event") @@ -248,4 +263,29 @@ private static NbtMap convertBox(BoxComponent boxComponent) { .putList("size", NbtType.FLOAT, boxComponent.sizeX(), boxComponent.sizeY(), boxComponent.sizeZ()) .build(); } + + private static List convertPlacementFilter(PlacementFilter placementFilter) { + List conditions = new ArrayList<>(); + placementFilter.conditions().forEach((condition) -> { + NbtMapBuilder conditionBuilder = NbtMap.builder(); + + byte allowedFaces = 0; + for (Face face : condition.allowedFaces()) { allowedFaces |= face.getValue(); } + conditionBuilder.putByte("allowed_faces", allowedFaces); + + List blockFilters = new ArrayList<>(); + condition.blockFilters().forEach((value, type) -> { + NbtMapBuilder blockFilterBuilder = NbtMap.builder(); + switch (type) { + case BLOCK -> blockFilterBuilder.putString("name", value); + case TAG -> blockFilterBuilder.putString("tags", value).putInt("tags_version", 6); + } + blockFilters.add(blockFilterBuilder.build()); + }); + conditionBuilder.putList("block_filters", NbtType.COMPOUND, blockFilters); + conditions.add(conditionBuilder.build()); + }); + + return conditions; + } } From cc2e409f05bc14c6d6c1b0978595e4180764dece Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 15 Jan 2023 16:27:28 -0800 Subject: [PATCH 048/134] Minor cleanup and javadocs --- .../java/org/geysermc/geyser/Constants.java | 2 +- .../level/block/GeyserCustomBlockData.java | 2 +- .../mappings/versions/MappingsReader_v1.java | 152 +++++++++++++++++- .../CustomBlockRegistryPopulator.java | 58 ++++++- .../populator/ItemRegistryPopulator.java | 6 +- 5 files changed, 206 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 787f9c222a6..589bb66a77d 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -41,7 +41,7 @@ public final class Constants { static final String SAVED_REFRESH_TOKEN_FILE = "saved-refresh-tokens.json"; - public static final String GEYSER_NAMESPACE = "geyser:"; + public static final String GEYSER_NAMESPACE = "geyser_custom"; static { URI wsUri = null; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index a454687f3dc..de60c16fa9e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -94,7 +94,7 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { @Override public @NonNull String identifier() { - return Constants.GEYSER_NAMESPACE + name; + return Constants.GEYSER_NAMESPACE + ":" + name; } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 4e1cc23b6d5..5e06a7f3f83 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -29,6 +29,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.base.CharMatcher; +import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; @@ -178,6 +179,13 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa return customItemData.build(); } + /** + * Read a block mapping entry from a JSON node and java identifier + * @param identifier The java identifier of the block + * @param node The {@link JsonNode} containing the block mapping entry + * @return The {@link CustomBlockMapping} record to be read by {@link org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator#registerCustomBedrockBlocks} + * @throws InvalidCustomMappingsFileException If the JSON node is invalid + */ @Override public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException { if (node == null || !node.isObject()) { @@ -189,6 +197,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node throw new InvalidCustomMappingsFileException("A block entry has no name"); } + // If this is true, we will only register the states the user has specified rather than all of the blocks possible states boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); JsonNode stateOverrides = node.get("state_overrides"); @@ -199,6 +208,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node List stateKeys = new ArrayList<>(); + // Add the block's identifier to the object so we can use the resulting string to search the block mappings if (stateOverrides != null && stateOverrides.isObject()) { Iterator> fields = stateOverrides.fields(); while (fields.hasNext()) { @@ -206,54 +216,92 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node } } + // Find all the default states for the block we wish to override List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) .stream() .filter(s -> s.startsWith(identifier + "[")) .collect(Collectors.toList()); + // If no states were found, the block must only have one state, so we add its plain identifier if (defaultStates.isEmpty()) defaultStates.add(identifier); + // Create the data for the overall block CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); customBlockDataBuilder.name(name) + // We pass in the first state and just use the hitbox from that as the default + // Each state will have its own so this is fine .components(createCustomBlockComponents(node, defaultStates.get(0), name)) + // We must create permutation for every state override .permutations(createCustomBlockPermutations(stateOverrides, identifier, name)) - .booleanProperty("geyser_custom:default"); + // This property is use to display the default state when onlyOverrideStates is false + .booleanProperty(String.format("%s:default", Constants.GEYSER_NAMESPACE)); + // We need to have three property type maps, one for each type of block property + // Each contains the properties this block has for that type and its possible values, except for boolean since the values must be true/false + // If we are only overriding states, we pass in only the state keys supplied in the mapping + // Otherwise, we pass in all possible states for the block BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(onlyOverrideStates ? stateKeys : defaultStates); blockPropertyTypeMaps.stringValuesMap().forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList(value))); blockPropertyTypeMaps.intValuesMap().forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList(value))); blockPropertyTypeMaps.booleanValuesSet().forEach((value) -> customBlockDataBuilder.booleanProperty(value)); + // Finally, build the custom block data CustomBlockData customBlockData = customBlockDataBuilder.build(); - Map states = createCustomBlockStatesMap(identifier, stateKeys, defaultStates, onlyOverrideStates, customBlockData, + // Create a map of the custom block states for this block, which contains the full state identifier mapped to the custom block state data + Map states = createCustomBlockStatesMap(stateKeys, defaultStates, onlyOverrideStates, customBlockData, blockPropertyTypeMaps.stateKeyStrings(), blockPropertyTypeMaps.stateKeyInts(), blockPropertyTypeMaps.stateKeyBools()); + // Create the custom block mapping record to be passed into the custom block registry populator return new CustomBlockMapping(customBlockData, states, identifier, !onlyOverrideStates); } + /** + * Creates a list of {@link CustomBlockPermutation} from the given mappings node containing permutations, java identifier, and custom block name + * @param node an {@link JsonNode} from the mappings file containing the permutations + * @param identifier the java identifier of the block + * @param name the name of the custom block + * @return the list of custom block permutations + */ private List createCustomBlockPermutations(JsonNode node, String identifier, String name) { List permutations = new ArrayList<>(); + // Create a custom block permutation record for each permutation passed into the mappings for the given block if (node != null && node.isObject()) { node.fields().forEachRemaining(entry -> { String key = entry.getKey(); JsonNode value = entry.getValue(); if (value.isObject()) { + // Each permutation has its own components, which override the base components when explicitly set + // Based on the input states, we construct a molang query that will evaluate to true when the block properties corresponding to the state are active permutations.add(new CustomBlockPermutation(createCustomBlockComponents(value, (identifier + key), name), createCustomBlockPropertyQuery(key))); } }); } - permutations.add(new CustomBlockPermutation(new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), "q.block_property('geyser_custom:default') == 1")); + // We also need to create a permutation for the default state of the block with no components + // Functionally, this means the default components will be used + permutations.add(new CustomBlockPermutation(new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), String.format("q.block_property('%s:default') == 1", Constants.GEYSER_NAMESPACE))); return permutations; } - private Map createCustomBlockStatesMap(String identifier, List stateKeys,List defaultStates, boolean onlyOverrideStates, CustomBlockData customBlockData, + /** + * Create a map of java block state identifiers to {@link CustomBlockState} so that {@link #readBlockMappingEntry} can include it in the {@link CustomBlockMapping} record + * @param stateKeys the list of java block state identifiers explicitly passed in the mappings + * @param defaultStates the list of all possible java block state identifiers for the block + * @param onlyOverrideStates whether or not we are only overriding the states passed in the mappings + * @param customBlockData the {@link CustomBlockData} for the block + * @param stateKeyStrings the map of java block state identifiers to their string properties + * @param stateKeyInts the map of java block state identifiers to their int properties + * @param stateKeyBools the map of java block state identifiers to their boolean properties + * @return the custom block states maps + */ + private Map createCustomBlockStatesMap(List stateKeys,List defaultStates, boolean onlyOverrideStates, CustomBlockData customBlockData, Map> stateKeyStrings, Map> stateKeyInts, Map> stateKeyBools) { Map states = new HashMap<>(); + // If not only overriding specified states, we must include the default states in the custom block states map if (!onlyOverrideStates) { defaultStates.removeAll(stateKeys); createCustomBlockStates(defaultStates, true, customBlockData, stateKeyStrings, stateKeyInts, stateKeyBools, states); @@ -263,13 +311,25 @@ private Map createCustomBlockStatesMap(String identifi return states; } + /** + * Create the custom block states for the given state keys and append them to the passed states map + * @param stateKeys the list of java block state identifiers + * @param defaultState whether or not this is the default state + * @param customBlockData the {@link CustomBlockData} for the block + * @param stateKeyStrings the map of java block state identifiers to their string properties + * @param stateKeyInts the map of java block state identifiers to their int properties + * @param stateKeyBools the map of java block state identifiers to their boolean properties + * @param states the map of java block state identifiers to their {@link CustomBlockState} to append + */ private void createCustomBlockStates(List stateKeys, boolean defaultState, CustomBlockData customBlockData, Map> stateKeyStrings, Map> stateKeyInts, Map> stateKeyBools, Map states) { stateKeys.forEach((key) -> { CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); - builder.booleanProperty("geyser_custom:default", defaultState); + // We always include the default property, which is used to set the default state when onlyOverrideStates is false + builder.booleanProperty(String.format("%s:default", Constants.GEYSER_NAMESPACE), defaultState); + // The properties must be added to the builder seperately for each type stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); stateKeyBools.getOrDefault(key, Collections.emptyMap()).forEach((property, boolValue) -> builder.booleanProperty(property, boolValue)); @@ -280,7 +340,15 @@ private void createCustomBlockStates(List stateKeys, boolean defaultStat }); } + /** + * Creates a record of {@link BlockPropertyTypeMaps} for the given list of java block state identifiers that are being actively used by the custom block + * @param usedStateKeys the list of java block state identifiers that are being actively used by the custom block + * @return the {@link BlockPropertyTypeMaps} record + */ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedStateKeys) { + // Each of the three property type has two maps + // The first map is used to store the possible values for each property + // The second map is used to store the value for each property for each state Map> stringValuesMap = new HashMap<>(); Map> stateKeyStrings = new HashMap<>(); @@ -292,14 +360,19 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState for (String state : usedStateKeys) { + // No bracket means that there is only one state, so the maps should be empty if (!state.contains("[")) continue; + // Split the state string into an array containing each property=value pair String[] pairs = splitStateString(state); for (String pair : pairs) { + // Get the property and value individually String[] parts = pair.split("="); String property = parts[0]; String value = parts[1]; + + // Figure out what property type we are dealing with if (value.equals("true") || value.equals("false")) { booleanValuesSet.add(property); Map propertyMap = stateKeyBools.getOrDefault(state, new HashMap<>()); @@ -308,6 +381,7 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState } else if (CharMatcher.inRange('0', '9').matchesAllOf(value)) { int intValue = Integer.parseInt(value); LinkedHashSet values = intValuesMap.get(property); + // Initialize the property to values map if it doesn't exist if (values == null) { values = new LinkedHashSet<>(); intValuesMap.put(property, values); @@ -317,7 +391,9 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState propertyMap.put(property, intValue); stateKeyInts.put(state, propertyMap); } else { + // If it's n not a boolean or int it must be a string LinkedHashSet values = stringValuesMap.get(property); + // Initialize the property to values map if it doesn't exist if (values == null) { values = new LinkedHashSet<>(); stringValuesMap.put(property, values); @@ -329,14 +405,22 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState } } } + // We should now have all of the maps return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); } + /** + * Creates a {@link CustomBlockComponents} object for the passed permutation or base block node, java block state identifier, and custom block name + * @param node the permutation or base block {@link JsonNode} + * @param stateKey the java block state identifier + * @param name the custom block name + * @return the {@link CustomBlockComponents} object + */ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { + // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); - // .friction() BoxComponent boxComponent = createBoxComponent(id); builder.selectionBox(boxComponent).collisionBox(boxComponent); @@ -358,6 +442,10 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String } builder.displayName(displayName); + if (node.has("friction")) { + builder.friction(node.get("friction").floatValue()); + } + if (node.has("light_emission")) { builder.lightEmission(node.get("light_emission").asInt()); } @@ -411,6 +499,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String } } + // Tags can be applied so that blocks will match return true when queried for the tag + // Potentially useful for resource pack creators + // Ideally we could programatically extract the tags here https://wiki.bedrock.dev/blocks/block-tags.html + // This would let us automatically apply the correct valilla tags to blocks + // However, its worth noting that vanilla tools do not currently honor these tags anyways if (node.has("tags")) { JsonNode tags = node.get("tags"); if (tags.isArray()) { @@ -426,6 +519,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String return components; } + /** + * Creates the {@link BoxComponent} for the passed collision box index + * @param id the collision box index + * @return the {@link BoxComponent} + */ private BoxComponent createBoxComponent(int id) { BoundingBox boundingBox = BlockUtils.getCollision(id).getBoundingBoxes()[0]; @@ -433,6 +531,11 @@ private BoxComponent createBoxComponent(int id) { float offsetY = (float) boundingBox.getSizeY() * 8; float offsetZ = (float) boundingBox.getSizeZ() * 8; + // Unfortunately we need to clamp the values here to a an effective size of one block + // This is quite a pain for anything like fences, as the player can just jump over them + // One possible solution would be to create invisible blocks that we use only for collision box + // These could be placed above the block when a custom block exceeds this limit + // I am hopeful this will be extended slightly since the geometry of blocks can be 1.875^3 float cornerX = clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); float cornerY = clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); float cornerZ = clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); @@ -446,7 +549,15 @@ private BoxComponent createBoxComponent(int id) { return boxComponent; } + /** + * Creates the {@link MaterialInstance} for the passed material instance node and custom block name + * The name is used as a fallback if no texture is provided by the node + * @param node the material instance node + * @param name the custom block name + * @return the {@link MaterialInstance} + */ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String name) { + // Set default values, and use what the user provides if they have provided something String texture = name; if (node.has("texture")) { texture = node.get("texture").asText(); @@ -470,9 +581,16 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n return new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion); } + /** + * Creates the {@link PlacementFilter} for the passed conditions node + * @param node the conditions node + * @return the {@link PlacementFilter} + */ private PlacementFilter createPlacementFilterComponent(JsonNode node) { List conditions = new ArrayList<>(); + // The structure of the placement filter component is the most complex of the current components + // Each condition effectively seperated into an two arrays: one of allowed faces, and one of blocks/block molang queries node.forEach(condition -> { Set faces = new HashSet<>(); if (condition.has("allowed_faces")) { @@ -507,7 +625,13 @@ private PlacementFilter createPlacementFilterComponent(JsonNode node) { return new PlacementFilter(conditions); } + /** + * Creates a molang query that returns true when the given java state identifier is the active state + * @param state the java state identifier + * @return the molang query + */ private String createCustomBlockPropertyQuery(String state) { + // This creates a molang query from the given input blockstate string String[] conditions = splitStateString(state); String[] queries = new String[conditions.length]; @@ -527,10 +651,17 @@ private String createCustomBlockPropertyQuery(String state) { String query = String.join(" && ", queries); - return String.format("q.block_property('geyser_custom:default') == 0 && %s", query); + // Appends the default property to ensure it can be disabled when a state without specific overrides is active + return String.format("q.block_property('%1$s:default') == 0 && %2$s", Constants.GEYSER_NAMESPACE, query); } + /** + * Splits the given java state identifier into an array of property=value pairs + * @param state the java state identifier + * @return the array of property=value pairs + */ private String[] splitStateString(String state) { + // Split the given state string into an array of property=value pairs int openBracketIndex = state.indexOf("["); int closeBracketIndex = state.indexOf("]"); @@ -541,6 +672,13 @@ private String[] splitStateString(String state) { return pairs; } + /** + * Clamps the given value between the given min and max + * @param value the value to clamp + * @param min the minimum value + * @param max the maximum value + * @return the clamped value + */ private float clamp(float value, float min, float max) { return Math.max(min, Math.min(max, value)); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index a59af09d850..f3bf5f05241 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -35,6 +35,9 @@ public class CustomBlockRegistryPopulator { + /** + * Registers all custom blocks defined by extensions and user supplied mappings + */ public static void registerCustomBedrockBlocks() { if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { return; @@ -69,7 +72,6 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull } CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); if (oldBlockState != null) { - // TODO should this be an error? Allow extensions to query block state overrides? GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); } @@ -101,15 +103,23 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C }); BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); - GeyserImpl.getInstance().getLogger().debug("Registered " + customBlocks.size() + " custom blocks."); + GeyserImpl.getInstance().getLogger().info("Registered " + customBlocks.size() + " custom blocks."); BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); - GeyserImpl.getInstance().getLogger().debug("Registered " + blockStateOverrides.size() + " custom block overrides."); + GeyserImpl.getInstance().getLogger().info("Registered " + blockStateOverrides.size() + " custom block overrides."); BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); - GeyserImpl.getInstance().getLogger().debug("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); + GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); } + /** + * Generates and appends all custom block states to the provided list of custom block states + * Appends the custom block states to the provided list of NBT maps + * @param customBlock the custom block data to generate states for + * @param blockStates the list of NBT maps to append the custom block states to + * @param customExtBlockStates the list of custom block states to append the custom block states to + * @param stateVersion the state version to use for the custom block states + */ static void generateCustomBlockStates(CustomBlockData customBlock, List blockStates, List customExtBlockStates, int stateVersion) { int totalPermutations = 1; for (CustomBlockProperty property : customBlock.properties().values()) { @@ -134,6 +144,12 @@ static void generateCustomBlockStates(CustomBlockData customBlock, List } } + /** + * Generates and returns the block property data for the provided custom block + * @param customBlock the custom block to generate block property data for + * @param protocolVersion the protocol version to use for the block property data + * @return the block property data for the provided custom block + */ @SuppressWarnings("unchecked") static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, int protocolVersion) { List permutations = new ArrayList<>(); @@ -161,11 +177,15 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, NbtMap propertyTag = NbtMap.builder() .putCompound("components", CustomBlockRegistryPopulator.convertComponents(customBlock.components(), protocolVersion)) + // this is required or the client will crash + // in the future, this can be used to replace items in the creative inventory + // this would require us to map https://wiki.bedrock.dev/documentation/creative-categories.html#for-blocks programatically .putCompound("menu_category", NbtMap.builder() .putString("category", "none") .putString("group", "") .putBoolean("is_hidden_in_commands", false) .build()) + // meaning of this version is unknown, but it's required for tags to work and should probably be checked periodically .putInt("molangVersion", 1) .putList("permutations", NbtType.COMPOUND, permutations) .putList("properties", NbtType.COMPOUND, properties) @@ -173,6 +193,12 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, return new BlockPropertyData(customBlock.identifier(), propertyTag); } + /** + * Converts the provided custom block components to an {@link NbtMap} to be sent to the client in the StartGame packet + * @param components the custom block components to convert + * @param protocolVersion the protocol version to use for the conversion + * @return the NBT representation of the provided custom block components + */ static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { if (components == null) { return NbtMap.EMPTY; @@ -206,6 +232,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .build()); } builder.putCompound("minecraft:material_instances", NbtMap.builder() + // we could read these, but there is no functional reason to use them at the moment + // they only allow you to make aliases for material instances + // but you could already just define the same instance twice if this was really needed .putCompound("mappings", NbtMap.EMPTY) .putCompound("materials", materialsBuilder.build()) .build()); @@ -230,6 +259,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putInt("value", components.lightEmission()) .build()); } + // This is supposed to be sent as "light_dampening" since "block_light_filter" is the old value + // However, it seems they forgot to actually update it on the network despite all the documentation changing + // So we'll send this for now if (components.lightDampening() != null) { builder.putCompound("minecraft:block_light_filter", NbtMap.builder() .putByte("value", components.lightDampening().byteValue()) @@ -245,6 +277,9 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe if (components.unitCube()) { builder.putCompound("minecraft:unit_cube", NbtMap.EMPTY); } + // place_air is not an actual component + // We just apply a dummy event to prevent the client from trying to place a block + // This mitigates the issue with the client sometimes double placing blocks if (components.placeAir()) { builder.putCompound("minecraft:on_player_placing", NbtMap.builder() .putString("triggerType", "geyser:place_event") @@ -256,6 +291,11 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe return builder.build(); } + /** + * Converts the provided box component to an {@link NbtMap} + * @param boxComponent the box component to convert + * @return the NBT representation of the provided box component + */ private static NbtMap convertBox(BoxComponent boxComponent) { return NbtMap.builder() .putBoolean("enabled", !boxComponent.isEmpty()) @@ -264,20 +304,30 @@ private static NbtMap convertBox(BoxComponent boxComponent) { .build(); } + /** + * Converts the provided placement filter to a list of {@link NbtMap} + * @param placementFilter the placement filter to convert + * @return the NBT representation of the provided placement filter + */ private static List convertPlacementFilter(PlacementFilter placementFilter) { List conditions = new ArrayList<>(); placementFilter.conditions().forEach((condition) -> { NbtMapBuilder conditionBuilder = NbtMap.builder(); + // allowed_faces on the network is represented by 6 bits for the 6 possible faces + // the enum has the proper values for that face only, so we just bitwise OR them together byte allowedFaces = 0; for (Face face : condition.allowedFaces()) { allowedFaces |= face.getValue(); } conditionBuilder.putByte("allowed_faces", allowedFaces); + // block_filters is a list of either blocks or queries for block tags + // if these match the block the player is trying to place on, the placement is allowed by the client List blockFilters = new ArrayList<>(); condition.blockFilters().forEach((value, type) -> { NbtMapBuilder blockFilterBuilder = NbtMap.builder(); switch (type) { case BLOCK -> blockFilterBuilder.putString("name", value); + // meaning of this version is unknown, but it's required for tags to work and should probably be checked periodically case TAG -> blockFilterBuilder.putString("tags", value).putInt("tags_version", 6); } blockFilters.add(blockFilterBuilder.build()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 87d487ea65a..b307e9a04e5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -38,6 +38,7 @@ import java.util.Set; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -375,6 +376,9 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { // and the last, if relevant. We then iterate over all those values and get their Bedrock equivalents Integer lastBlockRuntimeId = entry.getValue().getLastBlockRuntimeId() == null ? firstBlockRuntimeId : entry.getValue().getLastBlockRuntimeId(); for (int i = firstBlockRuntimeId; i <= lastBlockRuntimeId; i++) { + // For now we opt to preserve the pre custom block phase and just use the vanilla blocks in the creative inventory + // In the future if we get the mappings for categories it we could put the custom blocks in the creative inventory + // This would likely also require changes to recipe handling int bedrockBlockRuntimeId = blockMappings.getVanillaBedrockBlockId(i); NbtMap blockTag = blockMappings.getBedrockBlockStates().get(bedrockBlockRuntimeId); String bedrockName = blockTag.getString("name"); @@ -504,7 +508,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { for (CustomItemData customItem : customItemsToLoad) { int customProtocolId = nextFreeBedrockId++; - String customItemName = "geyser_custom:" + customItem.name(); + String customItemName = Constants.GEYSER_NAMESPACE + ":" + customItem.name(); if (!registeredItemNames.add(customItemName)) { if (firstMappingsPass) { GeyserImpl.getInstance().getLogger().error("Custom item name '" + customItem.name() + "' already exists and was registered again! Skipping..."); From 2efdce481cf8d9e1d31905c5bbf05d646a9e22e0 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 15 Jan 2023 22:00:42 -0800 Subject: [PATCH 049/134] Update custom skull config example --- core/src/main/resources/custom-skulls.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/custom-skulls.yml b/core/src/main/resources/custom-skulls.yml index 6658c444812..99797b3809f 100644 --- a/core/src/main/resources/custom-skulls.yml +++ b/core/src/main/resources/custom-skulls.yml @@ -22,4 +22,4 @@ player-uuids: # The long string of characters found in the NBT of custom player heads textures: -# - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJkYXZjaG9vIiwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2E5MDc5MGM1N2UxODFlZDEzYWRlZDE0YzQ3ZWUyZjdjOGRlMzUzM2UwMTdiYTk1N2FmN2JkZjlkZjFiZGU5NGYiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ +# - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9 From b2d9095815450620c7efb021d8abaa283c049f46 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 17 Jan 2023 21:37:27 -0800 Subject: [PATCH 050/134] Address @Camotoy's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../custom/component/MaterialInstance.java | 1 - .../placementfilter/PlacementFilter.java | 1 - .../block/custom/property/PropertyType.java | 7 +- .../configuration/GeyserConfiguration.java | 4 -- .../GeyserJacksonConfiguration.java | 10 --- .../block/GeyserCustomBlockComponents.java | 17 +++-- .../geyser/pack/SkullResourcePackManager.java | 2 +- .../geysermc/geyser/registry/Registries.java | 18 ++++- .../mappings/versions/MappingsReader.java | 1 - .../populator/BlockRegistryPopulator.java | 44 ++++++------ .../CustomBlockRegistryPopulator.java | 28 ++++---- .../CustomSkullRegistryPopulator.java | 2 +- .../populator/ItemRegistryPopulator.java | 70 +++++++++---------- .../geyser/session/GeyserSession.java | 5 ++ .../inventory/item/ItemTranslator.java | 45 ++++++------ core/src/main/resources/config.yml | 3 +- 16 files changed, 125 insertions(+), 133 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index bea22d3215a..a14bb2ceffc 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -31,5 +31,4 @@ * This class is used to store a material instance for a custom block. */ public record MaterialInstance(@NonNull String texture, @NonNull String renderMethod, boolean faceDimming, boolean ambientOcclusion) { - } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java index 14a25adeb85..77e40bac4bc 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java @@ -33,5 +33,4 @@ * This class is used to store a placement filter for a custom block. */ public record PlacementFilter(@NonNull List conditions) { - } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 099bc0a4522..18afe962985 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -25,8 +25,6 @@ package org.geysermc.geyser.api.block.custom.property; -import lombok.Getter; - /** * This class is used to define a custom block property's type. */ @@ -35,9 +33,12 @@ public class PropertyType { public static final PropertyType INTEGER = new PropertyType(Integer.class); public static final PropertyType STRING = new PropertyType(String.class); - @Getter private final Class typeClass; + public Class getTypeClass() { + return typeClass; + } + private PropertyType(Class typeClass) { this.typeClass = typeClass; } diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index 73271d1dbc0..4843df72bd4 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -93,10 +93,6 @@ public interface GeyserConfiguration { boolean isAddNonBedrockItems(); - boolean isAddCustomBlocks(); - - boolean isAddCustomSkullBlocks(); - boolean isAboveBedrockNetherBuilding(); boolean isForceResourcePacks(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 9c05b6dedbc..dc675319bd9 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -142,12 +142,6 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration @JsonProperty("above-bedrock-nether-building") private boolean aboveBedrockNetherBuilding = false; - @JsonProperty("add-custom-blocks") - boolean addCustomBlocks = true; - - @JsonProperty("add-custom-skull-blocks") - boolean addCustomSkullBlocks = false; - @JsonProperty("force-resource-packs") private boolean forceResourcePacks = true; @@ -347,10 +341,6 @@ public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOEx @JsonProperty("config-version") private int configVersion = 0; - public boolean isAddCustomSkullBlocks() { - return addCustomBlocks && addCustomSkullBlocks; - } - /** * Ensure that the port deserializes in the config as a number no matter what. */ diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 47ccb4f41ee..cbe60eb47a6 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -25,10 +25,11 @@ package org.geysermc.geyser.level.block; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; @@ -37,11 +38,9 @@ import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import org.jetbrains.annotations.NotNull; -import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.Value; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; @Value public class GeyserCustomBlockComponents implements CustomBlockComponents { diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 199cd64f097..4c938ee2bdb 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -73,7 +73,7 @@ public static Path createResourcePack() { Path packPath = cachePath.resolve("player_skulls.mcpack"); File packFile = packPath.toFile(); - if (BlockRegistries.CUSTOM_SKULLS.get().isEmpty() || !GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()) { + if (BlockRegistries.CUSTOM_SKULLS.get().isEmpty() || !GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { packFile.delete(); // No need to keep resource pack return null; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index e1b23e37196..ecfc2cd0904 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -36,7 +36,6 @@ import com.nukkitx.protocol.bedrock.BedrockPacket; import com.nukkitx.protocol.bedrock.data.inventory.CraftingData; import com.nukkitx.protocol.bedrock.data.inventory.PotionMixData; - import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -44,7 +43,16 @@ import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.item.Enchantment.JavaEnchantment; import org.geysermc.geyser.inventory.recipe.GeyserRecipe; -import org.geysermc.geyser.registry.loader.*; +import org.geysermc.geyser.registry.loader.BiomeIdentifierRegistryLoader; +import org.geysermc.geyser.registry.loader.BlockEntityRegistryLoader; +import org.geysermc.geyser.registry.loader.EnchantmentRegistryLoader; +import org.geysermc.geyser.registry.loader.ParticleTypesRegistryLoader; +import org.geysermc.geyser.registry.loader.PotionMixRegistryLoader; +import org.geysermc.geyser.registry.loader.ProviderRegistryLoader; +import org.geysermc.geyser.registry.loader.RegistryLoaders; +import org.geysermc.geyser.registry.loader.SoundEventsRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundRegistryLoader; +import org.geysermc.geyser.registry.loader.SoundTranslatorRegistryLoader; import org.geysermc.geyser.registry.populator.ItemRegistryPopulator; import org.geysermc.geyser.registry.populator.PacketRegistryPopulator; import org.geysermc.geyser.registry.populator.RecipeRegistryPopulator; @@ -58,7 +66,11 @@ import org.geysermc.geyser.translator.sound.SoundInteractionTranslator; import org.geysermc.geyser.translator.sound.SoundTranslator; -import java.util.*; +import java.util.EnumMap; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; /** * Holds all the common registries in Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index d94f7825141..e76df2834d8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; - import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index ceacf8a2b30..da8511a7f89 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -25,28 +25,6 @@ package org.geysermc.geyser.registry.populator; -import java.io.DataInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Deque; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.function.BiFunction; -import java.util.zip.GZIPInputStream; - -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.level.block.BlockStateValues; -import org.geysermc.geyser.level.physics.PistonBehavior; -import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.type.BlockMapping; -import org.geysermc.geyser.registry.type.BlockMappings; -import org.geysermc.geyser.util.BlockUtils; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.common.collect.ImmutableMap; @@ -58,7 +36,6 @@ import com.nukkitx.protocol.bedrock.data.BlockPropertyData; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; - import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -66,6 +43,27 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectIntPair; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.level.block.BlockStateValues; +import org.geysermc.geyser.level.physics.PistonBehavior; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.BlockMapping; +import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.util.BlockUtils; + +import java.io.DataInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.zip.GZIPInputStream; /** * Populates the block registries. diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index f3bf5f05241..48a8a825948 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -1,11 +1,11 @@ package org.geysermc.geyser.registry.populator; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - +import com.nukkitx.nbt.NbtMap; +import com.nukkitx.nbt.NbtMapBuilder; +import com.nukkitx.nbt.NbtType; +import com.nukkitx.protocol.bedrock.data.BlockPropertyData; +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; @@ -15,8 +15,8 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; -import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.Face; +import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; @@ -25,13 +25,11 @@ import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; -import com.nukkitx.nbt.NbtMap; -import com.nukkitx.nbt.NbtMapBuilder; -import com.nukkitx.nbt.NbtType; -import com.nukkitx.protocol.bedrock.data.BlockPropertyData; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; public class CustomBlockRegistryPopulator { @@ -39,7 +37,7 @@ public class CustomBlockRegistryPopulator { * Registers all custom blocks defined by extensions and user supplied mappings */ public static void registerCustomBedrockBlocks() { - if (!GeyserImpl.getInstance().getConfig().isAddCustomBlocks()) { + if (!GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { return; } Set customBlockNames = new ObjectOpenHashSet<>(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index c0b24bc656c..bb2afce5b82 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -52,7 +52,7 @@ public static void populate() { SkullResourcePackManager.SKULL_SKINS.clear(); // Remove skins after reloading BlockRegistries.CUSTOM_SKULLS.set(Object2ObjectMaps.emptyMap()); - if (!GeyserImpl.getInstance().getConfig().isAddCustomSkullBlocks()) { + if (!GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index b307e9a04e5..17661e7606b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -25,41 +25,6 @@ package org.geysermc.geyser.registry.populator; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Base64; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; - -import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.Constants; -import org.geysermc.geyser.GeyserBootstrap; -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.item.custom.CustomItemData; -import org.geysermc.geyser.api.item.custom.CustomItemOptions; -import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; -import org.geysermc.geyser.event.type.GeyserDefineCustomItemsEventImpl; -import org.geysermc.geyser.inventory.item.StoredItemMappings; -import org.geysermc.geyser.item.GeyserCustomMappingData; -import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.mappings.MappingsConfigReader; -import org.geysermc.geyser.registry.type.BlockMappings; -import org.geysermc.geyser.registry.type.GeyserMappingItem; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.registry.type.ItemMappings; -import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; -import org.geysermc.geyser.registry.type.PaletteItem; -import org.geysermc.geyser.util.ItemUtils; -import org.geysermc.geyser.util.collection.FixedInt2IntMap; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Multimap; @@ -74,7 +39,6 @@ import com.nukkitx.protocol.bedrock.packet.StartGamePacket; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; - import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; @@ -89,6 +53,40 @@ import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectIntPair; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.Constants; +import org.geysermc.geyser.GeyserBootstrap; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.item.custom.CustomItemData; +import org.geysermc.geyser.api.item.custom.CustomItemOptions; +import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; +import org.geysermc.geyser.event.type.GeyserDefineCustomItemsEventImpl; +import org.geysermc.geyser.inventory.item.StoredItemMappings; +import org.geysermc.geyser.item.GeyserCustomMappingData; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.mappings.MappingsConfigReader; +import org.geysermc.geyser.registry.type.BlockMappings; +import org.geysermc.geyser.registry.type.GeyserMappingItem; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; +import org.geysermc.geyser.registry.type.PaletteItem; +import org.geysermc.geyser.util.ItemUtils; +import org.geysermc.geyser.util.collection.FixedInt2IntMap; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Base64; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; /** * Populates the item registries. diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index e9cd3833ed8..e01769ea61c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1491,10 +1491,15 @@ private void startGame() { startGamePacket.setMultiplayerCorrelationId(""); startGamePacket.setItemEntries(this.itemMappings.getItemEntries()); + // Needed for custom block mappings and custom skulls system startGamePacket.getBlockProperties().addAll(this.blockMappings.getBlockProperties()); + // See https://learn.microsoft.com/en-us/minecraft/creator/documents/experimentalfeaturestoggle for info on each experiment + // data_driven_items (Holiday Creator Features) is needed for blocks and items startGamePacket.getExperiments().add(new ExperimentData("data_driven_items", true)); + // Needed for block properties for states startGamePacket.getExperiments().add(new ExperimentData("upcoming_creator_features", true)); + // Needed for certain molang queries used in blocks and items startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); startGamePacket.setVanillaVersion("*"); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 7a801048478..b6235dba588 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -25,29 +25,6 @@ package org.geysermc.geyser.translator.inventory.item; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Nonnull; - -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.inventory.GeyserItemStack; -import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.type.CustomSkull; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.registry.type.ItemMappings; -import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.skin.SkinManager; -import org.geysermc.geyser.text.MinecraftLocale; -import org.geysermc.geyser.translator.text.MessageTranslator; -import org.geysermc.geyser.util.FileUtils; - import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag; import com.github.steveice10.opennbt.tag.builtin.ByteTag; @@ -67,11 +44,31 @@ import com.nukkitx.nbt.NbtMapBuilder; import com.nukkitx.nbt.NbtType; import com.nukkitx.protocol.bedrock.data.inventory.ItemData; - import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.inventory.GeyserItemStack; +import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.CustomSkull; +import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.skin.SkinManager; +import org.geysermc.geyser.text.MinecraftLocale; +import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.geyser.util.FileUtils; + +import javax.annotation.Nonnull; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; public abstract class ItemTranslator { private static final Int2ObjectMap ITEM_STACK_TRANSLATORS = new Int2ObjectOpenHashMap<>(); diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index c123e3cb19d..46ad9f73350 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -158,9 +158,10 @@ max-visible-custom-skulls: 128 # The radius in blocks around the player in which custom skulls are displayed. custom-skull-render-distance: 32 -# Whether to add (at this time, only) the furnace minecart as a separate item in the game, which normally does not exist in Bedrock Edition. +# Whether to add any items and blocks which normally does not exist in Bedrock Edition. # This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching. # If this is disabled, furnace minecart items will be mapped to hopper minecart items. +# Geyser's block, item, and skull mappings systems will also be disabled. # This option requires a restart of Geyser in order to change its setting. add-non-bedrock-items: true From 4ab26e0717e9f5fba9785da8a3da8e4c3a9d2799 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Mon, 16 Jan 2023 14:46:20 -0500 Subject: [PATCH 051/134] Fix light_emission and light_dampening components --- .../registry/populator/CustomBlockRegistryPopulator.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 48a8a825948..fae38cd1900 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -254,15 +254,12 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe } if (components.lightEmission() != null) { builder.putCompound("minecraft:light_emission", NbtMap.builder() - .putInt("value", components.lightEmission()) + .putByte("emission", components.lightEmission().byteValue()) .build()); } - // This is supposed to be sent as "light_dampening" since "block_light_filter" is the old value - // However, it seems they forgot to actually update it on the network despite all the documentation changing - // So we'll send this for now if (components.lightDampening() != null) { - builder.putCompound("minecraft:block_light_filter", NbtMap.builder() - .putByte("value", components.lightDampening().byteValue()) + builder.putCompound("minecraft:light_dampening", NbtMap.builder() + .putByte("lightLevel", components.lightDampening().byteValue()) .build()); } if (components.rotation() != null) { From 4d78503b7c193df2d523aab31e4da545151b32ce Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Mon, 16 Jan 2023 14:48:48 -0500 Subject: [PATCH 052/134] Remove redundant populate method and remove BLOCKS_JSON after last use --- .../geysermc/geyser/registry/BlockRegistries.java | 2 +- .../registry/populator/BlockRegistryPopulator.java | 12 +++--------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 4beeff34f69..67963ce26fc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -118,7 +118,7 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); - BlockRegistryPopulator.populate(); + BlockRegistryPopulator.registerJavaBlocks(); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); CustomBlockRegistryPopulator.registerCustomBedrockBlocks(); BlockRegistryPopulator.registerBedrockBlocks(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index da8511a7f89..c7e75190485 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -74,14 +74,6 @@ public final class BlockRegistryPopulator { */ private static JsonNode BLOCKS_JSON; - public static void populate() { - registerJavaBlocks(); - // CustomBlockRegistryPopulator.registerCustomBedrockBlocks() and registerBedrockBlocks() moved to BlockRegistries to ensure correct load order - - // Needs to be placed somewhere at some point - //BLOCKS_JSON = null; - } - public static void registerBedrockBlocks() { BiFunction emptyMapper = (bedrockIdentifier, statesBuilder) -> null; ImmutableMap, BiFunction> blockMappers = ImmutableMap., BiFunction>builder() @@ -262,9 +254,11 @@ public static void registerBedrockBlocks() { .customBlockStateIds(customBlockStateIds) .build()); } + + BLOCKS_JSON = null; } - private static void registerJavaBlocks() { + public static void registerJavaBlocks() { JsonNode blocksJson; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/blocks.json")) { blocksJson = GeyserImpl.JSON_MAPPER.readTree(stream); From 0f0308b6ef17209c8f82f2e362f175424b2d87e1 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Mon, 16 Jan 2023 15:22:05 -0500 Subject: [PATCH 053/134] Fix inventories with block state overrides not opening --- .../holder/BlockInventoryHolder.java | 21 ++++---- .../chest/DoubleChestInventoryTranslator.java | 52 ++++++++++--------- 2 files changed, 39 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index 3e0892be426..4d5ad375d69 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -76,15 +76,18 @@ public boolean prepareInventory(InventoryTranslator translator, GeyserSession se // (This could be a virtual inventory that the player is opening) if (checkInteractionPosition(session)) { // Then, check to see if the interacted block is valid for this inventory by ensuring the block state identifier is valid + // and the bedrock block is vanilla int javaBlockId = session.getGeyser().getWorldManager().getBlockAt(session, session.getLastInteractionBlockPosition()); - String[] javaBlockString = BlockRegistries.JAVA_IDENTIFIERS.get().getOrDefault(javaBlockId, "minecraft:air").split("\\["); - if (isValidBlock(javaBlockString)) { - // We can safely use this block - inventory.setHolderPosition(session.getLastInteractionBlockPosition()); - ((Container) inventory).setUsingRealBlock(true, javaBlockString[0]); - setCustomName(session, session.getLastInteractionBlockPosition(), inventory, javaBlockId); - - return true; + if (!BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get().containsKey(javaBlockId)) { + String[] javaBlockString = BlockRegistries.JAVA_IDENTIFIERS.get().getOrDefault(javaBlockId, "minecraft:air").split("\\["); + if (isValidBlock(javaBlockString)) { + // We can safely use this block + inventory.setHolderPosition(session.getLastInteractionBlockPosition()); + ((Container) inventory).setUsingRealBlock(true, javaBlockString[0]); + setCustomName(session, session.getLastInteractionBlockPosition(), inventory, javaBlockId); + + return true; + } } } @@ -96,7 +99,7 @@ public boolean prepareInventory(InventoryTranslator translator, GeyserSession se UpdateBlockPacket blockPacket = new UpdateBlockPacket(); blockPacket.setDataLayer(0); blockPacket.setBlockPosition(position); - blockPacket.setRuntimeId(session.getBlockMappings().getBedrockBlockId(defaultJavaBlockState)); + blockPacket.setRuntimeId(session.getBlockMappings().getVanillaBedrockBlockId(defaultJavaBlockState)); blockPacket.getFlags().addAll(UpdateBlockPacket.FLAG_ALL_PRIORITY); session.sendUpstreamPacket(blockPacket); inventory.setHolderPosition(position); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index fa20e6dbbc0..48fde47afad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -55,30 +55,32 @@ public boolean prepareInventory(GeyserSession session, Inventory inventory) { // See BlockInventoryHolder - same concept there except we're also dealing with a specific block state if (session.getLastInteractionPlayerPosition().equals(session.getPlayerEntity().getPosition())) { int javaBlockId = session.getGeyser().getWorldManager().getBlockAt(session, session.getLastInteractionBlockPosition()); - String[] javaBlockString = BlockRegistries.JAVA_IDENTIFIERS.get().getOrDefault(javaBlockId, "minecraft:air").split("\\["); - if (javaBlockString.length > 1 && (javaBlockString[0].equals("minecraft:chest") || javaBlockString[0].equals("minecraft:trapped_chest")) - && !javaBlockString[1].contains("type=single")) { - inventory.setHolderPosition(session.getLastInteractionBlockPosition()); - ((Container) inventory).setUsingRealBlock(true, javaBlockString[0]); - - NbtMapBuilder tag = NbtMap.builder() - .putString("id", "Chest") - .putInt("x", session.getLastInteractionBlockPosition().getX()) - .putInt("y", session.getLastInteractionBlockPosition().getY()) - .putInt("z", session.getLastInteractionBlockPosition().getZ()) - .putString("CustomName", inventory.getTitle()) - .putString("id", "Chest"); - - DoubleChestValue chestValue = BlockStateValues.getDoubleChestValues().get(javaBlockId); - DoubleChestBlockEntityTranslator.translateChestValue(tag, chestValue, - session.getLastInteractionBlockPosition().getX(), session.getLastInteractionBlockPosition().getZ()); - - BlockEntityDataPacket dataPacket = new BlockEntityDataPacket(); - dataPacket.setData(tag.build()); - dataPacket.setBlockPosition(session.getLastInteractionBlockPosition()); - session.sendUpstreamPacket(dataPacket); - - return true; + if (!BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get().containsKey(javaBlockId)) { + String[] javaBlockString = BlockRegistries.JAVA_IDENTIFIERS.get().getOrDefault(javaBlockId, "minecraft:air").split("\\["); + if (javaBlockString.length > 1 && (javaBlockString[0].equals("minecraft:chest") || javaBlockString[0].equals("minecraft:trapped_chest")) + && !javaBlockString[1].contains("type=single")) { + inventory.setHolderPosition(session.getLastInteractionBlockPosition()); + ((Container) inventory).setUsingRealBlock(true, javaBlockString[0]); + + NbtMapBuilder tag = NbtMap.builder() + .putString("id", "Chest") + .putInt("x", session.getLastInteractionBlockPosition().getX()) + .putInt("y", session.getLastInteractionBlockPosition().getY()) + .putInt("z", session.getLastInteractionBlockPosition().getZ()) + .putString("CustomName", inventory.getTitle()) + .putString("id", "Chest"); + + DoubleChestValue chestValue = BlockStateValues.getDoubleChestValues().get(javaBlockId); + DoubleChestBlockEntityTranslator.translateChestValue(tag, chestValue, + session.getLastInteractionBlockPosition().getX(), session.getLastInteractionBlockPosition().getZ()); + + BlockEntityDataPacket dataPacket = new BlockEntityDataPacket(); + dataPacket.setData(tag.build()); + dataPacket.setBlockPosition(session.getLastInteractionBlockPosition()); + session.sendUpstreamPacket(dataPacket); + + return true; + } } } @@ -88,7 +90,7 @@ public boolean prepareInventory(GeyserSession session, Inventory inventory) { } Vector3i pairPosition = position.add(Vector3i.UNIT_X); - int bedrockBlockId = session.getBlockMappings().getBedrockBlockId(defaultJavaBlockState); + int bedrockBlockId = session.getBlockMappings().getVanillaBedrockBlockId(defaultJavaBlockState); UpdateBlockPacket blockPacket = new UpdateBlockPacket(); blockPacket.setDataLayer(0); From 9007ee46306a8cbe073257b75e13b9791895428e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 21 Jan 2023 22:44:47 -0800 Subject: [PATCH 054/134] API event for skull blocks & let register via URL Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../GeyserDefineCustomBlocksEvent.java | 2 +- .../GeyserDefineCustomSkullsEvent.java | 28 ++++ .../GeyserCustomSkullConfiguration.java | 15 +- .../CustomSkullRegistryPopulator.java | 140 +++++++++++++----- core/src/main/resources/config.yml | 10 -- core/src/main/resources/custom-skulls.yml | 6 +- 6 files changed, 144 insertions(+), 57 deletions(-) create mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index c821c593aae..e95117105c9 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -33,7 +33,7 @@ /** * Called on Geyser's startup when looking for custom blocks. Custom blocks must be registered through this event. * - * This event will not be called if the "add-custom-blocks" setting is disabled in the Geyser config. + * This event will not be called if the "add-non-bedrock-items" setting is disabled in the Geyser config. */ public abstract class GeyserDefineCustomBlocksEvent implements Event { diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java new file mode 100644 index 00000000000..e6e48d9d41f --- /dev/null +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java @@ -0,0 +1,28 @@ +package org.geysermc.geyser.api.event.lifecycle; + +import lombok.NonNull; +import org.geysermc.event.Event; + +/** + * Called on Geyser's startup when looking for custom skulls. Custom skulls must be registered through this event. + * + * This event will not be called if the "add-non-bedrock-items" setting is disabled in the Geyser config. + */ +public abstract class GeyserDefineCustomSkullsEvent implements Event { + /** + * The type of texture provided + */ + public enum SkullTextureType { + USERNAME, + UUID, + PROFILE, + SKIN_URL + } + + /** + * Registers the given username, UUID, or base64 encoded profile as a custom skull blocks + * @param texture the username, UUID, or base64 encoded profile + * @param type the type of texture provided + */ + public abstract void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureType type); +} diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java index 497fb37ed82..6199dfcb8ef 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java @@ -41,8 +41,11 @@ public class GeyserCustomSkullConfiguration { @JsonProperty("player-uuids") private List playerUUIDs; - @JsonProperty("textures") - private List textures; + @JsonProperty("player-profiles") + private List playerProfiles; + + @JsonProperty("skin-urls") + private List skinUrls; public List getPlayerUsernames() { return Objects.requireNonNullElse(playerUsernames, Collections.emptyList()); @@ -52,7 +55,11 @@ public List getPlayerUUIDs() { return Objects.requireNonNullElse(playerUUIDs, Collections.emptyList()); } - public List getTextures() { - return Objects.requireNonNullElse(textures, Collections.emptyList()); + public List getPlayerProfiles() { + return Objects.requireNonNullElse(playerProfiles, Collections.emptyList()); + } + + public List getPlayerSkinUrls() { + return Objects.requireNonNullElse(skinUrls, Collections.emptyList()); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index bb2afce5b82..89bbb46a3e3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -27,8 +27,10 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomSkullsEvent; import org.geysermc.geyser.configuration.GeyserCustomSkullConfiguration; import org.geysermc.geyser.pack.SkullResourcePackManager; import org.geysermc.geyser.registry.BlockRegistries; @@ -69,58 +71,114 @@ public static void populate() { BlockRegistries.CUSTOM_SKULLS.set(new Object2ObjectOpenHashMap<>()); - List textures = new ArrayList<>(skullConfig.getTextures()); - // TODO see if this can be cleaned up any better - for (String username : skullConfig.getPlayerUsernames()) { - try { - String texture = SkinProvider.requestTexturesFromUsername(username).get(); - if (texture == null) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block."); - continue; + List profiles = new ArrayList<>(skullConfig.getPlayerProfiles()); + + List usernames = new ArrayList<>(skullConfig.getPlayerUsernames()); + + List uuids = new ArrayList<>(skullConfig.getPlayerUUIDs()); + + List skinUrls = new ArrayList<>(skullConfig.getPlayerSkinUrls()); + + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomSkullsEvent() { + @Override + public void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureType type) { + switch (type) { + case USERNAME -> usernames.add(texture); + case UUID -> uuids.add(texture); + case PROFILE -> profiles.add(texture); + case SKIN_URL -> skinUrls.add(texture); } - textures.add(texture); - } catch (InterruptedException | ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block.", e); } - } - for (String uuid : skullConfig.getPlayerUUIDs()) { - try { - String uuidDigits = uuid.replace("-", ""); - if (uuidDigits.length() != 32) { - GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); - continue; + }); + + for (String username : usernames) { + String profile = getProfileFromUsername(username); + if (profile != null) { + String skinUrl = getSkinUrl(profile); + if (skinUrl != null) { + skinUrls.add(skinUrl); } - String texture = SkinProvider.requestTexturesFromUUID(uuid).get(); - if (texture == null) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block."); - continue; + } + } + for (String uuid : uuids) { + String profile = getProfileFromUuid(uuid); + if (profile != null) { + String skinUrl = getSkinUrl(profile); + if (skinUrl != null) { + skinUrls.add(skinUrl); } - textures.add(texture); - } catch (InterruptedException | ExecutionException e) { - GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); } } - for (String texture : textures) { + for (String profile : profiles) { + String skinUrl = getSkinUrl(profile); + if (skinUrl != null) { + skinUrls.add(skinUrl); + } + } + + for (String skinUrl : skinUrls) { try { - SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(texture); - if (profileData == null) { - GeyserImpl.getInstance().getLogger().warning("Skull texture " + texture + " contained no skins and will not be added as a custom block."); - continue; - } - try { - String skinUrl = profileData.skinUrl(); - String skinHash = skinUrl.substring(skinUrl.lastIndexOf("/") + 1); - SkullResourcePackManager.cacheSkullSkin(skinUrl, skinHash); - BlockRegistries.CUSTOM_SKULLS.register(skinHash, new CustomSkull(skinHash)); - } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + texture + " This skull will not be added as a custom block.", e); - } + String skinHash = skinUrl.substring(skinUrl.lastIndexOf("/") + 1); + SkullResourcePackManager.cacheSkullSkin(skinUrl, skinHash); + BlockRegistries.CUSTOM_SKULLS.register(skinHash, new CustomSkull(skinHash)); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Skull texture " + texture + " is invalid and will not be added as a custom block.", e); + GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + skinUrl + " This skull will not be added as a custom block.", e); } } - GeyserImpl.getInstance().getLogger().debug("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); + GeyserImpl.getInstance().getLogger().info("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); + } + + /** + * Gets the skin URL from a base64 encoded profile + * @param profile the base64 encoded profile + * @return the skin URL or null if the profile is invalid + */ + private static String getSkinUrl(String profile) { + try { + SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(profile); + if (profileData == null) { + GeyserImpl.getInstance().getLogger().warning("Skull texture " + profile + " contained no skins and will not be added as a custom block."); + return null; + } + return profileData.skinUrl(); + } catch (IOException e) { + GeyserImpl.getInstance().getLogger().error("Skull texture " + profile + " is invalid and will not be added as a custom block.", e); + return null; + } + } + + /** + * Gets the base64 encoded profile from a player's username + * @param username the player username + * @return the base64 encoded profile or null if the request failed + */ + private static String getProfileFromUsername(String username) { + try { + return SkinProvider.requestTexturesFromUsername(username).get(); + } catch (InterruptedException | ExecutionException e) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + username + " This skull will not be added as a custom block.", e); + return null; + } + } + + /** + * Gets the base64 encoded profile from a player's UUID + * @param uuid the player UUID + * @return the base64 encoded profile or null if the request failed + */ + private static String getProfileFromUuid(String uuid) { + try { + String uuidDigits = uuid.replace("-", ""); + if (uuidDigits.length() != 32) { + GeyserImpl.getInstance().getLogger().error("Invalid skull uuid " + uuid + " This skull will not be added as a custom block."); + return null; + } + return SkinProvider.requestTexturesFromUUID(uuid).get(); + } catch (InterruptedException | ExecutionException e) { + GeyserImpl.getInstance().getLogger().error("Unable to request skull textures for " + uuid + " This skull will not be added as a custom block.", e); + return null; + } } } diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 46ad9f73350..94a7a7f08b5 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -165,16 +165,6 @@ custom-skull-render-distance: 32 # This option requires a restart of Geyser in order to change its setting. add-non-bedrock-items: true -# Whether to allow custom blocks to be added. -# This should only need to be disabled if using a proxy that does not use the "transfer packet" style of server switching. -add-custom-blocks: true - -# Whether to allow some custom skulls to be translated as custom blocks and displayed in the inventory and on entities. -# This requires `add-custom-blocks` and `allow-custom-skulls` to be enabled. -# This will generate a resource pack for Bedrock players and enables `force-resource-packs`. -# Custom skulls can be added in `custom-skulls.yml` -add-custom-skull-blocks: false - # Bedrock prevents building and displaying blocks above Y127 in the Nether. # This config option works around that by changing the Nether dimension ID to the End ID. # The main downside to this is that the entire Nether will have the same red fog rather than having different fog for each biome. diff --git a/core/src/main/resources/custom-skulls.yml b/core/src/main/resources/custom-skulls.yml index 99797b3809f..4f5e2ce1b2d 100644 --- a/core/src/main/resources/custom-skulls.yml +++ b/core/src/main/resources/custom-skulls.yml @@ -21,5 +21,9 @@ player-uuids: # - 8b8d8e8f-2759-47c6-acb5-5827de8a72b8 # The long string of characters found in the NBT of custom player heads -textures: +player-profiles: # - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9 + +# The URL of the skin on Minecraft's skin server +skin-urls: +# - http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f \ No newline at end of file From a25ee6c96d866d35bec0166e81c795b54c86fa2d Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 23 Jan 2023 21:41:17 -0800 Subject: [PATCH 055/134] Use skin hash instead of URL Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../GeyserDefineCustomSkullsEvent.java | 6 +- .../java/org/geysermc/geyser/Constants.java | 2 + .../GeyserCustomSkullConfiguration.java | 8 +-- .../geyser/pack/SkullResourcePackManager.java | 4 +- .../CustomSkullRegistryPopulator.java | 61 ++++++++++--------- core/src/main/resources/custom-skulls.yml | 6 +- 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java index e6e48d9d41f..e568f5c31f1 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java @@ -16,12 +16,12 @@ public enum SkullTextureType { USERNAME, UUID, PROFILE, - SKIN_URL + SKIN_HASH } /** - * Registers the given username, UUID, or base64 encoded profile as a custom skull blocks - * @param texture the username, UUID, or base64 encoded profile + * Registers the given username, UUID, base64 encoded profile, or skin hash as a custom skull blocks + * @param texture the username, UUID, base64 encoded profile, or skin hash * @param type the type of texture provided */ public abstract void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureType type); diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 589bb66a77d..588a8ad5118 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -43,6 +43,8 @@ public final class Constants { public static final String GEYSER_NAMESPACE = "geyser_custom"; + public static final String MINECRAFT_SKIN_SERVER_URL = "http://textures.minecraft.net/texture/"; + static { URI wsUri = null; try { diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java index 6199dfcb8ef..1af3578a348 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java @@ -44,8 +44,8 @@ public class GeyserCustomSkullConfiguration { @JsonProperty("player-profiles") private List playerProfiles; - @JsonProperty("skin-urls") - private List skinUrls; + @JsonProperty("skin-hashes") + private List skinHashes; public List getPlayerUsernames() { return Objects.requireNonNullElse(playerUsernames, Collections.emptyList()); @@ -59,7 +59,7 @@ public List getPlayerProfiles() { return Objects.requireNonNullElse(playerProfiles, Collections.emptyList()); } - public List getPlayerSkinUrls() { - return Objects.requireNonNullElse(skinUrls, Collections.emptyList()); + public List getPlayerSkinHashes() { + return Objects.requireNonNullElse(skinHashes, Collections.emptyList()); } } diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 4c938ee2bdb..82125145499 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -27,6 +27,7 @@ import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.CustomSkull; @@ -99,7 +100,8 @@ public static Path createResourcePack() { return null; } - public static void cacheSkullSkin(String skinUrl, String skinHash) throws IOException { + public static void cacheSkullSkin(String skinHash) throws IOException { + String skinUrl = Constants.MINECRAFT_SKIN_SERVER_URL + skinHash; Path skinPath = SKULL_SKINS.get(skinHash); if (skinPath != null) { return; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 89bbb46a3e3..6210f10818e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -72,12 +72,9 @@ public static void populate() { BlockRegistries.CUSTOM_SKULLS.set(new Object2ObjectOpenHashMap<>()); List profiles = new ArrayList<>(skullConfig.getPlayerProfiles()); - List usernames = new ArrayList<>(skullConfig.getPlayerUsernames()); - List uuids = new ArrayList<>(skullConfig.getPlayerUUIDs()); - - List skinUrls = new ArrayList<>(skullConfig.getPlayerSkinUrls()); + List skinHashes = new ArrayList<>(skullConfig.getPlayerSkinHashes()); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomSkullsEvent() { @Override @@ -86,63 +83,69 @@ public void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureTy case USERNAME -> usernames.add(texture); case UUID -> uuids.add(texture); case PROFILE -> profiles.add(texture); - case SKIN_URL -> skinUrls.add(texture); + case SKIN_HASH -> skinHashes.add(texture); } } }); - for (String username : usernames) { + usernames.forEach((username) -> { String profile = getProfileFromUsername(username); if (profile != null) { - String skinUrl = getSkinUrl(profile); - if (skinUrl != null) { - skinUrls.add(skinUrl); + String skinHash = getSkinHash(profile); + if (skinHash != null) { + skinHashes.add(skinHash); } } - } - for (String uuid : uuids) { + }); + + uuids.forEach((uuid) -> { String profile = getProfileFromUuid(uuid); if (profile != null) { - String skinUrl = getSkinUrl(profile); - if (skinUrl != null) { - skinUrls.add(skinUrl); + String skinHash = getSkinHash(profile); + if (skinHash != null) { + skinHashes.add(skinHash); } } - } + }); - for (String profile : profiles) { - String skinUrl = getSkinUrl(profile); - if (skinUrl != null) { - skinUrls.add(skinUrl); + profiles.forEach((profile) -> { + String skinHash = getSkinHash(profile); + if (skinHash != null) { + skinHashes.add(skinHash); + } + }); + + skinHashes.forEach((skinHash) -> { + if (!skinHash.matches("^[a-fA-F0-9]{64}$")) { + GeyserImpl.getInstance().getLogger().error("Skin hash " + skinHash + " does not match required format ^[a-fA-F0-9]{64}$ and will not be added as a custom block."); + return; } - } - for (String skinUrl : skinUrls) { try { - String skinHash = skinUrl.substring(skinUrl.lastIndexOf("/") + 1); - SkullResourcePackManager.cacheSkullSkin(skinUrl, skinHash); + SkullResourcePackManager.cacheSkullSkin(skinHash); BlockRegistries.CUSTOM_SKULLS.register(skinHash, new CustomSkull(skinHash)); } catch (IOException e) { - GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + skinUrl + " This skull will not be added as a custom block.", e); + GeyserImpl.getInstance().getLogger().error("Failed to cache skin for skull texture " + skinHash + " This skull will not be added as a custom block.", e); } - } + }); GeyserImpl.getInstance().getLogger().info("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); } /** - * Gets the skin URL from a base64 encoded profile + * Gets the skin hash from a base64 encoded profile * @param profile the base64 encoded profile - * @return the skin URL or null if the profile is invalid + * @return the skin hash or null if the profile is invalid */ - private static String getSkinUrl(String profile) { + private static String getSkinHash(String profile) { try { SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(profile); if (profileData == null) { GeyserImpl.getInstance().getLogger().warning("Skull texture " + profile + " contained no skins and will not be added as a custom block."); return null; } - return profileData.skinUrl(); + String skinUrl = profileData.skinUrl(); + return skinUrl.substring(skinUrl.lastIndexOf("/") + 1); } catch (IOException e) { GeyserImpl.getInstance().getLogger().error("Skull texture " + profile + " is invalid and will not be added as a custom block.", e); return null; diff --git a/core/src/main/resources/custom-skulls.yml b/core/src/main/resources/custom-skulls.yml index 4f5e2ce1b2d..22d08d26307 100644 --- a/core/src/main/resources/custom-skulls.yml +++ b/core/src/main/resources/custom-skulls.yml @@ -24,6 +24,6 @@ player-uuids: player-profiles: # - ewogICJ0aW1lc3RhbXAiIDogMTY1NzMyMjIzOTgzMywKICAicHJvZmlsZUlkIiA6ICJjZGRiZTUyMGQwNDM0YThiYTFjYzlmYzkyZmRlMmJjZiIsCiAgInByb2ZpbGVOYW1lIiA6ICJBbWJlcmljaHUiLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTkwNzkwYzU3ZTE4MWVkMTNhZGVkMTRjNDdlZTJmN2M4ZGUzNTMzZTAxN2JhOTU3YWY3YmRmOWRmMWJkZTk0ZiIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9 -# The URL of the skin on Minecraft's skin server -skin-urls: -# - http://textures.minecraft.net/texture/a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f \ No newline at end of file +# The hash of the skin on Minecraft's skin server (http://textures.minecraft.net/texture/HASH) +skin-hashes: +# - a90790c57e181ed13aded14c47ee2f7c8de3533e017ba957af7bdf9df1bde94f \ No newline at end of file From 57c90da15b4f38b37dbc70cb389260d98d24ac69 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 29 Jan 2023 13:44:05 -0800 Subject: [PATCH 056/134] Address @davchoo's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../component/CustomBlockComponents.java | 8 +- ...nditions.java => PlacementConditions.java} | 12 +- .../placementfilter/PlacementFilter.java | 36 ------ .../block/custom/property/PropertyType.java | 2 +- .../GeyserDefineCustomSkullsEvent.java | 2 +- .../java/org/geysermc/geyser/Constants.java | 2 +- .../block/GeyserCustomBlockComponents.java | 11 +- .../mappings/versions/MappingsReader_v1.java | 104 ++++++++++++------ .../CustomBlockRegistryPopulator.java | 10 +- 9 files changed, 91 insertions(+), 96 deletions(-) rename api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/{placementfilter/Conditions.java => PlacementConditions.java} (83%) delete mode 100644 api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 1c284b38c11..a903d167665 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -26,8 +26,8 @@ package org.geysermc.geyser.api.block.custom.component; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; +import java.util.List; import java.util.Map; import java.util.Set; @@ -78,11 +78,11 @@ public interface CustomBlockComponents { /** * Gets the placement filter component - * Equivalent to "minecraft:material_instances" + * Equivalent to "minecraft:placement_filter" * * @return The placement filter. */ - PlacementFilter placementFilter(); + List placementFilter(); /** * Gets the destructible by mining component @@ -159,7 +159,7 @@ interface Builder { Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); - Builder placementFilter(PlacementFilter placementFilter); + Builder placementFilter(List placementConditions); Builder destructibleByMining(Float destructibleByMining); diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java similarity index 83% rename from api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java rename to api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index b122385849b..3b102987aeb 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/Conditions.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -23,7 +23,7 @@ * @link https://github.com/GeyserMC/Geyser */ -package org.geysermc.geyser.api.block.custom.component.placementfilter; +package org.geysermc.geyser.api.block.custom.component; import java.util.LinkedHashMap; import java.util.Set; @@ -33,7 +33,7 @@ /* * This class is used to store conditions for a placement filter for a custom block. */ -public record Conditions(@NonNull Set allowedFaces, @NonNull LinkedHashMap blockFilters) { +public record PlacementConditions(@NonNull Set allowedFaces, @NonNull LinkedHashMap blockFilters) { public enum Face { DOWN(1), UP(2), @@ -42,14 +42,8 @@ public enum Face { WEST(16), EAST(32); - private final byte value; - Face(int value) { - this.value = (byte) value; - } - - public byte getValue() { - return value; + value = (byte) value; } } public enum BlockFilterType { diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java deleted file mode 100644 index 77e40bac4bc..00000000000 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/component/placementfilter/PlacementFilter.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.block.custom.component.placementfilter; - -import java.util.List; - -import org.checkerframework.checker.nullness.qual.NonNull; - -/* - * This class is used to store a placement filter for a custom block. - */ -public record PlacementFilter(@NonNull List conditions) { -} diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 18afe962985..6fbbe9340d4 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -35,7 +35,7 @@ public class PropertyType { private final Class typeClass; - public Class getTypeClass() { + public Class typeClass() { return typeClass; } diff --git a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java index e568f5c31f1..bdb7db6c31c 100644 --- a/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java +++ b/api/geyser/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java @@ -1,6 +1,6 @@ package org.geysermc.geyser.api.event.lifecycle; -import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.event.Event; /** diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 588a8ad5118..040d408c52b 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -43,7 +43,7 @@ public final class Constants { public static final String GEYSER_NAMESPACE = "geyser_custom"; - public static final String MINECRAFT_SKIN_SERVER_URL = "http://textures.minecraft.net/texture/"; + public static final String MINECRAFT_SKIN_SERVER_URL = "https://textures.minecraft.net/texture/"; static { URI wsUri = null; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index cbe60eb47a6..ef4679a4f98 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -34,11 +34,12 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.RotationComponent; -import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; import org.jetbrains.annotations.NotNull; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -49,7 +50,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { String displayName; String geometry; Map materialInstances; - PlacementFilter placementFilter; + List placementFilter; Float destructibleByMining; Float friction; Integer lightEmission; @@ -110,7 +111,7 @@ public String geometry() { } @Override - public PlacementFilter placementFilter() { + public List placementFilter() { return placementFilter; } @@ -160,7 +161,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); - protected PlacementFilter placementFilter; + protected List placementFilter; protected Float destructibleByMining; protected Float friction; protected Integer lightEmission; @@ -221,7 +222,7 @@ public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance } @Override - public Builder placementFilter(PlacementFilter placementFilter) { + public Builder placementFilter(List placementFilter) { this.placementFilter = placementFilter; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 5e06a7f3f83..c0199ad5298 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -35,13 +35,12 @@ import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.BoxComponent; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.RotationComponent; -import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions; -import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; -import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.BlockFilterType; -import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.Face; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions.BlockFilterType; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -53,7 +52,9 @@ import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; import org.geysermc.geyser.registry.type.BlockMapping; +import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.BlockUtils; +import org.geysermc.geyser.util.MathUtils; import java.nio.file.Path; import java.util.ArrayList; @@ -419,10 +420,50 @@ private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedState private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); - CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); BoxComponent boxComponent = createBoxComponent(id); - builder.selectionBox(boxComponent).collisionBox(boxComponent); + + BoxComponent selectionBox = boxComponent; + if (node.has("selection_box")) { + JsonNode selectionBoxNode = node.get("selection_box"); + if (selectionBoxNode.isObject()) { + if (selectionBoxNode.has("origin") && selectionBoxNode.has("size")) { + JsonNode origin = selectionBoxNode.get("origin"); + int originX = origin.get(0).intValue(); + int originY = origin.get(1).intValue(); + int originZ = origin.get(2).intValue(); + + JsonNode size = selectionBoxNode.get("size"); + int sizeX = size.get(0).intValue(); + int sizeY = size.get(1).intValue(); + int sizeZ = size.get(2).intValue(); + + selectionBox = new BoxComponent(originX, originY, originZ, sizeX, sizeY, sizeZ); + } + } + } + builder.selectionBox(selectionBox); + + BoxComponent collisionBox = boxComponent; + if (node.has("collision_box")) { + JsonNode collisionBoxNode = node.get("collision_box"); + if (collisionBoxNode.isObject()) { + if (collisionBoxNode.has("origin") && collisionBoxNode.has("size")) { + JsonNode origin = collisionBoxNode.get("origin"); + int originX = origin.get(0).intValue(); + int originY = origin.get(1).intValue(); + int originZ = origin.get(2).intValue(); + + JsonNode size = collisionBoxNode.get("size"); + int sizeX = size.get(0).intValue(); + int sizeY = size.get(1).intValue(); + int sizeZ = size.get(2).intValue(); + + collisionBox = new BoxComponent(originX, originY, originZ, sizeX, sizeY, sizeZ); + } + } + } + builder.collisionBox(collisionBox); // Ideally we would just be able to calculate the right value for this, but it seems that hardness value on bedrock does not follow Java // As such this might as well just be configured for now if people so choose @@ -492,7 +533,7 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String if (placementFilter.has("conditions")) { JsonNode conditions = placementFilter.get("conditions"); if (conditions.isArray()) { - PlacementFilter filter = createPlacementFilterComponent(conditions); + List filter = createPlacementFilterComponent(conditions); builder.placementFilter(filter); } } @@ -525,7 +566,13 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String * @return the {@link BoxComponent} */ private BoxComponent createBoxComponent(int id) { - BoundingBox boundingBox = BlockUtils.getCollision(id).getBoundingBoxes()[0]; + // Some blocks (e.g. plants) have no collision box + BlockCollision blockCollision = BlockUtils.getCollision(id); + if (blockCollision == null) { + return new BoxComponent(0, 0, 0, 0, 0, 0); + } + + BoundingBox boundingBox = blockCollision.getBoundingBoxes()[0]; float offsetX = (float) boundingBox.getSizeX() * 8; float offsetY = (float) boundingBox.getSizeY() * 8; @@ -536,13 +583,13 @@ private BoxComponent createBoxComponent(int id) { // One possible solution would be to create invisible blocks that we use only for collision box // These could be placed above the block when a custom block exceeds this limit // I am hopeful this will be extended slightly since the geometry of blocks can be 1.875^3 - float cornerX = clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); - float cornerY = clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); - float cornerZ = clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); + float cornerX = MathUtils.clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); + float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); + float cornerZ = MathUtils.clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); - float sizeX = clamp((float) boundingBox.getSizeX() * 16, 0, 16); - float sizeY = clamp((float) boundingBox.getSizeY() * 16, 0, 16); - float sizeZ = clamp((float) boundingBox.getSizeZ() * 16, 0, 16); + float sizeX = MathUtils.clamp((float) boundingBox.getSizeX() * 16, 0, 16); + float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16, 0, 16); + float sizeZ = MathUtils.clamp((float) boundingBox.getSizeZ() * 16, 0, 16); BoxComponent boxComponent = new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); @@ -563,17 +610,17 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n texture = node.get("texture").asText(); } - String renderMethod = "alpha_test"; + String renderMethod = "opaque"; if (node.has("render_method")) { renderMethod = node.get("render_method").asText(); } - boolean faceDimming = false; + boolean faceDimming = true; if (node.has("face_dimming")) { faceDimming = node.get("face_dimming").asBoolean(); } - boolean ambientOcclusion = false; + boolean ambientOcclusion = true; if (node.has("ambient_occlusion")) { ambientOcclusion = node.get("ambient_occlusion").asBoolean(); } @@ -582,12 +629,12 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n } /** - * Creates the {@link PlacementFilter} for the passed conditions node + * Creates the list of {@link PlacementConditions} for the passed conditions node * @param node the conditions node - * @return the {@link PlacementFilter} + * @return the list of {@link PlacementConditions} */ - private PlacementFilter createPlacementFilterComponent(JsonNode node) { - List conditions = new ArrayList<>(); + private List createPlacementFilterComponent(JsonNode node) { + List conditions = new ArrayList<>(); // The structure of the placement filter component is the most complex of the current components // Each condition effectively seperated into an two arrays: one of allowed faces, and one of blocks/block molang queries @@ -619,10 +666,10 @@ private PlacementFilter createPlacementFilterComponent(JsonNode node) { } } - conditions.add(new Conditions(faces, blockFilters)); + conditions.add(new PlacementConditions(faces, blockFilters)); }); - return new PlacementFilter(conditions); + return conditions; } /** @@ -672,15 +719,4 @@ private String[] splitStateString(String state) { return pairs; } - /** - * Clamps the given value between the given min and max - * @param value the value to clamp - * @param min the minimum value - * @param max the maximum value - * @return the clamped value - */ - private float clamp(float value, float min, float max) { - return Math.max(min, Math.min(max, value)); - } - } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index fae38cd1900..3df84799dd3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -15,8 +15,8 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; -import org.geysermc.geyser.api.block.custom.component.placementfilter.Conditions.Face; -import org.geysermc.geyser.api.block.custom.component.placementfilter.PlacementFilter; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; @@ -304,15 +304,15 @@ private static NbtMap convertBox(BoxComponent boxComponent) { * @param placementFilter the placement filter to convert * @return the NBT representation of the provided placement filter */ - private static List convertPlacementFilter(PlacementFilter placementFilter) { + private static List convertPlacementFilter(List placementFilter) { List conditions = new ArrayList<>(); - placementFilter.conditions().forEach((condition) -> { + placementFilter.forEach((condition) -> { NbtMapBuilder conditionBuilder = NbtMap.builder(); // allowed_faces on the network is represented by 6 bits for the 6 possible faces // the enum has the proper values for that face only, so we just bitwise OR them together byte allowedFaces = 0; - for (Face face : condition.allowedFaces()) { allowedFaces |= face.getValue(); } + for (Face face : condition.allowedFaces()) { allowedFaces |= (1 << face.ordinal()); } conditionBuilder.putByte("allowed_faces", allowedFaces); // block_filters is a list of either blocks or queries for block tags From d99cb468f16772ee278da2994a838b2da5f806bb Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:01:49 -0500 Subject: [PATCH 057/134] Rework MappingsReader_v1 to avoid passing maps around --- .../mappings/util/BlockPropertyTypeMaps.java | 13 - .../mappings/util/CustomBlockMapping.java | 2 +- .../mappings/versions/MappingsReader_v1.java | 445 ++++++------------ 3 files changed, 142 insertions(+), 318 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java deleted file mode 100644 index 0157cc47ce3..00000000000 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/BlockPropertyTypeMaps.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.geysermc.geyser.registry.mappings.util; - -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; - -import org.checkerframework.checker.nullness.qual.NonNull; - -public record BlockPropertyTypeMaps( - @NonNull Map> stringValuesMap, @NonNull Map> stateKeyStrings, - @NonNull Map> intValuesMap, @NonNull Map> stateKeyInts, - @NonNull Set booleanValuesSet, @NonNull Map> stateKeyBools) { -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index a4a5253170e..259189826f0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -36,5 +36,5 @@ * data required to register a custom block that overrides a group of java block * states. */ -public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, @NonNull boolean overrideItem) { +public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, boolean overrideItem) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index c0199ad5298..0db39fe3906 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -27,29 +27,24 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; +import com.github.steveice10.mc.protocol.data.game.Identifier; import com.google.common.base.CharMatcher; - -import org.geysermc.geyser.Constants; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.component.BoxComponent; -import org.geysermc.geyser.api.block.custom.component.PlacementConditions; -import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; -import org.geysermc.geyser.api.block.custom.component.MaterialInstance; -import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.api.block.custom.component.*; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.BlockFilterType; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; -import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; -import org.geysermc.geyser.registry.mappings.util.BlockPropertyTypeMaps; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.translator.collision.BlockCollision; @@ -57,17 +52,10 @@ import org.geysermc.geyser.util.MathUtils; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; public class MappingsReader_v1 extends MappingsReader { @@ -107,7 +95,7 @@ public void readBlockMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer { if (entry.getValue().isObject()) { try { - String identifier = entry.getKey(); + String identifier = Identifier.formalize(entry.getKey()); CustomBlockMapping customBlockMapping = this.readBlockMappingEntry(identifier, entry.getValue()); consumer.accept(identifier, customBlockMapping); } catch (InvalidCustomMappingsFileException e) { @@ -181,8 +169,8 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa } /** - * Read a block mapping entry from a JSON node and java identifier - * @param identifier The java identifier of the block + * Read a block mapping entry from a JSON node and Java identifier + * @param identifier The Java identifier of the block * @param node The {@link JsonNode} containing the block mapping entry * @return The {@link CustomBlockMapping} record to be read by {@link org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator#registerCustomBedrockBlocks} * @throws InvalidCustomMappingsFileException If the JSON node is invalid @@ -198,272 +186,142 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node throw new InvalidCustomMappingsFileException("A block entry has no name"); } - // If this is true, we will only register the states the user has specified rather than all of the blocks possible states + // If this is true, we will only register the states the user has specified rather than all the possible block states boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); JsonNode stateOverrides = node.get("state_overrides"); - if (onlyOverrideStates && (stateOverrides == null || !stateOverrides.isObject())) { - throw new InvalidCustomMappingsFileException("A block entry has only_override_states set to true but no state_overrides"); + throw new InvalidCustomMappingsFileException("Block entry for " + identifier + " has only_override_states set to true, but has no state_overrides."); } - List stateKeys = new ArrayList<>(); - - // Add the block's identifier to the object so we can use the resulting string to search the block mappings + Map componentsMap = new LinkedHashMap<>(); if (stateOverrides != null && stateOverrides.isObject()) { + // Load components for specific Java block states Iterator> fields = stateOverrides.fields(); while (fields.hasNext()) { - stateKeys.add(identifier + fields.next().getKey()); + Map.Entry overrideEntry = fields.next(); + String state = identifier + "[" + overrideEntry.getKey() + "]"; + if (!BlockRegistries.JAVA_IDENTIFIERS.get().containsKey(state)) { + throw new InvalidCustomMappingsFileException("Unknown Java block state: " + state + " for state_overrides."); + } + componentsMap.put(state, createCustomBlockComponents(overrideEntry.getValue(), state, name)); } } + if (!onlyOverrideStates) { + // Create components for any remaining Java block states + BlockRegistries.JAVA_IDENTIFIERS.get().keySet() + .stream() + .filter(s -> s.startsWith(identifier)) + .filter(Predicate.not(componentsMap::containsKey)) + .forEach(state -> componentsMap.put(state, createCustomBlockComponents(null, state, name))); + } - // Find all the default states for the block we wish to override - List defaultStates = List.copyOf(BlockRegistries.JAVA_IDENTIFIERS.get().keySet()) - .stream() - .filter(s -> s.startsWith(identifier + "[")) - .collect(Collectors.toList()); - // If no states were found, the block must only have one state, so we add its plain identifier - if (defaultStates.isEmpty()) defaultStates.add(identifier); + if (componentsMap.isEmpty()) { + throw new InvalidCustomMappingsFileException("Unknown Java block: " + identifier); + } // Create the data for the overall block - CustomBlockDataBuilder customBlockDataBuilder = new CustomBlockDataBuilder(); - customBlockDataBuilder.name(name) + CustomBlockData.Builder customBlockDataBuilder = new CustomBlockDataBuilder() + .name(name) // We pass in the first state and just use the hitbox from that as the default // Each state will have its own so this is fine - .components(createCustomBlockComponents(node, defaultStates.get(0), name)) - // We must create permutation for every state override - .permutations(createCustomBlockPermutations(stateOverrides, identifier, name)) - // This property is use to display the default state when onlyOverrideStates is false - .booleanProperty(String.format("%s:default", Constants.GEYSER_NAMESPACE)); - - // We need to have three property type maps, one for each type of block property - // Each contains the properties this block has for that type and its possible values, except for boolean since the values must be true/false - // If we are only overriding states, we pass in only the state keys supplied in the mapping - // Otherwise, we pass in all possible states for the block - BlockPropertyTypeMaps blockPropertyTypeMaps = createBlockPropertyTypeMaps(onlyOverrideStates ? stateKeys : defaultStates); - blockPropertyTypeMaps.stringValuesMap().forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList(value))); - blockPropertyTypeMaps.intValuesMap().forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList(value))); - blockPropertyTypeMaps.booleanValuesSet().forEach((value) -> customBlockDataBuilder.booleanProperty(value)); - - // Finally, build the custom block data - CustomBlockData customBlockData = customBlockDataBuilder.build(); - - // Create a map of the custom block states for this block, which contains the full state identifier mapped to the custom block state data - Map states = createCustomBlockStatesMap(stateKeys, defaultStates, onlyOverrideStates, customBlockData, - blockPropertyTypeMaps.stateKeyStrings(), blockPropertyTypeMaps.stateKeyInts(), blockPropertyTypeMaps.stateKeyBools()); - - // Create the custom block mapping record to be passed into the custom block registry populator - return new CustomBlockMapping(customBlockData, states, identifier, !onlyOverrideStates); - } + .components(createCustomBlockComponents(node, componentsMap.keySet().iterator().next(), name)); - /** - * Creates a list of {@link CustomBlockPermutation} from the given mappings node containing permutations, java identifier, and custom block name - * @param node an {@link JsonNode} from the mappings file containing the permutations - * @param identifier the java identifier of the block - * @param name the name of the custom block - * @return the list of custom block permutations - */ - private List createCustomBlockPermutations(JsonNode node, String identifier, String name) { - List permutations = new ArrayList<>(); - - // Create a custom block permutation record for each permutation passed into the mappings for the given block - if (node != null && node.isObject()) { - node.fields().forEachRemaining(entry -> { - String key = entry.getKey(); - JsonNode value = entry.getValue(); - if (value.isObject()) { - // Each permutation has its own components, which override the base components when explicitly set - // Based on the input states, we construct a molang query that will evaluate to true when the block properties corresponding to the state are active - permutations.add(new CustomBlockPermutation(createCustomBlockComponents(value, (identifier + key), name), createCustomBlockPropertyQuery(key))); - } - }); + if (componentsMap.size() == 1) { + // There are no other block states, so skip creating properties and permutations + CustomBlockData blockData = customBlockDataBuilder.build(); + return new CustomBlockMapping(blockData, Map.of(identifier, blockData.defaultBlockState()), identifier, !onlyOverrideStates); } - - // We also need to create a permutation for the default state of the block with no components - // Functionally, this means the default components will be used - permutations.add(new CustomBlockPermutation(new GeyserCustomBlockComponents.CustomBlockComponentsBuilder().build(), String.format("q.block_property('%s:default') == 1", Constants.GEYSER_NAMESPACE))); - - return permutations; + return createCustomBlockMapping(customBlockDataBuilder, componentsMap, identifier, !onlyOverrideStates); } - /** - * Create a map of java block state identifiers to {@link CustomBlockState} so that {@link #readBlockMappingEntry} can include it in the {@link CustomBlockMapping} record - * @param stateKeys the list of java block state identifiers explicitly passed in the mappings - * @param defaultStates the list of all possible java block state identifiers for the block - * @param onlyOverrideStates whether or not we are only overriding the states passed in the mappings - * @param customBlockData the {@link CustomBlockData} for the block - * @param stateKeyStrings the map of java block state identifiers to their string properties - * @param stateKeyInts the map of java block state identifiers to their int properties - * @param stateKeyBools the map of java block state identifiers to their boolean properties - * @return the custom block states maps - */ - private Map createCustomBlockStatesMap(List stateKeys,List defaultStates, boolean onlyOverrideStates, CustomBlockData customBlockData, - Map> stateKeyStrings, Map> stateKeyInts, Map> stateKeyBools) { + private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder customBlockDataBuilder, Map componentsMap, String identifier, boolean overrideItem) { + Map> stringValuesMap = new Object2ObjectOpenHashMap<>(); + Map> intValuesMap = new Object2ObjectOpenHashMap<>(); - Map states = new HashMap<>(); - - // If not only overriding specified states, we must include the default states in the custom block states map - if (!onlyOverrideStates) { - defaultStates.removeAll(stateKeys); - createCustomBlockStates(defaultStates, true, customBlockData, stateKeyStrings, stateKeyInts, stateKeyBools, states); - } - createCustomBlockStates(stateKeys, false, customBlockData, stateKeyStrings, stateKeyInts, stateKeyBools, states); - - return states; - } - - /** - * Create the custom block states for the given state keys and append them to the passed states map - * @param stateKeys the list of java block state identifiers - * @param defaultState whether or not this is the default state - * @param customBlockData the {@link CustomBlockData} for the block - * @param stateKeyStrings the map of java block state identifiers to their string properties - * @param stateKeyInts the map of java block state identifiers to their int properties - * @param stateKeyBools the map of java block state identifiers to their boolean properties - * @param states the map of java block state identifiers to their {@link CustomBlockState} to append - */ - private void createCustomBlockStates(List stateKeys, boolean defaultState, CustomBlockData customBlockData, - Map> stateKeyStrings, Map> stateKeyInts, - Map> stateKeyBools, Map states) { - stateKeys.forEach((key) -> { - CustomBlockState.Builder builder = customBlockData.blockStateBuilder(); - // We always include the default property, which is used to set the default state when onlyOverrideStates is false - builder.booleanProperty(String.format("%s:default", Constants.GEYSER_NAMESPACE), defaultState); - - // The properties must be added to the builder seperately for each type - stateKeyStrings.getOrDefault(key, Collections.emptyMap()).forEach((property, stringValue) -> builder.stringProperty(property, stringValue)); - stateKeyInts.getOrDefault(key, Collections.emptyMap()).forEach((property, intValue) -> builder.intProperty(property, intValue)); - stateKeyBools.getOrDefault(key, Collections.emptyMap()).forEach((property, boolValue) -> builder.booleanProperty(property, boolValue)); - - CustomBlockState blockState = builder.build(); - - states.put(key, blockState); - }); - } - - /** - * Creates a record of {@link BlockPropertyTypeMaps} for the given list of java block state identifiers that are being actively used by the custom block - * @param usedStateKeys the list of java block state identifiers that are being actively used by the custom block - * @return the {@link BlockPropertyTypeMaps} record - */ - private BlockPropertyTypeMaps createBlockPropertyTypeMaps(List usedStateKeys) { - // Each of the three property type has two maps - // The first map is used to store the possible values for each property - // The second map is used to store the value for each property for each state - Map> stringValuesMap = new HashMap<>(); - Map> stateKeyStrings = new HashMap<>(); - - Map> intValuesMap = new HashMap<>(); - Map> stateKeyInts = new HashMap<>(); - - Set booleanValuesSet = new HashSet<>(); - Map> stateKeyBools = new HashMap<>(); - - - for (String state : usedStateKeys) { - // No bracket means that there is only one state, so the maps should be empty - if (!state.contains("[")) continue; + List permutations = new ArrayList<>(); + Map> blockStateBuilders = new Object2ObjectOpenHashMap<>(); - // Split the state string into an array containing each property=value pair + // For each Java block state, extract the property values, create a CustomBlockPermutation, + // and a CustomBlockState builder + for (Map.Entry entry : componentsMap.entrySet()) { + String state = entry.getKey(); String[] pairs = splitStateString(state); - for (String pair : pairs) { - // Get the property and value individually - String[] parts = pair.split("="); + String[] conditions = new String[pairs.length]; + Function blockStateBuilder = Function.identity(); + + for (int i = 0; i < pairs.length; i++) { + String[] parts = pairs[i].split("="); String property = parts[0]; String value = parts[1]; // Figure out what property type we are dealing with if (value.equals("true") || value.equals("false")) { - booleanValuesSet.add(property); - Map propertyMap = stateKeyBools.getOrDefault(state, new HashMap<>()); - propertyMap.put(property, Boolean.parseBoolean(value)); - stateKeyBools.put(state, propertyMap); + customBlockDataBuilder.booleanProperty(property); + + conditions[i] = String.format("q.block_property('%s') == %s", property, value); + blockStateBuilder = blockStateBuilder.andThen(builder -> builder.booleanProperty(property, value.equals("true"))); } else if (CharMatcher.inRange('0', '9').matchesAllOf(value)) { int intValue = Integer.parseInt(value); - LinkedHashSet values = intValuesMap.get(property); - // Initialize the property to values map if it doesn't exist - if (values == null) { - values = new LinkedHashSet<>(); - intValuesMap.put(property, values); - } - values.add(intValue); - Map propertyMap = stateKeyInts.getOrDefault(state, new HashMap<>()); - propertyMap.put(property, intValue); - stateKeyInts.put(state, propertyMap); + intValuesMap.computeIfAbsent(property, k -> new LinkedHashSet<>()) + .add(intValue); + + conditions[i] = String.format("q.block_property('%s') == %s", property, value); + blockStateBuilder = blockStateBuilder.andThen(builder -> builder.intProperty(property, intValue)); } else { - // If it's n not a boolean or int it must be a string - LinkedHashSet values = stringValuesMap.get(property); - // Initialize the property to values map if it doesn't exist - if (values == null) { - values = new LinkedHashSet<>(); - stringValuesMap.put(property, values); - } - values.add(value); - Map propertyMap = stateKeyStrings.getOrDefault(state, new HashMap<>()); - propertyMap.put(property, value); - stateKeyStrings.put(state, propertyMap); + stringValuesMap.computeIfAbsent(property, k -> new LinkedHashSet<>()) + .add(value); + + conditions[i] = String.format("q.block_property('%s') == '%s'", property, value); + blockStateBuilder = blockStateBuilder.andThen(builder -> builder.stringProperty(property, value)); } } + permutations.add(new CustomBlockPermutation(entry.getValue(), String.join(" && ", conditions))); + blockStateBuilders.put(state, blockStateBuilder.andThen(CustomBlockState.Builder::build)); } - // We should now have all of the maps - return new BlockPropertyTypeMaps(stringValuesMap, stateKeyStrings, intValuesMap, stateKeyInts, booleanValuesSet, stateKeyBools); + // Define properties for the custom block + stringValuesMap.forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList<>(value))); + intValuesMap.forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList<>(value))); + + CustomBlockData customBlockData = customBlockDataBuilder + .permutations(permutations) + .build(); + // Build CustomBlockStates for each Java block state we wish to override + Map states = blockStateBuilders.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().apply(customBlockData.blockStateBuilder()))); + + return new CustomBlockMapping(customBlockData, states, identifier, overrideItem); } /** - * Creates a {@link CustomBlockComponents} object for the passed permutation or base block node, java block state identifier, and custom block name - * @param node the permutation or base block {@link JsonNode} - * @param stateKey the java block state identifier - * @param name the custom block name + * Creates a {@link CustomBlockComponents} object for the passed state override or base block node, Java block state identifier, and custom block name + * @param node the state override or base block {@link JsonNode} + * @param stateKey the Java block state identifier + * @param name the name of the custom block * @return the {@link CustomBlockComponents} object */ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); - CustomBlockComponentsBuilder builder = new CustomBlockComponentsBuilder(); BoxComponent boxComponent = createBoxComponent(id); + CustomBlockComponents.Builder builder = new CustomBlockComponentsBuilder() + .collisionBox(boxComponent) + .selectionBox(boxComponent); - BoxComponent selectionBox = boxComponent; - if (node.has("selection_box")) { - JsonNode selectionBoxNode = node.get("selection_box"); - if (selectionBoxNode.isObject()) { - if (selectionBoxNode.has("origin") && selectionBoxNode.has("size")) { - JsonNode origin = selectionBoxNode.get("origin"); - int originX = origin.get(0).intValue(); - int originY = origin.get(1).intValue(); - int originZ = origin.get(2).intValue(); - - JsonNode size = selectionBoxNode.get("size"); - int sizeX = size.get(0).intValue(); - int sizeY = size.get(1).intValue(); - int sizeZ = size.get(2).intValue(); - - selectionBox = new BoxComponent(originX, originY, originZ, sizeX, sizeY, sizeZ); - } - } + if (node == null) { + // No other components were defined + return builder.build(); } - builder.selectionBox(selectionBox); - - BoxComponent collisionBox = boxComponent; - if (node.has("collision_box")) { - JsonNode collisionBoxNode = node.get("collision_box"); - if (collisionBoxNode.isObject()) { - if (collisionBoxNode.has("origin") && collisionBoxNode.has("size")) { - JsonNode origin = collisionBoxNode.get("origin"); - int originX = origin.get(0).intValue(); - int originY = origin.get(1).intValue(); - int originZ = origin.get(2).intValue(); - JsonNode size = collisionBoxNode.get("size"); - int sizeX = size.get(0).intValue(); - int sizeY = size.get(1).intValue(); - int sizeZ = size.get(2).intValue(); - - collisionBox = new BoxComponent(originX, originY, originZ, sizeX, sizeY, sizeZ); - } - } + BoxComponent selectionBox = createBoxComponent(node.get("selection_box")); + if (selectionBox != null) { + builder.selectionBox(selectionBox); + } + BoxComponent collisionBox = createBoxComponent(node.get("collision_box")); + if (collisionBox != null) { + builder.collisionBox(collisionBox); } - builder.collisionBox(collisionBox); // Ideally we would just be able to calculate the right value for this, but it seems that hardness value on bedrock does not follow Java // As such this might as well just be configured for now if people so choose @@ -542,34 +400,28 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String // Tags can be applied so that blocks will match return true when queried for the tag // Potentially useful for resource pack creators - // Ideally we could programatically extract the tags here https://wiki.bedrock.dev/blocks/block-tags.html - // This would let us automatically apply the correct valilla tags to blocks - // However, its worth noting that vanilla tools do not currently honor these tags anyways - if (node.has("tags")) { - JsonNode tags = node.get("tags"); - if (tags.isArray()) { - ArrayNode tagsArray = (ArrayNode) tags; - Set tagsSet = new HashSet<>(); - tagsArray.forEach(tag -> tagsSet.add(tag.asText())); - builder.tags(tagsSet); - } + // Ideally we could programmatically extract the tags here https://wiki.bedrock.dev/blocks/block-tags.html + // This would let us automatically apply the correct vanilla tags to blocks + // However, its worth noting that vanilla tools do not currently honor these tags anyway + if (node.get("tags") instanceof ArrayNode tags) { + Set tagsSet = new ObjectOpenHashSet<>(); + tags.forEach(tag -> tagsSet.add(tag.asText())); + builder.tags(tagsSet); } - CustomBlockComponents components = builder.build(); - - return components; + return builder.build(); } /** - * Creates the {@link BoxComponent} for the passed collision box index - * @param id the collision box index + * Creates a {@link BoxComponent} based on a Java block's collision + * @param javaId the block's Java ID * @return the {@link BoxComponent} */ - private BoxComponent createBoxComponent(int id) { + private BoxComponent createBoxComponent(int javaId) { // Some blocks (e.g. plants) have no collision box - BlockCollision blockCollision = BlockUtils.getCollision(id); + BlockCollision blockCollision = BlockUtils.getCollision(javaId); if (blockCollision == null) { - return new BoxComponent(0, 0, 0, 0, 0, 0); + return BoxComponent.EMPTY_BOX; } BoundingBox boundingBox = blockCollision.getBoundingBoxes()[0]; @@ -578,7 +430,7 @@ private BoxComponent createBoxComponent(int id) { float offsetY = (float) boundingBox.getSizeY() * 8; float offsetZ = (float) boundingBox.getSizeZ() * 8; - // Unfortunately we need to clamp the values here to a an effective size of one block + // Unfortunately we need to clamp the values here to an effective size of one block // This is quite a pain for anything like fences, as the player can just jump over them // One possible solution would be to create invisible blocks that we use only for collision box // These could be placed above the block when a custom block exceeds this limit @@ -591,9 +443,31 @@ private BoxComponent createBoxComponent(int id) { float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16, 0, 16); float sizeZ = MathUtils.clamp((float) boundingBox.getSizeZ() * 16, 0, 16); - BoxComponent boxComponent = new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); + return new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); + } - return boxComponent; + /** + * Creates a {@link BoxComponent} from a JSON Node + * @param node the JSON node + * @return the {@link BoxComponent} + */ + private BoxComponent createBoxComponent(JsonNode node) { + if (node != null && node.isObject()) { + if (node.has("origin") && node.has("size")) { + JsonNode origin = node.get("origin"); + float originX = origin.get(0).floatValue(); + float originY = origin.get(1).floatValue(); + float originZ = origin.get(2).floatValue(); + + JsonNode size = node.get("size"); + float sizeX = size.get(0).floatValue(); + float sizeY = size.get(1).floatValue(); + float sizeZ = size.get(2).floatValue(); + + return new BoxComponent(originX, originY, originZ, sizeX, sizeY, sizeZ); + } + } + return null; } /** @@ -637,15 +511,13 @@ private List createPlacementFilterComponent(JsonNode node) List conditions = new ArrayList<>(); // The structure of the placement filter component is the most complex of the current components - // Each condition effectively seperated into an two arrays: one of allowed faces, and one of blocks/block molang queries + // Each condition effectively separated into two arrays: one of allowed faces, and one of blocks/block Molang queries node.forEach(condition -> { - Set faces = new HashSet<>(); + Set faces = EnumSet.noneOf(Face.class); if (condition.has("allowed_faces")) { JsonNode allowedFaces = condition.get("allowed_faces"); if (allowedFaces.isArray()) { - allowedFaces.forEach(face -> { - faces.add(Face.valueOf(face.asText().toUpperCase())); - }); + allowedFaces.forEach(face -> faces.add(Face.valueOf(face.asText().toUpperCase()))); } } @@ -672,51 +544,16 @@ private List createPlacementFilterComponent(JsonNode node) return conditions; } - /** - * Creates a molang query that returns true when the given java state identifier is the active state - * @param state the java state identifier - * @return the molang query - */ - private String createCustomBlockPropertyQuery(String state) { - // This creates a molang query from the given input blockstate string - String[] conditions = splitStateString(state); - String[] queries = new String[conditions.length]; - - for (int i = 0; i < conditions.length; i++) { - String[] keyval = conditions[i].split("=", 2); - - if (keyval[1].equals("true")) { - queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], 1); - } else if (keyval[1].equals("false")) { - queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], 0); - } else if (CharMatcher.inRange('0', '9').matchesAllOf(keyval[1])) { - queries[i] = String.format("q.block_property('%1$s') == %2$s", keyval[0], Integer.parseInt(keyval[1])); - } else { - queries[i] = String.format("q.block_property('%1$s') == '%2$s'", keyval[0], keyval[1]); - } - } - - String query = String.join(" && ", queries); - - // Appends the default property to ensure it can be disabled when a state without specific overrides is active - return String.format("q.block_property('%1$s:default') == 0 && %2$s", Constants.GEYSER_NAMESPACE, query); - } - /** * Splits the given java state identifier into an array of property=value pairs * @param state the java state identifier * @return the array of property=value pairs */ private String[] splitStateString(String state) { - // Split the given state string into an array of property=value pairs int openBracketIndex = state.indexOf("["); - int closeBracketIndex = state.indexOf("]"); - - String cleanStates = state.substring(openBracketIndex + 1, closeBracketIndex); - String[] pairs = cleanStates.split("\\s*,\\s*"); - - return pairs; + String states = state.substring(openBracketIndex + 1, state.length() - 1); + return states.split(","); } } From 00a453fe42841073766830f8a435c1329fcff7cb Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Mon, 30 Jan 2023 15:07:35 -0500 Subject: [PATCH 058/134] Treat all properties as string properties There isn't a real need to check for boolean and int properties --- .../mappings/versions/MappingsReader_v1.java | 35 +++++-------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 0db39fe3906..853808afceb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -28,7 +28,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.github.steveice10.mc.protocol.data.game.Identifier; -import com.google.common.base.CharMatcher; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.geysermc.geyser.GeyserImpl; @@ -236,8 +235,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node } private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder customBlockDataBuilder, Map componentsMap, String identifier, boolean overrideItem) { - Map> stringValuesMap = new Object2ObjectOpenHashMap<>(); - Map> intValuesMap = new Object2ObjectOpenHashMap<>(); + Map> valuesMap = new Object2ObjectOpenHashMap<>(); List permutations = new ArrayList<>(); Map> blockStateBuilders = new Object2ObjectOpenHashMap<>(); @@ -256,33 +254,18 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust String property = parts[0]; String value = parts[1]; - // Figure out what property type we are dealing with - if (value.equals("true") || value.equals("false")) { - customBlockDataBuilder.booleanProperty(property); - - conditions[i] = String.format("q.block_property('%s') == %s", property, value); - blockStateBuilder = blockStateBuilder.andThen(builder -> builder.booleanProperty(property, value.equals("true"))); - } else if (CharMatcher.inRange('0', '9').matchesAllOf(value)) { - int intValue = Integer.parseInt(value); - intValuesMap.computeIfAbsent(property, k -> new LinkedHashSet<>()) - .add(intValue); - - conditions[i] = String.format("q.block_property('%s') == %s", property, value); - blockStateBuilder = blockStateBuilder.andThen(builder -> builder.intProperty(property, intValue)); - } else { - stringValuesMap.computeIfAbsent(property, k -> new LinkedHashSet<>()) - .add(value); - - conditions[i] = String.format("q.block_property('%s') == '%s'", property, value); - blockStateBuilder = blockStateBuilder.andThen(builder -> builder.stringProperty(property, value)); - } + valuesMap.computeIfAbsent(property, k -> new LinkedHashSet<>()) + .add(value); + + conditions[i] = String.format("q.block_property('%s') == '%s'", property, value); + blockStateBuilder = blockStateBuilder.andThen(builder -> builder.stringProperty(property, value)); } + permutations.add(new CustomBlockPermutation(entry.getValue(), String.join(" && ", conditions))); blockStateBuilders.put(state, blockStateBuilder.andThen(CustomBlockState.Builder::build)); } - // Define properties for the custom block - stringValuesMap.forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList<>(value))); - intValuesMap.forEach((key, value) -> customBlockDataBuilder.intProperty(key, new ArrayList<>(value))); + + valuesMap.forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList<>(value))); CustomBlockData customBlockData = customBlockDataBuilder .permutations(permutations) From a91b531f99d0769082916be415f58852e67f18b7 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:00:05 -0500 Subject: [PATCH 059/134] Fix block registry scan in MappingsReader --- .../mappings/versions/MappingsReader_v1.java | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 853808afceb..81224a5f962 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -187,13 +187,22 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node // If this is true, we will only register the states the user has specified rather than all the possible block states boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); - JsonNode stateOverrides = node.get("state_overrides"); - if (onlyOverrideStates && (stateOverrides == null || !stateOverrides.isObject())) { - throw new InvalidCustomMappingsFileException("Block entry for " + identifier + " has only_override_states set to true, but has no state_overrides."); + // Create the data for the overall block + CustomBlockData.Builder customBlockDataBuilder = new CustomBlockDataBuilder() + .name(name); + + if (BlockRegistries.JAVA_IDENTIFIERS.get().containsKey(identifier)) { + // There is only one Java block state to override + CustomBlockData blockData = customBlockDataBuilder + .components(createCustomBlockComponents(node, identifier, name)) + .build(); + return new CustomBlockMapping(blockData, Map.of(identifier, blockData.defaultBlockState()), identifier, !onlyOverrideStates); } Map componentsMap = new LinkedHashMap<>(); + + JsonNode stateOverrides = node.get("state_overrides"); if (stateOverrides != null && stateOverrides.isObject()) { // Load components for specific Java block states Iterator> fields = stateOverrides.fields(); @@ -206,11 +215,15 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node componentsMap.put(state, createCustomBlockComponents(overrideEntry.getValue(), state, name)); } } + if (componentsMap.isEmpty() && onlyOverrideStates) { + throw new InvalidCustomMappingsFileException("Block entry for " + identifier + " has only_override_states set to true, but has no state_overrides."); + } + if (!onlyOverrideStates) { // Create components for any remaining Java block states BlockRegistries.JAVA_IDENTIFIERS.get().keySet() .stream() - .filter(s -> s.startsWith(identifier)) + .filter(s -> s.startsWith(identifier + "[")) .filter(Predicate.not(componentsMap::containsKey)) .forEach(state -> componentsMap.put(state, createCustomBlockComponents(null, state, name))); } @@ -219,18 +232,11 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node throw new InvalidCustomMappingsFileException("Unknown Java block: " + identifier); } - // Create the data for the overall block - CustomBlockData.Builder customBlockDataBuilder = new CustomBlockDataBuilder() - .name(name) - // We pass in the first state and just use the hitbox from that as the default - // Each state will have its own so this is fine - .components(createCustomBlockComponents(node, componentsMap.keySet().iterator().next(), name)); + // We pass in the first state and just use the hitbox from that as the default + // Each state will have its own so this is fine + String firstState = componentsMap.keySet().iterator().next(); + customBlockDataBuilder.components(createCustomBlockComponents(node, firstState, name)); - if (componentsMap.size() == 1) { - // There are no other block states, so skip creating properties and permutations - CustomBlockData blockData = customBlockDataBuilder.build(); - return new CustomBlockMapping(blockData, Map.of(identifier, blockData.defaultBlockState()), identifier, !onlyOverrideStates); - } return createCustomBlockMapping(customBlockDataBuilder, componentsMap, identifier, !onlyOverrideStates); } From cbe72561253d54d7d43bb767744c976fc35cc82f Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Tue, 31 Jan 2023 21:02:18 -0500 Subject: [PATCH 060/134] Skin hashes can have less than 64 characters? --- .../geyser/registry/populator/CustomSkullRegistryPopulator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 6210f10818e..bd1b4db99b9 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -116,7 +116,7 @@ public void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureTy }); skinHashes.forEach((skinHash) -> { - if (!skinHash.matches("^[a-fA-F0-9]{64}$")) { + if (!skinHash.matches("^[a-fA-F0-9]+$")) { GeyserImpl.getInstance().getLogger().error("Skin hash " + skinHash + " does not match required format ^[a-fA-F0-9]{64}$ and will not be added as a custom block."); return; } From 7bc0bde37988ae3da902e92b34f21f1e370a7f7e Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Tue, 31 Jan 2023 23:34:28 -0500 Subject: [PATCH 061/134] Include entry when logging exceptions from block mappings --- .../geyser/registry/mappings/versions/MappingsReader_v1.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 81224a5f962..0528646566b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -97,8 +97,9 @@ public void readBlockMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer Date: Mon, 20 Feb 2023 13:05:01 -0800 Subject: [PATCH 062/134] Submodule Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- core/src/main/resources/languages | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/languages b/core/src/main/resources/languages index 24be9ef7f85..f6685c4ccc6 160000 --- a/core/src/main/resources/languages +++ b/core/src/main/resources/languages @@ -1 +1 @@ -Subproject commit 24be9ef7f850f7d180650a65792c266c709cadf5 +Subproject commit f6685c4ccc6e77b07402d45cb41213559004b7d6 From 29835a1b76013737bf716391c48fcadf08adc090 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 20 Feb 2023 21:52:46 -0800 Subject: [PATCH 063/134] Fix block break speeds thanks to @Camotoy Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../mappings/versions/MappingsReader_v1.java | 5 ++- .../geyser/session/GeyserSession.java | 6 ++++ .../player/BedrockActionTranslator.java | 31 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 0528646566b..6e5f3846ec5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -313,9 +313,8 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String builder.collisionBox(collisionBox); } - // Ideally we would just be able to calculate the right value for this, but it seems that hardness value on bedrock does not follow Java - // As such this might as well just be configured for now if people so choose - float destructibleByMining = BlockRegistries.JAVA_BLOCKS.getOrDefault(id, BlockMapping.AIR).getHardness() * 3.25F; + // We set this to max value by default so that we may dictate the correct destroy time ourselves + float destructibleByMining = Float.MAX_VALUE; if (node.has("destructible_by_mining")) { destructibleByMining = node.get("destructible_by_mining").floatValue(); } diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index d481b68de6f..70c16a9dbd6 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -437,6 +437,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private long lastInteractionTime; + /** + * Stores when the player started to break a block. Used to allow correct break time for custom blocks. + */ + @Setter + private long blockBreakStartTime; + /** * Stores whether the player intended to place a bucket. */ diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java index c728390d6d9..28eaf91838e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java @@ -38,6 +38,7 @@ import com.nukkitx.protocol.bedrock.data.entity.EntityEventType; import com.nukkitx.protocol.bedrock.data.entity.EntityFlag; import com.nukkitx.protocol.bedrock.packet.*; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; @@ -147,6 +148,11 @@ public void translate(GeyserSession session, PlayerActionPacket packet) { startBreak.setType(LevelEventType.BLOCK_START_BREAK); startBreak.setPosition(vector.toFloat()); double breakTime = BlockUtils.getSessionBreakTime(session, BlockRegistries.JAVA_BLOCKS.get(blockState)) * 20; + CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(blockState); + // If the block is custom, we must keep track of when it should break ourselves + if (blockStateOverride != null) { + session.setBlockBreakStartTime(System.currentTimeMillis()); + } startBreak.setData((int) (65535 / breakTime)); session.setBreakingBlock(blockState); session.sendUpstreamPacket(startBreak); @@ -190,6 +196,31 @@ public void translate(GeyserSession session, PlayerActionPacket packet) { updateBreak.setType(LevelEventType.BLOCK_UPDATE_BREAK); updateBreak.setPosition(vectorFloat); double breakTime = BlockUtils.getSessionBreakTime(session, BlockRegistries.JAVA_BLOCKS.get(breakingBlock)) * 20; + + CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(breakingBlock); + if (blockStateOverride != null) { + // If the block is custom, we must keep track of when it should break ourselves + long blockBreakStartTime = session.getBlockBreakStartTime(); + if (blockBreakStartTime != 0) { + long timeSinceStart = System.currentTimeMillis() - blockBreakStartTime; + if (timeSinceStart >= breakTime * 50) { + // Play break sound and particle + LevelEventPacket effectPacket = new LevelEventPacket(); + effectPacket.setPosition(vectorFloat); + effectPacket.setType(LevelEventType.PARTICLE_DESTROY_BLOCK); + effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakingBlock)); + session.sendUpstreamPacket(effectPacket); + + // Break the block + ServerboundPlayerActionPacket finishBreakingPacket = new ServerboundPlayerActionPacket(PlayerAction.FINISH_DIGGING, + vector, Direction.VALUES[packet.getFace()], session.getWorldCache().nextPredictionSequence()); + session.sendDownstreamPacket(finishBreakingPacket); + session.setBlockBreakStartTime(0); + break; + } + } + } + updateBreak.setData((int) (65535 / breakTime)); session.sendUpstreamPacket(updateBreak); break; From e077407a1ab8ed6d5c57a07f89775372558191c3 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 5 Mar 2023 18:33:24 -0800 Subject: [PATCH 064/134] Temporarily fix build on eclipse so I may work... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../main/kotlin/geyser.base-conventions.gradle.kts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts index 70986730093..ae946b6cee2 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -1,5 +1,6 @@ plugins { `java-library` + `eclipse` id("net.kyori.indra") } @@ -35,3 +36,13 @@ tasks { } } } + +eclipse { + classpath.file.whenMerged { + (this as org.gradle.plugins.ide.eclipse.model.Classpath).entries.forEach { entry -> + if (entry is org.gradle.plugins.ide.eclipse.model.Library) { + entry.entryAttributes["module"] = false + } + } + } +} From 0d110ca4f4e975a5d092e50093cad65efdec97c9 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 5 Mar 2023 20:21:56 -0800 Subject: [PATCH 065/134] Custom tool breakspeed by server; Closes #3348 Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../item/components/ToolBreakSpeedsUtils.java | 174 ------------------ .../CustomItemRegistryPopulator.java | 69 ++++--- .../inventory/item/CustomItemTranslator.java | 4 +- .../player/BedrockActionTranslator.java | 56 +++--- 4 files changed, 75 insertions(+), 228 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java deleted file mode 100644 index 6330043e540..00000000000 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.item.components; - -import com.nukkitx.nbt.NbtMap; -import com.nukkitx.nbt.NbtType; - -import java.util.ArrayList; -import java.util.List; - -public class ToolBreakSpeedsUtils { - public static int toolTierToSpeed(String toolTier) { - ToolTier tier = ToolTier.getByName(toolTier); - if (tier != null) { - return tier.getSpeed(); - } - - return 0; - } - - private static NbtMap createTagBreakSpeed(int speed, String... tags) { - StringBuilder builder = new StringBuilder("query.any_tag('"); - builder.append(tags[0]); - for (int i = 1; i < tags.length; i++) { - builder.append("', '").append(tags[i]); - } - builder.append("')"); - - return NbtMap.builder() - .putCompound("block", NbtMap.builder() - .putString("tags", builder.toString()) - .build()) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putInt("speed", speed) - .build(); - } - - private static NbtMap createBreakSpeed(int speed, String block) { - return NbtMap.builder() - .putCompound("block", NbtMap.builder() - .putString("name", block).build()) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putInt("speed", speed) - .build(); - } - - private static NbtMap createDigger(List speeds) { - return NbtMap.builder() - .putList("destroy_speeds", NbtType.COMPOUND, speeds) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putBoolean("use_efficiency", true) - .build(); - } - - public static NbtMap getAxeDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createTagBreakSpeed(speed, "wood", "pumpkin", "plant")); - - return createDigger(speeds); - } - - public static NbtMap getPickaxeDigger(int speed, String toolTier) { - List speeds = new ArrayList<>(); - if (toolTier.equals(ToolTier.DIAMOND.toString()) || toolTier.equals(ToolTier.NETHERITE.toString())) { - speeds.add(createTagBreakSpeed(speed, "iron_pick_diggable", "diamond_pick_diggable")); - } else { - speeds.add(createTagBreakSpeed(speed, "iron_pick_diggable")); - } - speeds.add(createTagBreakSpeed(speed, "stone", "metal", "rail", "mob_spawner")); - - return createDigger(speeds); - } - - public static NbtMap getShovelDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createTagBreakSpeed(speed, "dirt", "sand", "gravel", "grass", "snow")); - - return createDigger(speeds); - } - - public static NbtMap getSwordDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:web")); - speeds.add(createBreakSpeed(speed, "minecraft:bamboo")); - - return createDigger(speeds); - } - - public static NbtMap getHoeDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:leaves2")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves_flowered")); - - speeds.add(createBreakSpeed(speed, "minecraft:sculk")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_catalyst")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_sensor")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_shrieker")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_vein")); - - speeds.add(createBreakSpeed(speed, "minecraft:nether_wart_block")); - speeds.add(createBreakSpeed(speed, "minecraft:warped_wart_block")); - - speeds.add(createBreakSpeed(speed, "minecraft:hay_block")); - speeds.add(createBreakSpeed(speed, "minecraft:moss_block")); - speeds.add(createBreakSpeed(speed, "minecraft:shroomlight")); - speeds.add(createBreakSpeed(speed, "minecraft:sponge")); - speeds.add(createBreakSpeed(speed, "minecraft:target")); - - return createDigger(speeds); - } - - public static NbtMap getShearsDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:web")); - - speeds.add(createBreakSpeed(speed, "minecraft:leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:leaves2")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves_flowered")); - - speeds.add(createBreakSpeed(speed, "minecraft:wool")); - - speeds.add(createBreakSpeed(speed, "minecraft:glow_lichen")); - speeds.add(createBreakSpeed(speed, "minecraft:vine")); - - return createDigger(speeds); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index e32030db6a0..9fed4b6d769 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -36,13 +36,14 @@ import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; import org.geysermc.geyser.api.util.TriState; import org.geysermc.geyser.item.GeyserCustomMappingData; -import org.geysermc.geyser.item.components.ToolBreakSpeedsUtils; import org.geysermc.geyser.item.components.WearableSlot; import org.geysermc.geyser.registry.type.GeyserMappingItem; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; import javax.annotation.Nullable; + +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -226,34 +227,44 @@ private static boolean computeToolProperties(String toolTier, String toolType, N boolean canDestroyInCreative = true; float miningSpeed = 1.0f; - if (toolType.equals("shears")) { - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getShearsDigger(15)); - } else { - int toolSpeed = ToolBreakSpeedsUtils.toolTierToSpeed(toolTier); - switch (toolType) { - case "sword" -> { - miningSpeed = 1.5f; - canDestroyInCreative = false; - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getSwordDigger(toolSpeed)); - componentBuilder.putCompound("minecraft:weapon", NbtMap.EMPTY); - } - case "pickaxe" -> { - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getPickaxeDigger(toolSpeed, toolTier)); - setItemTag(componentBuilder, "pickaxe"); - } - case "axe" -> { - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getAxeDigger(toolSpeed)); - setItemTag(componentBuilder, "axe"); - } - case "shovel" -> { - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getShovelDigger(toolSpeed)); - setItemTag(componentBuilder, "shovel"); - } - case "hoe" -> { - componentBuilder.putCompound("minecraft:digger", ToolBreakSpeedsUtils.getHoeDigger(toolSpeed)); - setItemTag(componentBuilder, "hoe"); - } - } + // This means client side the tool can never destroy a block + // This works because the molang '1' for tags will be true for all blocks and the speed will be 0 + // We want this since we calculate break speed server side in BedrockActionTranslator + List speed = new ArrayList<>(List.of( + NbtMap.builder() + .putCompound("block", NbtMap.builder() + .putString("tags", "1") + .build()) + .putCompound("on_dig", NbtMap.builder() + .putCompound("condition", NbtMap.builder() + .putString("expression", "") + .putInt("version", -1) + .build()) + .putString("event", "tool_durability") + .putString("target", "self") + .build()) + .putInt("speed", 0) + .build() + )); + componentBuilder.putCompound("minecraft:digger", + NbtMap.builder() + .putList("destroy_speeds", NbtType.COMPOUND, speed) + .putCompound("on_dig", NbtMap.builder() + .putCompound("condition", NbtMap.builder() + .putString("expression", "") + .putInt("version", -1) + .build()) + .putString("event", "tool_durability") + .putString("target", "self") + .build()) + .putBoolean("use_efficiency", true) + .build() + ); + + if (toolType.equals("sword")) { + miningSpeed = 1.5f; + canDestroyInCreative = false; + componentBuilder.putCompound("minecraft:weapon", NbtMap.EMPTY); } itemProperties.putBoolean("hand_equipped", true); diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java index 82a8c9de152..bcbb9775028 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java @@ -39,9 +39,9 @@ /** * This is only a separate class for testing purposes so we don't have to load in GeyserImpl in ItemTranslator. */ -final class CustomItemTranslator { +public final class CustomItemTranslator { - static int getCustomItem(CompoundTag nbt, ItemMapping mapping) { + public static int getCustomItem(CompoundTag nbt, ItemMapping mapping) { if (nbt == null) { return -1; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java index 28eaf91838e..252311af532 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java @@ -42,9 +42,13 @@ import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; import org.geysermc.geyser.entity.type.player.SessionPlayerEntity; +import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.SkullCache; +import org.geysermc.geyser.translator.inventory.item.CustomItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.BlockUtils; @@ -148,9 +152,16 @@ public void translate(GeyserSession session, PlayerActionPacket packet) { startBreak.setType(LevelEventType.BLOCK_START_BREAK); startBreak.setPosition(vector.toFloat()); double breakTime = BlockUtils.getSessionBreakTime(session, BlockRegistries.JAVA_BLOCKS.get(blockState)) * 20; + + // If the block is custom or the breaking item is custom, we must keep track of break time ourselves + GeyserItemStack item = session.getPlayerInventory().getItemInHand(); + ItemMapping mapping = item.getMapping(session); + int customItemId = mapping.isTool() ? CustomItemTranslator.getCustomItem(item.getNbt(), mapping) : -1; CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(blockState); - // If the block is custom, we must keep track of when it should break ourselves - if (blockStateOverride != null) { + SkullCache.Skull skull = session.getSkullCache().getSkulls().get(vector); + + session.setBlockBreakStartTime(0); + if (blockStateOverride != null || customItemId > -1 || (skull != null && skull.getCustomRuntimeId() != -1)) { session.setBlockBreakStartTime(System.currentTimeMillis()); } startBreak.setData((int) (65535 / breakTime)); @@ -197,27 +208,26 @@ public void translate(GeyserSession session, PlayerActionPacket packet) { updateBreak.setPosition(vectorFloat); double breakTime = BlockUtils.getSessionBreakTime(session, BlockRegistries.JAVA_BLOCKS.get(breakingBlock)) * 20; - CustomBlockState blockStateOverride = BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.get(breakingBlock); - if (blockStateOverride != null) { - // If the block is custom, we must keep track of when it should break ourselves - long blockBreakStartTime = session.getBlockBreakStartTime(); - if (blockBreakStartTime != 0) { - long timeSinceStart = System.currentTimeMillis() - blockBreakStartTime; - if (timeSinceStart >= breakTime * 50) { - // Play break sound and particle - LevelEventPacket effectPacket = new LevelEventPacket(); - effectPacket.setPosition(vectorFloat); - effectPacket.setType(LevelEventType.PARTICLE_DESTROY_BLOCK); - effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakingBlock)); - session.sendUpstreamPacket(effectPacket); - - // Break the block - ServerboundPlayerActionPacket finishBreakingPacket = new ServerboundPlayerActionPacket(PlayerAction.FINISH_DIGGING, - vector, Direction.VALUES[packet.getFace()], session.getWorldCache().nextPredictionSequence()); - session.sendDownstreamPacket(finishBreakingPacket); - session.setBlockBreakStartTime(0); - break; - } + + // If the block is custom, we must keep track of when it should break ourselves + long blockBreakStartTime = session.getBlockBreakStartTime(); + if (blockBreakStartTime != 0) { + long timeSinceStart = System.currentTimeMillis() - blockBreakStartTime; + // We need to add a slight delay to the break time, otherwise the client breaks blocks too fast + if (timeSinceStart >= (breakTime+=2) * 50) { + // Play break sound and particle + LevelEventPacket effectPacket = new LevelEventPacket(); + effectPacket.setPosition(vectorFloat); + effectPacket.setType(LevelEventType.PARTICLE_DESTROY_BLOCK); + effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakingBlock)); + session.sendUpstreamPacket(effectPacket); + + // Break the block + ServerboundPlayerActionPacket finishBreakingPacket = new ServerboundPlayerActionPacket(PlayerAction.FINISH_DIGGING, + vector, Direction.VALUES[packet.getFace()], session.getWorldCache().nextPredictionSequence()); + session.sendDownstreamPacket(finishBreakingPacket); + session.setBlockBreakStartTime(0); + break; } } From f1bd04a71db4d65dcdca66d44dadaf62406efb56 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 5 Mar 2023 20:26:13 -0800 Subject: [PATCH 066/134] Account for if custom skulls are added on 1st run Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../main/java/org/geysermc/geyser/pack/ResourcePack.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java index 6bc7d4456a2..40b11a88391 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java @@ -28,10 +28,8 @@ import lombok.Getter; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.lifecycle.GeyserLoadResourcePacksEvent; -import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.text.GeyserLocale; -import org.geysermc.geyser.util.FileUtils; import java.io.File; import java.io.IOException; @@ -80,9 +78,7 @@ public static void loadPacks() { } catch (IOException e) { GeyserImpl.getInstance().getLogger().error("Could not create packs directory", e); } - - // As we just created the directory it will be empty - return; + // Still keep going since the user may have defined custom skulls } List resourcePacks; From 4002c1df8d712a264d92b97d235a0db26b292a33 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 6 Mar 2023 22:24:53 -0800 Subject: [PATCH 067/134] Initial framework for extended collision boxes Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../component/CustomBlockComponents.java | 9 +++++++++ .../block/GeyserCustomBlockComponents.java | 15 ++++++++++++++ .../geyser/registry/BlockRegistries.java | 6 ++++++ .../mappings/versions/MappingsReader_v1.java | 20 ++++++++++++++----- .../CustomBlockRegistryPopulator.java | 13 ++++++++++++ 5 files changed, 58 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index a903d167665..40f4fa49661 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -51,6 +51,13 @@ public interface CustomBlockComponents { */ BoxComponent collisionBox(); + /** + * Gets the extended collision box + * Places an invisible collision block above the block to prevent players from jumping on top of it, if defined + * @return The extended collision box. + */ + BoxComponent extendedCollisionBox(); + /** * Gets the display name component * Equivalent to "minecraft:display_name" @@ -153,6 +160,8 @@ interface Builder { Builder collisionBox(BoxComponent collisionBox); + Builder extendedCollisionBox(BoxComponent extendedCollisionBox); + Builder displayName(String displayName); Builder geometry(String geometry); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index ef4679a4f98..beb93709679 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -47,6 +47,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { BoxComponent selectionBox; BoxComponent collisionBox; + BoxComponent extendedCollisionBox; String displayName; String geometry; Map materialInstances; @@ -63,6 +64,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; this.collisionBox = builder.collisionBox; + this.extendedCollisionBox = builder.extendedCollisionBox; this.displayName = builder.displayName; this.geometry = builder.geometry; if (builder.materialInstances.isEmpty()) { @@ -95,6 +97,11 @@ public BoxComponent collisionBox() { return collisionBox; } + @Override + public BoxComponent extendedCollisionBox() { + return extendedCollisionBox; + } + @Override public String displayName() { return displayName; @@ -158,6 +165,7 @@ public Set tags() { public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; + protected BoxComponent extendedCollisionBox; protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); @@ -203,6 +211,13 @@ public Builder collisionBox(BoxComponent collisionBox) { return this; } + @Override + public Builder extendedCollisionBox(BoxComponent extendedCollisionBox) { + validateBox(extendedCollisionBox); + this.extendedCollisionBox = extendedCollisionBox; + return this; + } + @Override public Builder displayName(String displayName) { this.displayName = displayName; diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 67963ce26fc..9bf8ef62390 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -33,6 +33,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.registry.loader.CollisionRegistryLoader; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; @@ -111,6 +112,11 @@ public class BlockRegistries { */ public static final SimpleMappedRegistry CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** + * A registry which stores Java Ids and the extended collision box that should be placed above. + */ + public static final SimpleMappedRegistry CUSTOM_BLOCK_EXTENDED_COLLISION_BOXES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** * A registry which stores skin texture hashes to custom skull blocks. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 6e5f3846ec5..12fd3200fa2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -294,10 +294,12 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); - BoxComponent boxComponent = createBoxComponent(id); + BoxComponent boxComponent = createBoxComponent(id, 0, 16, 0); + BoxComponent extendedboxComponent = createBoxComponent(id, 16, 32, -16); CustomBlockComponents.Builder builder = new CustomBlockComponentsBuilder() .collisionBox(boxComponent) - .selectionBox(boxComponent); + .selectionBox(boxComponent) + .extendedCollisionBox(extendedboxComponent); if (node == null) { // No other components were defined @@ -312,6 +314,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String if (collisionBox != null) { builder.collisionBox(collisionBox); } + BoxComponent extendedCollisionBox = createBoxComponent(node.get("extended_collision_box")); + if (extendedCollisionBox != null) { + builder.extendedCollisionBox(extendedCollisionBox); + } + // We set this to max value by default so that we may dictate the correct destroy time ourselves float destructibleByMining = Float.MAX_VALUE; @@ -404,9 +411,12 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String /** * Creates a {@link BoxComponent} based on a Java block's collision * @param javaId the block's Java ID + * @param minHeight the minimum height of the box + * @param maxHeight the maximum height of the box + * @param heightTranslation the height translation of the box * @return the {@link BoxComponent} */ - private BoxComponent createBoxComponent(int javaId) { + private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHeight, float heightTranslation) { // Some blocks (e.g. plants) have no collision box BlockCollision blockCollision = BlockUtils.getCollision(javaId); if (blockCollision == null) { @@ -425,11 +435,11 @@ private BoxComponent createBoxComponent(int javaId) { // These could be placed above the block when a custom block exceeds this limit // I am hopeful this will be extended slightly since the geometry of blocks can be 1.875^3 float cornerX = MathUtils.clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); - float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY, 0, 16); + float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY + heightTranslation, minHeight, maxHeight); float cornerZ = MathUtils.clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); float sizeX = MathUtils.clamp((float) boundingBox.getSizeX() * 16, 0, 16); - float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16, 0, 16); + float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16 + heightTranslation, minHeight, maxHeight); float sizeZ = MathUtils.clamp((float) boundingBox.getSizeZ() * 16, 0, 16); return new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 3df84799dd3..330411fa908 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -44,6 +44,8 @@ public static void registerCustomBedrockBlocks() { Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); Map customBlockItemOverrides = new HashMap<>(); + Map extendedCollisionBoxes = new HashMap<>(); + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { @@ -69,6 +71,10 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); } CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); + BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); + if (extendedCollisionBox != null) { + extendedCollisionBoxes.put(id, extendedCollisionBox); + } if (oldBlockState != null) { GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); @@ -97,6 +103,10 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C block.states().forEach((javaIdentifier, customBlockState) -> { int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); blockStateOverrides.put(id, customBlockState); + BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); + if (extendedCollisionBox != null) { + extendedCollisionBoxes.put(id, extendedCollisionBox); + } }); }); @@ -108,6 +118,9 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); + + BlockRegistries.CUSTOM_BLOCK_EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); + GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); } /** From 06db476f6004b4402e158723fbb537f06a4c254e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:26:12 -0800 Subject: [PATCH 068/134] Add some notes for the extended collision box impl Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/registry/populator/BlockRegistryPopulator.java | 5 +++++ .../registry/populator/CustomBlockRegistryPopulator.java | 1 + 2 files changed, 6 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 3e3c577f612..11b633ebee0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -134,6 +134,11 @@ public static void registerBedrockBlocks() { NbtMap tag = customBlockStates.get(i); CustomBlockState blockState = customExtBlockStates.get(i); customBlockStateIds.put(blockState, blockStateOrderedMap.getOrDefault(tag, -1)); + // At this point, we have the bedrock runtime ID for our extended collision block, as well as its custom block state + // So then I think what we would prefer for the registry of the collision boxes is having the collision box be the key + // That registry will be used here to check if the given CustomBlockState is an extended collision block + // Then right here we can populate our final registry which maps the java runtime ID to the bedrock runtime ID of our collision block + // So therefore our initial extended collision registry should map to a set of java runtime IDs } remappedVanillaIds = new int[vanillaBlockStates.size()]; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 330411fa908..abfbcdfc709 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -106,6 +106,7 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); if (extendedCollisionBox != null) { extendedCollisionBoxes.put(id, extendedCollisionBox); + // Here and in the API, we will also need to add a method to build proper custom block data based on the extended collision box and add to customBlocks } }); }); From 45d50349708a36c8ac970fac7a968ef534166427 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 8 Mar 2023 22:10:47 -0800 Subject: [PATCH 069/134] We have our extended collision registry Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/org/geysermc/geyser/Constants.java | 3 +- .../block/GeyserCustomBlockComponents.java | 2 +- .../level/block/GeyserCustomBlockData.java | 2 +- .../geyser/registry/BlockRegistries.java | 12 +++-- .../mappings/versions/MappingsReader_v1.java | 7 ++- .../populator/BlockRegistryPopulator.java | 20 +++++--- .../CustomBlockRegistryPopulator.java | 47 +++++++++++++++++-- .../populator/ItemRegistryPopulator.java | 3 +- 8 files changed, 73 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 8422e50e326..a6336a0fc24 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -41,7 +41,8 @@ public final class Constants { static final String SAVED_REFRESH_TOKEN_FILE = "saved-refresh-tokens.json"; - public static final String GEYSER_NAMESPACE = "geyser_custom"; + public static final String GEYSER_CUSTOM_NAMESPACE = "geyser_custom"; + public static final String GEYSER_NAMESPACE = "geyser"; public static final String MINECRAFT_SKIN_SERVER_URL = "https://textures.minecraft.net/texture/"; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index beb93709679..f4ba5985cc7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -193,7 +193,7 @@ private void validateBox(BoxComponent box) { float maxY = minY + box.sizeY(); float maxZ = minZ + box.sizeZ(); if (minX < 0 || minY < 0 || minZ < 0 || maxX > 16 || maxY > 16 || maxZ > 16) { - throw new IllegalArgumentException("Box bounds must be within (0, 0, 0) and (16, 16, 16)"); + throw new IllegalArgumentException("Box bounds must be within (0, 0, 0) and (16, 16, 16). Recieved: (" + minX + ", " + minY + ", " + minZ + ") to (" + maxX + ", " + maxY + ", " + maxZ + ")"); } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index de60c16fa9e..6f6fb8097b0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -94,7 +94,7 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { @Override public @NonNull String identifier() { - return Constants.GEYSER_NAMESPACE + ":" + name; + return Constants.GEYSER_CUSTOM_NAMESPACE + ":" + name; } @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 9bf8ef62390..ad07740a739 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -33,7 +33,6 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.registry.loader.CollisionRegistryLoader; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; @@ -45,6 +44,8 @@ import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.collection.Object2IntBiMap; +import java.util.Set; + /** * Holds all the block registries in Geyser. */ @@ -113,9 +114,14 @@ public class BlockRegistries { public static final SimpleMappedRegistry CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); /** - * A registry which stores Java Ids and the extended collision box that should be placed above. + * A registry which stores Custom Block Data for extended collision boxes and the Java IDs of blocks that will have said extended collision boxes placed above them. + */ + public static final SimpleMappedRegistry> EXTENDED_COLLISION_BOXES_DATA = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + + /** + * A registry which stores Java IDs of blocks that will have a custom collision block placed above them and the Bedrock ID of said collision block. */ - public static final SimpleMappedRegistry CUSTOM_BLOCK_EXTENDED_COLLISION_BOXES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + public static final SimpleMappedRegistry EXTENDED_COLLISION_BOXES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); /** * A registry which stores skin texture hashes to custom skull blocks. diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 12fd3200fa2..f65df3a04a4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -45,7 +45,6 @@ import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; -import org.geysermc.geyser.registry.type.BlockMapping; import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; @@ -435,14 +434,14 @@ private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHe // These could be placed above the block when a custom block exceeds this limit // I am hopeful this will be extended slightly since the geometry of blocks can be 1.875^3 float cornerX = MathUtils.clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); - float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY + heightTranslation, minHeight, maxHeight); + float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY, minHeight, maxHeight); float cornerZ = MathUtils.clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); float sizeX = MathUtils.clamp((float) boundingBox.getSizeX() * 16, 0, 16); - float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16 + heightTranslation, minHeight, maxHeight); + float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16, minHeight, maxHeight); float sizeZ = MathUtils.clamp((float) boundingBox.getSizeZ() * 16, 0, 16); - return new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); + return new BoxComponent(cornerX, cornerY + heightTranslation, cornerZ, sizeX, sizeY + heightTranslation, sizeZ); } /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 11b633ebee0..352a120253d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -56,9 +56,11 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.BiFunction; import java.util.zip.GZIPInputStream; @@ -130,17 +132,23 @@ public static void registerBedrockBlocks() { Object2IntMap customBlockStateIds = Object2IntMaps.emptyMap(); if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { customBlockStateIds = new Object2IntOpenHashMap<>(customExtBlockStates.size()); + Map extendedCollisionBoxes = new HashMap<>(); for (int i = 0; i < customExtBlockStates.size(); i++) { NbtMap tag = customBlockStates.get(i); CustomBlockState blockState = customExtBlockStates.get(i); - customBlockStateIds.put(blockState, blockStateOrderedMap.getOrDefault(tag, -1)); - // At this point, we have the bedrock runtime ID for our extended collision block, as well as its custom block state - // So then I think what we would prefer for the registry of the collision boxes is having the collision box be the key - // That registry will be used here to check if the given CustomBlockState is an extended collision block - // Then right here we can populate our final registry which maps the java runtime ID to the bedrock runtime ID of our collision block - // So therefore our initial extended collision registry should map to a set of java runtime IDs + int bedrockRuntimeId = blockStateOrderedMap.getOrDefault(tag, -1); + customBlockStateIds.put(blockState, bedrockRuntimeId); + + Set extendedCollisionjavaIds = BlockRegistries.EXTENDED_COLLISION_BOXES_DATA.getOrDefault(blockState.block(), null); + if (extendedCollisionjavaIds != null) { + for (int javaId : extendedCollisionjavaIds) { + extendedCollisionBoxes.put(javaId, bedrockRuntimeId); + } + } } + BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); + remappedVanillaIds = new int[vanillaBlockStates.size()]; for (int i = 0; i < vanillaBlockStates.size(); i++) { remappedVanillaIds[i] = blockStateOrderedMap.getOrDefault(vanillaBlockStates.get(i), -1); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index abfbcdfc709..cd0d13cbb0e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -8,6 +8,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; @@ -21,12 +22,15 @@ import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.level.block.GeyserCustomBlockState; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; +import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -44,7 +48,9 @@ public static void registerCustomBedrockBlocks() { Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); Map customBlockItemOverrides = new HashMap<>(); - Map extendedCollisionBoxes = new HashMap<>(); + Map> extendedCollisionBoxes = new HashMap<>(); + Map extendedCollisionBoxSet = new HashMap<>(); + int[] extendedCollisionIndex = {0}; GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override @@ -73,7 +79,17 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); if (extendedCollisionBox != null) { - extendedCollisionBoxes.put(id, extendedCollisionBox); + CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.getOrDefault(extendedCollisionBox, null); + if (extendedCollisionBlock == null) { + extendedCollisionBlock = createExtendedCollisionBlock(extendedCollisionBox, extendedCollisionIndex[0]++); + extendedCollisionBoxes.put(extendedCollisionBlock, new HashSet<>(id)); + customBlocks.add(extendedCollisionBlock); + extendedCollisionBoxSet.put(extendedCollisionBox, extendedCollisionBlock); + } else { + Set existingJavaIds = extendedCollisionBoxes.getOrDefault(extendedCollisionBlock, new HashSet<>()); + existingJavaIds.add(id); + extendedCollisionBoxes.put(extendedCollisionBlock, existingJavaIds); + } } if (oldBlockState != null) { GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + @@ -105,8 +121,17 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C blockStateOverrides.put(id, customBlockState); BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); if (extendedCollisionBox != null) { - extendedCollisionBoxes.put(id, extendedCollisionBox); - // Here and in the API, we will also need to add a method to build proper custom block data based on the extended collision box and add to customBlocks + CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.getOrDefault(extendedCollisionBox, null); + if (extendedCollisionBlock == null) { + extendedCollisionBlock = createExtendedCollisionBlock(extendedCollisionBox, extendedCollisionIndex[0]++); + extendedCollisionBoxes.put(extendedCollisionBlock, new HashSet<>(id)); + customBlocks.add(extendedCollisionBlock); + extendedCollisionBoxSet.put(extendedCollisionBox, extendedCollisionBlock); + } else { + Set existingJavaIds = extendedCollisionBoxes.getOrDefault(extendedCollisionBlock, new HashSet<>()); + existingJavaIds.add(id); + extendedCollisionBoxes.put(extendedCollisionBlock, existingJavaIds); + } } }); }); @@ -120,7 +145,7 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); - BlockRegistries.CUSTOM_BLOCK_EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); + BlockRegistries.EXTENDED_COLLISION_BOXES_DATA.set(extendedCollisionBoxes); GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); } @@ -347,4 +372,16 @@ private static List convertPlacementFilter(List pla return conditions; } + + private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComponent, int extendedCollisionBlock) { + CustomBlockData customBlockData = new CustomBlockDataBuilder() + .name(Constants.GEYSER_NAMESPACE + ":extended_collision_" + extendedCollisionBlock) + .components( + new CustomBlockComponentsBuilder() + .collisionBox(boxComponent) + .selectionBox(new BoxComponent(0, 0, 0, 0, 0, 0)) + .build()) + .build(); + return customBlockData; + } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 2aed4eed859..bfd683ceeb0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -38,7 +38,6 @@ import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.StartGamePacket; import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; -import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; import com.nukkitx.protocol.bedrock.v567.Bedrock_v567; import it.unimi.dsi.fastutil.ints.*; @@ -497,7 +496,7 @@ public boolean register(@NonNull NonVanillaCustomItemData customItemData) { for (CustomItemData customItem : customItemsToLoad) { int customProtocolId = nextFreeBedrockId++; - String customItemName = Constants.GEYSER_NAMESPACE + ":" + customItem.name(); + String customItemName = Constants.GEYSER_CUSTOM_NAMESPACE + ":" + customItem.name(); if (!registeredItemNames.add(customItemName)) { if (firstMappingsPass) { GeyserImpl.getInstance().getLogger().error("Custom item name '" + customItem.name() + "' already exists and was registered again! Skipping..."); From 0bd14899a19c05ee49ff95b729dfff748e68bc24 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 8 Mar 2023 23:06:10 -0800 Subject: [PATCH 070/134] Notes for me Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/level/JavaLevelChunkWithLightTranslator.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 9e9b2abd87c..38e2ff64412 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -141,6 +141,16 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke section.getBlockStorageArray()[1].setFullBlock(xzy, session.getBlockMappings().getBedrockWaterId()); } + int bedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + if (bedrockExtendedCollisionId != -1) { + int y = xzy & 0xF; + if (y < 15) { + // We will set within this chunk section + } else { + // We will set within the next chunk section + } + } + // Check if block is piston or flower to see if we'll need to create additional block entities, as they're only block entities in Bedrock if (BlockStateValues.getFlowerPotValues().containsKey(javaId) || BlockStateValues.getPistonValues().containsKey(javaId) || BlockStateValues.isNonWaterCauldron(javaId)) { bedrockBlockEntities.add(BedrockOnlyBlockEntity.getTag(session, From 5f5159d30e095041921ffbfa20ba57c7db953352 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 11 Mar 2023 01:48:51 -0800 Subject: [PATCH 071/134] Extended collision boxes almost work Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../mappings/versions/MappingsReader_v1.java | 4 +- .../JavaLevelChunkWithLightTranslator.java | 54 +++++++++++++++---- .../org/geysermc/geyser/util/ChunkUtils.java | 25 +++++++-- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index f65df3a04a4..2c399e50beb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -294,11 +294,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); BoxComponent boxComponent = createBoxComponent(id, 0, 16, 0); - BoxComponent extendedboxComponent = createBoxComponent(id, 16, 32, -16); + BoxComponent extendedBoxComponent = createBoxComponent(id, 16, 32, -16); CustomBlockComponents.Builder builder = new CustomBlockComponentsBuilder() .collisionBox(boxComponent) .selectionBox(boxComponent) - .extendedCollisionBox(extendedboxComponent); + .extendedCollisionBox(extendedBoxComponent); if (node == null) { // No other components were defined diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 38e2ff64412..ecc5e9a5cb0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -69,6 +69,7 @@ import org.geysermc.geyser.util.ChunkUtils; import java.io.IOException; +import java.util.Arrays; import java.util.BitSet; import java.util.List; import java.util.Map; @@ -109,6 +110,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke try { ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); + int runningSectionExtendedCollisions[] = new int[BlockStorage.SIZE]; for (int sectionY = 0; sectionY < chunkSize; sectionY++) { ChunkSection javaSection = session.getCodecHelper().readChunkSection(in, biomeGlobalPalette); javaChunks[sectionY] = javaSection.getChunkData(); @@ -141,14 +143,18 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke section.getBlockStorageArray()[1].setFullBlock(xzy, session.getBlockMappings().getBedrockWaterId()); } - int bedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); - if (bedrockExtendedCollisionId != -1) { - int y = xzy & 0xF; - if (y < 15) { - // We will set within this chunk section - } else { - // We will set within the next chunk section - } + // Extended collision blocks + switch (yzx) { + case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); + case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); + } + if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + section.getBlockStorageArray()[0].setFullBlock(xzy, runningSectionExtendedCollisions[yzx]); + continue; + } + int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + if (aboveBedrockExtendedCollisionId != -1) { + runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; } // Check if block is piston or flower to see if we'll need to create additional block entities, as they're only block entities in Bedrock @@ -222,7 +228,23 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // No blocks are waterlogged, simply convert coordinate order // This could probably be optimized further... for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) { - bedrockData.set(indexYZXtoXZY(yzx), javaData.get(yzx)); + int paletteId = javaData.get(yzx); + int xzy = indexYZXtoXZY(yzx); + bedrockData.set(xzy, paletteId); + + switch (yzx) { + case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); + case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); + } + int javaId = javaPalette.idToState(paletteId); + if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); + continue; + } + int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + if (aboveBedrockExtendedCollisionId != -1) { + runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + } } layers = new BlockStorage[]{ layer0 }; @@ -238,6 +260,20 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke if (waterloggedPaletteIds.get(paletteId)) { layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } + + switch (yzx) { + case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); + case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); + } + int javaId = javaPalette.idToState(paletteId); + if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); + continue; + } + int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + if (aboveBedrockExtendedCollisionId != -1) { + runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + } } // V1 palette diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 717e40451ce..90ee2adfea5 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -129,7 +129,7 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, // Otherwise, let's still store our reference to the item frame, but let the new block take precedence for now } - int blockId = session.getBlockMappings().getBedrockBlockId(blockState); + int bedrockId = session.getBlockMappings().getBedrockBlockId(blockState); int skullVariant = BlockStateValues.getSkullVariant(blockState); if (skullVariant == -1) { // Skull is gone @@ -138,17 +138,36 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, // The changed block was a player skull so check if a custom block was defined for this skull SkullCache.Skull skull = session.getSkullCache().updateSkull(position, blockState); if (skull != null && skull.getCustomRuntimeId() != -1) { - blockId = skull.getCustomRuntimeId(); + bedrockId = skull.getCustomRuntimeId(); } } + // Extended collision boxes for custom blocks + int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(blockState, -1); + int aboveBlock = session.getChunkCache().getBlockAt(position.getX(), position.getY() + 1, position.getZ()); + if (aboveBedrockExtendedCollisionId != -1) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setRuntimeId(aboveBedrockExtendedCollisionId); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } else if (aboveBlock == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockAirId()); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } + // Prevent moving_piston from being placed // It's used for extending piston heads, but it isn't needed on Bedrock and causes pistons to flicker if (!BlockStateValues.isMovingPiston(blockState)) { UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(position); - updateBlockPacket.setRuntimeId(blockId); + updateBlockPacket.setRuntimeId(bedrockId); updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NEIGHBORS); updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); session.sendUpstreamPacket(updateBlockPacket); From 7f85e909b8fb5be7299584f167ebdeb02714bf3e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 12 Mar 2023 18:53:10 -0700 Subject: [PATCH 072/134] Extended collision boxes actually work Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../component/CustomBlockComponents.java | 9 -- .../java/org/geysermc/geyser/Constants.java | 1 - .../block/GeyserCustomBlockComponents.java | 15 ---- .../util/CustomBlockComponentsMapping.java | 33 ++++++++ .../mappings/util/CustomBlockMapping.java | 3 +- .../util/CustomBlockStateBuilderMapping.java | 35 ++++++++ .../util/CustomBlockStateMapping.java | 33 ++++++++ .../mappings/versions/MappingsReader_v1.java | 82 +++++++++++++------ .../CustomBlockRegistryPopulator.java | 33 +++----- 9 files changed, 168 insertions(+), 76 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java create mode 100644 core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 40f4fa49661..a903d167665 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -51,13 +51,6 @@ public interface CustomBlockComponents { */ BoxComponent collisionBox(); - /** - * Gets the extended collision box - * Places an invisible collision block above the block to prevent players from jumping on top of it, if defined - * @return The extended collision box. - */ - BoxComponent extendedCollisionBox(); - /** * Gets the display name component * Equivalent to "minecraft:display_name" @@ -160,8 +153,6 @@ interface Builder { Builder collisionBox(BoxComponent collisionBox); - Builder extendedCollisionBox(BoxComponent extendedCollisionBox); - Builder displayName(String displayName); Builder geometry(String geometry); diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index a6336a0fc24..8090d46d522 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -42,7 +42,6 @@ public final class Constants { static final String SAVED_REFRESH_TOKEN_FILE = "saved-refresh-tokens.json"; public static final String GEYSER_CUSTOM_NAMESPACE = "geyser_custom"; - public static final String GEYSER_NAMESPACE = "geyser"; public static final String MINECRAFT_SKIN_SERVER_URL = "https://textures.minecraft.net/texture/"; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index f4ba5985cc7..c58d35fea4c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -47,7 +47,6 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { BoxComponent selectionBox; BoxComponent collisionBox; - BoxComponent extendedCollisionBox; String displayName; String geometry; Map materialInstances; @@ -64,7 +63,6 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.selectionBox = builder.selectionBox; this.collisionBox = builder.collisionBox; - this.extendedCollisionBox = builder.extendedCollisionBox; this.displayName = builder.displayName; this.geometry = builder.geometry; if (builder.materialInstances.isEmpty()) { @@ -97,11 +95,6 @@ public BoxComponent collisionBox() { return collisionBox; } - @Override - public BoxComponent extendedCollisionBox() { - return extendedCollisionBox; - } - @Override public String displayName() { return displayName; @@ -165,7 +158,6 @@ public Set tags() { public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; - protected BoxComponent extendedCollisionBox; protected String displayName; protected String geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); @@ -211,13 +203,6 @@ public Builder collisionBox(BoxComponent collisionBox) { return this; } - @Override - public Builder extendedCollisionBox(BoxComponent extendedCollisionBox) { - validateBox(extendedCollisionBox); - this.extendedCollisionBox = extendedCollisionBox; - return this; - } - @Override public Builder displayName(String displayName) { this.displayName = displayName; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java new file mode 100644 index 00000000000..0d32463dc5e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.mappings.util; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; + +public record CustomBlockComponentsMapping(@NonNull CustomBlockComponents components, BoxComponent extendedCollisionBox) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index 259189826f0..7b857e4b9bd 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -29,12 +29,11 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockState; /** * This class is used to store a custom block mappings, which contain all of the * data required to register a custom block that overrides a group of java block * states. */ -public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, boolean overrideItem) { +public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, boolean overrideItem) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java new file mode 100644 index 00000000000..2b4eb7c5dfb --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.mappings.util; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; + +import java.util.function.Function; + +public record CustomBlockStateBuilderMapping(@NonNull Function builder, BoxComponent extendedCollisionBox) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java new file mode 100644 index 00000000000..30794879491 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.mappings.util; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; + +public record CustomBlockStateMapping(@NonNull CustomBlockState state, BoxComponent extendedCollisionBox) { +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 2c399e50beb..48d50afb65f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -44,7 +44,10 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; +import org.geysermc.geyser.registry.mappings.util.CustomBlockComponentsMapping; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; +import org.geysermc.geyser.registry.mappings.util.CustomBlockStateBuilderMapping; +import org.geysermc.geyser.registry.mappings.util.CustomBlockStateMapping; import org.geysermc.geyser.translator.collision.BlockCollision; import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; @@ -194,13 +197,14 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node if (BlockRegistries.JAVA_IDENTIFIERS.get().containsKey(identifier)) { // There is only one Java block state to override + CustomBlockComponentsMapping componentsMapping = createCustomBlockComponentsMapping(node, identifier, name); CustomBlockData blockData = customBlockDataBuilder - .components(createCustomBlockComponents(node, identifier, name)) + .components(componentsMapping.components()) .build(); - return new CustomBlockMapping(blockData, Map.of(identifier, blockData.defaultBlockState()), identifier, !onlyOverrideStates); + return new CustomBlockMapping(blockData, Map.of(identifier, new CustomBlockStateMapping(blockData.defaultBlockState(), componentsMapping.extendedCollisionBox())), identifier, !onlyOverrideStates); } - Map componentsMap = new LinkedHashMap<>(); + Map componentsMap = new LinkedHashMap<>(); JsonNode stateOverrides = node.get("state_overrides"); if (stateOverrides != null && stateOverrides.isObject()) { @@ -212,7 +216,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node if (!BlockRegistries.JAVA_IDENTIFIERS.get().containsKey(state)) { throw new InvalidCustomMappingsFileException("Unknown Java block state: " + state + " for state_overrides."); } - componentsMap.put(state, createCustomBlockComponents(overrideEntry.getValue(), state, name)); + componentsMap.put(state, createCustomBlockComponentsMapping(overrideEntry.getValue(), state, name)); } } if (componentsMap.isEmpty() && onlyOverrideStates) { @@ -225,7 +229,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node .stream() .filter(s -> s.startsWith(identifier + "[")) .filter(Predicate.not(componentsMap::containsKey)) - .forEach(state -> componentsMap.put(state, createCustomBlockComponents(null, state, name))); + .forEach(state -> componentsMap.put(state, createCustomBlockComponentsMapping(null, state, name))); } if (componentsMap.isEmpty()) { @@ -235,20 +239,21 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node // We pass in the first state and just use the hitbox from that as the default // Each state will have its own so this is fine String firstState = componentsMap.keySet().iterator().next(); - customBlockDataBuilder.components(createCustomBlockComponents(node, firstState, name)); + CustomBlockComponentsMapping firstComponentsMapping = createCustomBlockComponentsMapping(node, firstState, name); + customBlockDataBuilder.components(firstComponentsMapping.components()); return createCustomBlockMapping(customBlockDataBuilder, componentsMap, identifier, !onlyOverrideStates); } - private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder customBlockDataBuilder, Map componentsMap, String identifier, boolean overrideItem) { + private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder customBlockDataBuilder, Map componentsMap, String identifier, boolean overrideItem) { Map> valuesMap = new Object2ObjectOpenHashMap<>(); List permutations = new ArrayList<>(); - Map> blockStateBuilders = new Object2ObjectOpenHashMap<>(); + Map blockStateBuilders = new Object2ObjectOpenHashMap<>(); // For each Java block state, extract the property values, create a CustomBlockPermutation, // and a CustomBlockState builder - for (Map.Entry entry : componentsMap.entrySet()) { + for (Map.Entry entry : componentsMap.entrySet()) { String state = entry.getKey(); String[] pairs = splitStateString(state); @@ -267,8 +272,8 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust blockStateBuilder = blockStateBuilder.andThen(builder -> builder.stringProperty(property, value)); } - permutations.add(new CustomBlockPermutation(entry.getValue(), String.join(" && ", conditions))); - blockStateBuilders.put(state, blockStateBuilder.andThen(CustomBlockState.Builder::build)); + permutations.add(new CustomBlockPermutation(entry.getValue().components(), String.join(" && ", conditions))); + blockStateBuilders.put(state, new CustomBlockStateBuilderMapping(blockStateBuilder.andThen(CustomBlockState.Builder::build), entry.getValue().extendedCollisionBox())); } valuesMap.forEach((key, value) -> customBlockDataBuilder.stringProperty(key, new ArrayList<>(value))); @@ -277,8 +282,8 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust .permutations(permutations) .build(); // Build CustomBlockStates for each Java block state we wish to override - Map states = blockStateBuilders.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().apply(customBlockData.blockStateBuilder()))); + Map states = blockStateBuilders.entrySet().stream() + .collect(Collectors.toMap(Map.Entry::getKey, e -> new CustomBlockStateMapping(e.getValue().builder().apply(customBlockData.blockStateBuilder()), e.getValue().extendedCollisionBox()))); return new CustomBlockMapping(customBlockData, states, identifier, overrideItem); } @@ -290,19 +295,18 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust * @param name the name of the custom block * @return the {@link CustomBlockComponents} object */ - private CustomBlockComponents createCustomBlockComponents(JsonNode node, String stateKey, String name) { + private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode node, String stateKey, String name) { // This is needed to find the correct selection box for the given block int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(stateKey, -1); - BoxComponent boxComponent = createBoxComponent(id, 0, 16, 0); - BoxComponent extendedBoxComponent = createBoxComponent(id, 16, 32, -16); + BoxComponent boxComponent = createBoxComponent(id); + BoxComponent extendedBoxComponent = createExtendedBoxComponent(id); CustomBlockComponents.Builder builder = new CustomBlockComponentsBuilder() .collisionBox(boxComponent) - .selectionBox(boxComponent) - .extendedCollisionBox(extendedBoxComponent); + .selectionBox(boxComponent); if (node == null) { // No other components were defined - return builder.build(); + return new CustomBlockComponentsMapping(builder.build(), extendedBoxComponent); } BoxComponent selectionBox = createBoxComponent(node.get("selection_box")); @@ -315,7 +319,7 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String } BoxComponent extendedCollisionBox = createBoxComponent(node.get("extended_collision_box")); if (extendedCollisionBox != null) { - builder.extendedCollisionBox(extendedCollisionBox); + extendedBoxComponent = extendedCollisionBox; } @@ -404,11 +408,11 @@ private CustomBlockComponents createCustomBlockComponents(JsonNode node, String builder.tags(tagsSet); } - return builder.build(); + return new CustomBlockComponentsMapping(builder.build(), extendedBoxComponent); } /** - * Creates a {@link BoxComponent} based on a Java block's collision + * Creates a {@link BoxComponent} based on a Java block's collision with provided bounds and offsets * @param javaId the block's Java ID * @param minHeight the minimum height of the box * @param maxHeight the maximum height of the box @@ -428,11 +432,6 @@ private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHe float offsetY = (float) boundingBox.getSizeY() * 8; float offsetZ = (float) boundingBox.getSizeZ() * 8; - // Unfortunately we need to clamp the values here to an effective size of one block - // This is quite a pain for anything like fences, as the player can just jump over them - // One possible solution would be to create invisible blocks that we use only for collision box - // These could be placed above the block when a custom block exceeds this limit - // I am hopeful this will be extended slightly since the geometry of blocks can be 1.875^3 float cornerX = MathUtils.clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY, minHeight, maxHeight); float cornerZ = MathUtils.clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); @@ -444,6 +443,35 @@ private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHe return new BoxComponent(cornerX, cornerY + heightTranslation, cornerZ, sizeX, sizeY + heightTranslation, sizeZ); } + /** + * Creates a {@link BoxComponent} based on a Java block's collision + * @param javaId the block's Java ID + * @return the {@link BoxComponent} + */ + private BoxComponent createBoxComponent(int javaId) { + return createBoxComponent(javaId, 0, 16, 0); + } + + /** + * Creates the {@link BoxComponent} for an extended collision box based on a Java block's collision + * @param javaId the block's Java ID + * @return the {@link BoxComponent} or null if the block's collision box would not exceed 16 y units + */ + private BoxComponent createExtendedBoxComponent(int javaId) { + BlockCollision blockCollision = BlockUtils.getCollision(javaId); + if (blockCollision == null) { + return null; + } + BoundingBox boundingBox = blockCollision.getBoundingBoxes()[0]; + float offsetY = (float) boundingBox.getSizeY() * 8; + float cornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; + float sizeY = (float) boundingBox.getSizeY() * 16; + if (cornerY > 16 || sizeY > 16) { + return createBoxComponent(javaId, 16, 32, -16); + } + return null; + } + /** * Creates a {@link BoxComponent} from a JSON Node * @param node the JSON node diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index cd0d13cbb0e..805513368ce 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -48,9 +48,6 @@ public static void registerCustomBedrockBlocks() { Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); Map customBlockItemOverrides = new HashMap<>(); - Map> extendedCollisionBoxes = new HashMap<>(); - Map extendedCollisionBoxSet = new HashMap<>(); - int[] extendedCollisionIndex = {0}; GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override @@ -77,20 +74,6 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); } CustomBlockState oldBlockState = blockStateOverrides.put(id, customBlockState); - BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); - if (extendedCollisionBox != null) { - CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.getOrDefault(extendedCollisionBox, null); - if (extendedCollisionBlock == null) { - extendedCollisionBlock = createExtendedCollisionBlock(extendedCollisionBox, extendedCollisionIndex[0]++); - extendedCollisionBoxes.put(extendedCollisionBlock, new HashSet<>(id)); - customBlocks.add(extendedCollisionBlock); - extendedCollisionBoxSet.put(extendedCollisionBox, extendedCollisionBlock); - } else { - Set existingJavaIds = extendedCollisionBoxes.getOrDefault(extendedCollisionBlock, new HashSet<>()); - existingJavaIds.add(id); - extendedCollisionBoxes.put(extendedCollisionBlock, existingJavaIds); - } - } if (oldBlockState != null) { GeyserImpl.getInstance().getLogger().debug("Duplicate block state override for Java Identifier: " + javaIdentifier + " Old override: " + oldBlockState.name() + " New override: " + customBlockState.name()); @@ -110,6 +93,9 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C customBlocks.add(customSkull.getCustomBlockData()); } + Map> extendedCollisionBoxes = new HashMap<>(); + Map extendedCollisionBoxSet = new HashMap<>(); + int[] extendedCollisionIndex = {0}; MappingsConfigReader mappingsConfigReader = new MappingsConfigReader(); mappingsConfigReader.loadBlockMappingsFromJson((key, block) -> { customBlocks.add(block.data()); @@ -118,13 +104,13 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C } block.states().forEach((javaIdentifier, customBlockState) -> { int id = BlockRegistries.JAVA_IDENTIFIERS.getOrDefault(javaIdentifier, -1); - blockStateOverrides.put(id, customBlockState); - BoxComponent extendedCollisionBox = customBlockState.block().components().extendedCollisionBox(); + blockStateOverrides.put(id, customBlockState.state()); + BoxComponent extendedCollisionBox = customBlockState.extendedCollisionBox(); if (extendedCollisionBox != null) { CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.getOrDefault(extendedCollisionBox, null); if (extendedCollisionBlock == null) { extendedCollisionBlock = createExtendedCollisionBlock(extendedCollisionBox, extendedCollisionIndex[0]++); - extendedCollisionBoxes.put(extendedCollisionBlock, new HashSet<>(id)); + extendedCollisionBoxes.computeIfAbsent(extendedCollisionBlock, k -> new HashSet<>()).add(id); customBlocks.add(extendedCollisionBlock); extendedCollisionBoxSet.put(extendedCollisionBox, extendedCollisionBlock); } else { @@ -375,11 +361,14 @@ private static List convertPlacementFilter(List pla private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComponent, int extendedCollisionBlock) { CustomBlockData customBlockData = new CustomBlockDataBuilder() - .name(Constants.GEYSER_NAMESPACE + ":extended_collision_" + extendedCollisionBlock) + .name("extended_collision_" + extendedCollisionBlock) .components( new CustomBlockComponentsBuilder() .collisionBox(boxComponent) - .selectionBox(new BoxComponent(0, 0, 0, 0, 0, 0)) + .selectionBox(BoxComponent.EMPTY_BOX) + .materialInstance("*", new MaterialInstance("glass", "alpha_test", false, false)) + .lightDampening(0) + .geometry("geometry.invisible") .build()) .build(); return customBlockData; From b36ccbef1940568d3a828a9b37c46606e0840c58 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 13 Mar 2023 21:05:31 -0700 Subject: [PATCH 073/134] Consider all hitboxes in calculation Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../mappings/versions/MappingsReader_v1.java | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 48d50afb65f..9857768e9c0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -414,33 +414,49 @@ private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode /** * Creates a {@link BoxComponent} based on a Java block's collision with provided bounds and offsets * @param javaId the block's Java ID - * @param minHeight the minimum height of the box - * @param maxHeight the maximum height of the box * @param heightTranslation the height translation of the box * @return the {@link BoxComponent} */ - private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHeight, float heightTranslation) { + private BoxComponent createBoxComponent(int javaId, float heightTranslation) { // Some blocks (e.g. plants) have no collision box BlockCollision blockCollision = BlockUtils.getCollision(javaId); if (blockCollision == null) { return BoxComponent.EMPTY_BOX; } - BoundingBox boundingBox = blockCollision.getBoundingBoxes()[0]; - - float offsetX = (float) boundingBox.getSizeX() * 8; - float offsetY = (float) boundingBox.getSizeY() * 8; - float offsetZ = (float) boundingBox.getSizeZ() * 8; - - float cornerX = MathUtils.clamp((float) boundingBox.getMiddleX() * 16 - 8 - offsetX, -8, 8); - float cornerY = MathUtils.clamp((float) boundingBox.getMiddleY() * 16 - offsetY, minHeight, maxHeight); - float cornerZ = MathUtils.clamp((float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ, -8, 8); - - float sizeX = MathUtils.clamp((float) boundingBox.getSizeX() * 16, 0, 16); - float sizeY = MathUtils.clamp((float) boundingBox.getSizeY() * 16, minHeight, maxHeight); - float sizeZ = MathUtils.clamp((float) boundingBox.getSizeZ() * 16, 0, 16); - - return new BoxComponent(cornerX, cornerY + heightTranslation, cornerZ, sizeX, sizeY + heightTranslation, sizeZ); + Set bottomCornerXs = new ObjectOpenHashSet<>(); + Set bottomCornerYs = new ObjectOpenHashSet<>(); + Set bottomCornerZs = new ObjectOpenHashSet<>(); + Set topCornerXs = new ObjectOpenHashSet<>(); + Set topCornerYs = new ObjectOpenHashSet<>(); + Set topCornerZs = new ObjectOpenHashSet<>(); + for (BoundingBox boundingBox : blockCollision.getBoundingBoxes()) { + float offsetX = (float) boundingBox.getSizeX() * 8; + float offsetY = (float) boundingBox.getSizeY() * 8; + float offsetZ = (float) boundingBox.getSizeZ() * 8; + + float bottomCornerX = (float) boundingBox.getMiddleX() * 16 - 8 - offsetX; + float bottomCornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; + float bottomCornerZ = (float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ; + + bottomCornerXs.add(bottomCornerX); + bottomCornerYs.add(bottomCornerY); + bottomCornerZs.add(bottomCornerZ); + + topCornerXs.add((float) boundingBox.getSizeX() * 16 + bottomCornerX); + topCornerYs.add((float) boundingBox.getSizeY() * 16 + bottomCornerY); + topCornerZs.add((float) boundingBox.getSizeZ() * 16 + bottomCornerZ); + } + + float cornerX = MathUtils.clamp(Collections.min(bottomCornerXs), -8, 8); + float cornerY = MathUtils.clamp(Collections.min(bottomCornerYs) + heightTranslation, 0, 16); + float cornerZ = MathUtils.clamp(Collections.min(bottomCornerZs), -8, 8); + + float sizeX = MathUtils.clamp(Collections.max(topCornerXs) - cornerX, 0, 16); + float sizeY = MathUtils.clamp(Collections.max(topCornerYs) - cornerY + heightTranslation, 0, 16); + float sizeZ = MathUtils.clamp(Collections.max(topCornerZs) - cornerZ, 0 ,16); + + return new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); } /** @@ -449,7 +465,7 @@ private BoxComponent createBoxComponent(int javaId, float minHeight, float maxHe * @return the {@link BoxComponent} */ private BoxComponent createBoxComponent(int javaId) { - return createBoxComponent(javaId, 0, 16, 0); + return createBoxComponent(javaId, 0); } /** @@ -467,7 +483,7 @@ private BoxComponent createExtendedBoxComponent(int javaId) { float cornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; float sizeY = (float) boundingBox.getSizeY() * 16; if (cornerY > 16 || sizeY > 16) { - return createBoxComponent(javaId, 16, 32, -16); + return createBoxComponent(javaId, -16); } return null; } From 553ea3e5f322a3b9ae0f4941f486453ff47afebd Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 13 Mar 2023 22:06:41 -0700 Subject: [PATCH 074/134] X is mirrored... Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/registry/mappings/versions/MappingsReader_v1.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 9857768e9c0..2d5d859a305 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -435,7 +435,7 @@ private BoxComponent createBoxComponent(int javaId, float heightTranslation) { float offsetY = (float) boundingBox.getSizeY() * 8; float offsetZ = (float) boundingBox.getSizeZ() * 8; - float bottomCornerX = (float) boundingBox.getMiddleX() * 16 - 8 - offsetX; + float bottomCornerX = (float) Math.abs(boundingBox.getMiddleX() - 1) * 16 - 8 - offsetX; float bottomCornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; float bottomCornerZ = (float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ; From eb5e281735acedea5b22a2a7e97f3c25d739f01d Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 19 Mar 2023 02:20:34 -0700 Subject: [PATCH 075/134] Extended collision boxes are much improved Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/registry/BlockRegistries.java | 7 +- .../populator/BlockRegistryPopulator.java | 10 +- .../CustomBlockRegistryPopulator.java | 3 +- .../geyser/registry/type/BlockMappings.java | 2 + .../JavaLevelChunkWithLightTranslator.java | 99 +++++++++++++------ .../org/geysermc/geyser/util/ChunkUtils.java | 34 ++++--- 6 files changed, 98 insertions(+), 57 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index ad07740a739..21a792fc5d3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -116,12 +116,7 @@ public class BlockRegistries { /** * A registry which stores Custom Block Data for extended collision boxes and the Java IDs of blocks that will have said extended collision boxes placed above them. */ - public static final SimpleMappedRegistry> EXTENDED_COLLISION_BOXES_DATA = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); - - /** - * A registry which stores Java IDs of blocks that will have a custom collision block placed above them and the Bedrock ID of said collision block. - */ - public static final SimpleMappedRegistry EXTENDED_COLLISION_BOXES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + public static final SimpleMappedRegistry> EXTENDED_COLLISION_BOXES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); /** * A registry which stores skin texture hashes to custom skull blocks. diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index da2572d72e6..52baa9a9e86 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -33,6 +33,8 @@ import com.nukkitx.protocol.bedrock.v544.Bedrock_v544; import com.nukkitx.protocol.bedrock.v560.Bedrock_v560; import com.nukkitx.protocol.bedrock.v567.Bedrock_v567; +import it.unimi.dsi.fastutil.ints.Int2IntMap; +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2IntMap; @@ -140,16 +142,17 @@ public static void registerBedrockBlocks() { } Object2IntMap customBlockStateIds = Object2IntMaps.emptyMap(); + Int2IntMap extendedCollisionBoxes = new Int2IntOpenHashMap(); if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { customBlockStateIds = new Object2IntOpenHashMap<>(customExtBlockStates.size()); - Map extendedCollisionBoxes = new HashMap<>(); + //Map extendedCollisionBoxes = new HashMap<>(); for (int i = 0; i < customExtBlockStates.size(); i++) { NbtMap tag = customBlockStates.get(i); CustomBlockState blockState = customExtBlockStates.get(i); int bedrockRuntimeId = blockStateOrderedMap.getOrDefault(tag, -1); customBlockStateIds.put(blockState, bedrockRuntimeId); - Set extendedCollisionjavaIds = BlockRegistries.EXTENDED_COLLISION_BOXES_DATA.getOrDefault(blockState.block(), null); + Set extendedCollisionjavaIds = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(blockState.block(), null); if (extendedCollisionjavaIds != null) { for (int javaId : extendedCollisionjavaIds) { extendedCollisionBoxes.put(javaId, bedrockRuntimeId); @@ -157,8 +160,6 @@ public static void registerBedrockBlocks() { } } - BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); - remappedVanillaIds = new int[vanillaBlockStates.size()]; for (int i = 0; i < vanillaBlockStates.size(); i++) { remappedVanillaIds[i] = blockStateOrderedMap.getOrDefault(vanillaBlockStates.get(i), -1); @@ -273,6 +274,7 @@ public static void registerBedrockBlocks() { .remappedVanillaIds(remappedVanillaIds) .blockProperties(customBlockProperties) .customBlockStateIds(customBlockStateIds) + .extendedCollisionBoxes(extendedCollisionBoxes) .build()); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 805513368ce..3bc5e2a83cf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -8,7 +8,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; @@ -131,7 +130,7 @@ public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull C BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); - BlockRegistries.EXTENDED_COLLISION_BOXES_DATA.set(extendedCollisionBoxes); + BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 7c3cc0c79e4..668ec2002ec 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -28,6 +28,7 @@ import com.nukkitx.nbt.NbtList; import com.nukkitx.nbt.NbtMap; import com.nukkitx.protocol.bedrock.data.BlockPropertyData; +import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.Object2IntMap; import lombok.Builder; @@ -61,6 +62,7 @@ public class BlockMappings { List blockProperties; Object2IntMap customBlockStateIds; + Int2IntMap extendedCollisionBoxes; public int getBedrockBlockId(int state) { if (state >= this.javaToBedrockBlocks.length) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index ecc5e9a5cb0..5bf48549b23 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -69,7 +69,6 @@ import org.geysermc.geyser.util.ChunkUtils; import java.io.IOException; -import java.util.Arrays; import java.util.BitSet; import java.util.List; import java.util.Map; @@ -111,10 +110,13 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke try { ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); int runningSectionExtendedCollisions[] = new int[BlockStorage.SIZE]; + boolean extendedCollisionNextSection = false; for (int sectionY = 0; sectionY < chunkSize; sectionY++) { ChunkSection javaSection = session.getCodecHelper().readChunkSection(in, biomeGlobalPalette); javaChunks[sectionY] = javaSection.getChunkData(); javaBiomes[sectionY] = javaSection.getBiomeData(); + boolean extendedCollision = extendedCollisionNextSection; + boolean thisExtendedCollisionNextSection = false; int bedrockSectionY = sectionY + (yOffset - (bedrockDimension.minY() >> 4)); if (bedrockSectionY < 0 || maxBedrockSectionY < bedrockSectionY) { @@ -144,17 +146,19 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } // Extended collision blocks - switch (yzx) { - case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); - case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); - } - if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { - section.getBlockStorageArray()[0].setFullBlock(xzy, runningSectionExtendedCollisions[yzx]); - continue; - } - int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); - if (aboveBedrockExtendedCollisionId != -1) { - runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + section.getBlockStorageArray()[0].setFullBlock(xzy, runningSectionExtendedCollisions[yzx]); + runningSectionExtendedCollisions[yzx] = 0; + continue; + } + int aboveBedrockExtendedCollisionId = session.getBlockMappings().getExtendedCollisionBoxes().getOrDefault(javaId, -1); + if (aboveBedrockExtendedCollisionId != -1) { + runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + if ((xzy & 0xF) == 15) { + thisExtendedCollisionNextSection = true; + } + } } // Check if block is piston or flower to see if we'll need to create additional block entities, as they're only block entities in Bedrock @@ -185,7 +189,8 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke continue; } - IntList bedrockPalette = new IntArrayList(javaPalette.size()); + IntList bedrockPalette = new IntArrayList(); + int airPaletteId = -1; waterloggedPaletteIds.clear(); bedrockOnlyBlockEntityIds.clear(); @@ -198,6 +203,17 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke waterloggedPaletteIds.set(i); } + if (javaId == BlockStateValues.JAVA_AIR_ID) { + airPaletteId = i; + } + + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty() && !extendedCollision) { + int aboveBedrockExtendedCollisionId = session.getBlockMappings().getExtendedCollisionBoxes().getOrDefault(javaId, -1); + if (aboveBedrockExtendedCollisionId != -1) { + extendedCollision = true; + } + } + // Check if block is piston, flower or cauldron to see if we'll need to create additional block entities, as they're only block entities in Bedrock if (BlockStateValues.getFlowerPotValues().containsKey(javaId) || BlockStateValues.getPistonValues().containsKey(javaId) || BlockStateValues.isNonWaterCauldron(javaId)) { bedrockOnlyBlockEntityIds.set(i); @@ -224,33 +240,58 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke BlockStorage[] layers; // Convert data array from YZX to XZY coordinate order - if (waterloggedPaletteIds.isEmpty()) { + if (waterloggedPaletteIds.isEmpty() && !extendedCollision) { // No blocks are waterlogged, simply convert coordinate order // This could probably be optimized further... + for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) { + int paletteId = javaData.get(yzx); + int xzy = indexYZXtoXZY(yzx); + bedrockData.set(xzy, paletteId); + } + + layers = new BlockStorage[]{ layer0 }; + } else if (!waterloggedPaletteIds.isEmpty() && !extendedCollision) { + // The section contains waterlogged blocks, we need to convert coordinate order AND generate a V1 block storage for + // layer 1 with palette ID 1 indicating water + int[] layer1Data = new int[BlockStorage.SIZE >> 5]; for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) { int paletteId = javaData.get(yzx); int xzy = indexYZXtoXZY(yzx); bedrockData.set(xzy, paletteId); - switch (yzx) { - case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); - case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); + if (waterloggedPaletteIds.get(paletteId)) { + layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } - int javaId = javaPalette.idToState(paletteId); - if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + } + + // V1 palette + IntList layer1Palette = IntList.of( + session.getBlockMappings().getBedrockAirId(), // Air - see BlockStorage's constructor for more information + session.getBlockMappings().getBedrockWaterId()); + + layers = new BlockStorage[]{ layer0, new BlockStorage(BitArrayVersion.V1.createArray(BlockStorage.SIZE, layer1Data), layer1Palette) }; + } else if (waterloggedPaletteIds.isEmpty() && extendedCollision) { + for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) { + int paletteId = javaData.get(yzx); + int xzy = indexYZXtoXZY(yzx); + bedrockData.set(xzy, paletteId); + + if (paletteId == airPaletteId && runningSectionExtendedCollisions[yzx] != 0) { bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); + runningSectionExtendedCollisions[yzx] = 0; continue; } - int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + int aboveBedrockExtendedCollisionId = session.getBlockMappings().getExtendedCollisionBoxes().getOrDefault(javaPalette.idToState(paletteId), -1); if (aboveBedrockExtendedCollisionId != -1) { runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + if ((xzy & 0xF) == 15) { + thisExtendedCollisionNextSection = true; + } } } layers = new BlockStorage[]{ layer0 }; } else { - // The section contains waterlogged blocks, we need to convert coordinate order AND generate a V1 block storage for - // layer 1 with palette ID 1 indicating water int[] layer1Data = new int[BlockStorage.SIZE >> 5]; for (int yzx = 0; yzx < BlockStorage.SIZE; yzx++) { int paletteId = javaData.get(yzx); @@ -261,18 +302,17 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } - switch (yzx) { - case 0 -> Arrays.fill(runningSectionExtendedCollisions, 256, 4095, 0); - case 256 -> Arrays.fill(runningSectionExtendedCollisions, 0, 256, 0); - } - int javaId = javaPalette.idToState(paletteId); - if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { + if (paletteId == airPaletteId && runningSectionExtendedCollisions[yzx] != 0) { bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); + runningSectionExtendedCollisions[yzx] = 0; continue; } - int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(javaId, -1); + int aboveBedrockExtendedCollisionId = session.getBlockMappings().getExtendedCollisionBoxes().getOrDefault(javaPalette.idToState(paletteId), -1); if (aboveBedrockExtendedCollisionId != -1) { runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionId; + if ((xzy & 0xF) == 15) { + thisExtendedCollisionNextSection = true; + } } } @@ -285,6 +325,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } sections[bedrockSectionY] = new GeyserChunkSection(layers); + extendedCollisionNextSection = thisExtendedCollisionNextSection; } session.getChunkCache().addToCache(packet.getX(), packet.getZ(), javaChunks); diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 90ee2adfea5..3c30b1aaafc 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -143,22 +143,24 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, } // Extended collision boxes for custom blocks - int aboveBedrockExtendedCollisionId = BlockRegistries.EXTENDED_COLLISION_BOXES.getOrDefault(blockState, -1); - int aboveBlock = session.getChunkCache().getBlockAt(position.getX(), position.getY() + 1, position.getZ()); - if (aboveBedrockExtendedCollisionId != -1) { - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.setDataLayer(0); - updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); - updateBlockPacket.setRuntimeId(aboveBedrockExtendedCollisionId); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - session.sendUpstreamPacket(updateBlockPacket); - } else if (aboveBlock == BlockStateValues.JAVA_AIR_ID) { - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.setDataLayer(0); - updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); - updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockAirId()); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - session.sendUpstreamPacket(updateBlockPacket); + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + int aboveBedrockExtendedCollisionId = session.getBlockMappings().getExtendedCollisionBoxes().getOrDefault(blockState, -1); + int aboveBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() + 1, position.getZ()); + if (aboveBedrockExtendedCollisionId != -1) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setRuntimeId(aboveBedrockExtendedCollisionId); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } else if (aboveBlock == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setRuntimeId(session.getBlockMappings().getBedrockAirId()); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } } // Prevent moving_piston from being placed From d6ed896b2d3da4dcf3b7f234c44f3bd614f5456a Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 11 May 2023 21:54:59 -0700 Subject: [PATCH 076/134] Upstream fallout Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- core/build.gradle.kts | 4 ---- .../geyser/registry/populator/ItemRegistryPopulator.java | 8 +------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 58dba0942f4..fd373baae6e 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -66,10 +66,6 @@ configurations.api { // This is still experimental - additionally, it could only really benefit standalone exclude(group = "io.netty.incubator", module = "netty-incubator-transport-native-io_uring") } -java { - sourceCompatibility = JavaVersion.VERSION_14 - targetCompatibility = JavaVersion.VERSION_14 -} tasks.processResources { // This is solely for backwards compatibility for other programs that used this file before the switch to gradle. diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 58491d68895..a7ece9d6a65 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -70,13 +70,7 @@ import org.geysermc.geyser.registry.type.*; import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.atomic.AtomicInteger; /** From 410712cb78f1e7df00d9099b409664714fafec16 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 11 May 2023 22:40:38 -0700 Subject: [PATCH 077/134] Address @Redned235's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../api/block/custom/CustomBlockData.java | 7 ++++- .../api/block/custom/CustomBlockState.java | 5 ++++ .../component/CustomBlockComponents.java | 27 +++++++++--------- .../custom/property/CustomBlockProperty.java | 15 ++++++++++ .../block/custom/property/PropertyType.java | 9 +++++- .../GeyserDefineCustomBlocksEvent.java | 6 ++-- .../GeyserDefineCustomSkullsEvent.java | 2 +- .../geyser/registry/BlockRegistries.java | 9 +++--- .../mappings/versions/MappingsReader_v1.java | 2 +- .../populator/BlockRegistryPopulator.java | 28 +++++++++++++++---- .../CustomBlockRegistryPopulator.java | 8 +++--- .../CustomSkullRegistryPopulator.java | 2 +- .../JavaLevelChunkWithLightTranslator.java | 5 ++-- 13 files changed, 89 insertions(+), 36 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 14b2a5957e8..0310c794788 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -55,7 +55,7 @@ public interface CustomBlockData { * * @return The components of the custom block. */ - CustomBlockComponents components(); + @NonNull CustomBlockComponents components(); /** * Gets the custom block's map of block property names to CustomBlockProperty @@ -79,6 +79,11 @@ public interface CustomBlockData { */ @NonNull CustomBlockState defaultBlockState(); + /** + * Gets a builder for a custom block state + * + * @return The builder for a custom block state. + */ CustomBlockState.@NonNull Builder blockStateBuilder(); interface Builder { diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 9fae9e79924..2316f178d61 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -56,6 +56,11 @@ public interface CustomBlockState { */ @NonNull T property(String propertyName); + /** + * Gets a map of the properties for the state + * + * @return The properties for the state. + */ @NonNull Map properties(); interface Builder { diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index a903d167665..aa02c91fa74 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.api.block.custom.component; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.List; import java.util.Map; @@ -42,14 +43,14 @@ public interface CustomBlockComponents { * * @return The selection box. */ - BoxComponent selectionBox(); + @Nullable BoxComponent selectionBox(); /** * Gets the collision box component * Equivalent to "minecraft:collision_box" * @return The collision box. */ - BoxComponent collisionBox(); + @Nullable BoxComponent collisionBox(); /** * Gets the display name component @@ -57,7 +58,7 @@ public interface CustomBlockComponents { * * @return The display name. */ - String displayName(); + @Nullable String displayName(); /** * Gets the geometry component @@ -65,7 +66,7 @@ public interface CustomBlockComponents { * * @return The geometry. */ - String geometry(); + @Nullable String geometry(); /** * Gets the material instances component @@ -82,7 +83,7 @@ public interface CustomBlockComponents { * * @return The placement filter. */ - List placementFilter(); + @Nullable List placementFilter(); /** * Gets the destructible by mining component @@ -90,7 +91,7 @@ public interface CustomBlockComponents { * * @return The destructible by mining value. */ - Float destructibleByMining(); + @Nullable Float destructibleByMining(); /** * Gets the friction component @@ -98,7 +99,7 @@ public interface CustomBlockComponents { * * @return The friction value. */ - Float friction(); + @Nullable Float friction(); /** * Gets the light emission component @@ -106,7 +107,7 @@ public interface CustomBlockComponents { * * @return The light emission value. */ - Integer lightEmission(); + @Nullable Integer lightEmission(); /** * Gets the light dampening component @@ -114,7 +115,7 @@ public interface CustomBlockComponents { * * @return The light dampening value. */ - Integer lightDampening(); + @Nullable Integer lightDampening(); /** * Gets the rotation component @@ -122,7 +123,7 @@ public interface CustomBlockComponents { * * @return The rotation. */ - RotationComponent rotation(); + @Nullable RotationComponent rotation(); /** * Gets the unit cube component @@ -130,7 +131,7 @@ public interface CustomBlockComponents { * * @return The rotation. */ - boolean unitCube(); + @Nullable boolean unitCube(); /** * Gets if the block should place only air @@ -138,7 +139,7 @@ public interface CustomBlockComponents { * * @return If the block should place only air. */ - boolean placeAir(); + @Nullable boolean placeAir(); /** * Gets the set of tags @@ -146,7 +147,7 @@ public interface CustomBlockComponents { * * @return The set of tags. */ - Set tags(); + @Nullable Set tags(); interface Builder { Builder selectionBox(BoxComponent selectionBox); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java index 6cf90b320f5..fc39c4663fa 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -33,9 +33,24 @@ * This class is used to store a property of a custom block of a generic type. */ public interface CustomBlockProperty { + /** + * Gets the name of the property + * + * @return The name of the property. + */ @NonNull String name(); + /** + * Gets the values of the property + * + * @return The values of the property. + */ @NonNull List values(); + /** + * Gets the type of the property + * + * @return The type of the property. + */ @NonNull PropertyType type(); } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 6fbbe9340d4..6b6d70e5752 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.api.block.custom.property; +import org.checkerframework.checker.nullness.qual.NonNull; + /** * This class is used to define a custom block property's type. */ @@ -33,8 +35,13 @@ public class PropertyType { public static final PropertyType INTEGER = new PropertyType(Integer.class); public static final PropertyType STRING = new PropertyType(String.class); - private final Class typeClass; + @NonNull private final Class typeClass; + /** + * Gets the class of the property type + * + * @return The class of the property type. + */ public Class typeClass() { return typeClass; } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index e95117105c9..1dd135521dc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -42,7 +42,7 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * * @param customBlockData the custom block to register */ - public abstract void registerCustomBlock(@NonNull CustomBlockData customBlockData); + public abstract void register(@NonNull CustomBlockData customBlockData); /** * Registers the given {@link CustomBlockState} as an override for the @@ -53,7 +53,7 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param javaIdentifier the java state identifier to override * @param customBlockState the custom block state with which to override java state identifier */ - public abstract void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); + public abstract void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); /** * Registers the given {@link CustomBlockData} as an override for the @@ -62,5 +62,5 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param javaIdentifier the java item identifier to override * @param customBlockData the custom block data with which to override java item identifier */ - public abstract void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); + public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java index bdb7db6c31c..17f7b599aa3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java @@ -24,5 +24,5 @@ public enum SkullTextureType { * @param texture the username, UUID, base64 encoded profile, or skin hash * @param type the type of texture provided */ - public abstract void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureType type); + public abstract void register(@NonNull String texture, @NonNull SkullTextureType type); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 87a85400ebc..be49d16ea59 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -126,11 +126,12 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); - BlockRegistryPopulator.prePopulate(); - BlockRegistryPopulator.registerJavaBlocks(); + BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); + BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); - CustomBlockRegistryPopulator.registerCustomBedrockBlocks(); - BlockRegistryPopulator.registerBedrockBlocks(); + CustomBlockRegistryPopulator.populate(); + BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); + BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } public static void init() { diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 8cc93df75ba..44689aba408 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -183,7 +183,7 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa * Read a block mapping entry from a JSON node and Java identifier * @param identifier The Java identifier of the block * @param node The {@link JsonNode} containing the block mapping entry - * @return The {@link CustomBlockMapping} record to be read by {@link org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator#registerCustomBedrockBlocks} + * @return The {@link CustomBlockMapping} record to be read by {@link org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator} * @throws InvalidCustomMappingsFileException If the JSON node is invalid */ @Override diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 45d130fd065..78ef74b3d24 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -63,16 +63,36 @@ * Populates the block registries. */ public final class BlockRegistryPopulator { + /** + * The stage of population + */ + public enum Stage { + PRE_INIT, + INIT_JAVA, + INIT_BEDROCK, + POST_INIT; + } + + public static void populate(Stage stage) { + switch (stage) { + case PRE_INIT -> { nullifyBlocksNode(); } + case INIT_JAVA -> { registerJavaBlocks(); } + case INIT_BEDROCK -> { registerBedrockBlocks(); } + case POST_INIT -> { nullifyBlocksNode(); } + default -> { throw new IllegalArgumentException("Unknown stage: " + stage); } + } + } + /** * Stores the raw blocks JSON until it is no longer needed. */ private static JsonNode BLOCKS_JSON; - public static void prePopulate() { + private static void nullifyBlocksNode() { BLOCKS_JSON = null; } - public static void registerBedrockBlocks() { + private static void registerBedrockBlocks() { BiFunction woolMapper = (bedrockIdentifier, statesBuilder) -> { if (bedrockIdentifier.equals("minecraft:wool")) { String color = (String) statesBuilder.remove("color"); @@ -306,11 +326,9 @@ public static void registerBedrockBlocks() { .extendedCollisionBoxes(extendedCollisionBoxes) .build()); } - - BLOCKS_JSON = null; } - public static void registerJavaBlocks() { + private static void registerJavaBlocks() { JsonNode blocksJson; try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/blocks.json")) { blocksJson = GeyserImpl.JSON_MAPPER.readTree(stream); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 7a58156c22c..9ef71c423ef 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -39,7 +39,7 @@ public class CustomBlockRegistryPopulator { /** * Registers all custom blocks defined by extensions and user supplied mappings */ - public static void registerCustomBedrockBlocks() { + public static void populate() { if (!GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { return; } @@ -50,7 +50,7 @@ public static void registerCustomBedrockBlocks() { GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override - public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { + public void register(@NonNull CustomBlockData customBlockData) { if (customBlockData.name().length() == 0) { throw new IllegalArgumentException("Custom block name must have at least 1 character."); } @@ -64,7 +64,7 @@ public void registerCustomBlock(@NonNull CustomBlockData customBlockData) { } @Override - public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { + public void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { int id = BlockRegistries.JAVA_IDENTIFIER_TO_ID.getOrDefault(javaIdentifier, -1); if (id == -1) { throw new IllegalArgumentException("Unknown Java block state. Identifier: " + javaIdentifier); @@ -80,7 +80,7 @@ public void registerBlockStateOverride(@NonNull String javaIdentifier, @NonNull } @Override - public void registerBlockItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData) { + public void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData) { if (!customBlocks.contains(customBlockData)) { throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index bd1b4db99b9..9c17ca95216 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -78,7 +78,7 @@ public static void populate() { GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomSkullsEvent() { @Override - public void registerCustomSkull(@NonNull String texture, @NonNull SkullTextureType type) { + public void register(@NonNull String texture, @NonNull SkullTextureType type) { switch (type) { case USERNAME -> usernames.add(texture); case UUID -> uuids.add(texture); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 5aff2cd7a34..3bf8a8dba82 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -113,7 +113,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke try { ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); - int runningSectionExtendedCollisions[] = new int[BlockStorage.SIZE]; + int[] runningSectionExtendedCollisions = new int[BlockStorage.SIZE]; boolean extendedCollisionNextSection = false; for (int sectionY = 0; sectionY < chunkSize; sectionY++) { ChunkSection javaSection = session.getDownstream().getCodecHelper().readChunkSection(in, biomeGlobalPalette); @@ -193,7 +193,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke continue; } - IntList bedrockPalette = new IntArrayList(); + IntList bedrockPalette = new IntArrayList(javaPalette.size()); int airPaletteId = -1; waterloggedPaletteIds.clear(); bedrockOnlyBlockEntityIds.clear(); @@ -214,6 +214,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty() && !extendedCollision) { if (session.getBlockMappings().getExtendedCollisionBoxes().get(javaId) != null) { extendedCollision = true; + bedrockPalette = new IntArrayList(); } } From 8b8cc5bd33862e3af893af6c3b31c7f6304e96a1 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 11 May 2023 23:44:57 -0700 Subject: [PATCH 078/134] Oops my bad that makes no sense :) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../protocol/java/level/JavaLevelChunkWithLightTranslator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 3bf8a8dba82..8f4567e3e38 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -214,7 +214,6 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty() && !extendedCollision) { if (session.getBlockMappings().getExtendedCollisionBoxes().get(javaId) != null) { extendedCollision = true; - bedrockPalette = new IntArrayList(); } } From bbd297c5d954c490dd020128d76713e4e4e90bac Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 12 May 2023 20:05:13 -0700 Subject: [PATCH 079/134] Ext collision box chunk translation optimization Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../JavaLevelChunkWithLightTranslator.java | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 8f4567e3e38..694bff15310 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -81,6 +81,7 @@ @Translator(packet = ClientboundLevelChunkWithLightPacket.class) public class JavaLevelChunkWithLightTranslator extends PacketTranslator { + private static final ThreadLocal EXTENDED_COLLISIONS_STORAGE = ThreadLocal.withInitial(ExtendedCollisionsStorage::new); @Override public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacket packet) { @@ -113,7 +114,6 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke try { ByteBuf in = Unpooled.wrappedBuffer(packet.getChunkData()); - int[] runningSectionExtendedCollisions = new int[BlockStorage.SIZE]; boolean extendedCollisionNextSection = false; for (int sectionY = 0; sectionY < chunkSize; sectionY++) { ChunkSection javaSection = session.getDownstream().getCodecHelper().readChunkSection(in, biomeGlobalPalette); @@ -151,14 +151,14 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // Extended collision blocks if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { - if (javaId == BlockStateValues.JAVA_AIR_ID && runningSectionExtendedCollisions[yzx] != 0) { - section.getBlockStorageArray()[0].setFullBlock(xzy, runningSectionExtendedCollisions[yzx]); - runningSectionExtendedCollisions[yzx] = 0; + if (javaId == BlockStateValues.JAVA_AIR_ID && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { + section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx)); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(javaId); if (aboveBedrockExtendedCollisionDefinition != null) { - runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionDefinition.getRuntimeId(); + EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -279,15 +279,15 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke int xzy = indexYZXtoXZY(yzx); bedrockData.set(xzy, paletteId); - if (paletteId == airPaletteId && runningSectionExtendedCollisions[yzx] != 0) { - bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); - runningSectionExtendedCollisions[yzx] = 0; + if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings() .getExtendedCollisionBoxes().get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionDefinition.getRuntimeId(); + EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -306,15 +306,15 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } - if (paletteId == airPaletteId && runningSectionExtendedCollisions[yzx] != 0) { - bedrockData.set(xzy, layer0.idFor(runningSectionExtendedCollisions[yzx])); - runningSectionExtendedCollisions[yzx] = 0; + if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes() .get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - runningSectionExtendedCollisions[((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8))] = aboveBedrockExtendedCollisionDefinition.getRuntimeId(); + EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -482,3 +482,23 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } } } + +class ExtendedCollisionsStorage { + private int[] data; + + public int get(int index) { + ensureDataExists(); + return data[index]; + } + + public void set(int index, int value) { + ensureDataExists(); + data[index] = value; + } + + private void ensureDataExists() { + if (data == null) { + data = new int[BlockStorage.SIZE]; + } + } +} From cd62048a4dcff0c5e784ed3cf8d45570243ba53d Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 12 May 2023 21:12:28 -0700 Subject: [PATCH 080/134] Trunc skinhash to 32 chars due to 80 char limit Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/pack/SkullResourcePackManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 82125145499..1e9f296fc0a 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -205,7 +205,7 @@ private static void addFloorGeometries(ZipOutputStream zipOS) throws IOException private static void addAttachables(ZipOutputStream zipOS) throws IOException { String template = FileUtils.readToString("bedrock/skull_resource_pack/attachables/template_attachable.json"); for (CustomSkull skull : BlockRegistries.CUSTOM_SKULLS.get().values()) { - ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + skull.getSkinHash() + ".json"); + ZipEntry entry = new ZipEntry("skull_resource_pack/attachables/" + truncateHash(skull.getSkinHash()) + ".json"); zipOS.putNextEntry(entry); zipOS.write(fillAttachableJson(template, skull).getBytes(StandardCharsets.UTF_8)); zipOS.closeEntry(); @@ -214,7 +214,7 @@ private static void addAttachables(ZipOutputStream zipOS) throws IOException { private static void addSkinTextures(ZipOutputStream zipOS) throws IOException { for (Path skinPath : SKULL_SKINS.values()) { - ZipEntry entry = new ZipEntry("skull_resource_pack/textures/blocks/" + skinPath.getFileName()); + ZipEntry entry = new ZipEntry("skull_resource_pack/textures/blocks/" + truncateHash(skinPath.getFileName().toString()) + ".png"); zipOS.putNextEntry(entry); try (InputStream stream = Files.newInputStream(skinPath)) { stream.transferTo(zipOS); @@ -231,7 +231,7 @@ private static void fillTemplate(ZipOutputStream zipOS, String path, UnaryOperat private static String fillAttachableJson(String template, CustomSkull skull) { return template.replace("${identifier}", skull.getCustomBlockData().identifier()) - .replace("${texture}", skull.getSkinHash()); + .replace("${texture}", truncateHash(skull.getSkinHash())); } private static String fillManifestJson(String template) { @@ -243,7 +243,7 @@ private static String fillManifestJson(String template) { private static String fillTerrainTextureJson(String template) { StringBuilder textures = new StringBuilder(); for (String skinHash : SKULL_SKINS.keySet()) { - String texture = String.format("\"geyser.%s_player_skin\":{\"textures\":\"textures/blocks/%s\"},\n", skinHash, skinHash); + String texture = String.format("\"geyser.%s_player_skin\":{\"textures\":\"textures/blocks/%s\"},\n", skinHash, truncateHash(skinHash)); textures.append(texture); } if (textures.length() != 0) { @@ -298,4 +298,8 @@ private static boolean canReusePack(File packFile) { } return false; } + + private static String truncateHash(String hash) { + return hash.substring(0, Math.min(hash.length(), 32)); + } } From 5ab360ba7fa908fba7079b952ca938cea1f9b46c Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 12 May 2023 22:44:33 -0700 Subject: [PATCH 081/134] Use new transformation cmpnt vs legacy rotation Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../component/CustomBlockComponents.java | 10 ++--- ...nent.java => TransformationComponent.java} | 28 ++++++++++++- .../block/GeyserCustomBlockComponents.java | 20 ++++----- .../mappings/versions/MappingsReader_v1.java | 38 ++++++++++++++--- .../CustomBlockRegistryPopulator.java | 17 +++++--- .../geyser/registry/type/CustomSkull.java | 10 ++--- .../org/geysermc/geyser/util/MathUtils.java | 42 +++++++++++++++++++ 7 files changed, 131 insertions(+), 34 deletions(-) rename api/src/main/java/org/geysermc/geyser/api/block/custom/component/{RotationComponent.java => TransformationComponent.java} (53%) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index aa02c91fa74..7cde309f685 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -118,12 +118,12 @@ public interface CustomBlockComponents { @Nullable Integer lightDampening(); /** - * Gets the rotation component - * Equivalent to "minecraft:rotation" + * Gets the transformation component + * Equivalent to "minecraft:transformation" * - * @return The rotation. + * @return The transformation. */ - @Nullable RotationComponent rotation(); + @Nullable TransformationComponent transformation(); /** * Gets the unit cube component @@ -170,7 +170,7 @@ interface Builder { Builder lightDampening(Integer lightDampening); - Builder rotation(RotationComponent rotation); + Builder transformation(TransformationComponent transformation); Builder unitCube(boolean unitCube); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java similarity index 53% rename from api/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java rename to api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java index 610b5365bf7..5f4f08b5154 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/RotationComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java @@ -26,7 +26,31 @@ package org.geysermc.geyser.api.block.custom.component; /** - * This class is used to store a rotation component for a custom block. + * This class is used to store the transformation component of a block */ -public record RotationComponent(int x, int y, int z) { +public record TransformationComponent(int rx, int ry, int rz, float sx, float sy, float sz, float tx, float ty, float tz) { + /** + * Constructs a new TransformationComponent with the rotation values and assumes default scale and translation + * + * @param rx The rotation on the x axis + * @param ry The rotation on the y axis + * @param rz The rotation on the z axis + */ + public TransformationComponent(int rx, int ry, int rz) { + this(rx, ry, rz, 1, 1, 1, 0, 0, 0); + } + + /** + * Constructs a new TransformationComponent with the rotation and scale values and assumes default translation + * + * @param rx The rotation on the x axis + * @param ry The rotation on the y axis + * @param rz The rotation on the z axis + * @param sx The scale on the x axis + * @param sy The scale on the y axis + * @param sz The scale on the z axis + */ + public TransformationComponent(int rx, int ry, int rz, float sx, float sy, float sz) { + this(rx, ry, rz, sx, sy, sz, 0, 0, 0); + } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index c58d35fea4c..65a65a436d1 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -35,7 +35,7 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.PlacementConditions; -import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.jetbrains.annotations.NotNull; import java.util.HashSet; @@ -55,7 +55,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { Float friction; Integer lightEmission; Integer lightDampening; - RotationComponent rotation; + TransformationComponent transformation; boolean unitCube; boolean placeAir; Set tags; @@ -75,7 +75,7 @@ private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { this.friction = builder.friction; this.lightEmission = builder.lightEmission; this.lightDampening = builder.lightDampening; - this.rotation = builder.rotation; + this.transformation = builder.transformation; this.unitCube = builder.unitCube; this.placeAir = builder.placeAir; if (builder.tags.isEmpty()) { @@ -136,8 +136,8 @@ public Integer lightDampening() { } @Override - public RotationComponent rotation() { - return rotation; + public TransformationComponent transformation() { + return transformation; } @Override @@ -166,7 +166,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected Float friction; protected Integer lightEmission; protected Integer lightDampening; - protected RotationComponent rotation; + protected TransformationComponent transformation; protected boolean unitCube = false; protected boolean placeAir = false; protected final Set tags = new HashSet<>(); @@ -270,11 +270,11 @@ public Builder lightDampening(Integer lightDampening) { } @Override - public Builder rotation(RotationComponent rotation) { - if (rotation.x() % 90 != 0 || rotation.y() % 90 != 0 || rotation.z() % 90 != 0) { - throw new IllegalArgumentException("Rotation must be a multiple of 90 degrees."); + public Builder transformation(TransformationComponent transformation) { + if (transformation.rx() % 90 != 0 || transformation.ry() % 90 != 0 || transformation.rz() % 90 != 0) { + throw new IllegalArgumentException("Rotation of transformation must be a multiple of 90 degrees."); } - this.rotation = rotation; + this.transformation = transformation; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 44689aba408..99262dab4cc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -367,12 +367,38 @@ private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode } builder.placeAir(placeAir); - if (node.has("rotation")) { - JsonNode rotation = node.get("rotation"); - int rotationX = rotation.get(0).asInt(); - int rotationY = rotation.get(1).asInt(); - int rotationZ = rotation.get(2).asInt(); - builder.rotation(new RotationComponent(rotationX, rotationY, rotationZ)); + if (node.has("transformation")) { + JsonNode transformation = node.get("transformation"); + + int rotationX = 0; + int rotationY = 0; + int rotationZ = 0; + float scaleX = 1; + float scaleY = 1; + float scaleZ = 1; + float transformX = 0; + float transformY = 0; + float transformZ = 0; + + if (transformation.has("rotation")) { + JsonNode rotation = transformation.get("rotation"); + rotationX = rotation.get(0).asInt(); + rotationY = rotation.get(1).asInt(); + rotationZ = rotation.get(2).asInt(); + } + if (transformation.has("scale")) { + JsonNode scale = transformation.get("scale"); + scaleX = scale.get(0).floatValue(); + scaleY = scale.get(1).floatValue(); + scaleZ = scale.get(2).floatValue(); + } + if (transformation.has("translation")) { + JsonNode translation = transformation.get("translation"); + transformX = translation.get(0).floatValue(); + transformY = translation.get(1).floatValue(); + transformZ = translation.get(2).floatValue(); + } + builder.transformation(new TransformationComponent(rotationX, rotationY, rotationZ, scaleX, scaleY, scaleZ, transformX, transformY, transformZ)); } if (node.has("unit_cube")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 9ef71c423ef..942990b9dcc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -26,6 +26,7 @@ import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; +import org.geysermc.geyser.util.MathUtils; import java.util.ArrayList; import java.util.HashMap; @@ -286,11 +287,17 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putByte("lightLevel", components.lightDampening().byteValue()) .build()); } - if (components.rotation() != null) { - builder.putCompound("minecraft:rotation", NbtMap.builder() - .putFloat("x", components.rotation().x()) - .putFloat("y", components.rotation().y()) - .putFloat("z", components.rotation().z()) + if (components.transformation() != null) { + builder.putCompound("minecraft:transformation", NbtMap.builder() + .putInt("RX", MathUtils.unwrapDegreesToInt(components.transformation().rx()) / 90) + .putInt("RY", MathUtils.unwrapDegreesToInt(components.transformation().ry()) / 90) + .putInt("RZ", MathUtils.unwrapDegreesToInt(components.transformation().rz()) / 90) + .putFloat("SX", components.transformation().sx()) + .putFloat("SY", components.transformation().sy()) + .putFloat("SZ", components.transformation().sz()) + .putFloat("TX", components.transformation().tx()) + .putFloat("TY", components.transformation().ty()) + .putFloat("TZ", components.transformation().tz()) .build()); } if (components.unitCube()) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 08c0b80a4a4..b23a607d3a1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -32,7 +32,7 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; -import org.geysermc.geyser.api.block.custom.component.RotationComponent; +import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; @@ -110,7 +110,7 @@ public CustomBlockState getFloorBlockState(int floorRotation) { private void addDefaultPermutation(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .geometry("geometry.geyser.player_skull_hand") - .rotation(new RotationComponent(0, 180, 0)) + .transformation(new TransformationComponent(0, 180, 0)) .build(); String condition = String.format("query.block_property('%s') == 0 && query.block_property('%s') == 0", BITS_A_PROPERTY, BITS_B_PROPERTY); @@ -121,14 +121,13 @@ private void addFloorPermutations(List permutations) { String[] quadrantNames = {"a", "b", "c", "d"}; for (int quadrant = 0; quadrant < 4; quadrant++) { - RotationComponent rotation = new RotationComponent(0, ROTATIONS[quadrant], 0); for (int i = 0; i < 4; i++) { int floorRotation = 4 * quadrant + i; CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .selectionBox(FLOOR_BOX) .collisionBox(FLOOR_BOX) .geometry("geometry.geyser.player_skull_floor_" + quadrantNames[i]) - .rotation(rotation) + .transformation(new TransformationComponent(0, ROTATIONS[quadrant], 0)) .build(); int bitsA = (5 + floorRotation) % 7; @@ -141,12 +140,11 @@ private void addFloorPermutations(List permutations) { private void addWallPermutations(List permutations) { for (int i = 0; i < 4; i++) { - RotationComponent rotation = new RotationComponent(0, ROTATIONS[i], 0); CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .selectionBox(WALL_BOX) .collisionBox(WALL_BOX) .geometry("geometry.geyser.player_skull_wall") - .rotation(rotation) + .transformation(new TransformationComponent(0, ROTATIONS[i], 0)) .build(); String condition = String.format("query.block_property('%s') == %d && query.block_property('%s') == %d", BITS_A_PROPERTY, i + 1, BITS_B_PROPERTY, 0); diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index df9ee533bde..d0675fa640d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -28,6 +28,11 @@ public class MathUtils { public static final double SQRT_OF_TWO = Math.sqrt(2); + /** + * Wrap the given float degrees to be between -180.0 and 180.0. + * @param degrees The degrees value to wrap + * @return The wrapped degrees value between -180.0 and 180.0 + */ public static float wrapDegrees(float degrees) { degrees = degrees % 360.0f; if (degrees < -180.0f) { @@ -38,14 +43,51 @@ public static float wrapDegrees(float degrees) { return degrees; } + /** + * Wrap the given double degrees to be between -180.0 and 180.0. + * @param degrees The degrees value to wrap + * @return The wrapped degrees value between -180.0 and 180.0 + */ public static float wrapDegrees(double degrees) { return wrapDegrees((float) degrees); } + /** + * Wrap the given degrees to be between -180 and 180 as an integer. + * @param degrees The degrees value to wrap + * @return The wrapped degrees value between -180 and 180 as an integer + */ public static int wrapDegreesToInt(float degrees) { return (int) wrapDegrees(degrees); } + /** + * Unwrap the given float degrees to be between 0.0 and 360.0. + * @param degrees The degrees value to unwrap + * @return The unwrapped degrees value between 0.0 and 360.0 + */ + public static float unwrapDegrees(float degrees) { + return (degrees % 360 + 360) % 360; + } + + /** + * Unwrap the given double degrees to be between 0.0 and 360.0. + * @param degrees The degrees value to unwrap + * @return The unwrapped degrees value between 0.0 and 360.0 + */ + public static float unwrapDegrees(double degrees) { + return unwrapDegrees((float) degrees); + } + + /** + * Unwrap the given degrees to be between 0 and 360 as an integer. + * @param degrees The degrees value to unwrap + * @return The unwrapped degrees value between 0 and 360 as an integer + */ + public static int unwrapDegreesToInt(float degrees) { + return (int) unwrapDegrees(degrees); + } + /** * Round the given float to the next whole number * From 31bb382d3cdf41b0c2666d8f60e6da2b37364103 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 13 May 2023 11:56:15 -0700 Subject: [PATCH 082/134] keep arr null on get extcolstor Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/level/JavaLevelChunkWithLightTranslator.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 694bff15310..0f150d1b3fd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -487,7 +487,9 @@ class ExtendedCollisionsStorage { private int[] data; public int get(int index) { - ensureDataExists(); + if (data == null) { + return 0; + } return data[index]; } From fe490032d60724fdcdfbb8215c11acb47e8f58bc Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 13 May 2023 14:16:24 -0700 Subject: [PATCH 083/134] Properly handle if extended collision box is below Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../org/geysermc/geyser/util/ChunkUtils.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index f21ffed4069..16298cdbf3c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -113,6 +113,19 @@ public static void updateChunkPosition(GeyserSession session, Vector3i position) public static void updateBlock(GeyserSession session, int blockState, Vector3i position) { updateBlockClientSide(session, blockState, position); session.getChunkCache().updateBlock(position.getX(), position.getY(), position.getZ(), blockState); + + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + int belowBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() - 1, position.getZ()); + BlockDefinition belowBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(belowBlock); + if (belowBedrockExtendedCollisionDefinition != null && blockState == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position); + updateBlockPacket.setDefinition(belowBedrockExtendedCollisionDefinition); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } + } } /** @@ -146,9 +159,9 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, // Extended collision boxes for custom blocks if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { - BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(blockState); int aboveBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() + 1, position.getZ()); - if (aboveBedrockExtendedCollisionDefinition != null) { + BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(blockState); + if (aboveBedrockExtendedCollisionDefinition != null && aboveBlock == BlockStateValues.JAVA_AIR_ID) { UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); updateBlockPacket.setDataLayer(0); updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); From c27bfaf1aadd2f78a01a93252bfa66b173c0c5db Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 13 May 2023 14:59:12 -0700 Subject: [PATCH 084/134] Less ugly (realized it can go here) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../org/geysermc/geyser/util/ChunkUtils.java | 64 +++++++++---------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 16298cdbf3c..a60461ec7b5 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -113,19 +113,6 @@ public static void updateChunkPosition(GeyserSession session, Vector3i position) public static void updateBlock(GeyserSession session, int blockState, Vector3i position) { updateBlockClientSide(session, blockState, position); session.getChunkCache().updateBlock(position.getX(), position.getY(), position.getZ(), blockState); - - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { - int belowBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() - 1, position.getZ()); - BlockDefinition belowBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(belowBlock); - if (belowBedrockExtendedCollisionDefinition != null && blockState == BlockStateValues.JAVA_AIR_ID) { - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.setDataLayer(0); - updateBlockPacket.setBlockPosition(position); - updateBlockPacket.setDefinition(belowBedrockExtendedCollisionDefinition); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - session.sendUpstreamPacket(updateBlockPacket); - } - } } /** @@ -157,27 +144,6 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, } } - // Extended collision boxes for custom blocks - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { - int aboveBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() + 1, position.getZ()); - BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(blockState); - if (aboveBedrockExtendedCollisionDefinition != null && aboveBlock == BlockStateValues.JAVA_AIR_ID) { - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.setDataLayer(0); - updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); - updateBlockPacket.setDefinition(aboveBedrockExtendedCollisionDefinition); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - session.sendUpstreamPacket(updateBlockPacket); - } else if (aboveBlock == BlockStateValues.JAVA_AIR_ID) { - UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); - updateBlockPacket.setDataLayer(0); - updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); - updateBlockPacket.setDefinition(session.getBlockMappings().getBedrockAir()); - updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); - session.sendUpstreamPacket(updateBlockPacket); - } - } - // Prevent moving_piston from being placed // It's used for extending piston heads, but it isn't needed on Bedrock and causes pistons to flicker if (!BlockStateValues.isMovingPiston(blockState)) { @@ -200,6 +166,36 @@ public static void updateBlockClientSide(GeyserSession session, int blockState, session.sendUpstreamPacket(waterPacket); } + // Extended collision boxes for custom blocks + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + int aboveBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() + 1, position.getZ()); + BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(blockState); + int belowBlock = session.getGeyser().getWorldManager().getBlockAt(session, position.getX(), position.getY() - 1, position.getZ()); + BlockDefinition belowBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(belowBlock); + if (belowBedrockExtendedCollisionDefinition != null && blockState == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position); + updateBlockPacket.setDefinition(belowBedrockExtendedCollisionDefinition); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } else if (aboveBedrockExtendedCollisionDefinition != null && aboveBlock == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setDefinition(aboveBedrockExtendedCollisionDefinition); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } else if (aboveBlock == BlockStateValues.JAVA_AIR_ID) { + UpdateBlockPacket updateBlockPacket = new UpdateBlockPacket(); + updateBlockPacket.setDataLayer(0); + updateBlockPacket.setBlockPosition(position.add(0, 1, 0)); + updateBlockPacket.setDefinition(session.getBlockMappings().getBedrockAir()); + updateBlockPacket.getFlags().add(UpdateBlockPacket.Flag.NETWORK); + session.sendUpstreamPacket(updateBlockPacket); + } + } + BlockStateValues.getLecternBookStates().handleBlockChange(session, blockState, position); // Iterates through all Bedrock-only block entity translators and determines if a manual block entity packet From 41d7d8e3a39897e5b519f6c393ef2e1557a5e303 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 13 May 2023 20:22:06 -0700 Subject: [PATCH 085/134] Prevent 2x placement due to extended collision box Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- ...BedrockInventoryTransactionTranslator.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index 645c7610085..269d1713d09 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -173,6 +173,27 @@ public void translate(GeyserSession session, InventoryTransactionPacket packet) } } + // Check if this is a double placement due to an extended collision block + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + Vector3i belowBlockPos = null; + switch (packet.getBlockFace()) { + case 1 -> belowBlockPos = blockPos.add(0, -2, 0); + case 2 -> belowBlockPos = blockPos.add(0, -1, 1); + case 3 -> belowBlockPos = blockPos.add(0, -1, -1); + case 4 -> belowBlockPos = blockPos.add(1, -1, 0); + case 5 -> belowBlockPos = blockPos.add(-1, -1, 0); + } + + if (belowBlockPos != null) { + int belowBlock = session.getGeyser().getWorldManager().getBlockAt(session, belowBlockPos); + BlockDefinition extendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(belowBlock); + if (extendedCollisionDefinition != null && (System.currentTimeMillis() - session.getLastInteractionTime()) < 200) { + restoreCorrectBlock(session, blockPos, packet); + return; + } + } + } + // Check to make sure the client isn't spamming interaction // Based on Nukkit 1.0, with changes to ensure holding down still works boolean hasAlreadyClicked = System.currentTimeMillis() - session.getLastInteractionTime() < 110.0 && @@ -257,6 +278,7 @@ public void translate(GeyserSession session, InventoryTransactionPacket packet) restoreCorrectBlock(session, blockPos, packet); return; } + /* Block place checks end - client is good to go */ From e266ee9ff6c8e84188233106b0514296896aee89 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 13 May 2023 22:20:05 -0700 Subject: [PATCH 086/134] Properly build on eclipse via indra Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- build-logic/build.gradle.kts | 3 ++- .../main/kotlin/geyser.base-conventions.gradle.kts | 13 +------------ settings.gradle.kts | 1 + 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 3d1fb47f758..7506d3f0ebc 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -3,12 +3,13 @@ plugins { } repositories { + maven("https://repo.stellardrift.ca/repository/snapshots/") gradlePluginPortal() maven("https://repo.opencollab.dev/maven-snapshots") } dependencies { - implementation("net.kyori", "indra-common", "3.0.1") + implementation("net.kyori", "indra-common", "3.1.0-SNAPSHOT") implementation("com.github.johnrengelman", "shadow", "7.1.3-SNAPSHOT") // Within the gradle plugin classpath, there is a version conflict between loom and some other diff --git a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts index ae946b6cee2..93d70293937 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -1,6 +1,5 @@ plugins { `java-library` - `eclipse` id("net.kyori.indra") } @@ -35,14 +34,4 @@ tasks { ) } } -} - -eclipse { - classpath.file.whenMerged { - (this as org.gradle.plugins.ide.eclipse.model.Classpath).entries.forEach { entry -> - if (entry is org.gradle.plugins.ide.eclipse.model.Library) { - entry.entryAttributes["module"] = false - } - } - } -} +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index e9c7641e41b..0ef30805197 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -46,6 +46,7 @@ dependencyResolutionManagement { pluginManagement { repositories { + maven(url = "https://repo.stellardrift.ca/repository/snapshots/") gradlePluginPortal() maven("https://maven.fabricmc.net/") maven("https://repo.opencollab.dev/maven-snapshots") From 764a65272aabd41b41d5be9134d43f5521688940 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 14 May 2023 01:09:07 -0700 Subject: [PATCH 087/134] Ensure enough bits in bedrockData for paletteIDs Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/level/JavaLevelChunkWithLightTranslator.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 0f150d1b3fd..3315ece1551 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -199,6 +199,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke bedrockOnlyBlockEntityIds.clear(); // Iterate through palette and convert state IDs to Bedrock, doing some additional checks as we go + int extendedCollisionsInPalette = 0; for (int i = 0; i < javaPalette.size(); i++) { int javaId = javaPalette.idToState(i); bedrockPalette.add(session.getBlockMappings().getBedrockBlockId(javaId)); @@ -211,9 +212,10 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke airPaletteId = i; } - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty() && !extendedCollision) { + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { if (session.getBlockMappings().getExtendedCollisionBoxes().get(javaId) != null) { extendedCollision = true; + extendedCollisionsInPalette++; } } @@ -238,7 +240,9 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } } - BitArray bedrockData = BitArrayVersion.forBitsCeil(javaData.getBitsPerEntry()).createArray(BlockStorage.SIZE); + // We need to ensure we use enough bits to represent extended collision blocks in the palette + int bedrockDataBits = Integer.SIZE - Integer.numberOfLeadingZeros(javaPalette.size() + extendedCollisionsInPalette); + BitArray bedrockData = BitArrayVersion.forBitsCeil(bedrockDataBits).createArray(BlockStorage.SIZE); BlockStorage layer0 = new BlockStorage(bedrockData, bedrockPalette); BlockStorage[] layers; From 45c1a9da08667a7864a95f06c4dfc2203ee85720 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 14 May 2023 20:35:56 -0700 Subject: [PATCH 088/134] Fix not needed whitespace Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/api/block/custom/component/CustomBlockComponents.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 7cde309f685..1926c5be50b 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -76,7 +76,6 @@ public interface CustomBlockComponents { */ @NonNull Map materialInstances(); - /** * Gets the placement filter component * Equivalent to "minecraft:placement_filter" From f750059e8ee01dfd4e9f9d13d3bdb85eb90e1f74 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 14 May 2023 20:40:48 -0700 Subject: [PATCH 089/134] Update license headers to 2023 Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../org/geysermc/geyser/processor/BlockEntityProcessor.java | 2 +- .../main/java/org/geysermc/geyser/processor/ClassProcessor.java | 2 +- .../geysermc/geyser/processor/CollisionRemapperProcessor.java | 2 +- .../geysermc/geyser/processor/PacketTranslatorProcessor.java | 2 +- .../org/geysermc/geyser/processor/SoundHandlerProcessor.java | 2 +- api/src/main/java/org/geysermc/geyser/api/GeyserApi.java | 2 +- .../org/geysermc/geyser/api/block/custom/CustomBlockData.java | 2 +- .../geyser/api/block/custom/CustomBlockPermutation.java | 2 +- .../org/geysermc/geyser/api/block/custom/CustomBlockState.java | 2 +- .../geyser/api/block/custom/component/BoxComponent.java | 2 +- .../api/block/custom/component/CustomBlockComponents.java | 2 +- .../geyser/api/block/custom/component/MaterialInstance.java | 2 +- .../geyser/api/block/custom/component/PlacementConditions.java | 2 +- .../api/block/custom/component/TransformationComponent.java | 2 +- .../geyser/api/block/custom/property/CustomBlockProperty.java | 2 +- .../geysermc/geyser/api/block/custom/property/PropertyType.java | 2 +- api/src/main/java/org/geysermc/geyser/api/command/Command.java | 2 +- .../java/org/geysermc/geyser/api/command/CommandExecutor.java | 2 +- .../java/org/geysermc/geyser/api/command/CommandSource.java | 2 +- .../org/geysermc/geyser/api/connection/GeyserConnection.java | 2 +- api/src/main/java/org/geysermc/geyser/api/event/EventBus.java | 2 +- .../main/java/org/geysermc/geyser/api/event/EventRegistrar.java | 2 +- .../java/org/geysermc/geyser/api/event/EventSubscriber.java | 2 +- .../java/org/geysermc/geyser/api/event/ExtensionEventBus.java | 2 +- .../org/geysermc/geyser/api/event/ExtensionEventSubscriber.java | 2 +- .../org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java | 2 +- .../geyser/api/event/bedrock/SessionInitializeEvent.java | 2 +- .../geysermc/geyser/api/event/connection/ConnectionEvent.java | 2 +- .../geyser/api/event/downstream/ServerDefineCommandsEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java | 2 +- .../api/event/lifecycle/GeyserDefineCustomBlocksEvent.java | 2 +- .../api/event/lifecycle/GeyserDefineCustomItemsEvent.java | 2 +- .../api/event/lifecycle/GeyserLoadResourcePacksEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserPostInitializeEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserPreInitializeEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserShutdownEvent.java | 2 +- .../main/java/org/geysermc/geyser/api/extension/Extension.java | 2 +- .../org/geysermc/geyser/api/extension/ExtensionDescription.java | 2 +- .../java/org/geysermc/geyser/api/extension/ExtensionLoader.java | 2 +- .../java/org/geysermc/geyser/api/extension/ExtensionLogger.java | 2 +- .../org/geysermc/geyser/api/extension/ExtensionManager.java | 2 +- .../api/extension/exception/InvalidDescriptionException.java | 2 +- .../api/extension/exception/InvalidExtensionException.java | 2 +- .../org/geysermc/geyser/api/item/custom/CustomItemData.java | 2 +- .../org/geysermc/geyser/api/item/custom/CustomItemOptions.java | 2 +- .../geysermc/geyser/api/item/custom/CustomRenderOffsets.java | 2 +- .../geyser/api/item/custom/NonVanillaCustomItemData.java | 2 +- api/src/main/java/org/geysermc/geyser/api/network/AuthType.java | 2 +- .../java/org/geysermc/geyser/api/network/BedrockListener.java | 2 +- .../main/java/org/geysermc/geyser/api/network/RemoteServer.java | 2 +- api/src/main/java/org/geysermc/geyser/api/util/TriState.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeConfiguration.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeDumpInfo.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeInjector.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeePingPassthrough.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeUpdateListener.java | 2 +- .../geyser/platform/bungeecord/command/BungeeCommandSource.java | 2 +- .../bungeecord/command/GeyserBungeeCommandExecutor.java | 2 +- .../geyser/platform/fabric/GeyserFabricConfiguration.java | 2 +- .../geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricMain.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricMod.java | 2 +- .../geyser/platform/fabric/GeyserFabricUpdateListener.java | 2 +- .../geysermc/geyser/platform/fabric/GeyserServerPortGetter.java | 2 +- .../geyser/platform/fabric/command/FabricCommandSender.java | 2 +- .../platform/fabric/command/GeyserFabricCommandExecutor.java | 2 +- .../platform/fabric/mixin/client/IntegratedServerMixin.java | 2 +- .../fabric/mixin/server/MinecraftDedicatedServerMixin.java | 2 +- .../geyser/platform/fabric/world/GeyserFabricWorldManager.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java | 2 +- .../geyser/platform/spigot/GeyserPaperPingPassthrough.java | 2 +- .../geyser/platform/spigot/GeyserSpigotConfiguration.java | 2 +- .../geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java | 2 +- .../geysermc/geyser/platform/spigot/GeyserSpigotInjector.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java | 2 +- .../geyser/platform/spigot/GeyserSpigotPingPassthrough.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java | 2 +- .../geyser/platform/spigot/GeyserSpigotUpdateListener.java | 2 +- .../geyser/platform/spigot/GeyserSpigotVersionChecker.java | 2 +- .../org/geysermc/geyser/platform/spigot/PaperAdventure.java | 2 +- .../org/geysermc/geyser/platform/spigot/ReflectedNames.java | 2 +- .../geyser/platform/spigot/command/GeyserBrigadierSupport.java | 2 +- .../platform/spigot/command/GeyserPaperCommandListener.java | 2 +- .../platform/spigot/command/GeyserSpigotCommandExecutor.java | 2 +- .../platform/spigot/command/GeyserSpigotCommandManager.java | 2 +- .../geyser/platform/spigot/command/SpigotCommandSource.java | 2 +- .../geyser/platform/spigot/world/GeyserPistonListener.java | 2 +- .../platform/spigot/world/GeyserSpigotBlockPlaceListener.java | 2 +- .../world/manager/GeyserSpigotLegacyNativeWorldManager.java | 2 +- .../spigot/world/manager/GeyserSpigotNativeWorldManager.java | 2 +- .../platform/spigot/world/manager/GeyserSpigotWorldManager.java | 2 +- .../geyser/platform/sponge/GeyserSpongeConfiguration.java | 2 +- .../geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java | 2 +- .../geyser/platform/sponge/GeyserSpongePingPassthrough.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java | 2 +- .../platform/sponge/command/GeyserSpongeCommandExecutor.java | 2 +- .../platform/sponge/command/GeyserSpongeCommandManager.java | 2 +- .../geyser/platform/sponge/command/SpongeCommandSource.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneBootstrap.java | 2 +- .../platform/standalone/GeyserStandaloneConfiguration.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneDumpInfo.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneLogger.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/ANSIColor.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/ColorPane.java | 2 +- .../geyser/platform/standalone/gui/GeyserStandaloneGUI.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/GraphPanel.java | 2 +- .../geyser/platform/velocity/GeyserVelocityConfiguration.java | 2 +- .../geyser/platform/velocity/GeyserVelocityDumpInfo.java | 2 +- .../geyser/platform/velocity/GeyserVelocityInjector.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityLogger.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityMain.java | 2 +- .../geyser/platform/velocity/GeyserVelocityPingPassthrough.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java | 2 +- .../geyser/platform/velocity/GeyserVelocityUpdateListener.java | 2 +- .../velocity/command/GeyserVelocityCommandExecutor.java | 2 +- .../geyser/platform/velocity/command/VelocityCommandSource.java | 2 +- common/src/main/java/org/geysermc/common/PlatformType.java | 2 +- .../src/main/java/org/geysermc/floodgate/crypto/AesCipher.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/Base64Topping.java | 2 +- .../java/org/geysermc/floodgate/crypto/FloodgateCipher.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/KeyProducer.java | 2 +- common/src/main/java/org/geysermc/floodgate/crypto/Topping.java | 2 +- common/src/main/java/org/geysermc/floodgate/news/NewsItem.java | 2 +- .../main/java/org/geysermc/floodgate/news/NewsItemAction.java | 2 +- .../main/java/org/geysermc/floodgate/news/NewsItemMessage.java | 2 +- common/src/main/java/org/geysermc/floodgate/news/NewsType.java | 2 +- .../java/org/geysermc/floodgate/news/data/AnnouncementData.java | 2 +- .../org/geysermc/floodgate/news/data/BuildSpecificData.java | 2 +- .../java/org/geysermc/floodgate/news/data/CheckAfterData.java | 2 +- .../org/geysermc/floodgate/news/data/ConfigSpecificData.java | 2 +- .../main/java/org/geysermc/floodgate/news/data/ItemData.java | 2 +- .../geysermc/floodgate/pluginmessage/PluginMessageChannels.java | 2 +- .../src/main/java/org/geysermc/floodgate/util/BedrockData.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java | 2 +- .../java/org/geysermc/floodgate/util/FloodgateInfoHolder.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/InputMode.java | 2 +- .../org/geysermc/floodgate/util/InvalidFormatException.java | 2 +- .../src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/UiProfile.java | 2 +- .../java/org/geysermc/floodgate/util/WebsocketEventType.java | 2 +- core/src/main/java/org/geysermc/connector/GeyserConnector.java | 2 +- .../org/geysermc/connector/network/session/GeyserSession.java | 2 +- .../org/geysermc/connector/network/session/auth/AuthData.java | 2 +- core/src/main/java/org/geysermc/geyser/Constants.java | 2 +- core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserImpl.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserLogger.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserMain.java | 2 +- .../main/java/org/geysermc/geyser/command/GeyserCommand.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandExecutor.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandManager.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandSource.java | 2 +- .../geyser/command/defaults/AdvancedTooltipsCommand.java | 2 +- .../geysermc/geyser/command/defaults/AdvancementsCommand.java | 2 +- .../geysermc/geyser/command/defaults/ConnectionTestCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/DumpCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/ExtensionsCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/HelpCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/ListCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/OffhandCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/ReloadCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/SettingsCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/StatisticsCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/StopCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/VersionCommand.java | 2 +- .../geyser/configuration/EmoteOffhandWorkaroundOption.java | 2 +- .../org/geysermc/geyser/configuration/GeyserConfiguration.java | 2 +- .../geyser/configuration/GeyserCustomSkullConfiguration.java | 2 +- .../geyser/configuration/GeyserJacksonConfiguration.java | 2 +- .../main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java | 2 +- core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java | 2 +- .../main/java/org/geysermc/geyser/entity/EntityDefinition.java | 2 +- .../main/java/org/geysermc/geyser/entity/EntityDefinitions.java | 2 +- .../java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java | 2 +- .../geysermc/geyser/entity/attribute/GeyserAttributeType.java | 2 +- .../java/org/geysermc/geyser/entity/factory/EntityFactory.java | 2 +- .../org/geysermc/geyser/entity/type/AbstractArrowEntity.java | 2 +- .../org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/BoatEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ChestBoatEntity.java | 2 +- .../geysermc/geyser/entity/type/CommandBlockMinecartEntity.java | 2 +- .../geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java | 2 +- .../org/geysermc/geyser/entity/type/EnderCrystalEntity.java | 2 +- core/src/main/java/org/geysermc/geyser/entity/type/Entity.java | 2 +- .../java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java | 2 +- .../org/geysermc/geyser/entity/type/FallingBlockEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FireballEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FireworkEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FishingHookEntity.java | 2 +- .../org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/ItemEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ItemFrameEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/LeashKnotEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/LightningEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/LivingEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/MinecartEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/PaintingEntity.java | 2 +- .../org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/TNTEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ThrowableEntity.java | 2 +- .../org/geysermc/geyser/entity/type/ThrowableItemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/ThrownPotionEntity.java | 2 +- .../src/main/java/org/geysermc/geyser/entity/type/Tickable.java | 2 +- .../java/org/geysermc/geyser/entity/type/TippedArrowEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/TridentEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/WitherSkullEntity.java | 2 +- .../geysermc/geyser/entity/type/living/AbstractFishEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AgeableEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AllayEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AmbientEntity.java | 2 +- .../geysermc/geyser/entity/type/living/ArmorStandEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/living/BatEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/CreatureEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/DolphinEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/FlyingEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/GlowSquidEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/GolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/IronGolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/living/MobEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SlimeEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SnowGolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SquidEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/TadpoleEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/WaterEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/AnimalEntity.java | 2 +- .../geyser/entity/type/living/animal/AxolotlEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/BeeEntity.java | 2 +- .../geyser/entity/type/living/animal/ChickenEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/CowEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/FoxEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/FrogEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/GoatEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/HoglinEntity.java | 2 +- .../geyser/entity/type/living/animal/MooshroomEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/OcelotEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/PandaEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/PigEntity.java | 2 +- .../geyser/entity/type/living/animal/PolarBearEntity.java | 2 +- .../geyser/entity/type/living/animal/PufferFishEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/RabbitEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/SheepEntity.java | 2 +- .../geyser/entity/type/living/animal/StriderEntity.java | 2 +- .../geyser/entity/type/living/animal/TropicalFishEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/TurtleEntity.java | 2 +- .../entity/type/living/animal/horse/AbstractHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/CamelEntity.java | 2 +- .../entity/type/living/animal/horse/ChestedHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/HorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/LlamaEntity.java | 2 +- .../entity/type/living/animal/horse/SkeletonHorseEntity.java | 2 +- .../entity/type/living/animal/horse/TraderLlamaEntity.java | 2 +- .../entity/type/living/animal/horse/ZombieHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/CatEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/ParrotEntity.java | 2 +- .../entity/type/living/animal/tameable/TameableEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/WolfEntity.java | 2 +- .../entity/type/living/merchant/AbstractMerchantEntity.java | 2 +- .../geyser/entity/type/living/merchant/VillagerEntity.java | 2 +- .../entity/type/living/monster/AbstractSkeletonEntity.java | 2 +- .../geyser/entity/type/living/monster/BasePiglinEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/BlazeEntity.java | 2 +- .../geyser/entity/type/living/monster/CreeperEntity.java | 2 +- .../geyser/entity/type/living/monster/ElderGuardianEntity.java | 2 +- .../geyser/entity/type/living/monster/EnderDragonEntity.java | 2 +- .../entity/type/living/monster/EnderDragonPartEntity.java | 2 +- .../geyser/entity/type/living/monster/EndermanEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/GhastEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/GiantEntity.java | 2 +- .../geyser/entity/type/living/monster/GuardianEntity.java | 2 +- .../geyser/entity/type/living/monster/MonsterEntity.java | 2 +- .../geyser/entity/type/living/monster/PhantomEntity.java | 2 +- .../geyser/entity/type/living/monster/PiglinEntity.java | 2 +- .../geyser/entity/type/living/monster/ShulkerEntity.java | 2 +- .../geyser/entity/type/living/monster/SkeletonEntity.java | 2 +- .../geyser/entity/type/living/monster/SpiderEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/VexEntity.java | 2 +- .../geyser/entity/type/living/monster/WardenEntity.java | 2 +- .../geyser/entity/type/living/monster/WitherEntity.java | 2 +- .../geyser/entity/type/living/monster/ZoglinEntity.java | 2 +- .../geyser/entity/type/living/monster/ZombieEntity.java | 2 +- .../geyser/entity/type/living/monster/ZombieVillagerEntity.java | 2 +- .../entity/type/living/monster/ZombifiedPiglinEntity.java | 2 +- .../entity/type/living/monster/raid/AbstractIllagerEntity.java | 2 +- .../geyser/entity/type/living/monster/raid/PillagerEntity.java | 2 +- .../entity/type/living/monster/raid/RaidParticipantEntity.java | 2 +- .../type/living/monster/raid/SpellcasterIllagerEntity.java | 2 +- .../entity/type/living/monster/raid/VindicatorEntity.java | 2 +- .../org/geysermc/geyser/entity/type/player/PlayerEntity.java | 2 +- .../geysermc/geyser/entity/type/player/SessionPlayerEntity.java | 2 +- .../geysermc/geyser/entity/type/player/SkullPlayerEntity.java | 2 +- .../src/main/java/org/geysermc/geyser/event/GeyserEventBus.java | 2 +- .../java/org/geysermc/geyser/event/GeyserEventRegistrar.java | 2 +- .../java/org/geysermc/geyser/event/GeyserEventSubscriber.java | 2 +- .../geyser/event/type/GeyserDefineCommandsEventImpl.java | 2 +- .../geyser/event/type/GeyserDefineCustomItemsEventImpl.java | 2 +- .../geysermc/geyser/extension/GeyserExtensionClassLoader.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionContainer.java | 2 +- .../geysermc/geyser/extension/GeyserExtensionDescription.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionLoader.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionLogger.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionManager.java | 2 +- .../geyser/extension/command/GeyserExtensionCommand.java | 2 +- .../geyser/extension/event/GeyserExtensionEventBus.java | 2 +- .../main/java/org/geysermc/geyser/inventory/AnvilContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/BeaconContainer.java | 2 +- .../org/geysermc/geyser/inventory/BedrockContainerSlot.java | 2 +- .../org/geysermc/geyser/inventory/CartographyContainer.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/Container.java | 2 +- .../java/org/geysermc/geyser/inventory/EnchantingContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/Generic3X3Container.java | 2 +- .../java/org/geysermc/geyser/inventory/GeyserEnchantOption.java | 2 +- .../java/org/geysermc/geyser/inventory/GeyserItemStack.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/Inventory.java | 2 +- .../java/org/geysermc/geyser/inventory/LecternContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/MerchantContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/PlayerInventory.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/SlotType.java | 2 +- .../org/geysermc/geyser/inventory/StonecutterContainer.java | 2 +- .../main/java/org/geysermc/geyser/inventory/click/Click.java | 2 +- .../java/org/geysermc/geyser/inventory/click/ClickPlan.java | 2 +- .../geysermc/geyser/inventory/holder/BlockInventoryHolder.java | 2 +- .../org/geysermc/geyser/inventory/holder/InventoryHolder.java | 2 +- .../java/org/geysermc/geyser/inventory/item/Enchantment.java | 2 +- .../main/java/org/geysermc/geyser/inventory/item/Potion.java | 2 +- .../org/geysermc/geyser/inventory/item/StoredItemMappings.java | 2 +- .../org/geysermc/geyser/inventory/item/TippedArrowPotion.java | 2 +- .../java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserStonecutterData.java | 2 +- .../geyser/inventory/updater/AnvilInventoryUpdater.java | 2 +- .../geyser/inventory/updater/ChestInventoryUpdater.java | 2 +- .../geyser/inventory/updater/ContainerInventoryUpdater.java | 2 +- .../geyser/inventory/updater/HorseInventoryUpdater.java | 2 +- .../org/geysermc/geyser/inventory/updater/InventoryUpdater.java | 2 +- .../geysermc/geyser/inventory/updater/UIInventoryUpdater.java | 2 +- core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomItemData.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomItemOptions.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomMappingData.java | 2 +- .../geysermc/geyser/item/GeyserNonVanillaCustomItemData.java | 2 +- core/src/main/java/org/geysermc/geyser/item/Items.java | 2 +- .../geysermc/geyser/item/components/ToolBreakSpeedsUtils.java | 2 +- .../main/java/org/geysermc/geyser/item/components/ToolTier.java | 2 +- .../java/org/geysermc/geyser/item/components/WearableSlot.java | 2 +- .../item/exception/InvalidCustomMappingsFileException.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/CompassItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/ElytraItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/FilledMapItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/GoatHornItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/Item.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/MapItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/PotionItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/ShieldItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/SpawnEggItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/TieredItem.java | 2 +- .../java/org/geysermc/geyser/item/type/TippedArrowItem.java | 2 +- .../main/java/org/geysermc/geyser/level/BedrockDimension.java | 2 +- .../src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java | 2 +- core/src/main/java/org/geysermc/geyser/level/FireworkColor.java | 2 +- core/src/main/java/org/geysermc/geyser/level/GameRule.java | 2 +- .../main/java/org/geysermc/geyser/level/GeyserAdvancement.java | 2 +- .../main/java/org/geysermc/geyser/level/GeyserWorldManager.java | 2 +- core/src/main/java/org/geysermc/geyser/level/JavaDimension.java | 2 +- core/src/main/java/org/geysermc/geyser/level/MapColor.java | 2 +- core/src/main/java/org/geysermc/geyser/level/PaintingType.java | 2 +- core/src/main/java/org/geysermc/geyser/level/WorldManager.java | 2 +- .../java/org/geysermc/geyser/level/block/BlockStateValues.java | 2 +- .../java/org/geysermc/geyser/level/block/DoubleChestValue.java | 2 +- .../geyser/level/block/GeyserCustomBlockComponents.java | 2 +- .../org/geysermc/geyser/level/block/GeyserCustomBlockData.java | 2 +- .../geysermc/geyser/level/block/GeyserCustomBlockProperty.java | 2 +- .../org/geysermc/geyser/level/block/GeyserCustomBlockState.java | 2 +- .../main/java/org/geysermc/geyser/level/chunk/BlockStorage.java | 2 +- .../main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java | 2 +- .../org/geysermc/geyser/level/chunk/GeyserChunkSection.java | 2 +- .../java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java | 2 +- .../org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java | 2 +- core/src/main/java/org/geysermc/geyser/level/physics/Axis.java | 2 +- .../java/org/geysermc/geyser/level/physics/BoundingBox.java | 2 +- .../org/geysermc/geyser/level/physics/CollisionManager.java | 2 +- .../main/java/org/geysermc/geyser/level/physics/Direction.java | 2 +- .../java/org/geysermc/geyser/level/physics/PistonBehavior.java | 2 +- core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java | 2 +- .../src/main/java/org/geysermc/geyser/network/GameProtocol.java | 2 +- .../org/geysermc/geyser/network/GeyserServerInitializer.java | 2 +- .../java/org/geysermc/geyser/network/LoggingPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/QueryPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/UpstreamPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/netty/ChannelWrapper.java | 2 +- .../geyser/network/netty/DefaultChannelPipelinePublic.java | 2 +- .../java/org/geysermc/geyser/network/netty/GeyserInjector.java | 2 +- .../java/org/geysermc/geyser/network/netty/GeyserServer.java | 2 +- .../geyser/network/netty/LocalChannelWithRemoteAddress.java | 2 +- .../org/geysermc/geyser/network/netty/LocalChannelWrapper.java | 2 +- .../geyser/network/netty/LocalServerChannelWrapper.java | 2 +- .../java/org/geysermc/geyser/network/netty/LocalSession.java | 2 +- core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java | 2 +- .../java/org/geysermc/geyser/pack/ResourcePackManifest.java | 2 +- .../java/org/geysermc/geyser/pack/SkullResourcePackManager.java | 2 +- .../org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java | 2 +- core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java | 2 +- .../java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java | 2 +- .../org/geysermc/geyser/registry/AbstractMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/ArrayRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/BlockRegistries.java | 2 +- .../java/org/geysermc/geyser/registry/IntMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/MappedRegistry.java | 2 +- .../org/geysermc/geyser/registry/PacketTranslatorRegistry.java | 2 +- core/src/main/java/org/geysermc/geyser/registry/Registries.java | 2 +- core/src/main/java/org/geysermc/geyser/registry/Registry.java | 2 +- .../java/org/geysermc/geyser/registry/SimpleMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/SimpleRegistry.java | 2 +- .../java/org/geysermc/geyser/registry/VersionedRegistry.java | 2 +- .../geyser/registry/loader/AnnotatedRegistryLoader.java | 2 +- .../geyser/registry/loader/BiomeIdentifierRegistryLoader.java | 2 +- .../geyser/registry/loader/BlockEntityRegistryLoader.java | 2 +- .../geyser/registry/loader/CollisionRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/EffectRegistryLoader.java | 2 +- .../geyser/registry/loader/EnchantmentRegistryLoader.java | 2 +- .../geyser/registry/loader/MultiResourceRegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/NbtRegistryLoader.java | 2 +- .../geyser/registry/loader/ParticleTypesRegistryLoader.java | 2 +- .../geyser/registry/loader/PotionMixRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/ProviderRegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/RegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/RegistryLoaders.java | 2 +- .../geyser/registry/loader/SoundEventsRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/SoundRegistryLoader.java | 2 +- .../geyser/registry/loader/SoundTranslatorRegistryLoader.java | 2 +- .../geysermc/geyser/registry/mappings/MappingsConfigReader.java | 2 +- .../registry/mappings/util/CustomBlockComponentsMapping.java | 2 +- .../geyser/registry/mappings/util/CustomBlockMapping.java | 2 +- .../registry/mappings/util/CustomBlockStateBuilderMapping.java | 2 +- .../geyser/registry/mappings/util/CustomBlockStateMapping.java | 2 +- .../geyser/registry/mappings/versions/MappingsReader.java | 2 +- .../geyser/registry/mappings/versions/MappingsReader_v1.java | 2 +- .../geyser/registry/populator/BlockRegistryPopulator.java | 2 +- .../registry/populator/CreativeItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/CustomItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/CustomSkullRegistryPopulator.java | 2 +- .../geyser/registry/populator/ItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/PacketRegistryPopulator.java | 2 +- .../geyser/registry/populator/RecipeRegistryPopulator.java | 2 +- .../org/geysermc/geyser/registry/provider/ProviderSupplier.java | 2 +- .../java/org/geysermc/geyser/registry/type/BlockMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/BlockMappings.java | 2 +- .../java/org/geysermc/geyser/registry/type/CustomSkull.java | 2 +- .../java/org/geysermc/geyser/registry/type/EnchantmentData.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserBedrockBlock.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserItemDefinition.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserMappingItem.java | 2 +- .../java/org/geysermc/geyser/registry/type/ItemMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/ItemMappings.java | 2 +- .../geyser/registry/type/NonVanillaItemRegistration.java | 2 +- .../java/org/geysermc/geyser/registry/type/PaletteItem.java | 2 +- .../java/org/geysermc/geyser/registry/type/ParticleMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/SoundMapping.java | 2 +- .../src/main/java/org/geysermc/geyser/scoreboard/Objective.java | 2 +- core/src/main/java/org/geysermc/geyser/scoreboard/Score.java | 2 +- .../main/java/org/geysermc/geyser/scoreboard/Scoreboard.java | 2 +- .../java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java | 2 +- core/src/main/java/org/geysermc/geyser/scoreboard/Team.java | 2 +- .../main/java/org/geysermc/geyser/scoreboard/UpdateType.java | 2 +- .../java/org/geysermc/geyser/session/DownstreamSession.java | 2 +- .../main/java/org/geysermc/geyser/session/GeyserSession.java | 2 +- .../main/java/org/geysermc/geyser/session/SessionManager.java | 2 +- .../main/java/org/geysermc/geyser/session/UpstreamSession.java | 2 +- .../main/java/org/geysermc/geyser/session/auth/AuthData.java | 2 +- .../org/geysermc/geyser/session/auth/BedrockClientData.java | 2 +- .../org/geysermc/geyser/session/cache/AdvancementsCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/BookEditCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/BossBar.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/ChunkCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/EntityCache.java | 2 +- .../org/geysermc/geyser/session/cache/EntityEffectCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/FormCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/LodestoneCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/PistonCache.java | 2 +- .../org/geysermc/geyser/session/cache/PreferencesCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/SkullCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/TagCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/TeleportCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/WorldBorder.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/WorldCache.java | 2 +- .../main/java/org/geysermc/geyser/skin/FakeHeadProvider.java | 2 +- .../java/org/geysermc/geyser/skin/FloodgateSkinUploader.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/SkinManager.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java | 2 +- .../main/java/org/geysermc/geyser/skin/SkullSkinManager.java | 2 +- .../main/java/org/geysermc/geyser/text/AsteriskSerializer.java | 2 +- core/src/main/java/org/geysermc/geyser/text/ChatColor.java | 2 +- core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java | 2 +- .../geysermc/geyser/text/DummyLegacyHoverEventSerializer.java | 2 +- core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java | 2 +- .../geysermc/geyser/text/GsonComponentSerializerWrapper.java | 2 +- .../src/main/java/org/geysermc/geyser/text/MinecraftLocale.java | 2 +- .../org/geysermc/geyser/text/MinecraftTranslationRegistry.java | 2 +- core/src/main/java/org/geysermc/geyser/text/TextDecoration.java | 2 +- .../geysermc/geyser/translator/collision/BlockCollision.java | 2 +- .../geysermc/geyser/translator/collision/CollisionRemapper.java | 2 +- .../geysermc/geyser/translator/collision/DirtPathCollision.java | 2 +- .../org/geysermc/geyser/translator/collision/DoorCollision.java | 2 +- .../geysermc/geyser/translator/collision/OtherCollision.java | 2 +- .../geyser/translator/collision/ScaffoldingCollision.java | 2 +- .../org/geysermc/geyser/translator/collision/SnowCollision.java | 2 +- .../geysermc/geyser/translator/collision/SolidCollision.java | 2 +- .../geysermc/geyser/translator/collision/SpawnerCollision.java | 2 +- .../geysermc/geyser/translator/collision/TrapdoorCollision.java | 2 +- .../geyser/translator/entity/EntityMetadataTranslator.java | 2 +- .../translator/inventory/AbstractBlockInventoryTranslator.java | 2 +- .../geyser/translator/inventory/AnvilInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BaseInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BeaconInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BrewingInventoryTranslator.java | 2 +- .../translator/inventory/CartographyInventoryTranslator.java | 2 +- .../translator/inventory/CraftingInventoryTranslator.java | 2 +- .../translator/inventory/EnchantingInventoryTranslator.java | 2 +- .../translator/inventory/Generic3X3InventoryTranslator.java | 2 +- .../translator/inventory/GrindstoneInventoryTranslator.java | 2 +- .../geyser/translator/inventory/HopperInventoryTranslator.java | 2 +- .../geyser/translator/inventory/InventoryTranslator.java | 2 +- .../geyser/translator/inventory/LecternInventoryTranslator.java | 2 +- .../geyser/translator/inventory/LoomInventoryTranslator.java | 2 +- .../translator/inventory/MerchantInventoryTranslator.java | 2 +- .../geyser/translator/inventory/PlayerInventoryTranslator.java | 2 +- .../geyser/translator/inventory/ShulkerInventoryTranslator.java | 2 +- .../translator/inventory/SmithingInventoryTranslator.java | 2 +- .../translator/inventory/StonecutterInventoryTranslator.java | 2 +- .../translator/inventory/chest/ChestInventoryTranslator.java | 2 +- .../inventory/chest/DoubleChestInventoryTranslator.java | 2 +- .../inventory/chest/SingleChestInventoryTranslator.java | 2 +- .../inventory/furnace/AbstractFurnaceInventoryTranslator.java | 2 +- .../inventory/furnace/BlastFurnaceInventoryTranslator.java | 2 +- .../inventory/furnace/FurnaceInventoryTranslator.java | 2 +- .../translator/inventory/furnace/SmokerInventoryTranslator.java | 2 +- .../inventory/horse/AbstractHorseInventoryTranslator.java | 2 +- .../inventory/horse/ChestedHorseInventoryTranslator.java | 2 +- .../translator/inventory/horse/DonkeyInventoryTranslator.java | 2 +- .../translator/inventory/horse/HorseInventoryTranslator.java | 2 +- .../translator/inventory/horse/LlamaInventoryTranslator.java | 2 +- .../geyser/translator/inventory/item/CustomItemTranslator.java | 2 +- .../geyser/translator/inventory/item/ItemTranslator.java | 2 +- .../translator/inventory/item/NbtItemStackTranslator.java | 2 +- .../org/geysermc/geyser/translator/level/BiomeTranslator.java | 2 +- .../level/block/entity/BannerBlockEntityTranslator.java | 2 +- .../level/block/entity/BeaconBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/BedBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/BedrockOnlyBlockEntity.java | 2 +- .../geyser/translator/level/block/entity/BlockEntity.java | 2 +- .../translator/level/block/entity/BlockEntityTranslator.java | 2 +- .../level/block/entity/CampfireBlockEntityTranslator.java | 2 +- .../level/block/entity/CommandBlockBlockEntityTranslator.java | 2 +- .../level/block/entity/DoubleChestBlockEntityTranslator.java | 2 +- .../level/block/entity/EmptyBlockEntityTranslator.java | 2 +- .../level/block/entity/EndGatewayBlockEntityTranslator.java | 2 +- .../level/block/entity/FlowerPotBlockEntityTranslator.java | 2 +- .../level/block/entity/JigsawBlockBlockEntityTranslator.java | 2 +- .../geyser/translator/level/block/entity/PistonBlockEntity.java | 2 +- .../level/block/entity/PistonBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/RequiresBlockState.java | 2 +- .../level/block/entity/ShulkerBoxBlockEntityTranslator.java | 2 +- .../level/block/entity/SignBlockEntityTranslator.java | 2 +- .../level/block/entity/SkullBlockEntityTranslator.java | 2 +- .../level/block/entity/SpawnerBlockEntityTranslator.java | 2 +- .../geyser/translator/level/event/LevelEventTranslator.java | 2 +- .../geyser/translator/level/event/PlaySoundEventTranslator.java | 2 +- .../translator/level/event/SoundEventEventTranslator.java | 2 +- .../translator/level/event/SoundLevelEventTranslator.java | 2 +- .../geysermc/geyser/translator/protocol/PacketTranslator.java | 2 +- .../org/geysermc/geyser/translator/protocol/Translator.java | 2 +- .../translator/protocol/bedrock/BedrockAnimateTranslator.java | 2 +- .../protocol/bedrock/BedrockBlockEntityDataTranslator.java | 2 +- .../protocol/bedrock/BedrockBlockPickRequestTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockBookEditTranslator.java | 2 +- .../protocol/bedrock/BedrockCommandBlockUpdateTranslator.java | 2 +- .../protocol/bedrock/BedrockCommandRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockContainerCloseTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockEmoteListTranslator.java | 2 +- .../protocol/bedrock/BedrockEntityPickRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockFilterTextTranslator.java | 2 +- .../protocol/bedrock/BedrockInventoryTransactionTranslator.java | 2 +- .../protocol/bedrock/BedrockItemFrameDropItemTranslator.java | 2 +- .../protocol/bedrock/BedrockItemStackRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockLecternUpdateTranslator.java | 2 +- .../protocol/bedrock/BedrockMapInfoRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockMobEquipmentTranslator.java | 2 +- .../protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java | 2 +- .../protocol/bedrock/BedrockNetworkStackLatencyTranslator.java | 2 +- .../bedrock/BedrockPacketViolationWarningTranslator.java | 2 +- .../protocol/bedrock/BedrockPlayerInputTranslator.java | 2 +- .../BedrockPositionTrackingDBClientRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockRequestAbilityTranslator.java | 2 +- .../protocol/bedrock/BedrockRequestChunkRadiusTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockRespawnTranslator.java | 2 +- .../bedrock/BedrockServerSettingsRequestTranslator.java | 2 +- .../bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java | 2 +- .../protocol/bedrock/BedrockShowCreditsTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockTextTranslator.java | 2 +- .../protocol/bedrock/entity/BedrockEntityEventTranslator.java | 2 +- .../protocol/bedrock/entity/player/BedrockActionTranslator.java | 2 +- .../protocol/bedrock/entity/player/BedrockEmoteTranslator.java | 2 +- .../bedrock/entity/player/BedrockInteractTranslator.java | 2 +- .../bedrock/entity/player/BedrockMovePlayerTranslator.java | 2 +- .../bedrock/entity/player/BedrockRiderJumpTranslator.java | 2 +- .../entity/player/BedrockSetPlayerGameTypeTranslator.java | 2 +- .../bedrock/world/BedrockLevelSoundEventTranslator.java | 2 +- .../translator/protocol/java/JavaAwardStatsTranslator.java | 2 +- .../translator/protocol/java/JavaBossEventTranslator.java | 2 +- .../protocol/java/JavaChangeDifficultyTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaCommandsTranslator.java | 2 +- .../translator/protocol/java/JavaCustomPayloadTranslator.java | 2 +- .../translator/protocol/java/JavaCustomQueryTranslator.java | 2 +- .../translator/protocol/java/JavaDisconnectTranslator.java | 2 +- .../translator/protocol/java/JavaDisguisedChatTranslator.java | 2 +- .../translator/protocol/java/JavaGameProfileTranslator.java | 2 +- .../translator/protocol/java/JavaKeepAliveTranslator.java | 2 +- .../translator/protocol/java/JavaLoginDisconnectTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaLoginTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaPingTranslator.java | 2 +- .../translator/protocol/java/JavaPlayerChatTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaRespawnTranslator.java | 2 +- .../protocol/java/JavaSelectAdvancementsTabTranslator.java | 2 +- .../translator/protocol/java/JavaSystemChatTranslator.java | 2 +- .../protocol/java/JavaUpdateAdvancementsTranslator.java | 2 +- .../translator/protocol/java/JavaUpdateRecipesTranslator.java | 2 +- .../translator/protocol/java/JavaUpdateTagsTranslator.java | 2 +- .../translator/protocol/java/entity/JavaAnimateTranslator.java | 2 +- .../protocol/java/entity/JavaEntityEventTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityPosRotTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityPosTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityRotTranslator.java | 2 +- .../protocol/java/entity/JavaMoveVehicleTranslator.java | 2 +- .../protocol/java/entity/JavaRemoveEntitiesTranslator.java | 2 +- .../protocol/java/entity/JavaRemoveMobEffectTranslator.java | 2 +- .../protocol/java/entity/JavaRotateHeadTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityDataTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityLinkTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityMotionTranslator.java | 2 +- .../protocol/java/entity/JavaSetEquipmentTranslator.java | 2 +- .../protocol/java/entity/JavaSetPassengersTranslator.java | 2 +- .../protocol/java/entity/JavaSoundEntityTranslator.java | 2 +- .../protocol/java/entity/JavaTakeItemEntityTranslator.java | 2 +- .../protocol/java/entity/JavaTeleportEntityTranslator.java | 2 +- .../protocol/java/entity/JavaUpdateAttributesTranslator.java | 2 +- .../protocol/java/entity/JavaUpdateMobEffectTranslator.java | 2 +- .../java/entity/player/JavaBlockChangedAckTranslator.java | 2 +- .../java/entity/player/JavaPlayerAbilitiesTranslator.java | 2 +- .../java/entity/player/JavaPlayerCombatKillTranslator.java | 2 +- .../java/entity/player/JavaPlayerInfoRemoveTranslator.java | 2 +- .../java/entity/player/JavaPlayerInfoUpdateTranslator.java | 2 +- .../protocol/java/entity/player/JavaPlayerLookAtTranslator.java | 2 +- .../java/entity/player/JavaPlayerPositionTranslator.java | 2 +- .../java/entity/player/JavaSetCarriedItemTranslator.java | 2 +- .../java/entity/player/JavaSetExperienceTranslator.java | 2 +- .../protocol/java/entity/player/JavaSetHealthTranslator.java | 2 +- .../protocol/java/entity/spawn/JavaAddEntityTranslator.java | 2 +- .../java/entity/spawn/JavaAddExperienceOrbTranslator.java | 2 +- .../protocol/java/entity/spawn/JavaAddPlayerTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerCloseTranslator.java | 2 +- .../java/inventory/JavaContainerSetContentTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerSetDataTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerSetSlotTranslator.java | 2 +- .../protocol/java/inventory/JavaHorseScreenOpenTranslator.java | 2 +- .../protocol/java/inventory/JavaMerchantOffersTranslator.java | 2 +- .../protocol/java/inventory/JavaOpenScreenTranslator.java | 2 +- .../protocol/java/level/JavaBlockDestructionTranslator.java | 2 +- .../protocol/java/level/JavaBlockEntityDataTranslator.java | 2 +- .../protocol/java/level/JavaBlockEventTranslator.java | 2 +- .../protocol/java/level/JavaBlockUpdateTranslator.java | 2 +- .../translator/protocol/java/level/JavaCooldownTranslator.java | 2 +- .../translator/protocol/java/level/JavaExplodeTranslator.java | 2 +- .../protocol/java/level/JavaForgetLevelChunkTranslator.java | 2 +- .../translator/protocol/java/level/JavaGameEventTranslator.java | 2 +- .../protocol/java/level/JavaLevelChunkWithLightTranslator.java | 2 +- .../protocol/java/level/JavaLevelEventTranslator.java | 2 +- .../protocol/java/level/JavaLevelParticlesTranslator.java | 2 +- .../protocol/java/level/JavaMapItemDataTranslator.java | 2 +- .../protocol/java/level/JavaSectionBlocksUpdateTranslator.java | 2 +- .../protocol/java/level/JavaSetChunkCacheCenterTranslator.java | 2 +- .../protocol/java/level/JavaSetChunkCacheRadiusTranslator.java | 2 +- .../java/level/JavaSetDefaultSpawnPositionTranslator.java | 2 +- .../translator/protocol/java/level/JavaSetTimeTranslator.java | 2 +- .../translator/protocol/java/level/JavaSoundTranslator.java | 2 +- .../translator/protocol/java/level/JavaStopSoundTranslator.java | 2 +- .../java/level/border/JavaInitializeBorderTranslator.java | 2 +- .../java/level/border/JavaSetBorderCenterTranslator.java | 2 +- .../java/level/border/JavaSetBorderLerpSizeTranslator.java | 2 +- .../protocol/java/level/border/JavaSetBorderSizeTranslator.java | 2 +- .../java/level/border/JavaSetBorderWarningDelayTranslator.java | 2 +- .../level/border/JavaSetBorderWarningDistanceTranslator.java | 2 +- .../java/scoreboard/JavaSetDisplayObjectiveTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetObjectiveTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetScoreTranslator.java | 2 +- .../protocol/java/title/JavaClearTitlesTranslator.java | 2 +- .../protocol/java/title/JavaSetActionBarTextTranslator.java | 2 +- .../protocol/java/title/JavaSetSubtitleTextTranslator.java | 2 +- .../protocol/java/title/JavaSetTitleTextTranslator.java | 2 +- .../protocol/java/title/JavaSetTitlesAnimationTranslator.java | 2 +- .../translator/sound/BlockSoundInteractionTranslator.java | 2 +- .../geyser/translator/sound/SoundInteractionTranslator.java | 2 +- .../org/geysermc/geyser/translator/sound/SoundTranslator.java | 2 +- .../sound/block/BucketSoundInteractionTranslator.java | 2 +- .../sound/block/ComparatorSoundInteractionTranslator.java | 2 +- .../translator/sound/block/DoorSoundInteractionTranslator.java | 2 +- .../sound/block/FlintAndSteelInteractionTranslator.java | 2 +- .../translator/sound/block/GrassPathInteractionTranslator.java | 2 +- .../geyser/translator/sound/block/HoeInteractionTranslator.java | 2 +- .../translator/sound/block/LeverSoundInteractionTranslator.java | 2 +- .../org/geysermc/geyser/translator/text/MessageTranslator.java | 2 +- core/src/main/java/org/geysermc/geyser/util/AssetUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/BlockEntityUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/BlockUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/CpuUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/EntityUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/FileUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/InteractionResult.java | 2 +- core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java | 2 +- core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/ItemUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java | 2 +- .../java/org/geysermc/geyser/util/LoginEncryptionUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java | 2 +- core/src/main/java/org/geysermc/geyser/util/MathUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/Metrics.java | 2 +- core/src/main/java/org/geysermc/geyser/util/NewsHandler.java | 2 +- .../main/java/org/geysermc/geyser/util/PluginMessageUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SignUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SoundUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/StatisticFormatters.java | 2 +- .../src/main/java/org/geysermc/geyser/util/StatisticsUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/VersionCheckUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/WebUtils.java | 2 +- .../geysermc/geyser/util/collection/FixedInt2BooleanMap.java | 2 +- .../org/geysermc/geyser/util/collection/FixedInt2ByteMap.java | 2 +- .../org/geysermc/geyser/util/collection/FixedInt2IntMap.java | 2 +- .../org/geysermc/geyser/util/collection/LecternHasBookMap.java | 2 +- .../java/org/geysermc/geyser/util/collection/package-info.java | 2 +- .../geyser/network/translators/chat/MessageTranslatorTest.java | 2 +- .../geyser/translator/inventory/item/CustomItemsTest.java | 2 +- .../geysermc/geyser/util/collection/GeyserCollectionsTest.java | 2 +- 766 files changed, 766 insertions(+), 766 deletions(-) diff --git a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java index f9ba683022f..a1887502ccf 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java index e1da50f258e..6d721095020 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java index 84e2e2ffd3e..d292f03d6d3 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java index 9b99d679b26..f62fb1e7571 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java index c35c0ee4e06..c3de7b05eac 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java index f86206d366d..724e22512f8 100644 --- a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java +++ b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 0310c794788..89bb1f3827d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index 0d52a2a9ea3..a1301cb9f9a 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 2316f178d61..16b0fcc7623 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 5da8e422a9e..080ec944792 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 1926c5be50b..435ec2ba551 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index a14bb2ceffc..525a43b627c 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index 3b102987aeb..f7dd7869050 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java index 5f4f08b5154..d10f2a25098 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java index fc39c4663fa..f2f22451eb5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 6b6d70e5752..994e05434b1 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/Command.java b/api/src/main/java/org/geysermc/geyser/api/command/Command.java index 2f1f2b24dba..2b5dc746d35 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/Command.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/Command.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java b/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java index 12a54ee9082..0c0512a3d4f 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java b/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java index 45276e2c466..5801ae32fa6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java index 8d695bf027d..ff8057c4d78 100644 --- a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java +++ b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java index 801bfa45fd3..570cc3669f6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java b/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java index 064dd55f60f..7f294ecd08d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java index 7f91d09a39e..34afbf84212 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java index a58d3589173..ae894092633 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java index 9c5fffa2f17..303c4e673f6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java index 35b6a9e7371..105dfc5a074 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java index 91cdea99a2d..ef2d35a8b42 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java index 158f14d53bb..3ee9dde6773 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java index ff4a1d074ea..9b7e8a778e5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java index 77d5efa658e..1f450652015 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 1dd135521dc..eeea50ffef5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java index 0957b8551c1..7cc466ebc9a 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java index e9b283ecbbd..c9d3c5f5f39 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java index 8d145f615dc..13709f55680 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java index 8be89dafdcf..1cf20943077 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java index 7793ef997c8..ca244402f30 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java b/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java index 33fc159de52..a748c78fcb5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java index 2df3ee815b5..ad21a5162d2 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java index 30414d500e4..da018e05795 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java index 17e108455fd..d99e0a2e408 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java index a9d0d7376d2..0f3c7c076ce 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java index 1fe88e9e990..b0a26668008 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java index 7fb6b692241..adf61871ed9 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java index d256b9ac045..2b1994a1f2c 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java index 2ca19e20e56..e90b149b9d8 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java index f81da0ae261..f5123ea3658 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java index 13b37096d84..a8c168f92d0 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java b/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java index 3176f338422..ef697ccf2da 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java index 61fe286aa13..ffaf6dca270 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java index 8ac5d8a03ad..833a0f90a4e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java index 457a38e32e2..054951fd2de 100644 --- a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java +++ b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java index bc084a34e90..2bb02e37ff1 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java index ba7bc464ffd..d5f62a65e31 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java index e10b3ce6fc3..ac622962af5 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java index daeb201029c..447d6dcf297 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java index 8229f952a7c..9ea76e6a9f3 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index 39fb9e13423..f1b4229561c 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index 4141a8dbc24..3ceb2c186d8 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java index c68839b2095..cb8a1a91b6f 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java index f65377643a1..8b551c91af5 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java index 2d02c9950a7..10abcb2585f 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java index f557d16c0ea..19e7656cc11 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java index ee986ee6216..25ca1033899 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java index 180197f2dd0..1f5659c8b3a 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java index f3f63324a9b..509803ff18f 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java index fdc820b19b2..7ce94a8dc1d 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java index 1ea69cbe225..34802a22b83 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java index 4f1c8b638f7..dec33e40f4b 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java index 5973e04f178..0bb0fdb52f0 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java index 7600e41361f..c3580a17155 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java index 94290906888..ccb061e5678 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java index 23e148775df..b2ac5d4cd21 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java index 454a9167e88..fe26fc4b3b2 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java index 930f84cecd8..0aec10f6b5c 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java index bb0f30e70b4..b6da8e59d03 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java index 3320ffa6595..7944b0a98f2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java index d340935b3a2..b3653109ac2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java index e3d73fb1939..0810ab490cf 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java index fe56cba1cdb..8b52f9e853b 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java index 4dfc40b2d75..0875d288407 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java index 1e6a0ad6c5c..9683a12016e 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index a660d735beb..f0ceba4b33a 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java index 5e3c4def8e1..52e81cccda6 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java index 0212ff9b096..da15aa047cb 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java index 5dd16da33ae..11bdf1a8ba9 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java index 67e31fea2f4..b12a30cf9f3 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java index 61900174cc0..9c15ff3c42d 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java index 9375e3a6271..75e0f929a91 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java index 61d39421463..173f543dd2a 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java index 655d3be231b..56f3a54dd79 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java index 95fba707fe1..76380728d3a 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java index 01b0be9f2fa..920f3a57a34 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java index 71aba11f966..87ae3142348 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java index baffc96792c..2161adeb395 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java index 6b5d1ea1e77..5cbb9d8ced2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java index 056747d6af6..445ca5637d3 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java index 29852aff0bb..09633e4f813 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java index 628c85fd1ee..dd8eebe78ea 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java index 2bed78ac9bc..f655b239414 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java index 553ad21d91d..62835bd7d2e 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java index f69a3ffb462..45d0bd208e6 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java index dd84bf31c57..e0ee8c124f6 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java index a1a0d99ad6a..0a146167830 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java index d83e3a723cd..9fa567bd312 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java index 31dccc1fbcc..57733f180be 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java index c4271be4c46..0611624795e 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java index 1102ed0a998..c714a1d6a5e 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java index 109ca18f7a1..d60705d53e7 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java index e7e24a46564..5f306b20259 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java index 874f6d979f3..879c136b393 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java index c08f602d490..6c4307fccd0 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java index 41cbafb2590..cc69fbd5897 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java index d8fca3e1b09..250e080fa40 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java index 4c8ea53cc89..a26d93ccfe1 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java index 45eb7abb9a5..cd8b5990cad 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java index 4ffb286b884..b037bbdc8ce 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java index 567870e7fff..03eb55bfb3a 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java index 8e469b03bbf..5cfcb909576 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java index 1a9b9bf260f..c121f75ca1b 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index 92b3a71a772..e5ba5d93ce3 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java index 31e5846128b..06e02bd9d4e 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java index c89c35b0648..145679b1eb5 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java index 00c99e92b51..26b7a67247b 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/common/PlatformType.java b/common/src/main/java/org/geysermc/common/PlatformType.java index 667d49a7a94..8fdd81c3d68 100644 --- a/common/src/main/java/org/geysermc/common/PlatformType.java +++ b/common/src/main/java/org/geysermc/common/PlatformType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java index 86aba1ec421..ccac56215c2 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java index 77dd46fde2d..802551e09bb 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java b/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java index 002a23f3834..64dd323cb34 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java index 2f7b442f41e..2f9075b0f3c 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java index 4ee00f366e6..00bb2487183 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java b/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java index 3805c0bc57b..39efa989fbc 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java index 8ae28f4229e..0ec9e7fe628 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java index 00e34b62270..3eb9fe9b541 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java index 9c2f3d15de3..2ee31229a10 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java index ed7c1553bdb..38bf156c39f 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java b/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java index f2ad6b30949..77765f96fc2 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java index 7f2c7360fe7..9827201c20d 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java b/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java index 1e5fef4d6b9..f6764b62f52 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java index 1479d20a161..9c32debf744 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java b/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java index 64a1aedf3d4..3594fceff48 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java b/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java index 58281dec8b8..b315e68bf4e 100644 --- a/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java +++ b/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java index 95fc62229df..609e780ae77 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java +++ b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java b/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java index 40620475916..a26c82871d0 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java +++ b/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java b/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java index 28b59b4a7f6..a0acebfaaf8 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java +++ b/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/InputMode.java b/common/src/main/java/org/geysermc/floodgate/util/InputMode.java index 2bcfb88fb6a..5bfbdf53aef 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/InputMode.java +++ b/common/src/main/java/org/geysermc/floodgate/util/InputMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java index e0630d48ce7..df008c8ffec 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java +++ b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java index 681080a3007..9e3148450bd 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java +++ b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java index d93042277e3..8b9969d70c7 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java +++ b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java index 61e6c63b16f..d12da88c87f 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java +++ b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/GeyserConnector.java b/core/src/main/java/org/geysermc/connector/GeyserConnector.java index 2616b91d375..417e3e34f92 100644 --- a/core/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/core/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 6298a41f62d..dab65835776 100644 --- a/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java b/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java index cca7aa48c43..0d724f0077a 100644 --- a/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java +++ b/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index f607df015ae..95ce79deae7 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java index 761e67a6725..694fd3bbd8e 100644 --- a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java +++ b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java index e4baeebb5bd..c2aba1bd06e 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 8204cfd3b57..7212ea1a2d5 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java index 88220eec9d7..219089f19e1 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserMain.java b/core/src/main/java/org/geysermc/geyser/GeyserMain.java index 8726c1b24df..d4c8226a29c 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserMain.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java index 5808dbc2ce5..1b08403f913 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java index a9b1c734fab..5d29767efed 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java index d28f9d24edc..19ea83de497 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java index 88d148b1147..40a14e6be84 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java index 466515b3f97..2488a474578 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java index 28253433f2c..90813756f06 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 95c1157694c..26155e032bc 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java index 60683d34ab3..3143a064d14 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java index 30d422b2337..c317053b59b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java index 6e7ad2f04b9..8cf7a33e34b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java index 90446fbb6b2..d05caf81a6a 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java index 6188e692473..76fa8f3278c 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java index 843e93de0e2..d23c9bec2c2 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java index 7828cf1d200..1ae9a299482 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java index ea2da51df52..694b69d7b2b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java index 151aa2d8448..dc8b77eb615 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java index b2b5d54a3fd..1612583ebec 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java b/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java index fd44d390389..9c5ad8ecff0 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index 222af341b35..9b775a26355 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java index 1af3578a348..4f80ba32e8d 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index e096d58fa68..494f7e60920 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java index fda0566fd32..1e725ab22f2 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java index 290a0e3ad90..c2a44f1e806 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index 566b3daff10..8ce81489bde 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index 9c7e1985334..9153f9579c3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java index bc567ab91bd..06a01e481e2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java index 92bfb75854a..9e93d043fe5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java +++ b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java b/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java index 7675ea8fd3b..fbbed4b2791 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java +++ b/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java index 6828d10208c..2d791452365 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java index fcd4f216028..19adbf6a67d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index 1bf6e581ebe..d368338d0be 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java index 675e9517d01..61d0f3bc28a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java index 9c7a28f6e37..1918dfd4275 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java index 63b5ff2abaf..1a741030674 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java index 86436f82bc2..c1a747eca48 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index 6ada880ce83..4e07444a63c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java index 56d761afd97..a8f527fe662 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java index 5a79a98b3ea..f050d4cab91 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java index e6d3a57831a..097ed0f2b59 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java index 3db032f0f01..04425ea6110 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java index 7a544f23c5f..ab36833ca0c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java index bcbff16ce9f..7072cc0173c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java index a7a117fff68..b89d93566db 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java index bb67a60f656..6b3a1fcc776 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index 378385cfa14..6c3b6efae22 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java index 3f0d2ee6854..ecd3bcbf7fb 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java index 6db486f0340..8b504c8d16d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java index 43fe555b0e9..f526daf5943 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java index ecf67052bdf..504390e827c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java index 4e5fe9d5979..88643d21929 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java index 49cfc0081c5..df87c42576b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java index 98c2edd00e1..b441dc01e0b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java index 72ae88310e7..00604bae579 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java index 39c8386bd86..db92ff888f2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java index 1b5c1d2d0ad..cf0c7d48b85 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java index 06bf45b3dea..c4376cdd943 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java index 856c4cc66c1..2df7c0e6690 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java index 2167f2c4d79..20483223d1b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java index 637ca41394d..b9eb77c0029 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java index ec0caac3398..320dc585a18 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java index 6e2e7a4077b..9ce4b8ecbfc 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java index f39200eed97..b36185e70b8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java index 8f81125d0e3..a437c4fc2aa 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java index 903f08b6441..a6c5440d6bf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java index 644054e725a..5a8e74a4760 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java index fd38bf6668a..97dfeeb2904 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java index 7c1d8efc72e..9d9cec98d43 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java index 472a9b3dcb1..d7e34f458c4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java index 58c2f608249..776c9a0b4bf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java index 12b2ca91d2a..d00c14f31c0 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 1f653decd40..4342deb0769 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java index 5a66ef36e47..1f7434ac398 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java index 60a9a147414..b18c471764d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java index 1d2eb95bc1d..811088519b6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java index ced274185e9..772a1248435 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java index 80a5af44257..6b9eb9d54b6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java index 47ddb912669..694e3703022 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java index a847c4cd726..2e211add332 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java index 2c46da13b83..79bbb3056d8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java index 06eb0791b2a..bd0b9ef0f53 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java index e05b44cf05b..750e3cdffb7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java index 164fb1b6c9a..a8690961038 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java index 01641c8c3d9..9b2688fe993 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java index 98c73cbce98..6b0af76e6ec 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java index 039ef5bf986..ff7060e6869 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java index 20b8f5ccfca..6f4ff3746ec 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java index 154c2f688d0..9fe462a2302 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index 2d136a169bb..1b7704a746f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java index c81ddd52e27..4f18c002793 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java index 212eaa91e0d..d513f927cce 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java index 91e94321c71..48747381ebd 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java index 1d7777cdb65..ccfd3eae6a8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java index d0d11959391..7ae4dda59ba 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java index 1efa87ec82b..b4358a6dca6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java index 8c94580127e..97f0554ea04 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java index e58fa5aca8d..990351e4159 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java index b18e55a4896..ffc293b2161 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java index 870ded1939b..49fa18b1aeb 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java index 872f721906b..2b8e81ae050 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java index ed46cfc2a0c..108adb0921f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java index 0fb9438d28f..269d523f78b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java index dfa6ef30ac4..62e2f8008c5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java index a32d7b1b5f2..afa7b74af46 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java index 43c76202c87..7aca2dd2d6e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java index 4be0ef5e297..8fae09a9702 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java index 423537496c6..06931fb45bd 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java index 7903d85caa9..bf04feb7496 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java index 43f379de80e..c4eb4ad1e5c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java index 5fc8c459de4..5ba35d67c98 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java index ecf0736a35b..bb4e3acef07 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java index b8465f9cab8..e8e968a43f6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java index 84b8b514372..3a4507b6ce6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java index 04b3bba1bbf..adb9e4f3a74 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java index 5f2647b7a2b..90ed16311c1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java index 43d78f4684d..b83045d8ce6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java index e507226815e..71548d8f195 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java index 8890e72a974..69e0c6957c5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java index bb09a23f4ca..f28bb793ef6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java index 590337556f4..15e169a3ae7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java index 0d52b7a3543..460a25f1452 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java index f7b9d17b8f5..15b5a26ef8a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java index e98c8f120a7..e5d3472e4bf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java index 92e50d207bc..8ffae0297ae 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java index c0edc448cd7..e08b357d016 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java index 915e34e79ba..58aa70bf160 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java index 25fe7f8025d..73e65f561b9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java index 27dd45f4028..616be0473af 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java index da11b27594c..c84b1dda36f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java index 03e2349110d..ef131a8898d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java index 56a0975ae0c..43715366f6d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java index 7a0c5e04032..deb587cbae8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java index 3abb7f12228..b96f5e7c0b6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java index 6e40573ba9e..feb9d528ac5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java index af6a30a10d4..5acb8000b24 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index fbac8663fe3..6b105150ee4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java index 0a0fe630692..6e3c4f6d575 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java index 90138742f89..d56e6870546 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java index d2f8377d32b..3d43466f16e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java index 05becf490f9..cf655ec20a2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java index f083437ae7e..59db7fbd2a4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java index ad99dda5063..1c508ee8def 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index e80418744e0..f6cc4e996fe 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java index 27942924295..ca0e08903c5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java index 939e4721d9a..24c51e9d41a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java index 9593e327ebe..f4051426b18 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java index 85c36a13212..476de5ae368 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java index d33de8cdd79..5601493ea70 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java index e07a62d8a14..3878dc496b0 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java index 65fd7ea0d9e..145692764ae 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java index 30d6ac8560f..3b2b8a5a63b 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java index a26415a139b..e13e3a3f706 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java index 716b763f5ac..a168c05e038 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index 7e998e41333..67003ae4fcd 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java index fe23417f8dd..fedac0c3814 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java index 5dd92430119..789e4a5e5ea 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java b/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java index 4a7830c901d..5f05c61bccd 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java b/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java index f56b254a6c5..4c5b103279e 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java +++ b/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java index 471aff8b248..111c13184e1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java index 7644ada7326..331b15444e5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java b/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java index eee351095a8..dfe5af87091 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java index 72f1088c343..9d0310035ad 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Container.java index 569802a5a23..332926cabc5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Container.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java index ac55aae60fe..5b4c4fe45ef 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java index 8dbc9b7224a..201deecb34b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java index d34ee2cbb10..6c000fbd456 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index b159193e3d7..c05c1208f78 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index 1dbde84f46b..91e850380d0 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java index f5aa7b0d695..57935c92384 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java index 93c1917d28f..79e7f944c21 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index 7b1064c8ff3..d73825551c3 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java b/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java index a4e20ce755b..41c055b2cbe 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java index 6e04e6741cc..725c4f749e3 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java index d7068920e2b..61c178928cf 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java index bfe5a7d9d3a..cd7b4ec5be2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index c81fe6598ba..c94805762c5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java index 986df53dbdc..a00746b35fc 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java index bcbfe3e1725..890dfa5e811 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java index 8d2b52aa2e9..6bd57948e34 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java index c4137fba9e1..018ec3460b4 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java index ddc44fbc484..e1066c3b8a2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index 641d5ad94cf..fbdf16e0ff9 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java index d61945ad8d7..0341c97ae20 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java index 6c7665bbbea..d4867547e59 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java index 04a772c31fd..e191ff1190b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index c9272410043..51f4b03889f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java index 5d6214871c2..8f966b26b27 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java index c9f313f2a63..714271c5943 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java index 7441e66d0d5..e3dd6bb51e6 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java index 68ee334ba45..52b91434dca 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java index a23385b53c2..16224b8afef 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java index 315a8cd4df7..82b2ad30357 100644 --- a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java +++ b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java index 3535eaf4d32..9b09da0c803 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java index cebad261e21..a88939d0f91 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java index 08a8b387c2c..ffc37bff652 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java index 569ab2300b3..d1f68d9a128 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index e0e9a256b12..bcdbff89aaa 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java index efefee94621..041cb73f5dd 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java index ee144acc614..baaafd813c7 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java b/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java index 7ce488a512f..7245e0ec12c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java index 5878f5cc78a..c6da6673625 100644 --- a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java +++ b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java index fc48c9f34ca..abf4a7d3f48 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java index 9a93eeac870..89dba49eaef 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java b/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java index 0dbf0971ab2..61aa16fef44 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java index d1ed6f6b8e7..3469891510a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java index 32959037958..3a063388e84 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java index e5d94eb8b44..4a60743de2e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java index 963373523fb..deb43893689 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java index 4c21be833b2..b73f896218e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index af45959bff5..a46945ff2d2 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java index cd63a379973..c48b721b13e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java index 338473fc560..98686ce761b 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java index fc28e1f503c..e3f0916f97f 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java b/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java index 272e00408b3..e484230b944 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java index d998eb0d49c..e01aa67fa51 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index f78836d16c4..928f5cbadd1 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java b/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java index 78c6b2c6a0b..12793cd0e72 100644 --- a/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java +++ b/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java index 9bb31799682..00fe625e25f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java +++ b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java index e005ab2d82b..2cb1ccfbd4f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GameRule.java b/core/src/main/java/org/geysermc/geyser/level/GameRule.java index 015f9c50c75..c7c4fbb8eb7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GameRule.java +++ b/core/src/main/java/org/geysermc/geyser/level/GameRule.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java index fc3c86dd472..a828b7bced7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java index 8d4b3f2e6ab..a7e73f5aa4e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java index a3f6b55e4c2..d9954bb0a03 100644 --- a/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java +++ b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index d84788db2f0..3439a4cf236 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java index 5c0cbf6438c..4abedc7fbd3 100644 --- a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java +++ b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java index 006caff55f4..2f2738abf5b 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java index 1d56946a86a..7ff8a7f1bbb 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java index 8024af65037..14b31519f69 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 65a65a436d1..2fd411cf3b5 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 6f6fb8097b0..21d9931f859 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java index 882b8c9f722..c472178e5e9 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index 576bd9743a8..14a6a1e1e06 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java b/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java index 8cf6d809196..3cfe33b35b6 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java index ca8c4db1d1e..068ca0600f4 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java index 14a74fb9933..44d1aebd80a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java index 776802cee0f..9d15181f9b4 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java index d95767b976a..65c3558d422 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java index 54987d1d23d..88693489d3c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java index c1f8d6f4848..65f57a0c4c3 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java index ce25ead9559..828ce182098 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java b/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java index 206c27a816f..68ed1f218ef 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java b/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java index 8343babd0ef..0793e685d47 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java index b983da8b4f2..d2c9b09cee1 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java index fa5201db949..5cd3930a93c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java index a6b25d01ef0..fd4ebcbcc8e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java b/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java index 4328b987e0e..fc3c18ea0fe 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java +++ b/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index e23299bfab5..4da420e28d8 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java index 002c236fbce..a1b6112a33b 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java +++ b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 59b34af161e..8bdc30a48fb 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java index 74e1430a251..81ee9ed7da5 100644 --- a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index f373cd25d37..cabd18bd39d 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java index 26015a96f7e..dcd0b5b3f40 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java b/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java index 67362c35eee..a8f6af52e40 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java index f2ae7c68535..ff9b38c4fea 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 31a355011bc..8efba305f73 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java index ac2b6898a71..0b267c31cd6 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java index 258fa69ebb0..6bfb21f67b1 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java index bb8ca754f70..c5d372c9a12 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java index 551bc1deb38..fa91bcd0db6 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java index 760bd4d025a..55e2c4f1837 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java index 0c3abf86d75..e1ad19a1311 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 1e9f296fc0a..0fd0eea602b 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java index e3c72c1749b..5a115ce8e50 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java index d444e554c81..1d73234f101 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java index d414b7fa83d..0fdf9a00c55 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java index fc4e3d02241..d636999d359 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java index 124aea713ac..2847e506a97 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index be49d16ea59..d28845707b7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java index 892f4a6dfe4..135077fc55d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java index 98e8e1da2ff..a46f1d7e987 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java index 0acfeee9385..cce837c20ef 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index 534dda4c17a..a23086f0370 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registry.java b/core/src/main/java/org/geysermc/geyser/registry/Registry.java index afee87b0839..9a07b4feabc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java index f108bf70389..802b6fb5861 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java index 59855c1ab55..3d0bb7e7437 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java index cfed73d2476..0f735830866 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java index fdb1bde1115..16db0d70224 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java index f7fb708fb30..101aa339b7d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java index f47273827ff..11ac0cd7f80 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java index 69ad16743e4..28628576692 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java index 9e1bbc6aa2f..113df7aa9e4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java index cbd992c544d..c9dab0d5a0d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java index e6e6e0978ff..e9aa8daa2d1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java index fcdbfcab377..1a72b14431d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java index 677806b3f47..1647c4de86c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java index 88d2ef29d0d..872b08f05a7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 3fe71dd0684..8de5b4fb589 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java index 5d916f74d3a..023be83c837 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java index 62b6e473700..e9f17c5e082 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java index c0600b878f3..cd2aab3f074 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java index 6703726eade..54c86c2008e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java index 558864b3539..f1d9a1fe42f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index 039412957f2..61b54daf99e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java index 0d32463dc5e..889237a655c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index 7b857e4b9bd..009ee82852f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java index 2b4eb7c5dfb..488e2ecd75e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java index 30794879491..098cae28c02 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index e76df2834d8..bddbd1ec49d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 99262dab4cc..d31a0affb9c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 78ef74b3d24..7a7c44ac16f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index ec6b410596e..f29cdf35a28 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index c4815dd43a0..3a4c350f3f4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 9c17ca95216..3f44f900aed 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index a7ece9d6a65..173bbff8d8a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java index d055f7b2809..3fca52d267b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java index 3e9e2c257ec..ef66625e2b1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java b/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java index 6cb220ce419..1f6b8849316 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java +++ b/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java index 34cde0acf23..30c00c50612 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 71f6d9cbb76..9c7ddd8b164 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index b23a607d3a1..2099f880524 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java b/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java index 970e128a439..0ed55974220 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java index 2fefc539bc5..0fbe762c395 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java index c8d83b0219e..1dcb355502e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java index f1cd762b503..250377b8011 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java index 4883b5ec109..1ed6e67cc00 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index 26202101de6..0b988b74efa 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java index 16ac5174984..93b2b5ecfc5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java index bf202ddb318..7630c7b77b2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java index f8aeb78ee76..556928e4a79 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java index 27b5e631d3d..91f594e8745 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java index 688666c7316..59b89394764 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java index 0a6623e9704..957c4d90079 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java index 5a70fddf5bc..42148b3e059 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java index fed3054b439..6b61e73d764 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java index e985ca803cb..b4dffea3d4c 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java b/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java index 9120412d888..0975c617e71 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java index 40b68578319..31168f08059 100644 --- a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index b066cfe835d..ab6fa2323d3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java index 7e5982ab593..d5fa7e75392 100644 --- a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java +++ b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java index ef462a3e35c..ea3b25aaab2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java index 99b7ae3afa6..551065dcc30 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java index 07dd3849185..1c117840b9b 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java index 00b18629207..4b260b457c0 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java index 5cd112a5f5b..cedabfc30bb 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java b/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java index 7c0891a5c95..1dd5070d30a 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java index d2c1415a386..ce0c3f7763f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java index 9dc89215a5f..9466d49dded 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java index a7693e516e5..2585ad79015 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index 6ba6a1b7e22..b5352d0fae8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java index 41f73863e10..658a93f2fe1 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java index d0a5bc094c7..e6b71af58f3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java index 9e8597b0f54..6547eaab207 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index d7ad11b4b3e..b5fd3f0dc8f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 851b8c20e38..87c27c83c6c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java index 8d243d3faf2..378c3ed5336 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java index d9b9d8a549f..2a15f22ef89 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index dd166358ddc..9121cd5d64a 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index b312f9811db..addb99aba29 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java index 39de6c32a93..48b38dea4e8 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java b/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java index 999df09293b..c268c10ee18 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java +++ b/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 09711fd35d2..3b722ce6559 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index 4b700b71563..cd4dbc5c358 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java index 18edc807953..f2baf1c3b69 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java index 69dbb558e05..712b07c8dd6 100644 --- a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/ChatColor.java b/core/src/main/java/org/geysermc/geyser/text/ChatColor.java index 49178f0333f..bed4a2ae932 100644 --- a/core/src/main/java/org/geysermc/geyser/text/ChatColor.java +++ b/core/src/main/java/org/geysermc/geyser/text/ChatColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java index 41528c1e433..8c03d9d79aa 100644 --- a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java +++ b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java index fdce1f879d1..fb056afe714 100644 --- a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java index 340674119a1..62d24dfa1c6 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java index 2140dcc88f2..430f72b3a0c 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index fa048cecf35..fd77150ff85 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java index 3310859d0d2..33d9dd9fcd6 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java index 121e1b2b9d5..d4c29223e9a 100644 --- a/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java +++ b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java index f7e39718b85..bf0693bcb52 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java b/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java index 6980968ab3c..42499324e1d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java index dcbad47585f..567dd78add1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java index b47b187c4da..6d06aed4a03 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java index b2e2deceb53..8b858c87c91 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java index dfbd1c8b8b6..b7f029b1aa5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java index fb83e357d4b..3689ad06abd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java index 822202ff288..c3891ccb34f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java index 7d4dfedc279..4f2b8378898 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java index 836c05711d3..fa0f4526f76 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java index dd53e4c5b9b..3f46e9e2270 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java index ac6e9870e95..9d4625ff116 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java index 31a0b7b114d..7dcb184f22b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java index 0f8fa4ca70b..b5a650d7c9e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java index db0702e1309..c6187fa7504 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java index a2c45384dbb..acc7ffc4a30 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index 95f227ed714..4288238d926 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java index 521db494a30..36bc80134eb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java index a1c928c6b0a..559a10cbbe7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java index 369a8028206..93b8fe864c9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java index a32b97b706d..cf10b5f64d3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java index dab1ee97286..fcba007d1b1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index 4a43ea05538..4cd71839eb7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index ec0d4534dcf..6178048d817 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 8fb98a284d1..63857809e64 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java index e159827e886..c1a8756b7a5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 2bfc9a18bc6..b439fa2ffa7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java index b8bb2bee4c5..ddc949f56ec 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java index 243bb48c33a..e3b91d98025 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java index 8380be63a1e..68caf16a205 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java index 070537b81ef..0eeca064fad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index 572ddf3f275..fc663c0d5a1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java index d09e7e99080..b8e680eac79 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java index 6cda03a198d..1d0c96ba07f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java index 0b6e0c67458..b4839887056 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java index 95a79a93efe..d014d27a71c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java index 2f87f3b1340..2930d89cd33 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java index 538133e0e95..185446cd785 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java index f1a5723c8f6..90aea95f79e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java index 72972fb3bb8..63e80a0f6cf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java index 84d7744d1cd..90fa3d5f31b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java index ca0f85938e7..8f49cfcf9fc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java index 31491fc3d81..e8d6ee69a10 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index c71cc72e5bd..4aa4b8eb67d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java index a51e2307d3a..2bfad23c474 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java index 90ac1cc5ed7..6aa0e38289e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java index f23433bbe62..8ee37ada52f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java index 12b050236d5..05fd2d5b83b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java index 58d36af5602..06a188424af 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java index c43dfe8bcd2..1364be6b665 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java index 3e320029bb1..07100f12182 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java index b89a2a5471b..b81dbf3097b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java index 02dc12f7169..a65706418b4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java index 9e743667fec..0126d3a3c92 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java index 567d3a5e1a6..2c6dc7473df 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java index 1a7958c628d..2ac8c56c2bf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java index da992d0ad37..8086f0ab05c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java index 074fff6ef80..5e0807e6067 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java index c8dcbc008b1..45ddb51836d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java index 0e5b9e3dcc8..f7ac7bdf2d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java index a55fa8a6259..c5317ae40d4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java index 24088658390..a53c946176d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java index db7b3073f59..a7330f4c13a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java index 44f3b7362d1..d2cbe4396fa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 6eac6861f34..d400fbbf573 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java index d1af70d8d45..ea389767d0a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java index 03c40c7964c..14b894a26d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java index 22d5c953d4a..ec44f4cf3ac 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java index d1695303d0f..8daeae86072 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java index 67d43e6a8c6..c323d1c0b8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java index d49cdd6d08d..fb688a2741d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java index f9d5e7771d1..156756b6ce5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java index 60ff187f5fc..bdab5ce1fa7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java index a26bba61847..2a325251a05 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java index 19d15c04d7f..414fb443331 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java index 1d5c5828c40..adf510ea969 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java index 42e9277d3ec..1d4f5714dd1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java index bc04bf50ec2..531c83fa963 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java index 62dd39b121b..24fcb743bc3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java index b20f7a2dd5b..67e69f5250f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java index f64ddeac66a..3d2a4032f11 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java index 921f24c199f..22de29e4c6c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index 269d1713d09..6b44da29866 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java index 908599f5179..ebca80fcd1a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java index 47cdf9b12f8..60f50c912a7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java index d28aafcb982..b77dd91cc8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java index 3e885b63f8d..0f8d8c00c24 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java index d045a6c24de..c5952193c06 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java index c35c6c00aaf..ed8fafbaa85 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java index 7e5643d4596..6d17d230a83 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java index 278f51747cb..9d726e61aab 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java index 03faca5f22e..46e1ca49cde 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java index d1246a0b44b..bd8b088ff88 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java index 00cd5e5fd58..55733411aaa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java index 79887e3d326..52c4f5bc27d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java index c89f7b6e0bb..2eb444becc3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java index fb02d7e3e7b..d9a213adf72 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index defe58a8e13..e65f730fa7e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java index 0aec2a5d9e0..1b5461805b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java index f696396ad65..c04995999ad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java index f8b65bf9b84..a76d46eb77d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java index 1f06cb5e67f..40c2f6c2e21 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java index f499cbe6404..d04d5c85a3c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java index 49ce28167f7..ba3463c44e1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index cae25e2a3d5..c906c5126c6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java index 0d0ec47037e..1c343b4a0b0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java index 70768af344c..d03f62c98f4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java index 2b48801d802..2924e4304da 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java index 4f4c2e5494d..1d7906facc6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java index 30d6aa017d2..312267b7290 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java index 970c49e23ed..a1b9cfb4358 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index 8b46b435040..f65027ddfa7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index cf5cfa19874..7f108910a9f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java index 89df638986a..025c857649e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java index 96b0e3dbd23..e4ee9a471cd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java index 2ad45fe521f..c0c26bca8c1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java index 7f8500ce4c3..770ee0bdb3e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java index 41eb5062a69..6dffabc60e0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java index 0720963fb74..aa1bf1b69e4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index 3d9f08ec7c4..a787a0794b8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java index faff85fecbf..1560a030261 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java index e06182b8d86..92e7ad6ddf7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java index 15ee2f8de5e..36a6ea3e183 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java index e3386324463..6ac1ff42b7e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java index 03660b147a8..d8fd834968c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java index e98e5c1ec6a..deae660d181 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index d58892ce554..e02ca776799 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java index a899077f822..3de8267d081 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java index f82c33032a5..34cf89c4bb2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index 50582974daa..ca0a51ddd9e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java index 2ad1503a8f0..34db4ed76f0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java index cbb3cecc2bb..d50ba30199e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java index 75d4c618910..9c209f5a2ff 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java index bdb159633a6..1325c0d1c81 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java index 65229f29d82..8efae71231f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java index 52b771caa92..2aa93e25147 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java index 65e529792c1..e792c14fb50 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java index 54c14f7f083..7fffc7ee220 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java index 720f0377953..368598834c1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java index 62e1d200e8d..27fc474bdcd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index 9e4f30f1467..cc76969eda4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index 724bce4b0d7..34e68b74f39 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java index 68f310db4fa..082659d455e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java index 3b93f0df8d0..55a644052a7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java index 9925bf4320a..361e335baa7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java index a42f2d5dd87..de345d14d6c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java index a8629010090..c3a46df06f5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java index 523d0fdc49d..685c4a1c84c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java index 783f4e82495..6d51bce7aad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java index 4e8bd89b370..6a7d3f137b6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java index f5c4b139849..74bdda60f98 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java index e711a517ee9..3f231554dff 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java index 7814a671903..252cc45b560 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index a2fc0c07c20..6b2cc40f64c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java index 97a9e0aae6e..3a08076075e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java index 80dd08eaa11..6562a6c363a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java index decf910ca65..04d3170c950 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java index 6d25500b01c..3b040635475 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java index 2d5e8fb084b..1e0c161d324 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java index 20a5f821355..4c7ab627d75 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java index 9f687f046d7..1454a02478c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java index cfe1c404e26..6acb829a7ba 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java index 923b10a2683..156b639def2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 4806de09cb6..0368338c194 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java index 02da421d570..ad1069002b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java index d4cb46a1cb1..f4cd52deb4a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java index 8730d5ac1c1..a179eeb02ea 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java index fc5d69443cd..cf8c15c927e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index 0705b89c453..43a5e120b59 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index e4b278c48eb..fc1187340c7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java index 6a8a2a5bac2..c0faeda4710 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java index 4249be6fce0..2e772f15e38 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java index 919e3f59627..a583149422d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java index 4cc0af6e75a..fe378288431 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java index 413e9879920..593783a9959 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 3315ece1551..f823a928dd3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index dff7ae74237..1194c591c7f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java index 6adb053d757..4a4bce84de4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java index 34fbf2d9c62..c11c89d2110 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java index abc9a6c2136..0a1eed64993 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java index baec29d47f5..50f3c42a2b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java index 3a0a77cc0ed..3fadcaf7d8f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java index 9662fdd819b..8986172e0cb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java index f45d4bb9713..9de9bd988ad 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java index ceb2d989d72..51e069fecfc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java index 7320b7637bb..36f301ace21 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java index 85799717019..6c6b5e629cb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java index ebcef08a7cd..1ffbe66e28b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java index a41c90f0438..f2871636856 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java index 51cd17278c4..7883c467054 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java index 912ca9a09c1..a93911398e5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java index 14badb5657e..7013df8ae79 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java index 74f063e444e..0e6e071a748 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java index 3b009a2a526..269209a6106 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java index f942b6f0991..e688dd12ccd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java index 19f9f7f18b6..8baddaad756 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java index 968845e9207..4d32a5f004e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java index c2dfc85ff0e..8188f3c4303 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java index ba0407dcb81..55c5d04532b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java index 1aa789ad43d..a93e7df1398 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java index 4299a059693..7f2facfc481 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java index ef6be0e9d57..f9ec5afcd99 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java index 1d4209a5b0e..0659eab423c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java index 0146c534e04..d2012c2b7f6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java index 7a5e86af77c..ebeda446e02 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java index 45007836253..02fe6f23fa6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java index 107807fe0ba..7b9f0fc392d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java index a822f3520d9..1077f2538e5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java index 0a91f889641..9125ede810d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java index 410422b4a2e..9a908f039d7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java index 08a8792e873..738a9fdbbd5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java index dd069c5f50a..84a3119f16c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java index 299e63e0e1e..c068fa73c0a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java index 2958de436a4..f8af404c731 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java index 9964ed08ba7..142b399105b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java index 4f0eccfcba7..787e72ecc20 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index a60461ec7b5..44de2a2d542 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java index c00e389fd21..8e1912feafe 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java index 622722e5aa2..c8e671d9c51 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java index d5c81921660..eb9f40fd183 100644 --- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index a6e0720b6be..5cf99ead98f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java index e6c7b41fa7c..ddf9c4df4a7 100644 --- a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java b/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java index fd13dd74331..45bb7bcc6fc 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java index 9607ac61e74..7af4313320d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index 457993ac224..78c2aa7a5da 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java index c528de74189..cde0004f845 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java index f0b8ee6bc2a..bd639131c20 100644 --- a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java index dd523df5a79..fad7df95c5e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java b/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java index bb92e6cd163..766f3aec6bf 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index d0675fa640d..329f7b40d67 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/Metrics.java b/core/src/main/java/org/geysermc/geyser/util/Metrics.java index e88d5a97113..f9a03926765 100644 --- a/core/src/main/java/org/geysermc/geyser/util/Metrics.java +++ b/core/src/main/java/org/geysermc/geyser/util/Metrics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java index 71e7c99c12a..0ab1541f886 100644 --- a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java +++ b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java b/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java index 032dd2af785..6450a15e65a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java index 5957fb9d98f..74dc473fadb 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java index 82030b8f55c..24c1b6e1721 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java index 44b9052096f..016ea013550 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java b/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java index d46a759fe42..71ce5f83cd1 100644 --- a/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java +++ b/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java b/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java index aa174497b34..e614f4c2606 100644 --- a/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java index c0fd10232c3..88b6772e4fd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java index e4a98b3fc7b..f4bd4646d85 100644 --- a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java index 832a7bcae01..505eca9c49e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java index ee37d612fbd..05855092c70 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java index f5bd89d6417..551dca11c8a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java index bafb2924c72..0eff859fd72 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java index e17a38877d6..da0f0879728 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java b/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java index bce8fe0c8b9..947f9756c53 100644 --- a/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java +++ b/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java b/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java index 10f265a41cd..1eb7e0d26cf 100644 --- a/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java +++ b/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java b/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java index 639c79331a1..877e22054b6 100644 --- a/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java +++ b/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal From 899b1e22d65384c03936b52a0aadf9b06b449a77 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 16 May 2023 20:49:10 -0700 Subject: [PATCH 090/134] Use release indra over snapshot Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- build-logic/build.gradle.kts | 3 +-- settings.gradle.kts | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 7506d3f0ebc..c0c683920c2 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -3,13 +3,12 @@ plugins { } repositories { - maven("https://repo.stellardrift.ca/repository/snapshots/") gradlePluginPortal() maven("https://repo.opencollab.dev/maven-snapshots") } dependencies { - implementation("net.kyori", "indra-common", "3.1.0-SNAPSHOT") + implementation("net.kyori", "indra-common", "3.1.1") implementation("com.github.johnrengelman", "shadow", "7.1.3-SNAPSHOT") // Within the gradle plugin classpath, there is a version conflict between loom and some other diff --git a/settings.gradle.kts b/settings.gradle.kts index 0ef30805197..e9c7641e41b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -46,7 +46,6 @@ dependencyResolutionManagement { pluginManagement { repositories { - maven(url = "https://repo.stellardrift.ca/repository/snapshots/") gradlePluginPortal() maven("https://maven.fabricmc.net/") maven("https://repo.opencollab.dev/maven-snapshots") From 211f55ab4dd33eecf64155ca3d6dfc977ee26cf9 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 17 May 2023 23:24:43 -0700 Subject: [PATCH 091/134] Revert "Update license headers to 2023" This reverts commit f750059e8ee01dfd4e9f9d13d3bdb85eb90e1f74. --- .../org/geysermc/geyser/processor/BlockEntityProcessor.java | 2 +- .../main/java/org/geysermc/geyser/processor/ClassProcessor.java | 2 +- .../geysermc/geyser/processor/CollisionRemapperProcessor.java | 2 +- .../geysermc/geyser/processor/PacketTranslatorProcessor.java | 2 +- .../org/geysermc/geyser/processor/SoundHandlerProcessor.java | 2 +- api/src/main/java/org/geysermc/geyser/api/GeyserApi.java | 2 +- .../org/geysermc/geyser/api/block/custom/CustomBlockData.java | 2 +- .../geyser/api/block/custom/CustomBlockPermutation.java | 2 +- .../org/geysermc/geyser/api/block/custom/CustomBlockState.java | 2 +- .../geyser/api/block/custom/component/BoxComponent.java | 2 +- .../api/block/custom/component/CustomBlockComponents.java | 2 +- .../geyser/api/block/custom/component/MaterialInstance.java | 2 +- .../geyser/api/block/custom/component/PlacementConditions.java | 2 +- .../api/block/custom/component/TransformationComponent.java | 2 +- .../geyser/api/block/custom/property/CustomBlockProperty.java | 2 +- .../geysermc/geyser/api/block/custom/property/PropertyType.java | 2 +- api/src/main/java/org/geysermc/geyser/api/command/Command.java | 2 +- .../java/org/geysermc/geyser/api/command/CommandExecutor.java | 2 +- .../java/org/geysermc/geyser/api/command/CommandSource.java | 2 +- .../org/geysermc/geyser/api/connection/GeyserConnection.java | 2 +- api/src/main/java/org/geysermc/geyser/api/event/EventBus.java | 2 +- .../main/java/org/geysermc/geyser/api/event/EventRegistrar.java | 2 +- .../java/org/geysermc/geyser/api/event/EventSubscriber.java | 2 +- .../java/org/geysermc/geyser/api/event/ExtensionEventBus.java | 2 +- .../org/geysermc/geyser/api/event/ExtensionEventSubscriber.java | 2 +- .../org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java | 2 +- .../geyser/api/event/bedrock/SessionInitializeEvent.java | 2 +- .../geysermc/geyser/api/event/connection/ConnectionEvent.java | 2 +- .../geyser/api/event/downstream/ServerDefineCommandsEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java | 2 +- .../api/event/lifecycle/GeyserDefineCustomBlocksEvent.java | 2 +- .../api/event/lifecycle/GeyserDefineCustomItemsEvent.java | 2 +- .../api/event/lifecycle/GeyserLoadResourcePacksEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserPostInitializeEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserPreInitializeEvent.java | 2 +- .../geyser/api/event/lifecycle/GeyserShutdownEvent.java | 2 +- .../main/java/org/geysermc/geyser/api/extension/Extension.java | 2 +- .../org/geysermc/geyser/api/extension/ExtensionDescription.java | 2 +- .../java/org/geysermc/geyser/api/extension/ExtensionLoader.java | 2 +- .../java/org/geysermc/geyser/api/extension/ExtensionLogger.java | 2 +- .../org/geysermc/geyser/api/extension/ExtensionManager.java | 2 +- .../api/extension/exception/InvalidDescriptionException.java | 2 +- .../api/extension/exception/InvalidExtensionException.java | 2 +- .../org/geysermc/geyser/api/item/custom/CustomItemData.java | 2 +- .../org/geysermc/geyser/api/item/custom/CustomItemOptions.java | 2 +- .../geysermc/geyser/api/item/custom/CustomRenderOffsets.java | 2 +- .../geyser/api/item/custom/NonVanillaCustomItemData.java | 2 +- api/src/main/java/org/geysermc/geyser/api/network/AuthType.java | 2 +- .../java/org/geysermc/geyser/api/network/BedrockListener.java | 2 +- .../main/java/org/geysermc/geyser/api/network/RemoteServer.java | 2 +- api/src/main/java/org/geysermc/geyser/api/util/TriState.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeConfiguration.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeDumpInfo.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeInjector.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeePingPassthrough.java | 2 +- .../geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java | 2 +- .../geyser/platform/bungeecord/GeyserBungeeUpdateListener.java | 2 +- .../geyser/platform/bungeecord/command/BungeeCommandSource.java | 2 +- .../bungeecord/command/GeyserBungeeCommandExecutor.java | 2 +- .../geyser/platform/fabric/GeyserFabricConfiguration.java | 2 +- .../geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricMain.java | 2 +- .../org/geysermc/geyser/platform/fabric/GeyserFabricMod.java | 2 +- .../geyser/platform/fabric/GeyserFabricUpdateListener.java | 2 +- .../geysermc/geyser/platform/fabric/GeyserServerPortGetter.java | 2 +- .../geyser/platform/fabric/command/FabricCommandSender.java | 2 +- .../platform/fabric/command/GeyserFabricCommandExecutor.java | 2 +- .../platform/fabric/mixin/client/IntegratedServerMixin.java | 2 +- .../fabric/mixin/server/MinecraftDedicatedServerMixin.java | 2 +- .../geyser/platform/fabric/world/GeyserFabricWorldManager.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java | 2 +- .../geyser/platform/spigot/GeyserPaperPingPassthrough.java | 2 +- .../geyser/platform/spigot/GeyserSpigotConfiguration.java | 2 +- .../geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java | 2 +- .../geysermc/geyser/platform/spigot/GeyserSpigotInjector.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java | 2 +- .../geyser/platform/spigot/GeyserSpigotPingPassthrough.java | 2 +- .../org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java | 2 +- .../geyser/platform/spigot/GeyserSpigotUpdateListener.java | 2 +- .../geyser/platform/spigot/GeyserSpigotVersionChecker.java | 2 +- .../org/geysermc/geyser/platform/spigot/PaperAdventure.java | 2 +- .../org/geysermc/geyser/platform/spigot/ReflectedNames.java | 2 +- .../geyser/platform/spigot/command/GeyserBrigadierSupport.java | 2 +- .../platform/spigot/command/GeyserPaperCommandListener.java | 2 +- .../platform/spigot/command/GeyserSpigotCommandExecutor.java | 2 +- .../platform/spigot/command/GeyserSpigotCommandManager.java | 2 +- .../geyser/platform/spigot/command/SpigotCommandSource.java | 2 +- .../geyser/platform/spigot/world/GeyserPistonListener.java | 2 +- .../platform/spigot/world/GeyserSpigotBlockPlaceListener.java | 2 +- .../world/manager/GeyserSpigotLegacyNativeWorldManager.java | 2 +- .../spigot/world/manager/GeyserSpigotNativeWorldManager.java | 2 +- .../platform/spigot/world/manager/GeyserSpigotWorldManager.java | 2 +- .../geyser/platform/sponge/GeyserSpongeConfiguration.java | 2 +- .../geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java | 2 +- .../geyser/platform/sponge/GeyserSpongePingPassthrough.java | 2 +- .../org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java | 2 +- .../platform/sponge/command/GeyserSpongeCommandExecutor.java | 2 +- .../platform/sponge/command/GeyserSpongeCommandManager.java | 2 +- .../geyser/platform/sponge/command/SpongeCommandSource.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneBootstrap.java | 2 +- .../platform/standalone/GeyserStandaloneConfiguration.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneDumpInfo.java | 2 +- .../geyser/platform/standalone/GeyserStandaloneLogger.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/ANSIColor.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/ColorPane.java | 2 +- .../geyser/platform/standalone/gui/GeyserStandaloneGUI.java | 2 +- .../org/geysermc/geyser/platform/standalone/gui/GraphPanel.java | 2 +- .../geyser/platform/velocity/GeyserVelocityConfiguration.java | 2 +- .../geyser/platform/velocity/GeyserVelocityDumpInfo.java | 2 +- .../geyser/platform/velocity/GeyserVelocityInjector.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityLogger.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityMain.java | 2 +- .../geyser/platform/velocity/GeyserVelocityPingPassthrough.java | 2 +- .../geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java | 2 +- .../geyser/platform/velocity/GeyserVelocityUpdateListener.java | 2 +- .../velocity/command/GeyserVelocityCommandExecutor.java | 2 +- .../geyser/platform/velocity/command/VelocityCommandSource.java | 2 +- common/src/main/java/org/geysermc/common/PlatformType.java | 2 +- .../src/main/java/org/geysermc/floodgate/crypto/AesCipher.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/Base64Topping.java | 2 +- .../java/org/geysermc/floodgate/crypto/FloodgateCipher.java | 2 +- .../main/java/org/geysermc/floodgate/crypto/KeyProducer.java | 2 +- common/src/main/java/org/geysermc/floodgate/crypto/Topping.java | 2 +- common/src/main/java/org/geysermc/floodgate/news/NewsItem.java | 2 +- .../main/java/org/geysermc/floodgate/news/NewsItemAction.java | 2 +- .../main/java/org/geysermc/floodgate/news/NewsItemMessage.java | 2 +- common/src/main/java/org/geysermc/floodgate/news/NewsType.java | 2 +- .../java/org/geysermc/floodgate/news/data/AnnouncementData.java | 2 +- .../org/geysermc/floodgate/news/data/BuildSpecificData.java | 2 +- .../java/org/geysermc/floodgate/news/data/CheckAfterData.java | 2 +- .../org/geysermc/floodgate/news/data/ConfigSpecificData.java | 2 +- .../main/java/org/geysermc/floodgate/news/data/ItemData.java | 2 +- .../geysermc/floodgate/pluginmessage/PluginMessageChannels.java | 2 +- .../src/main/java/org/geysermc/floodgate/util/BedrockData.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java | 2 +- .../java/org/geysermc/floodgate/util/FloodgateInfoHolder.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/InputMode.java | 2 +- .../org/geysermc/floodgate/util/InvalidFormatException.java | 2 +- .../src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java | 2 +- common/src/main/java/org/geysermc/floodgate/util/UiProfile.java | 2 +- .../java/org/geysermc/floodgate/util/WebsocketEventType.java | 2 +- core/src/main/java/org/geysermc/connector/GeyserConnector.java | 2 +- .../org/geysermc/connector/network/session/GeyserSession.java | 2 +- .../org/geysermc/connector/network/session/auth/AuthData.java | 2 +- core/src/main/java/org/geysermc/geyser/Constants.java | 2 +- core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserImpl.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserLogger.java | 2 +- core/src/main/java/org/geysermc/geyser/GeyserMain.java | 2 +- .../main/java/org/geysermc/geyser/command/GeyserCommand.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandExecutor.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandManager.java | 2 +- .../java/org/geysermc/geyser/command/GeyserCommandSource.java | 2 +- .../geyser/command/defaults/AdvancedTooltipsCommand.java | 2 +- .../geysermc/geyser/command/defaults/AdvancementsCommand.java | 2 +- .../geysermc/geyser/command/defaults/ConnectionTestCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/DumpCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/ExtensionsCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/HelpCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/ListCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/OffhandCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/ReloadCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/SettingsCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/StatisticsCommand.java | 2 +- .../java/org/geysermc/geyser/command/defaults/StopCommand.java | 2 +- .../org/geysermc/geyser/command/defaults/VersionCommand.java | 2 +- .../geyser/configuration/EmoteOffhandWorkaroundOption.java | 2 +- .../org/geysermc/geyser/configuration/GeyserConfiguration.java | 2 +- .../geyser/configuration/GeyserCustomSkullConfiguration.java | 2 +- .../geyser/configuration/GeyserJacksonConfiguration.java | 2 +- .../main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java | 2 +- core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java | 2 +- .../main/java/org/geysermc/geyser/entity/EntityDefinition.java | 2 +- .../main/java/org/geysermc/geyser/entity/EntityDefinitions.java | 2 +- .../java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java | 2 +- .../geysermc/geyser/entity/attribute/GeyserAttributeType.java | 2 +- .../java/org/geysermc/geyser/entity/factory/EntityFactory.java | 2 +- .../org/geysermc/geyser/entity/type/AbstractArrowEntity.java | 2 +- .../org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/BoatEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ChestBoatEntity.java | 2 +- .../geysermc/geyser/entity/type/CommandBlockMinecartEntity.java | 2 +- .../geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java | 2 +- .../org/geysermc/geyser/entity/type/EnderCrystalEntity.java | 2 +- core/src/main/java/org/geysermc/geyser/entity/type/Entity.java | 2 +- .../java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java | 2 +- .../org/geysermc/geyser/entity/type/FallingBlockEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FireballEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FireworkEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/FishingHookEntity.java | 2 +- .../org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/ItemEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ItemFrameEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/LeashKnotEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/LightningEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/LivingEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/MinecartEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/PaintingEntity.java | 2 +- .../org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java | 2 +- .../main/java/org/geysermc/geyser/entity/type/TNTEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/ThrowableEntity.java | 2 +- .../org/geysermc/geyser/entity/type/ThrowableItemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/ThrownPotionEntity.java | 2 +- .../src/main/java/org/geysermc/geyser/entity/type/Tickable.java | 2 +- .../java/org/geysermc/geyser/entity/type/TippedArrowEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/TridentEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/WitherSkullEntity.java | 2 +- .../geysermc/geyser/entity/type/living/AbstractFishEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AgeableEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AllayEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/AmbientEntity.java | 2 +- .../geysermc/geyser/entity/type/living/ArmorStandEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/living/BatEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/CreatureEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/DolphinEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/FlyingEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/GlowSquidEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/GolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/IronGolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java | 2 +- .../java/org/geysermc/geyser/entity/type/living/MobEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SlimeEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SnowGolemEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/SquidEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/TadpoleEntity.java | 2 +- .../org/geysermc/geyser/entity/type/living/WaterEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/AnimalEntity.java | 2 +- .../geyser/entity/type/living/animal/AxolotlEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/BeeEntity.java | 2 +- .../geyser/entity/type/living/animal/ChickenEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/CowEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/FoxEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/FrogEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/GoatEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/HoglinEntity.java | 2 +- .../geyser/entity/type/living/animal/MooshroomEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/OcelotEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/PandaEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/PigEntity.java | 2 +- .../geyser/entity/type/living/animal/PolarBearEntity.java | 2 +- .../geyser/entity/type/living/animal/PufferFishEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/RabbitEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/SheepEntity.java | 2 +- .../geyser/entity/type/living/animal/StriderEntity.java | 2 +- .../geyser/entity/type/living/animal/TropicalFishEntity.java | 2 +- .../geysermc/geyser/entity/type/living/animal/TurtleEntity.java | 2 +- .../entity/type/living/animal/horse/AbstractHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/CamelEntity.java | 2 +- .../entity/type/living/animal/horse/ChestedHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/HorseEntity.java | 2 +- .../geyser/entity/type/living/animal/horse/LlamaEntity.java | 2 +- .../entity/type/living/animal/horse/SkeletonHorseEntity.java | 2 +- .../entity/type/living/animal/horse/TraderLlamaEntity.java | 2 +- .../entity/type/living/animal/horse/ZombieHorseEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/CatEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/ParrotEntity.java | 2 +- .../entity/type/living/animal/tameable/TameableEntity.java | 2 +- .../geyser/entity/type/living/animal/tameable/WolfEntity.java | 2 +- .../entity/type/living/merchant/AbstractMerchantEntity.java | 2 +- .../geyser/entity/type/living/merchant/VillagerEntity.java | 2 +- .../entity/type/living/monster/AbstractSkeletonEntity.java | 2 +- .../geyser/entity/type/living/monster/BasePiglinEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/BlazeEntity.java | 2 +- .../geyser/entity/type/living/monster/CreeperEntity.java | 2 +- .../geyser/entity/type/living/monster/ElderGuardianEntity.java | 2 +- .../geyser/entity/type/living/monster/EnderDragonEntity.java | 2 +- .../entity/type/living/monster/EnderDragonPartEntity.java | 2 +- .../geyser/entity/type/living/monster/EndermanEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/GhastEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/GiantEntity.java | 2 +- .../geyser/entity/type/living/monster/GuardianEntity.java | 2 +- .../geyser/entity/type/living/monster/MonsterEntity.java | 2 +- .../geyser/entity/type/living/monster/PhantomEntity.java | 2 +- .../geyser/entity/type/living/monster/PiglinEntity.java | 2 +- .../geyser/entity/type/living/monster/ShulkerEntity.java | 2 +- .../geyser/entity/type/living/monster/SkeletonEntity.java | 2 +- .../geyser/entity/type/living/monster/SpiderEntity.java | 2 +- .../geysermc/geyser/entity/type/living/monster/VexEntity.java | 2 +- .../geyser/entity/type/living/monster/WardenEntity.java | 2 +- .../geyser/entity/type/living/monster/WitherEntity.java | 2 +- .../geyser/entity/type/living/monster/ZoglinEntity.java | 2 +- .../geyser/entity/type/living/monster/ZombieEntity.java | 2 +- .../geyser/entity/type/living/monster/ZombieVillagerEntity.java | 2 +- .../entity/type/living/monster/ZombifiedPiglinEntity.java | 2 +- .../entity/type/living/monster/raid/AbstractIllagerEntity.java | 2 +- .../geyser/entity/type/living/monster/raid/PillagerEntity.java | 2 +- .../entity/type/living/monster/raid/RaidParticipantEntity.java | 2 +- .../type/living/monster/raid/SpellcasterIllagerEntity.java | 2 +- .../entity/type/living/monster/raid/VindicatorEntity.java | 2 +- .../org/geysermc/geyser/entity/type/player/PlayerEntity.java | 2 +- .../geysermc/geyser/entity/type/player/SessionPlayerEntity.java | 2 +- .../geysermc/geyser/entity/type/player/SkullPlayerEntity.java | 2 +- .../src/main/java/org/geysermc/geyser/event/GeyserEventBus.java | 2 +- .../java/org/geysermc/geyser/event/GeyserEventRegistrar.java | 2 +- .../java/org/geysermc/geyser/event/GeyserEventSubscriber.java | 2 +- .../geyser/event/type/GeyserDefineCommandsEventImpl.java | 2 +- .../geyser/event/type/GeyserDefineCustomItemsEventImpl.java | 2 +- .../geysermc/geyser/extension/GeyserExtensionClassLoader.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionContainer.java | 2 +- .../geysermc/geyser/extension/GeyserExtensionDescription.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionLoader.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionLogger.java | 2 +- .../org/geysermc/geyser/extension/GeyserExtensionManager.java | 2 +- .../geyser/extension/command/GeyserExtensionCommand.java | 2 +- .../geyser/extension/event/GeyserExtensionEventBus.java | 2 +- .../main/java/org/geysermc/geyser/inventory/AnvilContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/BeaconContainer.java | 2 +- .../org/geysermc/geyser/inventory/BedrockContainerSlot.java | 2 +- .../org/geysermc/geyser/inventory/CartographyContainer.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/Container.java | 2 +- .../java/org/geysermc/geyser/inventory/EnchantingContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/Generic3X3Container.java | 2 +- .../java/org/geysermc/geyser/inventory/GeyserEnchantOption.java | 2 +- .../java/org/geysermc/geyser/inventory/GeyserItemStack.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/Inventory.java | 2 +- .../java/org/geysermc/geyser/inventory/LecternContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/MerchantContainer.java | 2 +- .../java/org/geysermc/geyser/inventory/PlayerInventory.java | 2 +- core/src/main/java/org/geysermc/geyser/inventory/SlotType.java | 2 +- .../org/geysermc/geyser/inventory/StonecutterContainer.java | 2 +- .../main/java/org/geysermc/geyser/inventory/click/Click.java | 2 +- .../java/org/geysermc/geyser/inventory/click/ClickPlan.java | 2 +- .../geysermc/geyser/inventory/holder/BlockInventoryHolder.java | 2 +- .../org/geysermc/geyser/inventory/holder/InventoryHolder.java | 2 +- .../java/org/geysermc/geyser/inventory/item/Enchantment.java | 2 +- .../main/java/org/geysermc/geyser/inventory/item/Potion.java | 2 +- .../org/geysermc/geyser/inventory/item/StoredItemMappings.java | 2 +- .../org/geysermc/geyser/inventory/item/TippedArrowPotion.java | 2 +- .../java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java | 2 +- .../geysermc/geyser/inventory/recipe/GeyserStonecutterData.java | 2 +- .../geyser/inventory/updater/AnvilInventoryUpdater.java | 2 +- .../geyser/inventory/updater/ChestInventoryUpdater.java | 2 +- .../geyser/inventory/updater/ContainerInventoryUpdater.java | 2 +- .../geyser/inventory/updater/HorseInventoryUpdater.java | 2 +- .../org/geysermc/geyser/inventory/updater/InventoryUpdater.java | 2 +- .../geysermc/geyser/inventory/updater/UIInventoryUpdater.java | 2 +- core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomItemData.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomItemOptions.java | 2 +- .../java/org/geysermc/geyser/item/GeyserCustomMappingData.java | 2 +- .../geysermc/geyser/item/GeyserNonVanillaCustomItemData.java | 2 +- core/src/main/java/org/geysermc/geyser/item/Items.java | 2 +- .../geysermc/geyser/item/components/ToolBreakSpeedsUtils.java | 2 +- .../main/java/org/geysermc/geyser/item/components/ToolTier.java | 2 +- .../java/org/geysermc/geyser/item/components/WearableSlot.java | 2 +- .../item/exception/InvalidCustomMappingsFileException.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/CompassItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/ElytraItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/FilledMapItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/GoatHornItem.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/Item.java | 2 +- core/src/main/java/org/geysermc/geyser/item/type/MapItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/PotionItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/ShieldItem.java | 2 +- .../main/java/org/geysermc/geyser/item/type/SpawnEggItem.java | 2 +- .../src/main/java/org/geysermc/geyser/item/type/TieredItem.java | 2 +- .../java/org/geysermc/geyser/item/type/TippedArrowItem.java | 2 +- .../main/java/org/geysermc/geyser/level/BedrockDimension.java | 2 +- .../src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java | 2 +- core/src/main/java/org/geysermc/geyser/level/FireworkColor.java | 2 +- core/src/main/java/org/geysermc/geyser/level/GameRule.java | 2 +- .../main/java/org/geysermc/geyser/level/GeyserAdvancement.java | 2 +- .../main/java/org/geysermc/geyser/level/GeyserWorldManager.java | 2 +- core/src/main/java/org/geysermc/geyser/level/JavaDimension.java | 2 +- core/src/main/java/org/geysermc/geyser/level/MapColor.java | 2 +- core/src/main/java/org/geysermc/geyser/level/PaintingType.java | 2 +- core/src/main/java/org/geysermc/geyser/level/WorldManager.java | 2 +- .../java/org/geysermc/geyser/level/block/BlockStateValues.java | 2 +- .../java/org/geysermc/geyser/level/block/DoubleChestValue.java | 2 +- .../geyser/level/block/GeyserCustomBlockComponents.java | 2 +- .../org/geysermc/geyser/level/block/GeyserCustomBlockData.java | 2 +- .../geysermc/geyser/level/block/GeyserCustomBlockProperty.java | 2 +- .../org/geysermc/geyser/level/block/GeyserCustomBlockState.java | 2 +- .../main/java/org/geysermc/geyser/level/chunk/BlockStorage.java | 2 +- .../main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java | 2 +- .../org/geysermc/geyser/level/chunk/GeyserChunkSection.java | 2 +- .../java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java | 2 +- .../org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java | 2 +- .../geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java | 2 +- core/src/main/java/org/geysermc/geyser/level/physics/Axis.java | 2 +- .../java/org/geysermc/geyser/level/physics/BoundingBox.java | 2 +- .../org/geysermc/geyser/level/physics/CollisionManager.java | 2 +- .../main/java/org/geysermc/geyser/level/physics/Direction.java | 2 +- .../java/org/geysermc/geyser/level/physics/PistonBehavior.java | 2 +- core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java | 2 +- .../src/main/java/org/geysermc/geyser/network/GameProtocol.java | 2 +- .../org/geysermc/geyser/network/GeyserServerInitializer.java | 2 +- .../java/org/geysermc/geyser/network/LoggingPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/QueryPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/UpstreamPacketHandler.java | 2 +- .../java/org/geysermc/geyser/network/netty/ChannelWrapper.java | 2 +- .../geyser/network/netty/DefaultChannelPipelinePublic.java | 2 +- .../java/org/geysermc/geyser/network/netty/GeyserInjector.java | 2 +- .../java/org/geysermc/geyser/network/netty/GeyserServer.java | 2 +- .../geyser/network/netty/LocalChannelWithRemoteAddress.java | 2 +- .../org/geysermc/geyser/network/netty/LocalChannelWrapper.java | 2 +- .../geyser/network/netty/LocalServerChannelWrapper.java | 2 +- .../java/org/geysermc/geyser/network/netty/LocalSession.java | 2 +- core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java | 2 +- .../java/org/geysermc/geyser/pack/ResourcePackManifest.java | 2 +- .../java/org/geysermc/geyser/pack/SkullResourcePackManager.java | 2 +- .../org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java | 2 +- core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java | 2 +- .../java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java | 2 +- .../org/geysermc/geyser/registry/AbstractMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/ArrayRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/BlockRegistries.java | 2 +- .../java/org/geysermc/geyser/registry/IntMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/MappedRegistry.java | 2 +- .../org/geysermc/geyser/registry/PacketTranslatorRegistry.java | 2 +- core/src/main/java/org/geysermc/geyser/registry/Registries.java | 2 +- core/src/main/java/org/geysermc/geyser/registry/Registry.java | 2 +- .../java/org/geysermc/geyser/registry/SimpleMappedRegistry.java | 2 +- .../main/java/org/geysermc/geyser/registry/SimpleRegistry.java | 2 +- .../java/org/geysermc/geyser/registry/VersionedRegistry.java | 2 +- .../geyser/registry/loader/AnnotatedRegistryLoader.java | 2 +- .../geyser/registry/loader/BiomeIdentifierRegistryLoader.java | 2 +- .../geyser/registry/loader/BlockEntityRegistryLoader.java | 2 +- .../geyser/registry/loader/CollisionRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/EffectRegistryLoader.java | 2 +- .../geyser/registry/loader/EnchantmentRegistryLoader.java | 2 +- .../geyser/registry/loader/MultiResourceRegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/NbtRegistryLoader.java | 2 +- .../geyser/registry/loader/ParticleTypesRegistryLoader.java | 2 +- .../geyser/registry/loader/PotionMixRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/ProviderRegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/RegistryLoader.java | 2 +- .../org/geysermc/geyser/registry/loader/RegistryLoaders.java | 2 +- .../geyser/registry/loader/SoundEventsRegistryLoader.java | 2 +- .../geysermc/geyser/registry/loader/SoundRegistryLoader.java | 2 +- .../geyser/registry/loader/SoundTranslatorRegistryLoader.java | 2 +- .../geysermc/geyser/registry/mappings/MappingsConfigReader.java | 2 +- .../registry/mappings/util/CustomBlockComponentsMapping.java | 2 +- .../geyser/registry/mappings/util/CustomBlockMapping.java | 2 +- .../registry/mappings/util/CustomBlockStateBuilderMapping.java | 2 +- .../geyser/registry/mappings/util/CustomBlockStateMapping.java | 2 +- .../geyser/registry/mappings/versions/MappingsReader.java | 2 +- .../geyser/registry/mappings/versions/MappingsReader_v1.java | 2 +- .../geyser/registry/populator/BlockRegistryPopulator.java | 2 +- .../registry/populator/CreativeItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/CustomItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/CustomSkullRegistryPopulator.java | 2 +- .../geyser/registry/populator/ItemRegistryPopulator.java | 2 +- .../geyser/registry/populator/PacketRegistryPopulator.java | 2 +- .../geyser/registry/populator/RecipeRegistryPopulator.java | 2 +- .../org/geysermc/geyser/registry/provider/ProviderSupplier.java | 2 +- .../java/org/geysermc/geyser/registry/type/BlockMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/BlockMappings.java | 2 +- .../java/org/geysermc/geyser/registry/type/CustomSkull.java | 2 +- .../java/org/geysermc/geyser/registry/type/EnchantmentData.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserBedrockBlock.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserItemDefinition.java | 2 +- .../org/geysermc/geyser/registry/type/GeyserMappingItem.java | 2 +- .../java/org/geysermc/geyser/registry/type/ItemMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/ItemMappings.java | 2 +- .../geyser/registry/type/NonVanillaItemRegistration.java | 2 +- .../java/org/geysermc/geyser/registry/type/PaletteItem.java | 2 +- .../java/org/geysermc/geyser/registry/type/ParticleMapping.java | 2 +- .../java/org/geysermc/geyser/registry/type/SoundMapping.java | 2 +- .../src/main/java/org/geysermc/geyser/scoreboard/Objective.java | 2 +- core/src/main/java/org/geysermc/geyser/scoreboard/Score.java | 2 +- .../main/java/org/geysermc/geyser/scoreboard/Scoreboard.java | 2 +- .../java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java | 2 +- core/src/main/java/org/geysermc/geyser/scoreboard/Team.java | 2 +- .../main/java/org/geysermc/geyser/scoreboard/UpdateType.java | 2 +- .../java/org/geysermc/geyser/session/DownstreamSession.java | 2 +- .../main/java/org/geysermc/geyser/session/GeyserSession.java | 2 +- .../main/java/org/geysermc/geyser/session/SessionManager.java | 2 +- .../main/java/org/geysermc/geyser/session/UpstreamSession.java | 2 +- .../main/java/org/geysermc/geyser/session/auth/AuthData.java | 2 +- .../org/geysermc/geyser/session/auth/BedrockClientData.java | 2 +- .../org/geysermc/geyser/session/cache/AdvancementsCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/BookEditCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/BossBar.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/ChunkCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/EntityCache.java | 2 +- .../org/geysermc/geyser/session/cache/EntityEffectCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/FormCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/LodestoneCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/PistonCache.java | 2 +- .../org/geysermc/geyser/session/cache/PreferencesCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/SkullCache.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/TagCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/TeleportCache.java | 2 +- .../java/org/geysermc/geyser/session/cache/WorldBorder.java | 2 +- .../main/java/org/geysermc/geyser/session/cache/WorldCache.java | 2 +- .../main/java/org/geysermc/geyser/skin/FakeHeadProvider.java | 2 +- .../java/org/geysermc/geyser/skin/FloodgateSkinUploader.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/SkinManager.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java | 2 +- .../main/java/org/geysermc/geyser/skin/SkullSkinManager.java | 2 +- .../main/java/org/geysermc/geyser/text/AsteriskSerializer.java | 2 +- core/src/main/java/org/geysermc/geyser/text/ChatColor.java | 2 +- core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java | 2 +- .../geysermc/geyser/text/DummyLegacyHoverEventSerializer.java | 2 +- core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java | 2 +- .../geysermc/geyser/text/GsonComponentSerializerWrapper.java | 2 +- .../src/main/java/org/geysermc/geyser/text/MinecraftLocale.java | 2 +- .../org/geysermc/geyser/text/MinecraftTranslationRegistry.java | 2 +- core/src/main/java/org/geysermc/geyser/text/TextDecoration.java | 2 +- .../geysermc/geyser/translator/collision/BlockCollision.java | 2 +- .../geysermc/geyser/translator/collision/CollisionRemapper.java | 2 +- .../geysermc/geyser/translator/collision/DirtPathCollision.java | 2 +- .../org/geysermc/geyser/translator/collision/DoorCollision.java | 2 +- .../geysermc/geyser/translator/collision/OtherCollision.java | 2 +- .../geyser/translator/collision/ScaffoldingCollision.java | 2 +- .../org/geysermc/geyser/translator/collision/SnowCollision.java | 2 +- .../geysermc/geyser/translator/collision/SolidCollision.java | 2 +- .../geysermc/geyser/translator/collision/SpawnerCollision.java | 2 +- .../geysermc/geyser/translator/collision/TrapdoorCollision.java | 2 +- .../geyser/translator/entity/EntityMetadataTranslator.java | 2 +- .../translator/inventory/AbstractBlockInventoryTranslator.java | 2 +- .../geyser/translator/inventory/AnvilInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BaseInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BeaconInventoryTranslator.java | 2 +- .../geyser/translator/inventory/BrewingInventoryTranslator.java | 2 +- .../translator/inventory/CartographyInventoryTranslator.java | 2 +- .../translator/inventory/CraftingInventoryTranslator.java | 2 +- .../translator/inventory/EnchantingInventoryTranslator.java | 2 +- .../translator/inventory/Generic3X3InventoryTranslator.java | 2 +- .../translator/inventory/GrindstoneInventoryTranslator.java | 2 +- .../geyser/translator/inventory/HopperInventoryTranslator.java | 2 +- .../geyser/translator/inventory/InventoryTranslator.java | 2 +- .../geyser/translator/inventory/LecternInventoryTranslator.java | 2 +- .../geyser/translator/inventory/LoomInventoryTranslator.java | 2 +- .../translator/inventory/MerchantInventoryTranslator.java | 2 +- .../geyser/translator/inventory/PlayerInventoryTranslator.java | 2 +- .../geyser/translator/inventory/ShulkerInventoryTranslator.java | 2 +- .../translator/inventory/SmithingInventoryTranslator.java | 2 +- .../translator/inventory/StonecutterInventoryTranslator.java | 2 +- .../translator/inventory/chest/ChestInventoryTranslator.java | 2 +- .../inventory/chest/DoubleChestInventoryTranslator.java | 2 +- .../inventory/chest/SingleChestInventoryTranslator.java | 2 +- .../inventory/furnace/AbstractFurnaceInventoryTranslator.java | 2 +- .../inventory/furnace/BlastFurnaceInventoryTranslator.java | 2 +- .../inventory/furnace/FurnaceInventoryTranslator.java | 2 +- .../translator/inventory/furnace/SmokerInventoryTranslator.java | 2 +- .../inventory/horse/AbstractHorseInventoryTranslator.java | 2 +- .../inventory/horse/ChestedHorseInventoryTranslator.java | 2 +- .../translator/inventory/horse/DonkeyInventoryTranslator.java | 2 +- .../translator/inventory/horse/HorseInventoryTranslator.java | 2 +- .../translator/inventory/horse/LlamaInventoryTranslator.java | 2 +- .../geyser/translator/inventory/item/CustomItemTranslator.java | 2 +- .../geyser/translator/inventory/item/ItemTranslator.java | 2 +- .../translator/inventory/item/NbtItemStackTranslator.java | 2 +- .../org/geysermc/geyser/translator/level/BiomeTranslator.java | 2 +- .../level/block/entity/BannerBlockEntityTranslator.java | 2 +- .../level/block/entity/BeaconBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/BedBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/BedrockOnlyBlockEntity.java | 2 +- .../geyser/translator/level/block/entity/BlockEntity.java | 2 +- .../translator/level/block/entity/BlockEntityTranslator.java | 2 +- .../level/block/entity/CampfireBlockEntityTranslator.java | 2 +- .../level/block/entity/CommandBlockBlockEntityTranslator.java | 2 +- .../level/block/entity/DoubleChestBlockEntityTranslator.java | 2 +- .../level/block/entity/EmptyBlockEntityTranslator.java | 2 +- .../level/block/entity/EndGatewayBlockEntityTranslator.java | 2 +- .../level/block/entity/FlowerPotBlockEntityTranslator.java | 2 +- .../level/block/entity/JigsawBlockBlockEntityTranslator.java | 2 +- .../geyser/translator/level/block/entity/PistonBlockEntity.java | 2 +- .../level/block/entity/PistonBlockEntityTranslator.java | 2 +- .../translator/level/block/entity/RequiresBlockState.java | 2 +- .../level/block/entity/ShulkerBoxBlockEntityTranslator.java | 2 +- .../level/block/entity/SignBlockEntityTranslator.java | 2 +- .../level/block/entity/SkullBlockEntityTranslator.java | 2 +- .../level/block/entity/SpawnerBlockEntityTranslator.java | 2 +- .../geyser/translator/level/event/LevelEventTranslator.java | 2 +- .../geyser/translator/level/event/PlaySoundEventTranslator.java | 2 +- .../translator/level/event/SoundEventEventTranslator.java | 2 +- .../translator/level/event/SoundLevelEventTranslator.java | 2 +- .../geysermc/geyser/translator/protocol/PacketTranslator.java | 2 +- .../org/geysermc/geyser/translator/protocol/Translator.java | 2 +- .../translator/protocol/bedrock/BedrockAnimateTranslator.java | 2 +- .../protocol/bedrock/BedrockBlockEntityDataTranslator.java | 2 +- .../protocol/bedrock/BedrockBlockPickRequestTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockBookEditTranslator.java | 2 +- .../protocol/bedrock/BedrockCommandBlockUpdateTranslator.java | 2 +- .../protocol/bedrock/BedrockCommandRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockContainerCloseTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockEmoteListTranslator.java | 2 +- .../protocol/bedrock/BedrockEntityPickRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockFilterTextTranslator.java | 2 +- .../protocol/bedrock/BedrockInventoryTransactionTranslator.java | 2 +- .../protocol/bedrock/BedrockItemFrameDropItemTranslator.java | 2 +- .../protocol/bedrock/BedrockItemStackRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockLecternUpdateTranslator.java | 2 +- .../protocol/bedrock/BedrockMapInfoRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockMobEquipmentTranslator.java | 2 +- .../protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java | 2 +- .../protocol/bedrock/BedrockNetworkStackLatencyTranslator.java | 2 +- .../bedrock/BedrockPacketViolationWarningTranslator.java | 2 +- .../protocol/bedrock/BedrockPlayerInputTranslator.java | 2 +- .../BedrockPositionTrackingDBClientRequestTranslator.java | 2 +- .../protocol/bedrock/BedrockRequestAbilityTranslator.java | 2 +- .../protocol/bedrock/BedrockRequestChunkRadiusTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockRespawnTranslator.java | 2 +- .../bedrock/BedrockServerSettingsRequestTranslator.java | 2 +- .../bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java | 2 +- .../protocol/bedrock/BedrockShowCreditsTranslator.java | 2 +- .../translator/protocol/bedrock/BedrockTextTranslator.java | 2 +- .../protocol/bedrock/entity/BedrockEntityEventTranslator.java | 2 +- .../protocol/bedrock/entity/player/BedrockActionTranslator.java | 2 +- .../protocol/bedrock/entity/player/BedrockEmoteTranslator.java | 2 +- .../bedrock/entity/player/BedrockInteractTranslator.java | 2 +- .../bedrock/entity/player/BedrockMovePlayerTranslator.java | 2 +- .../bedrock/entity/player/BedrockRiderJumpTranslator.java | 2 +- .../entity/player/BedrockSetPlayerGameTypeTranslator.java | 2 +- .../bedrock/world/BedrockLevelSoundEventTranslator.java | 2 +- .../translator/protocol/java/JavaAwardStatsTranslator.java | 2 +- .../translator/protocol/java/JavaBossEventTranslator.java | 2 +- .../protocol/java/JavaChangeDifficultyTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaCommandsTranslator.java | 2 +- .../translator/protocol/java/JavaCustomPayloadTranslator.java | 2 +- .../translator/protocol/java/JavaCustomQueryTranslator.java | 2 +- .../translator/protocol/java/JavaDisconnectTranslator.java | 2 +- .../translator/protocol/java/JavaDisguisedChatTranslator.java | 2 +- .../translator/protocol/java/JavaGameProfileTranslator.java | 2 +- .../translator/protocol/java/JavaKeepAliveTranslator.java | 2 +- .../translator/protocol/java/JavaLoginDisconnectTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaLoginTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaPingTranslator.java | 2 +- .../translator/protocol/java/JavaPlayerChatTranslator.java | 2 +- .../geyser/translator/protocol/java/JavaRespawnTranslator.java | 2 +- .../protocol/java/JavaSelectAdvancementsTabTranslator.java | 2 +- .../translator/protocol/java/JavaSystemChatTranslator.java | 2 +- .../protocol/java/JavaUpdateAdvancementsTranslator.java | 2 +- .../translator/protocol/java/JavaUpdateRecipesTranslator.java | 2 +- .../translator/protocol/java/JavaUpdateTagsTranslator.java | 2 +- .../translator/protocol/java/entity/JavaAnimateTranslator.java | 2 +- .../protocol/java/entity/JavaEntityEventTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityPosRotTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityPosTranslator.java | 2 +- .../protocol/java/entity/JavaMoveEntityRotTranslator.java | 2 +- .../protocol/java/entity/JavaMoveVehicleTranslator.java | 2 +- .../protocol/java/entity/JavaRemoveEntitiesTranslator.java | 2 +- .../protocol/java/entity/JavaRemoveMobEffectTranslator.java | 2 +- .../protocol/java/entity/JavaRotateHeadTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityDataTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityLinkTranslator.java | 2 +- .../protocol/java/entity/JavaSetEntityMotionTranslator.java | 2 +- .../protocol/java/entity/JavaSetEquipmentTranslator.java | 2 +- .../protocol/java/entity/JavaSetPassengersTranslator.java | 2 +- .../protocol/java/entity/JavaSoundEntityTranslator.java | 2 +- .../protocol/java/entity/JavaTakeItemEntityTranslator.java | 2 +- .../protocol/java/entity/JavaTeleportEntityTranslator.java | 2 +- .../protocol/java/entity/JavaUpdateAttributesTranslator.java | 2 +- .../protocol/java/entity/JavaUpdateMobEffectTranslator.java | 2 +- .../java/entity/player/JavaBlockChangedAckTranslator.java | 2 +- .../java/entity/player/JavaPlayerAbilitiesTranslator.java | 2 +- .../java/entity/player/JavaPlayerCombatKillTranslator.java | 2 +- .../java/entity/player/JavaPlayerInfoRemoveTranslator.java | 2 +- .../java/entity/player/JavaPlayerInfoUpdateTranslator.java | 2 +- .../protocol/java/entity/player/JavaPlayerLookAtTranslator.java | 2 +- .../java/entity/player/JavaPlayerPositionTranslator.java | 2 +- .../java/entity/player/JavaSetCarriedItemTranslator.java | 2 +- .../java/entity/player/JavaSetExperienceTranslator.java | 2 +- .../protocol/java/entity/player/JavaSetHealthTranslator.java | 2 +- .../protocol/java/entity/spawn/JavaAddEntityTranslator.java | 2 +- .../java/entity/spawn/JavaAddExperienceOrbTranslator.java | 2 +- .../protocol/java/entity/spawn/JavaAddPlayerTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerCloseTranslator.java | 2 +- .../java/inventory/JavaContainerSetContentTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerSetDataTranslator.java | 2 +- .../protocol/java/inventory/JavaContainerSetSlotTranslator.java | 2 +- .../protocol/java/inventory/JavaHorseScreenOpenTranslator.java | 2 +- .../protocol/java/inventory/JavaMerchantOffersTranslator.java | 2 +- .../protocol/java/inventory/JavaOpenScreenTranslator.java | 2 +- .../protocol/java/level/JavaBlockDestructionTranslator.java | 2 +- .../protocol/java/level/JavaBlockEntityDataTranslator.java | 2 +- .../protocol/java/level/JavaBlockEventTranslator.java | 2 +- .../protocol/java/level/JavaBlockUpdateTranslator.java | 2 +- .../translator/protocol/java/level/JavaCooldownTranslator.java | 2 +- .../translator/protocol/java/level/JavaExplodeTranslator.java | 2 +- .../protocol/java/level/JavaForgetLevelChunkTranslator.java | 2 +- .../translator/protocol/java/level/JavaGameEventTranslator.java | 2 +- .../protocol/java/level/JavaLevelChunkWithLightTranslator.java | 2 +- .../protocol/java/level/JavaLevelEventTranslator.java | 2 +- .../protocol/java/level/JavaLevelParticlesTranslator.java | 2 +- .../protocol/java/level/JavaMapItemDataTranslator.java | 2 +- .../protocol/java/level/JavaSectionBlocksUpdateTranslator.java | 2 +- .../protocol/java/level/JavaSetChunkCacheCenterTranslator.java | 2 +- .../protocol/java/level/JavaSetChunkCacheRadiusTranslator.java | 2 +- .../java/level/JavaSetDefaultSpawnPositionTranslator.java | 2 +- .../translator/protocol/java/level/JavaSetTimeTranslator.java | 2 +- .../translator/protocol/java/level/JavaSoundTranslator.java | 2 +- .../translator/protocol/java/level/JavaStopSoundTranslator.java | 2 +- .../java/level/border/JavaInitializeBorderTranslator.java | 2 +- .../java/level/border/JavaSetBorderCenterTranslator.java | 2 +- .../java/level/border/JavaSetBorderLerpSizeTranslator.java | 2 +- .../protocol/java/level/border/JavaSetBorderSizeTranslator.java | 2 +- .../java/level/border/JavaSetBorderWarningDelayTranslator.java | 2 +- .../level/border/JavaSetBorderWarningDistanceTranslator.java | 2 +- .../java/scoreboard/JavaSetDisplayObjectiveTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetObjectiveTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetScoreTranslator.java | 2 +- .../protocol/java/title/JavaClearTitlesTranslator.java | 2 +- .../protocol/java/title/JavaSetActionBarTextTranslator.java | 2 +- .../protocol/java/title/JavaSetSubtitleTextTranslator.java | 2 +- .../protocol/java/title/JavaSetTitleTextTranslator.java | 2 +- .../protocol/java/title/JavaSetTitlesAnimationTranslator.java | 2 +- .../translator/sound/BlockSoundInteractionTranslator.java | 2 +- .../geyser/translator/sound/SoundInteractionTranslator.java | 2 +- .../org/geysermc/geyser/translator/sound/SoundTranslator.java | 2 +- .../sound/block/BucketSoundInteractionTranslator.java | 2 +- .../sound/block/ComparatorSoundInteractionTranslator.java | 2 +- .../translator/sound/block/DoorSoundInteractionTranslator.java | 2 +- .../sound/block/FlintAndSteelInteractionTranslator.java | 2 +- .../translator/sound/block/GrassPathInteractionTranslator.java | 2 +- .../geyser/translator/sound/block/HoeInteractionTranslator.java | 2 +- .../translator/sound/block/LeverSoundInteractionTranslator.java | 2 +- .../org/geysermc/geyser/translator/text/MessageTranslator.java | 2 +- core/src/main/java/org/geysermc/geyser/util/AssetUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/BlockEntityUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/BlockUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/CpuUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/EntityUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/FileUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/InteractionResult.java | 2 +- core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java | 2 +- core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/ItemUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java | 2 +- .../java/org/geysermc/geyser/util/LoginEncryptionUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java | 2 +- core/src/main/java/org/geysermc/geyser/util/MathUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/Metrics.java | 2 +- core/src/main/java/org/geysermc/geyser/util/NewsHandler.java | 2 +- .../main/java/org/geysermc/geyser/util/PluginMessageUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SignUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/SoundUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/StatisticFormatters.java | 2 +- .../src/main/java/org/geysermc/geyser/util/StatisticsUtils.java | 2 +- .../main/java/org/geysermc/geyser/util/VersionCheckUtils.java | 2 +- core/src/main/java/org/geysermc/geyser/util/WebUtils.java | 2 +- .../geysermc/geyser/util/collection/FixedInt2BooleanMap.java | 2 +- .../org/geysermc/geyser/util/collection/FixedInt2ByteMap.java | 2 +- .../org/geysermc/geyser/util/collection/FixedInt2IntMap.java | 2 +- .../org/geysermc/geyser/util/collection/LecternHasBookMap.java | 2 +- .../java/org/geysermc/geyser/util/collection/package-info.java | 2 +- .../geyser/network/translators/chat/MessageTranslatorTest.java | 2 +- .../geyser/translator/inventory/item/CustomItemsTest.java | 2 +- .../geysermc/geyser/util/collection/GeyserCollectionsTest.java | 2 +- 766 files changed, 766 insertions(+), 766 deletions(-) diff --git a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java index a1887502ccf..f9ba683022f 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java index 6d721095020..e1da50f258e 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java index d292f03d6d3..84e2e2ffd3e 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java index f62fb1e7571..9b99d679b26 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java index c3de7b05eac..c35c0ee4e06 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java index 724e22512f8..f86206d366d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java +++ b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 89bb1f3827d..0310c794788 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index a1301cb9f9a..0d52a2a9ea3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 16b0fcc7623..2316f178d61 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 080ec944792..5da8e422a9e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 435ec2ba551..1926c5be50b 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index 525a43b627c..a14bb2ceffc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index f7dd7869050..3b102987aeb 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java index d10f2a25098..5f4f08b5154 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java index f2f22451eb5..fc39c4663fa 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/CustomBlockProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 994e05434b1..6b6d70e5752 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/Command.java b/api/src/main/java/org/geysermc/geyser/api/command/Command.java index 2b5dc746d35..2f1f2b24dba 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/Command.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/Command.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java b/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java index 0c0512a3d4f..12a54ee9082 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/CommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java b/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java index 5801ae32fa6..45276e2c466 100644 --- a/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java +++ b/api/src/main/java/org/geysermc/geyser/api/command/CommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java index ff8057c4d78..8d695bf027d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java +++ b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java index 570cc3669f6..801bfa45fd3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java b/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java index 7f294ecd08d..064dd55f60f 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java index 34afbf84212..7f91d09a39e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java index ae894092633..a58d3589173 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java index 303c4e673f6..9c5fffa2f17 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/ExtensionEventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java index 105dfc5a074..35b6a9e7371 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/ClientEmoteEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java index ef2d35a8b42..91cdea99a2d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java index 3ee9dde6773..158f14d53bb 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/connection/ConnectionEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java index 9b7e8a778e5..ff4a1d074ea 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/downstream/ServerDefineCommandsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java index 1f450652015..77d5efa658e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index eeea50ffef5..1dd135521dc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java index 7cc466ebc9a..0957b8551c1 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java index c9d3c5f5f39..e9b283ecbbd 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserLoadResourcePacksEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java index 13709f55680..8d145f615dc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java index 1cf20943077..8be89dafdcf 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreInitializeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java index ca244402f30..7793ef997c8 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserShutdownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java b/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java index a748c78fcb5..33fc159de52 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/Extension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java index ad21a5162d2..2df3ee815b5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionDescription.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java index da018e05795..30414d500e4 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java index d99e0a2e408..17e108455fd 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java index 0f3c7c076ce..a9d0d7376d2 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/ExtensionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java index b0a26668008..1fe88e9e990 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java index adf61871ed9..7fb6b692241 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java index 2b1994a1f2c..d256b9ac045 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java index e90b149b9d8..2ca19e20e56 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java index f5123ea3658..f81da0ae261 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomRenderOffsets.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java index a8c168f92d0..13b37096d84 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java b/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java index ef697ccf2da..3176f338422 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/AuthType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java index ffaf6dca270..61fe286aa13 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java index 833a0f90a4e..8ac5d8a03ad 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java index 054951fd2de..457a38e32e2 100644 --- a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java +++ b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java index 2bb02e37ff1..bc084a34e90 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java index d5f62a65e31..ba7bc464ffd 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java index ac622962af5..e10b3ce6fc3 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java index 447d6dcf297..daeb201029c 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java index 9ea76e6a9f3..8229f952a7c 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index f1b4229561c..39fb9e13423 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index 3ceb2c186d8..4141a8dbc24 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java index cb8a1a91b6f..c68839b2095 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java index 8b551c91af5..f65377643a1 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java index 10abcb2585f..2d02c9950a7 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/GeyserBungeeCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java index 19e7656cc11..f557d16c0ea 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java index 25ca1033899..ee986ee6216 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java index 1f5659c8b3a..180197f2dd0 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java index 509803ff18f..f3f63324a9b 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java index 7ce94a8dc1d..fdc820b19b2 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java index 34802a22b83..1ea69cbe225 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java index dec33e40f4b..4f1c8b638f7 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserServerPortGetter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java index 0bb0fdb52f0..5973e04f178 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java index c3580a17155..7600e41361f 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java index ccb061e5678..94290906888 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java index b2ac5d4cd21..23e148775df 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/server/MinecraftDedicatedServerMixin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java index fe26fc4b3b2..454a9167e88 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java index 0aec10f6b5c..930f84cecd8 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java index b6da8e59d03..bb0f30e70b4 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java index 7944b0a98f2..3320ffa6595 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java index b3653109ac2..d340935b3a2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java index 0810ab490cf..e3d73fb1939 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java index 8b52f9e853b..fe56cba1cdb 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java index 0875d288407..4dfc40b2d75 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java index 9683a12016e..1e6a0ad6c5c 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index f0ceba4b33a..a660d735beb 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java index 52e81cccda6..5e3c4def8e1 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java index da15aa047cb..0212ff9b096 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java index 11bdf1a8ba9..5dd16da33ae 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java index b12a30cf9f3..67e31fea2f4 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java index 9c15ff3c42d..61900174cc0 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserBrigadierSupport.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java index 75e0f929a91..9375e3a6271 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java index 173f543dd2a..61d39421463 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java index 56f3a54dd79..655d3be231b 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java index 76380728d3a..95fba707fe1 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java index 920f3a57a34..01b0be9f2fa 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserPistonListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java index 87ae3142348..71aba11f966 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/GeyserSpigotBlockPlaceListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java index 2161adeb395..baffc96792c 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java index 5cbb9d8ced2..6b5d1ea1e77 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java index 445ca5637d3..056747d6af6 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java index 09633e4f813..29852aff0bb 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java index dd8eebe78ea..628c85fd1ee 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java index f655b239414..2bed78ac9bc 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java index 62835bd7d2e..553ad21d91d 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongeMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java index 45d0bd208e6..f69a3ffb462 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java index e0ee8c124f6..dd84bf31c57 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/GeyserSpongePlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java index 0a146167830..a1a0d99ad6a 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java index 9fa567bd312..d83e3a723cd 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/GeyserSpongeCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java index 57733f180be..31dccc1fbcc 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/geyser/platform/sponge/command/SpongeCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java index 0611624795e..c4271be4c46 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java index c714a1d6a5e..1102ed0a998 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java index d60705d53e7..109ca18f7a1 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java index 5f306b20259..e7e24a46564 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java index 879c136b393..874f6d979f3 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ANSIColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java index 6c4307fccd0..c08f602d490 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java index cc69fbd5897..41cbafb2590 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java index 250e080fa40..d8fca3e1b09 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java index a26d93ccfe1..4c8ea53cc89 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java index cd8b5990cad..45eb7abb9a5 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java index b037bbdc8ce..4ffb286b884 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java index 03eb55bfb3a..567870e7fff 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java index 5cfcb909576..8e469b03bbf 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java index c121f75ca1b..1a9b9bf260f 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index e5ba5d93ce3..92b3a71a772 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java index 06e02bd9d4e..31e5846128b 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityUpdateListener.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java index 145679b1eb5..c89c35b0648 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/GeyserVelocityCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java index 26b7a67247b..00c99e92b51 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/common/PlatformType.java b/common/src/main/java/org/geysermc/common/PlatformType.java index 8fdd81c3d68..667d49a7a94 100644 --- a/common/src/main/java/org/geysermc/common/PlatformType.java +++ b/common/src/main/java/org/geysermc/common/PlatformType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java index ccac56215c2..86aba1ec421 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java index 802551e09bb..77dd46fde2d 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java b/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java index 64dd323cb34..002a23f3834 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/Base64Topping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java index 2f9075b0f3c..2f7b442f41e 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java index 00bb2487183..4ee00f366e6 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java b/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java index 39efa989fbc..3805c0bc57b 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/Topping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java index 0ec9e7fe628..8ae28f4229e 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java index 3eb9fe9b541..00e34b62270 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java index 2ee31229a10..9c2f3d15de3 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java index 38bf156c39f..ed7c1553bdb 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java b/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java index 77765f96fc2..f2ad6b30949 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/AnnouncementData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java index 9827201c20d..7f2c7360fe7 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java b/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java index f6764b62f52..1e5fef4d6b9 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/CheckAfterData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java index 9c32debf744..1479d20a161 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java b/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java index 3594fceff48..64a1aedf3d4 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/ItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java b/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java index b315e68bf4e..58281dec8b8 100644 --- a/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java +++ b/common/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageChannels.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java index 609e780ae77..95fc62229df 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java +++ b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java b/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java index a26c82871d0..40620475916 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java +++ b/common/src/main/java/org/geysermc/floodgate/util/DeviceOs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java b/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java index a0acebfaaf8..28b59b4a7f6 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java +++ b/common/src/main/java/org/geysermc/floodgate/util/FloodgateInfoHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/InputMode.java b/common/src/main/java/org/geysermc/floodgate/util/InputMode.java index 5bfbdf53aef..2bcfb88fb6a 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/InputMode.java +++ b/common/src/main/java/org/geysermc/floodgate/util/InputMode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java index df008c8ffec..e0630d48ce7 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java +++ b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java index 9e3148450bd..681080a3007 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java +++ b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java index 8b9969d70c7..d93042277e3 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java +++ b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java index d12da88c87f..61e6c63b16f 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java +++ b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/GeyserConnector.java b/core/src/main/java/org/geysermc/connector/GeyserConnector.java index 417e3e34f92..2616b91d375 100644 --- a/core/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/core/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index dab65835776..6298a41f62d 100644 --- a/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java b/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java index 0d724f0077a..cca7aa48c43 100644 --- a/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java +++ b/core/src/main/java/org/geysermc/connector/network/session/auth/AuthData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/Constants.java b/core/src/main/java/org/geysermc/geyser/Constants.java index 95ce79deae7..f607df015ae 100644 --- a/core/src/main/java/org/geysermc/geyser/Constants.java +++ b/core/src/main/java/org/geysermc/geyser/Constants.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java index 694fd3bbd8e..761e67a6725 100644 --- a/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java +++ b/core/src/main/java/org/geysermc/geyser/FloodgateKeyLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java index c2aba1bd06e..e4baeebb5bd 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 7212ea1a2d5..8204cfd3b57 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java index 219089f19e1..88220eec9d7 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/GeyserMain.java b/core/src/main/java/org/geysermc/geyser/GeyserMain.java index d4c8226a29c..8726c1b24df 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserMain.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserMain.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java index 1b08403f913..5808dbc2ce5 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java index 5d29767efed..a9b1c734fab 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java index 19ea83de497..d28f9d24edc 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java index 40a14e6be84..88d148b1147 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandSource.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java index 2488a474578..466515b3f97 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancedTooltipsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java index 90813756f06..28253433f2c 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/AdvancementsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 26155e032bc..95c1157694c 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java index 3143a064d14..60683d34ab3 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java index c317053b59b..30d422b2337 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java index 8cf7a33e34b..6e7ad2f04b9 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/HelpCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java index d05caf81a6a..90446fbb6b2 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ListCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java index 76fa8f3278c..6188e692473 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/OffhandCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java index d23c9bec2c2..843e93de0e2 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java index 1ae9a299482..7828cf1d200 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/SettingsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java index 694b69d7b2b..ea2da51df52 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/StatisticsCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java index dc8b77eb615..151aa2d8448 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java index 1612583ebec..b2b5d54a3fd 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java b/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java index 9c5ad8ecff0..fd44d390389 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/EmoteOffhandWorkaroundOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index 9b775a26355..222af341b35 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java index 4f80ba32e8d..1af3578a348 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserCustomSkullConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 494f7e60920..e096d58fa68 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java index 1e725ab22f2..fda0566fd32 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/BootstrapDumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java index c2a44f1e806..290a0e3ad90 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index 8ce81489bde..566b3daff10 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index 9153f9579c3..9c7e1985334 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java index 06a01e481e2..bc567ab91bd 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserDirtyMetadata.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java index 9e93d043fe5..92bfb75854a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java +++ b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java b/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java index fbbed4b2791..7675ea8fd3b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java +++ b/core/src/main/java/org/geysermc/geyser/entity/factory/EntityFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java index 2d791452365..6828d10208c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/AbstractArrowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java index 19adbf6a67d..fcd4f216028 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java index d368338d0be..1bf6e581ebe 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/BoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java index 61d0f3bc28a..675e9517d01 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ChestBoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java index 1918dfd4275..9c7a28f6e37 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/CommandBlockMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java index 1a741030674..63b5ff2abaf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/DefaultBlockMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java index c1a747eca48..86436f82bc2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EnderCrystalEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index 4e07444a63c..6ada880ce83 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java index a8f527fe662..56d761afd97 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/EvokerFangsEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java index f050d4cab91..5a79a98b3ea 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ExpOrbEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java index 097ed0f2b59..e6d3a57831a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FallingBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java index 04425ea6110..3db032f0f01 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FireballEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java index ab36833ca0c..7a544f23c5f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FireworkEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java index 7072cc0173c..bcbff16ce9f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FishingHookEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java index b89d93566db..a7a117fff68 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/FurnaceMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java index 6b3a1fcc776..bb67a60f656 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java index 6c3b6efae22..378385cfa14 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ItemFrameEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java index ecd3bcbf7fb..3f0d2ee6854 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LeashKnotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java index 8b504c8d16d..6db486f0340 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LightningEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java index f526daf5943..43fe555b0e9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java index 504390e827c..ecf67052bdf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/MinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java index 88643d21929..4e5fe9d5979 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/PaintingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java index df87c42576b..49cfc0081c5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/SpawnerMinecartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java index b441dc01e0b..98c2edd00e1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TNTEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java index 00604bae579..72ae88310e7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java index db92ff888f2..39c8386bd86 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableItemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java index cf0c7d48b85..1b5c1d2d0ad 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrownPotionEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java index c4376cdd943..06bf45b3dea 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Tickable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java index 2df7c0e6690..856c4cc66c1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TippedArrowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java index 20483223d1b..2167f2c4d79 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TridentEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java index b9eb77c0029..637ca41394d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/WitherSkullEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java index 320dc585a18..ec0caac3398 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java index 9ce4b8ecbfc..6e2e7a4077b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AgeableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java index b36185e70b8..f39200eed97 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java index a437c4fc2aa..8f81125d0e3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AmbientEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java index a6c5440d6bf..903f08b6441 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java index 5a8e74a4760..644054e725a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/BatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java index 97dfeeb2904..fd38bf6668a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/CreatureEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java index 9d9cec98d43..7c1d8efc72e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java index d7e34f458c4..472a9b3dcb1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/FlyingEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java index 776c9a0b4bf..58c2f608249 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/GlowSquidEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java index d00c14f31c0..12b2ca91d2a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/GolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 4342deb0769..1f653decd40 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java index 1f7434ac398..5a66ef36e47 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MagmaCubeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java index b18c471764d..60a9a147414 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java index 811088519b6..1d2eb95bc1d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SlimeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java index 772a1248435..ced274185e9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java index 6b9eb9d54b6..80a5af44257 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SquidEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java index 694e3703022..47ddb912669 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java index 2e211add332..a847c4cd726 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/WaterEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java index 79bbb3056d8..2c46da13b83 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java index bd0b9ef0f53..06eb0791b2a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java index 750e3cdffb7..e05b44cf05b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/BeeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java index a8690961038..164fb1b6c9a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/ChickenEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java index 9b2688fe993..01641c8c3d9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java index 6b0af76e6ec..98c73cbce98 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FoxEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java index ff7060e6869..039ef5bf986 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java index 6f4ff3746ec..20b8f5ccfca 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java index 9fe462a2302..154c2f688d0 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/HoglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index 1b7704a746f..2d136a169bb 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java index 4f18c002793..c81ddd52e27 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java index d513f927cce..212eaa91e0d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java index 48747381ebd..91e94321c71 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java index ccfd3eae6a8..1d7777cdb65 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PolarBearEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java index 7ae4dda59ba..d0d11959391 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PufferFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java index b4358a6dca6..1efa87ec82b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/RabbitEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java index 97f0554ea04..8c94580127e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java index 990351e4159..e58fa5aca8d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java index ffc293b2161..b18e55a4896 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TropicalFishEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java index 49fa18b1aeb..870ded1939b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/TurtleEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java index 2b8e81ae050..872f721906b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java index 108adb0921f..ed46cfc2a0c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java index 269d523f78b..0fb9438d28f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java index 62e2f8008c5..dfa6ef30ac4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/HorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java index afa7b74af46..a32d7b1b5f2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/LlamaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java index 7aca2dd2d6e..43c76202c87 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java index 8fae09a9702..4be0ef5e297 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/TraderLlamaEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java index 06931fb45bd..423537496c6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java index bf04feb7496..7903d85caa9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java index c4eb4ad1e5c..43f379de80e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java index 5ba35d67c98..5fc8c459de4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/TameableEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java index bb4e3acef07..ecf0736a35b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java index e8e968a43f6..b8465f9cab8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java index 3a4507b6ce6..84b8b514372 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java index adb9e4f3a74..04b3bba1bbf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/AbstractSkeletonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java index 90ed16311c1..5f2647b7a2b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BasePiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java index b83045d8ce6..43d78f4684d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/BlazeEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java index 71548d8f195..e507226815e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java index 69e0c6957c5..8890e72a974 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ElderGuardianEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java index f28bb793ef6..bb09a23f4ca 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java index 15e169a3ae7..590337556f4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EnderDragonPartEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java index 460a25f1452..0d52b7a3543 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/EndermanEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java index 15b5a26ef8a..f7b9d17b8f5 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GhastEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java index e5d3472e4bf..e98c8f120a7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GiantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java index 8ffae0297ae..92e50d207bc 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/GuardianEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java index e08b357d016..c0edc448cd7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/MonsterEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java index 58aa70bf160..915e34e79ba 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PhantomEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java index 73e65f561b9..25fe7f8025d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java index 616be0473af..27dd45f4028 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ShulkerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java index c84b1dda36f..da11b27594c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SkeletonEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java index ef131a8898d..03e2349110d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/SpiderEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java index 43715366f6d..56a0975ae0c 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/VexEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java index deb587cbae8..7a0c5e04032 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WardenEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java index b96f5e7c0b6..3abb7f12228 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/WitherEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java index feb9d528ac5..6e40573ba9e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZoglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java index 5acb8000b24..af6a30a10d4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index 6b105150ee4..fbac8663fe3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java index 6e3c4f6d575..0a0fe630692 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombifiedPiglinEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java index d56e6870546..90138742f89 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/AbstractIllagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java index 3d43466f16e..d2f8377d32b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/PillagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java index cf655ec20a2..05becf490f9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/RaidParticipantEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java index 59db7fbd2a4..f083437ae7e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/SpellcasterIllagerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java index 1c508ee8def..ad99dda5063 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/raid/VindicatorEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index f6cc4e996fe..e80418744e0 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java index ca0e08903c5..27942924295 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java index 24c51e9d41a..939e4721d9a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SkullPlayerEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java index f4051426b18..9593e327ebe 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java index 476de5ae368..85c36a13212 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventRegistrar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java index 5601493ea70..d33de8cdd79 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java index 3878dc496b0..e07a62d8a14 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCommandsEventImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java index 145692764ae..65fd7ea0d9e 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java index 3b2b8a5a63b..30d6ac8560f 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionClassLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java index e13e3a3f706..a26415a139b 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java index a168c05e038..716b763f5ac 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionDescription.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index 67003ae4fcd..7e998e41333 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java index fedac0c3814..fe23417f8dd 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLogger.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java index 789e4a5e5ea..5dd92430119 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java b/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java index 5f05c61bccd..4a7830c901d 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/extension/command/GeyserExtensionCommand.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java b/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java index 4c5b103279e..f56b254a6c5 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java +++ b/core/src/main/java/org/geysermc/geyser/extension/event/GeyserExtensionEventBus.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java index 111c13184e1..471aff8b248 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java index 331b15444e5..7644ada7326 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/BeaconContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java b/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java index dfe5af87091..eee351095a8 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/BedrockContainerSlot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java index 9d0310035ad..72f1088c343 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/CartographyContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Container.java index 332926cabc5..569802a5a23 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Container.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java index 5b4c4fe45ef..ac55aae60fe 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/EnchantingContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java index 201deecb34b..8dbc9b7224a 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java index 6c000fbd456..d34ee2cbb10 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index c05c1208f78..b159193e3d7 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index 91e850380d0..1dbde84f46b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java index 57935c92384..f5aa7b0d695 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/LecternContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java index 79e7f944c21..93c1917d28f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/MerchantContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index d73825551c3..7b1064c8ff3 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java b/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java index 41c055b2cbe..a4e20ce755b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/SlotType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java index 725c4f749e3..6e04e6741cc 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java index 61c178928cf..d7068920e2b 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/Click.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java index cd7b4ec5be2..bfe5a7d9d3a 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/click/ClickPlan.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java index c94805762c5..c81fe6598ba 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/BlockInventoryHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java index a00746b35fc..986df53dbdc 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/holder/InventoryHolder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java index 890dfa5e811..bcbfe3e1725 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java index 6bd57948e34..8d2b52aa2e9 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java index 018ec3460b4..c4137fba9e1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java index e1066c3b8a2..ddc44fbc484 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java index fbdf16e0ff9..641d5ad94cf 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java index 0341c97ae20..d61945ad8d7 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java index d4867547e59..6c7665bbbea 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java index e191ff1190b..04a772c31fd 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index 51f4b03889f..c9272410043 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java index 8f966b26b27..5d6214871c2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ChestInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java index 714271c5943..c9f313f2a63 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/ContainerInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java index e3dd6bb51e6..7441e66d0d5 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/HorseInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java index 52b91434dca..68ee334ba45 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/InventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java index 16224b8afef..a23385b53c2 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/UIInventoryUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java index 82b2ad30357..315a8cd4df7 100644 --- a/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java +++ b/core/src/main/java/org/geysermc/geyser/item/ArmorMaterial.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java index 9b09da0c803..3535eaf4d32 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java index a88939d0f91..cebad261e21 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java index ffc37bff652..08a8b387c2c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java index d1f68d9a128..569ab2300b3 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index bcdbff89aaa..e0e9a256b12 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java index 041cb73f5dd..efefee94621 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java index baaafd813c7..ee144acc614 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java b/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java index 7245e0ec12c..7ce488a512f 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/WearableSlot.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java index c6da6673625..5878f5cc78a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java +++ b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java index abf4a7d3f48..fc48c9f34ca 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArmorItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java index 89dba49eaef..9a93eeac870 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java b/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java index 61aa16fef44..0dbf0971ab2 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BlockItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java index 3469891510a..d1ed6f6b8e7 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java b/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java index 3a063388e84..32959037958 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/DyeItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java index 4a60743de2e..e5d94eb8b44 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ElytraItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java index deb43893689..963373523fb 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FilledMapItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java index b73f896218e..4c21be833b2 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index a46945ff2d2..af45959bff5 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java index c48b721b13e..cd63a379973 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java index 98686ce761b..338473fc560 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java index e3f0916f97f..fc28e1f503c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ShieldItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java b/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java index e484230b944..272e00408b3 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/SpawnEggItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java index e01aa67fa51..d998eb0d49c 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TieredItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java index 928f5cbadd1..f78836d16c4 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/TippedArrowItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java b/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java index 12793cd0e72..78c6b2c6a0b 100644 --- a/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java +++ b/core/src/main/java/org/geysermc/geyser/level/BedrockDimension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java index 00fe625e25f..9bb31799682 100644 --- a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java +++ b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java index 2cb1ccfbd4f..e005ab2d82b 100644 --- a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GameRule.java b/core/src/main/java/org/geysermc/geyser/level/GameRule.java index c7c4fbb8eb7..015f9c50c75 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GameRule.java +++ b/core/src/main/java/org/geysermc/geyser/level/GameRule.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java index a828b7bced7..fc3c86dd472 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java index a7e73f5aa4e..8d4b3f2e6ab 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java index d9954bb0a03..a3f6b55e4c2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java +++ b/core/src/main/java/org/geysermc/geyser/level/JavaDimension.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/MapColor.java b/core/src/main/java/org/geysermc/geyser/level/MapColor.java index 3439a4cf236..d84788db2f0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/MapColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/MapColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java index 4abedc7fbd3..5c0cbf6438c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/PaintingType.java +++ b/core/src/main/java/org/geysermc/geyser/level/PaintingType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java index 2f2738abf5b..006caff55f4 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java index 7ff8a7f1bbb..1d56946a86a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java index 14b31519f69..8024af65037 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 2fd411cf3b5..65a65a436d1 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 21d9931f859..6f6fb8097b0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java index c472178e5e9..882b8c9f722 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index 14a6a1e1e06..576bd9743a8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java b/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java index 3cfe33b35b6..8cf6d809196 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/BlockStorage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java index 068ca0600f4..ca8c4db1d1e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunk.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java index 44d1aebd80a..14a74fb9933 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java index 9d15181f9b4..776802cee0f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java index 65c3558d422..d95767b976a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java index 88693489d3c..54987d1d23d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/PaddedBitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java index 65f57a0c4c3..c1f8d6f4848 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/Pow2BitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java index 828ce182098..ce25ead9559 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/SingletonBitArray.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java b/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java index 68ed1f218ef..206c27a816f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Axis.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java b/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java index 0793e685d47..8343babd0ef 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/BoundingBox.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java index d2c9b09cee1..b983da8b4f2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java index 5cd3930a93c..fa5201db949 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java index fd4ebcbcc8e..a6b25d01ef0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java b/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java index fc3c18ea0fe..4328b987e0e 100644 --- a/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java +++ b/core/src/main/java/org/geysermc/geyser/network/CIDRMatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 4da420e28d8..e23299bfab5 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java index a1b6112a33b..002c236fbce 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java +++ b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 8bdc30a48fb..59b34af161e 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java index 81ee9ed7da5..74e1430a251 100644 --- a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index cabd18bd39d..f373cd25d37 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java index dcd0b5b3f40..26015a96f7e 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java b/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java index a8f6af52e40..67362c35eee 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/DefaultChannelPipelinePublic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java index ff9b38c4fea..f2ae7c68535 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserInjector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 8efba305f73..31a355011bc 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java index 0b267c31cd6..ac2b6898a71 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWithRemoteAddress.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java index 6bfb21f67b1..258fa69ebb0 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java index c5d372c9a12..bb8ca754f70 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalServerChannelWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java index fa91bcd0db6..551bc1deb38 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java index 55e2c4f1837..760bd4d025a 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java index e1ad19a1311..0c3abf86d75 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java +++ b/core/src/main/java/org/geysermc/geyser/pack/ResourcePackManifest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index 0fd0eea602b..1e9f296fc0a 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java index 5a115ce8e50..e3c72c1749b 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java index 1d73234f101..d444e554c81 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java index 0fdf9a00c55..d414b7fa83d 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java index d636999d359..fc4e3d02241 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java index 2847e506a97..124aea713ac 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index d28845707b7..be49d16ea59 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java index 135077fc55d..892f4a6dfe4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java index a46f1d7e987..98e8e1da2ff 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/MappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java index cce837c20ef..0acfeee9385 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/PacketTranslatorRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registries.java b/core/src/main/java/org/geysermc/geyser/registry/Registries.java index a23086f0370..534dda4c17a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registries.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registry.java b/core/src/main/java/org/geysermc/geyser/registry/Registry.java index 9a07b4feabc..afee87b0839 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java index 802b6fb5861..f108bf70389 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleMappedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java index 3d0bb7e7437..59855c1ab55 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/SimpleRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java index 0f735830866..cfed73d2476 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java index 16db0d70224..fdb1bde1115 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/AnnotatedRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java index 101aa339b7d..f7fb708fb30 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java index 11ac0cd7f80..f47273827ff 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BlockEntityRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java index 28628576692..69ad16743e4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java index 113df7aa9e4..9e1bbc6aa2f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java index c9dab0d5a0d..cbd992c544d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/EnchantmentRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java index e9aa8daa2d1..e6e6e0978ff 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/MultiResourceRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java index 1a72b14431d..fcdbfcab377 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java index 1647c4de86c..677806b3f47 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ParticleTypesRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java index 872b08f05a7..88d2ef29d0d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 8de5b4fb589..3fe71dd0684 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java index 023be83c837..5d916f74d3a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java index e9f17c5e082..62b6e473700 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/RegistryLoaders.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java index cd2aab3f074..c0600b878f3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundEventsRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java index 54c86c2008e..6703726eade 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java index f1d9a1fe42f..558864b3539 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundTranslatorRegistryLoader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index 61b54daf99e..039412957f2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java index 889237a655c..0d32463dc5e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index 009ee82852f..7b857e4b9bd 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java index 488e2ecd75e..2b4eb7c5dfb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java index 098cae28c02..30794879491 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index bddbd1ec49d..e76df2834d8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index d31a0affb9c..99262dab4cc 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 7a7c44ac16f..78ef74b3d24 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index f29cdf35a28..ec6b410596e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 3a4c350f3f4..c4815dd43a0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 3f44f900aed..9c17ca95216 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 173bbff8d8a..a7ece9d6a65 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java index 3fca52d267b..d055f7b2809 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/PacketRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java index ef66625e2b1..3e9e2c257ec 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java b/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java index 1f6b8849316..6cb220ce419 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java +++ b/core/src/main/java/org/geysermc/geyser/registry/provider/ProviderSupplier.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java index 30c00c50612..34cde0acf23 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 9c7ddd8b164..71f6d9cbb76 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 2099f880524..b23a607d3a1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java b/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java index 0ed55974220..970e128a439 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/EnchantmentData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java index 0fbe762c395..2fefc539bc5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserBedrockBlock.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java index 1dcb355502e..c8d83b0219e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserItemDefinition.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java index 250377b8011..f1cd762b503 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java index 1ed6e67cc00..4883b5ec109 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index 0b988b74efa..26202101de6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java index 93b2b5ecfc5..16ac5174984 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/NonVanillaItemRegistration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java index 7630c7b77b2..bf202ddb318 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/PaletteItem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java index 556928e4a79..f8aeb78ee76 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java index 91f594e8745..27b5e631d3d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/SoundMapping.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java index 59b89394764..688666c7316 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java index 957c4d90079..0a6623e9704 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Score.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java index 42148b3e059..5a70fddf5bc 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java index 6b61e73d764..fed3054b439 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java index b4dffea3d4c..e985ca803cb 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java b/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java index 0975c617e71..9120412d888 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/UpdateType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java index 31168f08059..40b68578319 100644 --- a/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/DownstreamSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index ab6fa2323d3..b066cfe835d 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java index d5fa7e75392..7e5982ab593 100644 --- a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java +++ b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java index ea3b25aaab2..ef462a3e35c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java index 551065dcc30..99b7ae3afa6 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/AuthData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java index 1c117840b9b..07dd3849185 100644 --- a/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java +++ b/core/src/main/java/org/geysermc/geyser/session/auth/BedrockClientData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java index 4b260b457c0..00b18629207 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java index cedabfc30bb..5cd112a5f5b 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java b/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java index 1dd5070d30a..7c0891a5c95 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BossBar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java index ce0c3f7763f..d2c1415a386 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/ChunkCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java index 9466d49dded..9dc89215a5f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java index 2585ad79015..a7693e516e5 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/EntityEffectCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java index b5352d0fae8..6ba6a1b7e22 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/FormCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java index 658a93f2fe1..41f73863e10 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java index e6b71af58f3..d0a5bc094c7 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PistonCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java index 6547eaab207..9e8597b0f54 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index b5fd3f0dc8f..d7ad11b4b3e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java index 87c27c83c6c..851b8c20e38 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TagCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java index 378c3ed5336..8d243d3faf2 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/TeleportCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java index 2a15f22ef89..d9b9d8a549f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java index 9121cd5d64a..dd166358ddc 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index f7db63c13ac..95a2dcb1ac6 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java index 48b38dea4e8..39de6c32a93 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FloodgateSkinUploader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java b/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java index c268c10ee18..999df09293b 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java +++ b/core/src/main/java/org/geysermc/geyser/skin/ProvidedSkins.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index 2922312ae5b..79f1816362e 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index cd4dbc5c358..4b700b71563 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java index f2baf1c3b69..18edc807953 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkullSkinManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java index 712b07c8dd6..69dbb558e05 100644 --- a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/ChatColor.java b/core/src/main/java/org/geysermc/geyser/text/ChatColor.java index bed4a2ae932..49178f0333f 100644 --- a/core/src/main/java/org/geysermc/geyser/text/ChatColor.java +++ b/core/src/main/java/org/geysermc/geyser/text/ChatColor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java index 8c03d9d79aa..41528c1e433 100644 --- a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java +++ b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java index fb056afe714..fdce1f879d1 100644 --- a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java index 62d24dfa1c6..340674119a1 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java index 430f72b3a0c..2140dcc88f2 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index fd77150ff85..fa048cecf35 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java index 33d9dd9fcd6..3310859d0d2 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java index d4c29223e9a..121e1b2b9d5 100644 --- a/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java +++ b/core/src/main/java/org/geysermc/geyser/text/TextDecoration.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java index bf0693bcb52..f7e39718b85 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java b/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java index 42499324e1d..6980968ab3c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/CollisionRemapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java index 567dd78add1..dcbad47585f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/DirtPathCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java index 6d06aed4a03..b47b187c4da 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/DoorCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java index 8b858c87c91..b2e2deceb53 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/OtherCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java index b7f029b1aa5..dfbd1c8b8b6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/ScaffoldingCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java index 3689ad06abd..fb83e357d4b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SnowCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java index c3891ccb34f..822202ff288 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SolidCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java index 4f2b8378898..7d4dfedc279 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java index fa0f4526f76..836c05711d3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/TrapdoorCollision.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java index 3f46e9e2270..dd53e4c5b9b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/entity/EntityMetadataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java index 9d4625ff116..ac6e9870e95 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AbstractBlockInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java index 7dcb184f22b..31a0b7b114d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/AnvilInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java index b5a650d7c9e..0f8fa4ca70b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BaseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java index c6187fa7504..db0702e1309 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BeaconInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java index acc7ffc4a30..a2c45384dbb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/BrewingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java index 4288238d926..95f227ed714 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CartographyInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java index 36bc80134eb..521db494a30 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CraftingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java index 559a10cbbe7..a1c928c6b0a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/EnchantingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java index 93b8fe864c9..369a8028206 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/Generic3X3InventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java index cf10b5f64d3..a32b97b706d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/GrindstoneInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java index fcba007d1b1..dab1ee97286 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/HopperInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index 376de90e220..e39e62c045b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java index 6178048d817..ec0d4534dcf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LecternInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java index 63857809e64..8fb98a284d1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/LoomInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java index c1a8756b7a5..e159827e886 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/MerchantInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java index 1132db72cd4..b9468ac4ff4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/PlayerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java index ddc949f56ec..b8bb2bee4c5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/ShulkerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java index e3b91d98025..243bb48c33a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/SmithingInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java index 68caf16a205..8380be63a1e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/StonecutterInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java index 0eeca064fad..070537b81ef 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/ChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java index fc663c0d5a1..572ddf3f275 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/DoubleChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java index b8e680eac79..d09e7e99080 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/chest/SingleChestInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java index 1d0c96ba07f..6cda03a198d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/AbstractFurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java index b4839887056..0b6e0c67458 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/BlastFurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java index d014d27a71c..95a79a93efe 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/FurnaceInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java index 2930d89cd33..2f87f3b1340 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/furnace/SmokerInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java index 185446cd785..538133e0e95 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/AbstractHorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java index 90aea95f79e..f1a5723c8f6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/ChestedHorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java index 63e80a0f6cf..72972fb3bb8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/DonkeyInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java index 90fa3d5f31b..84d7744d1cd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/HorseInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java index 8f49cfcf9fc..ca0f85938e7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/horse/LlamaInventoryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java index e8d6ee69a10..31491fc3d81 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/CustomItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 116e8cad920..76c6c260a8f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java index 2bfad23c474..a51e2307d3a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/NbtItemStackTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java index 6aa0e38289e..90ac1cc5ed7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/BiomeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java index 8ee37ada52f..f23433bbe62 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BannerBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java index 05fd2d5b83b..12b050236d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BeaconBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java index 06a188424af..58d36af5602 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java index 1364be6b665..c43dfe8bcd2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java index 07100f12182..3e320029bb1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java index b81dbf3097b..b89a2a5471b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java index a65706418b4..02dc12f7169 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CampfireBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java index 0126d3a3c92..9e743667fec 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/CommandBlockBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java index 2c6dc7473df..567d3a5e1a6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DoubleChestBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java index 2ac8c56c2bf..1a7958c628d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EmptyBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java index 8086f0ab05c..da992d0ad37 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/EndGatewayBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java index 5e0807e6067..074fff6ef80 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/FlowerPotBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java index 45ddb51836d..c8dcbc008b1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/JigsawBlockBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java index f7ac7bdf2d5..0e5b9e3dcc8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntity.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java index c5317ae40d4..a55fa8a6259 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/PistonBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java index a53c946176d..24088658390 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/RequiresBlockState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java index a7330f4c13a..db7b3073f59 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java index d2cbe4396fa..44f3b7362d1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SignBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index d400fbbf573..6eac6861f34 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java index ea389767d0a..d1af70d8d45 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java index 14b894a26d5..03c40c7964c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/LevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java index ec44f4cf3ac..22d5c953d4a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/PlaySoundEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java index 8daeae86072..d1695303d0f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundEventEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java index c323d1c0b8d..67d43e6a8c6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/event/SoundLevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java index fb688a2741d..d49cdd6d08d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/PacketTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java index 156756b6ce5..f9d5e7771d1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/Translator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java index bdab5ce1fa7..60ff187f5fc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockAnimateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java index 2a325251a05..a26bba61847 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java index 414fb443331..19d15c04d7f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java index adf510ea969..1d5c5828c40 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBookEditTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java index 1d4f5714dd1..42e9277d3ec 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandBlockUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java index 531c83fa963..bc04bf50ec2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockCommandRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java index 24fcb743bc3..62dd39b121b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockContainerCloseTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java index 67e69f5250f..b20f7a2dd5b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEmoteListTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java index 3d2a4032f11..f64ddeac66a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockEntityPickRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java index 22de29e4c6c..921f24c199f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockFilterTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index 994d516e94d..e63abb974f7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java index ebca80fcd1a..908599f5179 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java index 60f50c912a7..47cdf9b12f8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemStackRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java index b77dd91cc8d..d28aafcb982 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockLecternUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java index 0f8d8c00c24..3e885b63f8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMapInfoRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java index c5952193c06..d045a6c24de 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMobEquipmentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java index ed8fafbaa85..c35c6c00aaf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockMoveEntityAbsoluteTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java index 6d17d230a83..7e5643d4596 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockNetworkStackLatencyTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java index 9d726e61aab..278f51747cb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPacketViolationWarningTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java index 46e1ca49cde..03faca5f22e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPlayerInputTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java index bd8b088ff88..d1246a0b44b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockPositionTrackingDBClientRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java index 55733411aaa..00cd5e5fd58 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestAbilityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java index 52c4f5bc27d..79887e3d326 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRequestChunkRadiusTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java index 2eb444becc3..c89f7b6e0bb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockRespawnTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java index d9a213adf72..fb02d7e3e7b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java index e65f730fa7e..defe58a8e13 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockSetLocalPlayerAsInitializedTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java index 1b5461805b3..0aec2a5d9e0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockShowCreditsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java index c04995999ad..f696396ad65 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java index a76d46eb77d..f8b65bf9b84 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java index 40c2f6c2e21..1f06cb5e67f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java index d04d5c85a3c..f499cbe6404 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockEmoteTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java index ba3463c44e1..49ce28167f7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockInteractTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java index c906c5126c6..cae25e2a3d5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockMovePlayerTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java index 1c343b4a0b0..0d0ec47037e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockRiderJumpTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java index d03f62c98f4..70768af344c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerGameTypeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java index 2924e4304da..2b48801d802 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/world/BedrockLevelSoundEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java index 1d7906facc6..4f4c2e5494d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaAwardStatsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java index 312267b7290..30d6aa017d2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaBossEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java index a1b9cfb4358..970c49e23ed 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaChangeDifficultyTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java index f65027ddfa7..8b46b435040 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCommandsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java index 7f108910a9f..cf5cfa19874 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomPayloadTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java index 025c857649e..89df638986a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaCustomQueryTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java index e4ee9a471cd..96b0e3dbd23 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisconnectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java index c0c26bca8c1..2ad45fe521f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaDisguisedChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java index 770ee0bdb3e..7f8500ce4c3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaGameProfileTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java index 6dffabc60e0..41eb5062a69 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaKeepAliveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java index aa1bf1b69e4..0720963fb74 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index a787a0794b8..3d9f08ec7c4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java index 1560a030261..faff85fecbf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPingTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java index 92e7ad6ddf7..e06182b8d86 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaPlayerChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java index 36a6ea3e183..15ee2f8de5e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaRespawnTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java index 6ac1ff42b7e..e3386324463 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSelectAdvancementsTabTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java index d8fd834968c..03660b147a8 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaSystemChatTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java index deae660d181..e98e5c1ec6a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index e02ca776799..d58892ce554 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java index 3de8267d081..a899077f822 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateTagsTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java index 34cf89c4bb2..f82c33032a5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java index ca0a51ddd9e..50582974daa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaEntityEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java index 34db4ed76f0..2ad1503a8f0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosRotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java index d50ba30199e..cbb3cecc2bb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityPosTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java index 9c209f5a2ff..75d4c618910 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveEntityRotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java index 1325c0d1c81..bdb159633a6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaMoveVehicleTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java index 8efae71231f..65229f29d82 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveEntitiesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java index 2aa93e25147..52b771caa92 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRemoveMobEffectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java index e792c14fb50..65e529792c1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaRotateHeadTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java index 7fffc7ee220..54c14f7f083 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java index 368598834c1..720f0377953 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityLinkTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java index 27fc474bdcd..62e1d200e8d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEntityMotionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java index 6f013a5df4f..0c344bddc64 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetEquipmentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java index 34e68b74f39..724bce4b0d7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSetPassengersTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java index 082659d455e..68f310db4fa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaSoundEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java index 55a644052a7..3b93f0df8d0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java index 361e335baa7..9925bf4320a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTeleportEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java index de345d14d6c..a42f2d5dd87 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateAttributesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java index c3a46df06f5..a8629010090 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaUpdateMobEffectTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java index 685c4a1c84c..523d0fdc49d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaBlockChangedAckTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java index 6d51bce7aad..783f4e82495 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerAbilitiesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java index 6a7d3f137b6..4e8bd89b370 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java index 74bdda60f98..f5c4b139849 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoRemoveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java index 3f231554dff..e711a517ee9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerInfoUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java index 252cc45b560..7814a671903 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerLookAtTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java index 6b2cc40f64c..a2fc0c07c20 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerPositionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java index 3a08076075e..97a9e0aae6e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetCarriedItemTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java index 6562a6c363a..80dd08eaa11 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetExperienceTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java index 04d3170c950..decf910ca65 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaSetHealthTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java index 3b040635475..6d25500b01c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java index 1e0c161d324..2d5e8fb084b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddExperienceOrbTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java index 4c7ab627d75..20a5f821355 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddPlayerTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java index 1454a02478c..9f687f046d7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerCloseTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java index 6acb829a7ba..cfe1c404e26 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetContentTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java index 156b639def2..923b10a2683 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java index 0368338c194..4806de09cb6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaContainerSetSlotTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java index ad1069002b3..02da421d570 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaHorseScreenOpenTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java index f4cd52deb4a..d4cb46a1cb1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaMerchantOffersTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java index a179eeb02ea..8730d5ac1c1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java index cf8c15c927e..fc5d69443cd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index 43a5e120b59..0705b89c453 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index fc1187340c7..e4b278c48eb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java index c0faeda4710..6a8a2a5bac2 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java index 2e772f15e38..4249be6fce0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaCooldownTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java index a583149422d..919e3f59627 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaExplodeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java index fe378288431..4cc0af6e75a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaForgetLevelChunkTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java index 593783a9959..413e9879920 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaGameEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index f823a928dd3..3315ece1551 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index 1194c591c7f..dff7ae74237 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java index 4a4bce84de4..6adb053d757 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java index c11c89d2110..34fbf2d9c62 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaMapItemDataTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java index 0a1eed64993..abc9a6c2136 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSectionBlocksUpdateTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java index 50f3c42a2b3..baec29d47f5 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheCenterTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java index 3fadcaf7d8f..3a0a77cc0ed 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetChunkCacheRadiusTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java index 8986172e0cb..9662fdd819b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetDefaultSpawnPositionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java index 9de9bd988ad..f45d4bb9713 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSetTimeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java index 51e069fecfc..ceb2d989d72 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaSoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java index 36f301ace21..7320b7637bb 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaStopSoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java index 6c6b5e629cb..85799717019 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaInitializeBorderTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java index 1ffbe66e28b..ebcef08a7cd 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderCenterTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java index f2871636856..a41c90f0438 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderLerpSizeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java index 7883c467054..51cd17278c4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderSizeTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java index a93911398e5..912ca9a09c1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDelayTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java index 7013df8ae79..14badb5657e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/border/JavaSetBorderWarningDistanceTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java index 0e6e071a748..74f063e444e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetDisplayObjectiveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java index 269209a6106..3b009a2a526 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java index e688dd12ccd..f942b6f0991 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetPlayerTeamTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java index 8baddaad756..19f9f7f18b6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java index 4d32a5f004e..968845e9207 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaClearTitlesTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java index 8188f3c4303..c2dfc85ff0e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetActionBarTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java index 55c5d04532b..ba0407dcb81 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetSubtitleTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java index a93e7df1398..1aa789ad43d 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitleTextTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java index 7f2facfc481..4299a059693 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/title/JavaSetTitlesAnimationTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java index f9ec5afcd99..ef6be0e9d57 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/BlockSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java index 0659eab423c..1d4209a5b0e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java index d2012c2b7f6..0146c534e04 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java index ebeda446e02..7a5e86af77c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/BucketSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java index 02fe6f23fa6..45007836253 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java index 7b9f0fc392d..107807fe0ba 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java index 1077f2538e5..a822f3520d9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/FlintAndSteelInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java index 9125ede810d..0a91f889641 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/GrassPathInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java index 9a908f039d7..410422b4a2e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/HoeInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java index 738a9fdbbd5..08a8792e873 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java index 84a3119f16c..dd069c5f50a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java index c068fa73c0a..299e63e0e1e 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AssetUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java index f8af404c731..2958de436a4 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java index 142b399105b..9964ed08ba7 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java index 787e72ecc20..4f0eccfcba7 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 44de2a2d542..a60461ec7b5 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java index 8e1912feafe..c00e389fd21 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java index c8e671d9c51..622722e5aa2 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java index eb9f40fd183..d5c81921660 100644 --- a/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/DimensionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index 5cf99ead98f..a6e0720b6be 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java index ddf9c4df4a7..e6c7b41fa7c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java b/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java index 45bb7bcc6fc..fd13dd74331 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractionResult.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java index 7af4313320d..9607ac61e74 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java +++ b/core/src/main/java/org/geysermc/geyser/util/InteractiveTag.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index 78c2aa7a5da..457993ac224 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java index cde0004f845..c528de74189 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java index bd639131c20..f0b8ee6bc2a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java index fad7df95c5e..dd523df5a79 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoginEncryptionUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java b/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java index 766f3aec6bf..bb92e6cd163 100644 --- a/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/LoopbackUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index 329f7b40d67..d0675fa640d 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/Metrics.java b/core/src/main/java/org/geysermc/geyser/util/Metrics.java index f9a03926765..e88d5a97113 100644 --- a/core/src/main/java/org/geysermc/geyser/util/Metrics.java +++ b/core/src/main/java/org/geysermc/geyser/util/Metrics.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java index 0ab1541f886..71e7c99c12a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java +++ b/core/src/main/java/org/geysermc/geyser/util/NewsHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java b/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java index 6450a15e65a..032dd2af785 100644 --- a/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/PluginMessageUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java index 74dc473fadb..5957fb9d98f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java index 24c1b6e1721..82030b8f55c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java index 016ea013550..44b9052096f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java b/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java index 71ce5f83cd1..d46a759fe42 100644 --- a/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java +++ b/core/src/main/java/org/geysermc/geyser/util/StatisticFormatters.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java b/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java index e614f4c2606..aa174497b34 100644 --- a/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/StatisticsUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java index 88b6772e4fd..c0fd10232c3 100644 --- a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java index f4bd4646d85..e4a98b3fc7b 100644 --- a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java index 505eca9c49e..832a7bcae01 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java index 05855092c70..ee37d612fbd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java index 551dca11c8a..f5bd89d6417 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java index 0eff859fd72..bafb2924c72 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java index da0f0879728..e17a38877d6 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java b/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java index 947f9756c53..bce8fe0c8b9 100644 --- a/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java +++ b/core/src/test/java/org/geysermc/geyser/network/translators/chat/MessageTranslatorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java b/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java index 1eb7e0d26cf..10f265a41cd 100644 --- a/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java +++ b/core/src/test/java/org/geysermc/geyser/translator/inventory/item/CustomItemsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal diff --git a/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java b/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java index 877e22054b6..639c79331a1 100644 --- a/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java +++ b/core/src/test/java/org/geysermc/geyser/util/collection/GeyserCollectionsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal From 58d9a9f48e7e05bf5148c1557d653e084ee22294 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 00:43:25 -0700 Subject: [PATCH 092/134] Account for collisions in chunk section y0 layer Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../JavaLevelChunkWithLightTranslator.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 3315ece1551..e6e1d10cd55 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -43,6 +43,8 @@ import it.unimi.dsi.fastutil.ints.IntImmutableList; import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntLists; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import it.unimi.dsi.fastutil.ints.IntSet; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NBTOutputStream; @@ -174,6 +176,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } } sections[bedrockSectionY] = section; + extendedCollisionNextSection = thisExtendedCollisionNextSection; continue; } @@ -240,8 +243,13 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } } - // We need to ensure we use enough bits to represent extended collision blocks in the palette - int bedrockDataBits = Integer.SIZE - Integer.numberOfLeadingZeros(javaPalette.size() + extendedCollisionsInPalette); + // We need to ensure we use enough bits to represent extended collision blocks in the chunk section + int sectionCollisionBlocks = 0; + if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + int bottomLayerCollisions = extendedCollision ? EXTENDED_COLLISIONS_STORAGE.get().bottomLayerCollisions() : 0; + sectionCollisionBlocks = bottomLayerCollisions + extendedCollisionsInPalette; + } + int bedrockDataBits = Integer.SIZE - Integer.numberOfLeadingZeros(javaPalette.size() + sectionCollisionBlocks); BitArray bedrockData = BitArrayVersion.forBitsCeil(bedrockDataBits).createArray(BlockStorage.SIZE); BlockStorage layer0 = new BlockStorage(bedrockData, bedrockPalette); BlockStorage[] layers; @@ -502,6 +510,20 @@ public void set(int index, int value) { data[index] = value; } + public int bottomLayerCollisions() { + if (data == null) { + return 0; + } + + IntSet uniqueNonZeroSet = new IntOpenHashSet(); + for (int i = 0; i < BlockStorage.SIZE / 16; i++) { + if (data[i] != 0) { + uniqueNonZeroSet.add(data[i]); + } + } + return uniqueNonZeroSet.size(); + } + private void ensureDataExists() { if (data == null) { data = new int[BlockStorage.SIZE]; From 4d12d0f7ad8991b9ac999fe1a73b34295441ed00 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 22:14:56 -0700 Subject: [PATCH 093/134] Fix extended collision @ air section bottom Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../JavaLevelChunkWithLightTranslator.java | 103 ++++++++++++------ 1 file changed, 69 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index e6e1d10cd55..15cfde0e2da 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -87,6 +87,8 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4)); if (bedrockSectionY < 0 || maxBedrockSectionY < bedrockSectionY) { // Ignore this chunk section since it goes outside the bounds accepted by the Bedrock client + if (USE_EXTENDED_COLLISIONS) { + EXTENDED_COLLISIONS_STORAGE.get().clear(); + } + extendedCollisionNextSection = false; continue; } // No need to encode an empty section... if (javaSection.isBlockCountEmpty()) { + // Unless we need to send extended collisions + if (USE_EXTENDED_COLLISIONS) { + if (extendedCollision) { + int blocks = EXTENDED_COLLISIONS_STORAGE.get().bottomLayerCollisions() + 1; + BitArray bedrockData = BitArrayVersion.forBitsCeil(Integer.SIZE - Integer.numberOfLeadingZeros(blocks)).createArray(BlockStorage.SIZE); + BlockStorage layer0 = new BlockStorage(bedrockData, new IntArrayList(blocks)); + + layer0.idFor(session.getBlockMappings().getBedrockAir().getRuntimeId()); + for (int yzx = 0; yzx < BlockStorage.SIZE / 16; yzx++) { + if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { + bedrockData.set(indexYZXtoXZY(yzx), layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); + } + } + + BlockStorage[] layers = new BlockStorage[]{ layer0 }; + sections[bedrockSectionY] = new GeyserChunkSection(layers); + } + EXTENDED_COLLISIONS_STORAGE.get().clear(); + extendedCollisionNextSection = false; + } continue; } @@ -152,7 +179,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } // Extended collision blocks - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + if (USE_EXTENDED_COLLISIONS) { if (javaId == BlockStateValues.JAVA_AIR_ID && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx)); EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); @@ -160,7 +187,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(javaId); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -192,6 +219,10 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } else { sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage}); } + if (USE_EXTENDED_COLLISIONS) { + EXTENDED_COLLISIONS_STORAGE.get().clear(); + extendedCollisionNextSection = false; + } // If a chunk contains all of the same piston or flower pot then god help us continue; } @@ -215,7 +246,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke airPaletteId = i; } - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + if (USE_EXTENDED_COLLISIONS) { if (session.getBlockMappings().getExtendedCollisionBoxes().get(javaId) != null) { extendedCollision = true; extendedCollisionsInPalette++; @@ -245,7 +276,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // We need to ensure we use enough bits to represent extended collision blocks in the chunk section int sectionCollisionBlocks = 0; - if (!session.getBlockMappings().getExtendedCollisionBoxes().isEmpty()) { + if (USE_EXTENDED_COLLISIONS) { int bottomLayerCollisions = extendedCollision ? EXTENDED_COLLISIONS_STORAGE.get().bottomLayerCollisions() : 0; sectionCollisionBlocks = bottomLayerCollisions + extendedCollisionsInPalette; } @@ -299,7 +330,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings() .getExtendedCollisionBoxes().get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -326,7 +357,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes() .get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set(((yzx & 0x0ff) | (((yzx >> 8) + ((xzy & 0xF) < 15 ? 1 : -15)) << 8)), aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -493,40 +524,44 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } } } -} -class ExtendedCollisionsStorage { - private int[] data; - - public int get(int index) { - if (data == null) { - return 0; + static final class ExtendedCollisionsStorage { + private int[] data; + + int get(int index) { + if (data == null) { + return 0; + } + return data[index]; } - return data[index]; - } - - public void set(int index, int value) { - ensureDataExists(); - data[index] = value; - } - - public int bottomLayerCollisions() { - if (data == null) { - return 0; + + void set(int index, int value) { + ensureDataExists(); + data[index] = value; } - IntSet uniqueNonZeroSet = new IntOpenHashSet(); - for (int i = 0; i < BlockStorage.SIZE / 16; i++) { - if (data[i] != 0) { - uniqueNonZeroSet.add(data[i]); + void clear() { + data = null; + } + + int bottomLayerCollisions() { + if (data == null) { + return 0; } + + IntSet uniqueNonZeroSet = new IntOpenHashSet(); + for (int i = 0; i < BlockStorage.SIZE / 16; i++) { + if (data[i] != 0) { + uniqueNonZeroSet.add(data[i]); + } + } + return uniqueNonZeroSet.size(); } - return uniqueNonZeroSet.size(); - } - - private void ensureDataExists() { - if (data == null) { - data = new int[BlockStorage.SIZE]; + + private void ensureDataExists() { + if (data == null) { + data = new int[BlockStorage.SIZE]; + } } } } From f19e16f42a1f8493568c6e41a0195aa73ae66e49 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 22:24:54 -0700 Subject: [PATCH 094/134] Address @davchoo's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../custom/component/PlacementConditions.java | 16 +++++-------- .../populator/BlockRegistryPopulator.java | 1 - .../CustomBlockRegistryPopulator.java | 23 ++++++++----------- 3 files changed, 16 insertions(+), 24 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index 3b102987aeb..519b7b818b9 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -35,16 +35,12 @@ */ public record PlacementConditions(@NonNull Set allowedFaces, @NonNull LinkedHashMap blockFilters) { public enum Face { - DOWN(1), - UP(2), - NORTH(4), - SOUTH(8), - WEST(16), - EAST(32); - - Face(int value) { - value = (byte) value; - } + DOWN, + UP, + NORTH, + SOUTH, + WEST, + EAST; } public enum BlockFilterType { BLOCK, diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 78ef74b3d24..3b44be5f8ae 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -191,7 +191,6 @@ private static void registerBedrockBlocks() { Int2ObjectMap extendedCollisionBoxes = new Int2ObjectOpenHashMap<>(); if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { customBlockStateDefinitions = new Object2ObjectOpenHashMap<>(customExtBlockStates.size()); - //Map extendedCollisionBoxes = new HashMap<>(); for (int i = 0; i < customExtBlockStates.size(); i++) { NbtMap tag = customBlockStates.get(i); CustomBlockState blockState = customExtBlockStates.get(i); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 942990b9dcc..e6ab0767964 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -7,6 +7,7 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; +import org.cloudburstmc.protocol.bedrock.codec.v582.Bedrock_v582; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -95,7 +96,6 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom Map> extendedCollisionBoxes = new HashMap<>(); Map extendedCollisionBoxSet = new HashMap<>(); - int[] extendedCollisionIndex = {0}; MappingsConfigReader mappingsConfigReader = new MappingsConfigReader(); mappingsConfigReader.loadBlockMappingsFromJson((key, block) -> { customBlocks.add(block.data()); @@ -107,17 +107,13 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom blockStateOverrides.put(id, customBlockState.state()); BoxComponent extendedCollisionBox = customBlockState.extendedCollisionBox(); if (extendedCollisionBox != null) { - CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.getOrDefault(extendedCollisionBox, null); - if (extendedCollisionBlock == null) { - extendedCollisionBlock = createExtendedCollisionBlock(extendedCollisionBox, extendedCollisionIndex[0]++); - extendedCollisionBoxes.computeIfAbsent(extendedCollisionBlock, k -> new HashSet<>()).add(id); - customBlocks.add(extendedCollisionBlock); - extendedCollisionBoxSet.put(extendedCollisionBox, extendedCollisionBlock); - } else { - Set existingJavaIds = extendedCollisionBoxes.getOrDefault(extendedCollisionBlock, new HashSet<>()); - existingJavaIds.add(id); - extendedCollisionBoxes.put(extendedCollisionBlock, existingJavaIds); - } + CustomBlockData extendedCollisionBlock = extendedCollisionBoxSet.computeIfAbsent(extendedCollisionBox, box -> { + CustomBlockData collisionBlock = createExtendedCollisionBlock(box, extendedCollisionBoxSet.size()); + customBlocks.add(collisionBlock); + return collisionBlock; + }); + extendedCollisionBoxes.computeIfAbsent(extendedCollisionBlock, k -> new HashSet<>()) + .add(id); } }); }); @@ -287,7 +283,8 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putByte("lightLevel", components.lightDampening().byteValue()) .build()); } - if (components.transformation() != null) { + // TODO: remove this protocol check when 1.19.80 becomes required w/ Java 1.20 + if (components.transformation() != null && protocolVersion >= Bedrock_v582.CODEC.getProtocolVersion()) { builder.putCompound("minecraft:transformation", NbtMap.builder() .putInt("RX", MathUtils.unwrapDegreesToInt(components.transformation().rx()) / 90) .putInt("RY", MathUtils.unwrapDegreesToInt(components.transformation().ry()) / 90) From a7f017711d159e0fd34e9f66d0ca3df3e7de4918 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 23:07:14 -0700 Subject: [PATCH 095/134] Address @rtm516's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../block/custom/CustomBlockPermutation.java | 10 ++++++++- .../block/custom/component/BoxComponent.java | 22 +++++++++++++++++-- .../component/TransformationComponent.java | 12 +++++++++- .../level/block/GeyserCustomBlockData.java | 1 - .../block/GeyserCustomBlockProperty.java | 5 +++++ .../util/CustomBlockComponentsMapping.java | 4 ++++ .../util/CustomBlockStateMapping.java | 4 ++++ .../mappings/versions/MappingsReader_v1.java | 2 +- .../populator/BlockRegistryPopulator.java | 6 +++++ .../CustomBlockRegistryPopulator.java | 2 +- .../org/geysermc/geyser/util/FileUtils.java | 1 + .../org/geysermc/geyser/util/MathUtils.java | 6 +++++ 12 files changed, 68 insertions(+), 7 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index 0d52a2a9ea3..dc71db61fb7 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -32,5 +32,13 @@ * This class is used to store a custom block permutations, which contain custom * block components mapped to a Molang query that should return true or false */ -public record CustomBlockPermutation(@NonNull CustomBlockComponents components, @NonNull String condition) { +public record CustomBlockPermutation( + /** + * The custom block components that should be applied when the permutation is active + */ + @NonNull CustomBlockComponents components, + /** + * The Molang query that should return true or false to determine if the permutation is active + */ + @NonNull String condition) { } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 5da8e422a9e..e9e23b91ef2 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -31,8 +31,26 @@ */ public record BoxComponent(float originX, float originY, float originZ, float sizeX, float sizeY, float sizeZ) { - public static final BoxComponent FULL_BLOCK = new BoxComponent(-8, 0, -8, 16, 16, 16); - public static final BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); + private static BoxComponent FULL_BOX = new BoxComponent(-8, 0, -8, 16, 16, 16); + private static BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); + + /** + * Gets a full box component + * + * @return A full box component + */ + public static BoxComponent fullBox() { + return FULL_BOX; + } + + /** + * Gets an empty box component + * + * @return An empty box component + */ + public static BoxComponent emptyBox() { + return EMPTY_BOX; + } /** * Gets if the box component is empty diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java index 5f4f08b5154..642dc89cc4d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java @@ -28,7 +28,17 @@ /** * This class is used to store the transformation component of a block */ -public record TransformationComponent(int rx, int ry, int rz, float sx, float sy, float sz, float tx, float ty, float tz) { +public record TransformationComponent( + /** The rotation on the x axis */ int rx, + /** The rotation on the y axis */ int ry, + /** The rotation on the z axis */ int rz, + /** The scale on the x axis */ float sx, + /** The scale on the y axis */ float sy, + /** The scale on the z axis */ float sz, + /** The translation on the x axis */ float tx, + /** The translation on the y axis */ float ty, + /** The translation on the z axis */ float tz) { + /** * Constructs a new TransformationComponent with the rotation values and assumes default scale and translation * diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 6f6fb8097b0..e32061bd193 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -43,7 +43,6 @@ @Value public class GeyserCustomBlockData implements CustomBlockData { - String name; CustomBlockComponents components; Map> properties; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java index 882b8c9f722..0ef35a7fb72 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -31,6 +31,11 @@ import java.util.List; +/** + * A custom block property that can be used to store custom data for a block. + * + * @param The type of the property + */ public record GeyserCustomBlockProperty(@NonNull String name, @NonNull List values, @NonNull PropertyType type) implements CustomBlockProperty { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java index 0d32463dc5e..34bb4f08eac 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java @@ -29,5 +29,9 @@ import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +/** + * This class is used to store a custom block components mapping, which contains custom + * block components and a potenially null extended collision box + */ public record CustomBlockComponentsMapping(@NonNull CustomBlockComponents components, BoxComponent extendedCollisionBox) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java index 30794879491..12990b3bf4e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java @@ -29,5 +29,9 @@ import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.BoxComponent; +/** + * This class is used to store a custom block state mapping, which contains custom + * block states and a potenially null extended collision box + */ public record CustomBlockStateMapping(@NonNull CustomBlockState state, BoxComponent extendedCollisionBox) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 99262dab4cc..0db15e768c1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -456,7 +456,7 @@ private BoxComponent createBoxComponent(int javaId, float heightTranslation) { // Some blocks (e.g. plants) have no collision box BlockCollision blockCollision = BlockUtils.getCollision(javaId); if (blockCollision == null) { - return BoxComponent.EMPTY_BOX; + return BoxComponent.emptyBox(); } Set bottomCornerXs = new ObjectOpenHashSet<>(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 3b44be5f8ae..8ddf852c8a6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -530,6 +530,12 @@ private static NbtMap buildBedrockState(JsonNode node, int blockStateVersion, Bi private static final long FNV1_64_OFFSET_BASIS = 0xcbf29ce484222325L; private static final long FNV1_64_PRIME = 1099511628211L; + /** + * Hashes a string using the FNV-1a 64-bit algorithm. + * + * @param str The string to hash + * @return The hashed string + */ private static long fnv164(String str) { long hash = FNV1_64_OFFSET_BASIS; for (byte b : str.getBytes(StandardCharsets.UTF_8)) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index e6ab0767964..63b413a2671 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -368,7 +368,7 @@ private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComp .components( new CustomBlockComponentsBuilder() .collisionBox(boxComponent) - .selectionBox(BoxComponent.EMPTY_BOX) + .selectionBox(BoxComponent.emptyBox()) .materialInstance("*", new MaterialInstance("glass", "alpha_test", false, false)) .lightDampening(0) .geometry("geometry.invisible") diff --git a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java index e6c7b41fa7c..d6171092878 100644 --- a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java @@ -190,6 +190,7 @@ public static byte[] readAllBytes(String resource) { /** * @param resource the internal resource to read off from + * * @return the contents decoded as a UTF-8 String */ public static String readToString(String resource) { diff --git a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java index d0675fa640d..353e8a491cd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/MathUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/MathUtils.java @@ -30,6 +30,7 @@ public class MathUtils { /** * Wrap the given float degrees to be between -180.0 and 180.0. + * * @param degrees The degrees value to wrap * @return The wrapped degrees value between -180.0 and 180.0 */ @@ -45,6 +46,7 @@ public static float wrapDegrees(float degrees) { /** * Wrap the given double degrees to be between -180.0 and 180.0. + * * @param degrees The degrees value to wrap * @return The wrapped degrees value between -180.0 and 180.0 */ @@ -54,6 +56,7 @@ public static float wrapDegrees(double degrees) { /** * Wrap the given degrees to be between -180 and 180 as an integer. + * * @param degrees The degrees value to wrap * @return The wrapped degrees value between -180 and 180 as an integer */ @@ -63,6 +66,7 @@ public static int wrapDegreesToInt(float degrees) { /** * Unwrap the given float degrees to be between 0.0 and 360.0. + * * @param degrees The degrees value to unwrap * @return The unwrapped degrees value between 0.0 and 360.0 */ @@ -72,6 +76,7 @@ public static float unwrapDegrees(float degrees) { /** * Unwrap the given double degrees to be between 0.0 and 360.0. + * * @param degrees The degrees value to unwrap * @return The unwrapped degrees value between 0.0 and 360.0 */ @@ -81,6 +86,7 @@ public static float unwrapDegrees(double degrees) { /** * Unwrap the given degrees to be between 0 and 360 as an integer. + * * @param degrees The degrees value to unwrap * @return The unwrapped degrees value between 0 and 360 as an integer */ From 1c0ac39bf7054e69bc072b663fcf1d2b9105d296 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 23:11:26 -0700 Subject: [PATCH 096/134] More @rtm516's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../mappings/util/CustomBlockStateBuilderMapping.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java index 2b4eb7c5dfb..dab707cf540 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java @@ -31,5 +31,9 @@ import java.util.function.Function; +/** + * This class is used to store a custom block state builder mapping, which contains custom + * block state builders and a potenially null extended collision box + */ public record CustomBlockStateBuilderMapping(@NonNull Function builder, BoxComponent extendedCollisionBox) { } From 350efecab583e51c1e053273f08d7c8ec1e6e38e Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 19 May 2023 23:42:05 -0700 Subject: [PATCH 097/134] Address @Camotoy's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../api/block/custom/CustomBlockState.java | 2 +- .../custom/component/PlacementConditions.java | 1 + .../block/custom/property/PropertyType.java | 33 +++++++++++++++++-- .../level/block/GeyserCustomBlockData.java | 8 ++--- .../CustomBlockRegistryPopulator.java | 6 ++-- 5 files changed, 39 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 2316f178d61..44ed2997020 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -52,7 +52,7 @@ public interface CustomBlockState { * Gets the given property for the state * * @param propertyName the property name - * @return The java identifier for this item. + * @return the boolean, int, or string property. */ @NonNull T property(String propertyName); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index 519b7b818b9..fa8fe327345 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -42,6 +42,7 @@ public enum Face { WEST, EAST; } + public enum BlockFilterType { BLOCK, TAG diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 6b6d70e5752..27dfd768964 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -31,9 +31,36 @@ * This class is used to define a custom block property's type. */ public class PropertyType { - public static final PropertyType BOOLEAN = new PropertyType(Boolean.class); - public static final PropertyType INTEGER = new PropertyType(Integer.class); - public static final PropertyType STRING = new PropertyType(String.class); + private static PropertyType BOOLEAN = new PropertyType(Boolean.class); + private static PropertyType INTEGER = new PropertyType(Integer.class); + private static PropertyType STRING = new PropertyType(String.class); + + /** + * Gets the property type for a boolean. + * + * @return The property type for a boolean. + */ + public static PropertyType booleanProp() { + return BOOLEAN; + } + + /** + * Gets the property type for an integer. + * + * @return The property type for an integer. + */ + public static PropertyType integerProp() { + return INTEGER; + } + + /** + * Gets the property type for a string. + * + * @return The property type for a string. + */ + public static PropertyType stringProp() { + return STRING; + } @NonNull private final Class typeClass; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index e32061bd193..6e00c399eb4 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -80,7 +80,7 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { } if (!builder.permutations.isEmpty()) { - this.permutations = ObjectLists.unmodifiable(new ObjectArrayList<>(builder.permutations)); + this.permutations = List.of(builder.permutations.toArray(new CustomBlockPermutation[0])); } else { this.permutations = ObjectLists.emptyList(); } @@ -141,19 +141,19 @@ public Builder components(@NonNull CustomBlockComponents components) { @Override public Builder booleanProperty(@NonNull String propertyName) { - this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, List.of((byte) 0, (byte) 1), PropertyType.BOOLEAN)); + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, List.of((byte) 0, (byte) 1), PropertyType.booleanProp())); return this; } @Override public Builder intProperty(@NonNull String propertyName, List values) { - this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.INTEGER)); + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.integerProp())); return this; } @Override public Builder stringProperty(@NonNull String propertyName, List values) { - this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.STRING)); + this.properties.put(propertyName, new GeyserCustomBlockProperty<>(propertyName, values, PropertyType.stringProp())); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 63b413a2671..fd0b81f5354 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -184,11 +184,11 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, for (CustomBlockProperty property : customBlock.properties().values()) { NbtMapBuilder propertyBuilder = NbtMap.builder() .putString("name", property.name()); - if (property.type() == PropertyType.BOOLEAN) { + if (property.type() == PropertyType.booleanProp()) { propertyBuilder.putList("enum", NbtType.BYTE, List.of((byte) 0, (byte) 1)); - } else if (property.type() == PropertyType.INTEGER) { + } else if (property.type() == PropertyType.integerProp()) { propertyBuilder.putList("enum", NbtType.INT, (List) property.values()); - } else if (property.type() == PropertyType.STRING) { + } else if (property.type() == PropertyType.stringProp()) { propertyBuilder.putList("enum", NbtType.STRING, (List) property.values()); } properties.add(propertyBuilder.build()); From 7e08b6f6ee12ac7a33242d70f3cae98e93967ebf Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 20 May 2023 11:32:24 -0700 Subject: [PATCH 098/134] Update javadocs Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../block/custom/CustomBlockPermutation.java | 13 ++++-------- .../block/custom/component/BoxComponent.java | 10 +++++++-- .../custom/component/MaterialInstance.java | 5 +++++ .../custom/component/PlacementConditions.java | 5 ++++- .../component/TransformationComponent.java | 21 ++++++++++--------- .../block/GeyserCustomBlockProperty.java | 3 +++ .../util/CustomBlockComponentsMapping.java | 3 +++ .../mappings/util/CustomBlockMapping.java | 5 +++++ .../util/CustomBlockStateBuilderMapping.java | 3 +++ .../util/CustomBlockStateMapping.java | 3 +++ 10 files changed, 49 insertions(+), 22 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java index dc71db61fb7..fca39b533e5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockPermutation.java @@ -31,14 +31,9 @@ /** * This class is used to store a custom block permutations, which contain custom * block components mapped to a Molang query that should return true or false + * + * @param components The components of the block + * @param condition The Molang query that should return true or false */ -public record CustomBlockPermutation( - /** - * The custom block components that should be applied when the permutation is active - */ - @NonNull CustomBlockComponents components, - /** - * The Molang query that should return true or false to determine if the permutation is active - */ - @NonNull String condition) { +public record CustomBlockPermutation(@NonNull CustomBlockComponents components, @NonNull String condition) { } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index e9e23b91ef2..23ad627e705 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -28,9 +28,15 @@ /** * This class is used to store a box component for the selection and * collision boxes of a custom block. + * + * @param originX The origin X of the box + * @param originY The origin Y of the box + * @param originZ The origin Z of the box + * @param sizeX The size X of the box + * @param sizeY The size Y of the box + * @param sizeZ The size Z of the box */ -public record BoxComponent(float originX, float originY, float originZ, - float sizeX, float sizeY, float sizeZ) { +public record BoxComponent(float originX, float originY, float originZ, float sizeX, float sizeY, float sizeZ) { private static BoxComponent FULL_BOX = new BoxComponent(-8, 0, -8, 16, 16, 16); private static BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index a14bb2ceffc..bed877ae896 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -29,6 +29,11 @@ /** * This class is used to store a material instance for a custom block. + * + * @param texture The texture of the block + * @param renderMethod The render method of the block + * @param faceDimming Whether the block should be dimmed on certain faces + * @param ambientOcclusion Whether the block should have ambient occlusion */ public record MaterialInstance(@NonNull String texture, @NonNull String renderMethod, boolean faceDimming, boolean ambientOcclusion) { } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index fa8fe327345..d06d9a9675d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -30,8 +30,11 @@ import org.checkerframework.checker.nullness.qual.NonNull; -/* +/** * This class is used to store conditions for a placement filter for a custom block. + * + * @param allowedFaces The faces that the block can be placed on + * @param blockFilters The block filters that control what blocks the block can be placed on */ public record PlacementConditions(@NonNull Set allowedFaces, @NonNull LinkedHashMap blockFilters) { public enum Face { diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java index 642dc89cc4d..d52565e22ce 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/TransformationComponent.java @@ -27,17 +27,18 @@ /** * This class is used to store the transformation component of a block + * + * @param rx The rotation on the x axis + * @param ry The rotation on the y axis + * @param rz The rotation on the z axis + * @param sx The scale on the x axis + * @param sy The scale on the y axis + * @param sz The scale on the z axis + * @param tx The translation on the x axis + * @param ty The translation on the y axis + * @param tz The translation on the z axis */ -public record TransformationComponent( - /** The rotation on the x axis */ int rx, - /** The rotation on the y axis */ int ry, - /** The rotation on the z axis */ int rz, - /** The scale on the x axis */ float sx, - /** The scale on the y axis */ float sy, - /** The scale on the z axis */ float sz, - /** The translation on the x axis */ float tx, - /** The translation on the y axis */ float ty, - /** The translation on the z axis */ float tz) { +public record TransformationComponent(int rx, int ry, int rz, float sx, float sy, float sz, float tx, float ty, float tz) { /** * Constructs a new TransformationComponent with the rotation values and assumes default scale and translation diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java index 0ef35a7fb72..139df1fcdaf 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockProperty.java @@ -35,6 +35,9 @@ * A custom block property that can be used to store custom data for a block. * * @param The type of the property + * @param name The name of the property + * @param values The values of the property + * @param type The type of the property */ public record GeyserCustomBlockProperty(@NonNull String name, @NonNull List values, @NonNull PropertyType type) implements CustomBlockProperty { diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java index 34bb4f08eac..3e5d934ab43 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockComponentsMapping.java @@ -32,6 +32,9 @@ /** * This class is used to store a custom block components mapping, which contains custom * block components and a potenially null extended collision box + * + * @param components The components of the block + * @param extendedCollisionBox The extended collision box of the block */ public record CustomBlockComponentsMapping(@NonNull CustomBlockComponents components, BoxComponent extendedCollisionBox) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index 7b857e4b9bd..3dbb7908ee1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -34,6 +34,11 @@ * This class is used to store a custom block mappings, which contain all of the * data required to register a custom block that overrides a group of java block * states. + * + * @param data The custom block data + * @param states The custom block state mappings + * @param javaIdentifier The java identifier of the block + * @param overrideItem Whether or not the custom block should override the java item */ public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, boolean overrideItem) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java index dab707cf540..e627c04a698 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateBuilderMapping.java @@ -34,6 +34,9 @@ /** * This class is used to store a custom block state builder mapping, which contains custom * block state builders and a potenially null extended collision box + * + * @param builder The builder of the block + * @param extendedCollisionBox The extended collision box of the block */ public record CustomBlockStateBuilderMapping(@NonNull Function builder, BoxComponent extendedCollisionBox) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java index 12990b3bf4e..4c04bd65734 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockStateMapping.java @@ -32,6 +32,9 @@ /** * This class is used to store a custom block state mapping, which contains custom * block states and a potenially null extended collision box + * + * @param state The state of the block + * @param extendedCollisionBox The extended collision box of the block */ public record CustomBlockStateMapping(@NonNull CustomBlockState state, BoxComponent extendedCollisionBox) { } From 86cb4fe2965967e7dd3afc3b2589a12e78366815 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 20 May 2023 19:33:27 -0700 Subject: [PATCH 099/134] Address @davchoo's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/api/block/custom/component/BoxComponent.java | 4 ++-- .../geyser/api/block/custom/property/PropertyType.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java index 23ad627e705..0b577742dff 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/BoxComponent.java @@ -37,8 +37,8 @@ * @param sizeZ The size Z of the box */ public record BoxComponent(float originX, float originY, float originZ, float sizeX, float sizeY, float sizeZ) { - private static BoxComponent FULL_BOX = new BoxComponent(-8, 0, -8, 16, 16, 16); - private static BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); + private static final BoxComponent FULL_BOX = new BoxComponent(-8, 0, -8, 16, 16, 16); + private static final BoxComponent EMPTY_BOX = new BoxComponent(0, 0, 0, 0, 0, 0); /** * Gets a full box component diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 27dfd768964..3ab73243b4c 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -31,9 +31,9 @@ * This class is used to define a custom block property's type. */ public class PropertyType { - private static PropertyType BOOLEAN = new PropertyType(Boolean.class); - private static PropertyType INTEGER = new PropertyType(Integer.class); - private static PropertyType STRING = new PropertyType(String.class); + private static final PropertyType BOOLEAN = new PropertyType(Boolean.class); + private static final PropertyType INTEGER = new PropertyType(Integer.class); + private static final PropertyType STRING = new PropertyType(String.class); /** * Gets the property type for a boolean. From 294da788a624e136ae21ea2dc3a4bf118ae1493d Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 21 May 2023 16:16:51 -0700 Subject: [PATCH 100/134] Lock extended collision to section Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../JavaLevelChunkWithLightTranslator.java | 40 +++++++++++-------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 15cfde0e2da..47ba3da441c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -147,9 +147,9 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke layer0.idFor(session.getBlockMappings().getBedrockAir().getRuntimeId()); for (int yzx = 0; yzx < BlockStorage.SIZE / 16; yzx++) { - if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { - bedrockData.set(indexYZXtoXZY(yzx), layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); - EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); + if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + bedrockData.set(indexYZXtoXZY(yzx), layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); } } @@ -180,14 +180,14 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // Extended collision blocks if (USE_EXTENDED_COLLISIONS) { - if (javaId == BlockStateValues.JAVA_AIR_ID && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { - section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx)); - EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); + if (javaId == BlockStateValues.JAVA_AIR_ID && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY)); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes().get(javaId); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId(), sectionY); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -322,15 +322,15 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke int xzy = indexYZXtoXZY(yzx); bedrockData.set(xzy, paletteId); - if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { - bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); - EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); + if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings() .getExtendedCollisionBoxes().get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId(), sectionY); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -349,15 +349,15 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } - if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx) != 0) { - bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx))); - EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0); + if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } BlockDefinition aboveBedrockExtendedCollisionDefinition = session.getBlockMappings().getExtendedCollisionBoxes() .get(javaPalette.idToState(paletteId)); if (aboveBedrockExtendedCollisionDefinition != null) { - EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId()); + EXTENDED_COLLISIONS_STORAGE.get().set((yzx + 0x100) & 0xFFF, aboveBedrockExtendedCollisionDefinition.getRuntimeId(), sectionY); if ((xzy & 0xF) == 15) { thisExtendedCollisionNextSection = true; } @@ -527,17 +527,23 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke static final class ExtendedCollisionsStorage { private int[] data; + private int sectionY; - int get(int index) { + int get(int index, int sY) { if (data == null) { return 0; } + if (!(sY == sectionY || sY == sectionY + 1)) { + data = null; + return 0; + } return data[index]; } - void set(int index, int value) { + void set(int index, int value, int sY) { ensureDataExists(); data[index] = value; + sectionY = sY; } void clear() { From 41015edf21cfa0c880ea87cd008cb635eab69667 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 21 May 2023 16:30:51 -0700 Subject: [PATCH 101/134] Clear ext col even when air Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../JavaLevelChunkWithLightTranslator.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 47ba3da441c..b253614c18a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -180,8 +180,10 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // Extended collision blocks if (USE_EXTENDED_COLLISIONS) { - if (javaId == BlockStateValues.JAVA_AIR_ID && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { - section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY)); + if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + if (javaId == BlockStateValues.JAVA_AIR_ID) { + section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY)); + } EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } @@ -322,8 +324,10 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke int xzy = indexYZXtoXZY(yzx); bedrockData.set(xzy, paletteId); - if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { - bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + if (paletteId == airPaletteId) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + } EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } @@ -349,8 +353,10 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke layer1Data[xzy >> 5] |= 1 << (xzy & 0x1F); } - if (paletteId == airPaletteId && EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { - bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { + if (paletteId == airPaletteId) { + bedrockData.set(xzy, layer0.idFor(EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY))); + } EXTENDED_COLLISIONS_STORAGE.get().set(yzx, 0, sectionY); continue; } From 023bd507b8bdc8ae785d9ba8e4d43ec973d2877f Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 22 May 2023 23:48:54 -0700 Subject: [PATCH 102/134] Let override vanilla items in creative inventory Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../api/block/custom/CustomBlockData.java | 28 ++++++++ .../level/block/GeyserCustomBlockData.java | 45 ++++++++++++ .../mappings/versions/MappingsReader_v1.java | 17 ++++- .../CustomBlockRegistryPopulator.java | 6 +- .../populator/ItemRegistryPopulator.java | 72 ++++++++++++++++--- 5 files changed, 156 insertions(+), 12 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 0310c794788..26597ca3b79 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.api.block.custom; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; @@ -50,6 +51,27 @@ public interface CustomBlockData { */ @NonNull String identifier(); + /** + * Gets if the custom block is included in the creative inventory + * + * @return If the custom block is included in the creative inventory. + */ + @NonNull boolean includedInCreativeInventory(); + + /** + * Gets the item's creative category, or tab id. + * + * @return the item's creative category + */ + @Nullable String creativeCategory(); + + /** + * Gets the item's creative group. + * + * @return the item's creative group + */ + @Nullable String creativeGroup(); + /** * Gets the components of the custom block * @@ -89,6 +111,12 @@ public interface CustomBlockData { interface Builder { Builder name(@NonNull String name); + Builder includedInCreativeInventory(@NonNull boolean includedInCreativeInventory); + + Builder creativeCategory(@Nullable String creativeCategory); + + Builder creativeGroup(@Nullable String creativeGroup); + Builder components(@NonNull CustomBlockComponents components); Builder booleanProperty(@NonNull String propertyName); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 6e00c399eb4..b6b4a2ca00f 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -38,12 +38,17 @@ import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.jetbrains.annotations.NotNull; +import javax.annotation.Nullable; + import java.util.List; import java.util.Map; @Value public class GeyserCustomBlockData implements CustomBlockData { String name; + boolean includedInCreativeInventory; + String creativeCategory; + String creativeGroup; CustomBlockComponents components; Map> properties; List permutations; @@ -56,6 +61,10 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { throw new IllegalStateException("Name must be set"); } + this.includedInCreativeInventory = builder.includedInCreativeInventory; + this.creativeCategory = builder.creativeCategory; + this.creativeGroup = builder.creativeGroup; + this.components = builder.components; if (!builder.properties.isEmpty()) { @@ -96,6 +105,21 @@ private GeyserCustomBlockData(CustomBlockDataBuilder builder) { return Constants.GEYSER_CUSTOM_NAMESPACE + ":" + name; } + @Override + public boolean includedInCreativeInventory() { + return includedInCreativeInventory; + } + + @Override + public @Nullable String creativeCategory() { + return creativeCategory; + } + + @Override + public @Nullable String creativeGroup() { + return creativeGroup; + } + @Override public CustomBlockComponents components() { return components; @@ -123,6 +147,9 @@ public CustomBlockComponents components() { public static class CustomBlockDataBuilder implements Builder { private String name; + private boolean includedInCreativeInventory; + private String creativeCategory; + private String creativeGroup; private CustomBlockComponents components; private final Object2ObjectMap> properties = new Object2ObjectOpenHashMap<>(); private List permutations = ObjectLists.emptyList(); @@ -133,6 +160,24 @@ public Builder name(@NonNull String name) { return this; } + @Override + public Builder includedInCreativeInventory(boolean includedInCreativeInventory) { + this.includedInCreativeInventory = includedInCreativeInventory; + return this; + } + + @Override + public Builder creativeCategory(@Nullable String creativeCategory) { + this.creativeCategory = creativeCategory; + return this; + } + + @Override + public Builder creativeGroup(@Nullable String creativeGroup) { + this.creativeGroup = creativeGroup; + return this; + } + @Override public Builder components(@NonNull CustomBlockComponents components) { this.components = components; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 0db15e768c1..55ae22f8ee4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -197,12 +197,27 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node throw new InvalidCustomMappingsFileException("A block entry has no name"); } + boolean includedInCreativeInventory = node.has("included_in_creative_inventory") && node.get("included_in_creative_inventory").asBoolean(); + + String creativeCategory = "none"; + if (node.has("creative_category")) { + creativeCategory = node.get("creative_category").asText(); + } + + String creativeGroup = ""; + if (node.has("creative_group")) { + creativeGroup = node.get("creative_group").asText(); + } + // If this is true, we will only register the states the user has specified rather than all the possible block states boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); // Create the data for the overall block CustomBlockData.Builder customBlockDataBuilder = new CustomBlockDataBuilder() - .name(name); + .name(name) + .includedInCreativeInventory(includedInCreativeInventory) + .creativeCategory(creativeCategory) + .creativeGroup(creativeGroup); if (BlockRegistries.JAVA_IDENTIFIER_TO_ID.get().containsKey(identifier)) { // There is only one Java block state to override diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index fd0b81f5354..45748766c7f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -194,14 +194,16 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, properties.add(propertyBuilder.build()); } + String creativeCategory = customBlock.creativeCategory() != null ? customBlock.creativeCategory() : "none"; + String creativeGroup = customBlock.creativeGroup() != null ? customBlock.creativeGroup() : ""; NbtMap propertyTag = NbtMap.builder() .putCompound("components", CustomBlockRegistryPopulator.convertComponents(customBlock.components(), protocolVersion)) // this is required or the client will crash // in the future, this can be used to replace items in the creative inventory // this would require us to map https://wiki.bedrock.dev/documentation/creative-categories.html#for-blocks programatically .putCompound("menu_category", NbtMap.builder() - .putString("category", "none") - .putString("group", "") + .putString("category", creativeCategory) + .putString("group", creativeGroup) .putBoolean("is_hidden_in_commands", false) .build()) // meaning of this version is unknown, but it's required for tags to work and should probably be checked periodically diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index a7ece9d6a65..008342d2b63 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -52,6 +52,7 @@ import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; @@ -154,6 +155,8 @@ public static void populate() { Object2ObjectMap bedrockBlockIdOverrides = new Object2ObjectOpenHashMap<>(); Object2IntMap blacklistedIdentifiers = new Object2IntOpenHashMap<>(); + Object2ObjectMap customBlockItemDefinitions = new Object2ObjectOpenHashMap<>(); + List buckets = new ObjectArrayList<>(); List carpets = new ObjectArrayList<>(); @@ -249,15 +252,29 @@ public static void populate() { BlockDefinition bedrockBlock = null; Integer firstBlockRuntimeId = entry.getValue().getFirstBlockRuntimeId(); + BlockDefinition customBlockItemOverride = null; if (firstBlockRuntimeId != null) { BlockDefinition blockOverride = bedrockBlockIdOverrides.get(bedrockIdentifier); - if (blockOverride != null) { + + // We'll do this here for custom blocks we want in the creative inventory so we can piggyback off the existing logic to find these + // blocks in creativeItems + CustomBlockData customBlockData = BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.getOrDefault(javaItem.javaIdentifier(), null); + if (customBlockData != null) { + // this block has a custom item override and thus we should use its runtime ID for the ItemMapping + if (customBlockData.includedInCreativeInventory()) { + CustomBlockState customBlockState = customBlockData.defaultBlockState(); + customBlockItemOverride = blockMappings.getCustomBlockStateDefinitions().getOrDefault(customBlockState, null); + } + } + + // If it' s a custom block we can't do this because we need to make sure we find the creative item + if (blockOverride != null && customBlockItemOverride == null) { // Straight from BDS is our best chance of getting an item that doesn't run into issues bedrockBlock = blockOverride; } else { // Try to get an example block runtime ID from the creative contents packet, for Bedrock identifier obtaining int aValidBedrockBlockId = blacklistedIdentifiers.getOrDefault(bedrockIdentifier, -1); - if (aValidBedrockBlockId == -1) { + if (aValidBedrockBlockId == -1 && customBlockItemOverride == null) { // Fallback bedrockBlock = blockMappings.getBedrockBlock(firstBlockRuntimeId); } else { @@ -273,9 +290,6 @@ public static void populate() { // and the last, if relevant. We then iterate over all those values and get their Bedrock equivalents Integer lastBlockRuntimeId = entry.getValue().getLastBlockRuntimeId() == null ? firstBlockRuntimeId : entry.getValue().getLastBlockRuntimeId(); for (int i = firstBlockRuntimeId; i <= lastBlockRuntimeId; i++) { - // For now we opt to preserve the pre custom block phase and just use the vanilla blocks in the creative inventory - // In the future if we get the mappings for categories it we could put the custom blocks in the creative inventory - // This would likely also require changes to recipe handling GeyserBedrockBlock bedrockBlockRuntimeId = blockMappings.getVanillaBedrockBlock(i); NbtMap blockTag = bedrockBlockRuntimeId.getState(); String bedrockName = blockTag.getString("name"); @@ -342,6 +356,12 @@ public static void populate() { // Because we have replaced the Bedrock block ID, we also need to replace the creative contents block runtime ID // That way, creative items work correctly for these blocks + + // Set our custom block override now if there is one + if (customBlockItemOverride != null) { + bedrockBlock = customBlockItemOverride; + } + for (int j = 0; j < creativeItems.size(); j++) { ItemData itemData = creativeItems.get(j); if (itemData.getDefinition().equals(definition)) { @@ -350,16 +370,35 @@ public static void populate() { } NbtMap states = ((GeyserBedrockBlock) itemData.getBlockDefinition()).getState().getCompound("states"); + boolean valid = true; for (Map.Entry nbtEntry : requiredBlockStates.entrySet()) { - if (!states.get(nbtEntry.getKey()).equals(nbtEntry.getValue())) { + if (states.getOrDefault(nbtEntry.getKey(), null) == null || !states.get(nbtEntry.getKey()).equals(nbtEntry.getValue())) { // A required block state doesn't match - this one is not valid valid = false; break; } } if (valid) { - creativeItems.set(j, itemData.toBuilder().blockDefinition(bedrockBlock).build()); + if (customBlockItemOverride != null && customBlockData != null) { + // Assuming this is a valid custom block override we'll just register it now while we have the creative item + int customProtocolId = nextFreeBedrockId++; + mappingItem.setBedrockData(customProtocolId); + bedrockIdentifier = customBlockData.identifier(); + definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, true); + registry.put(customProtocolId, definition); + customBlockItemDefinitions.put(customBlockData, definition); + customIdMappings.put(customProtocolId, bedrockIdentifier); + + creativeItems.set(j, itemData.toBuilder() + .definition(definition) + .blockDefinition(bedrockBlock) + .netId(itemData.getNetId()) + .count(1) + .build()); + } else { + creativeItems.set(j, itemData.toBuilder().blockDefinition(bedrockBlock).build()); + } break; } } @@ -520,10 +559,12 @@ public static void populate() { } // Register the item forms of custom blocks - Object2ObjectMap customBlockItemDefinitions = Object2ObjectMaps.emptyMap(); if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { - customBlockItemDefinitions = new Object2ObjectOpenHashMap<>(); for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { + // We might've registered it already with the vanilla blocks so check first + if (customBlockItemDefinitions.containsKey(customBlock)) { + continue; + } int customProtocolId = nextFreeBedrockId++; String identifier = customBlock.identifier(); @@ -531,6 +572,19 @@ public static void populate() { registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); + + GeyserBedrockBlock bedrockBlock = blockMappings.getCustomBlockStateDefinitions().getOrDefault(customBlock.defaultBlockState(), null); + + if (bedrockBlock != null && customBlock.includedInCreativeInventory()) { + creativeItems.add(ItemData.builder() + .definition(definition) + .blockDefinition(bedrockBlock) + .netId(creativeNetId.incrementAndGet()) + .count(1) + .build()); + } + + // And lastly we need to figure out what to do about non-vanilla custom blocks } } From 7c5fa3c2103ec2667e451a481c8e369fd40b558b Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Wed, 24 May 2023 02:02:42 -0400 Subject: [PATCH 103/134] Avoid creating 12 HashSets for every overrided block state --- .../mappings/versions/MappingsReader_v1.java | 78 +++++++++---------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 55ae22f8ee4..dfd9fda656e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -470,43 +470,44 @@ private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode private BoxComponent createBoxComponent(int javaId, float heightTranslation) { // Some blocks (e.g. plants) have no collision box BlockCollision blockCollision = BlockUtils.getCollision(javaId); - if (blockCollision == null) { + if (blockCollision == null || blockCollision.getBoundingBoxes().length == 0) { return BoxComponent.emptyBox(); } - Set bottomCornerXs = new ObjectOpenHashSet<>(); - Set bottomCornerYs = new ObjectOpenHashSet<>(); - Set bottomCornerZs = new ObjectOpenHashSet<>(); - Set topCornerXs = new ObjectOpenHashSet<>(); - Set topCornerYs = new ObjectOpenHashSet<>(); - Set topCornerZs = new ObjectOpenHashSet<>(); + float minX = 5; + float minY = 5; + float minZ = 5; + float maxX = -5; + float maxY = -5; + float maxZ = -5; for (BoundingBox boundingBox : blockCollision.getBoundingBoxes()) { - float offsetX = (float) boundingBox.getSizeX() * 8; - float offsetY = (float) boundingBox.getSizeY() * 8; - float offsetZ = (float) boundingBox.getSizeZ() * 8; - - float bottomCornerX = (float) Math.abs(boundingBox.getMiddleX() - 1) * 16 - 8 - offsetX; - float bottomCornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; - float bottomCornerZ = (float) boundingBox.getMiddleZ() * 16 - 8 - offsetZ; - - bottomCornerXs.add(bottomCornerX); - bottomCornerYs.add(bottomCornerY); - bottomCornerZs.add(bottomCornerZ); - - topCornerXs.add((float) boundingBox.getSizeX() * 16 + bottomCornerX); - topCornerYs.add((float) boundingBox.getSizeY() * 16 + bottomCornerY); - topCornerZs.add((float) boundingBox.getSizeZ() * 16 + bottomCornerZ); - } - - float cornerX = MathUtils.clamp(Collections.min(bottomCornerXs), -8, 8); - float cornerY = MathUtils.clamp(Collections.min(bottomCornerYs) + heightTranslation, 0, 16); - float cornerZ = MathUtils.clamp(Collections.min(bottomCornerZs), -8, 8); - - float sizeX = MathUtils.clamp(Collections.max(topCornerXs) - cornerX, 0, 16); - float sizeY = MathUtils.clamp(Collections.max(topCornerYs) - cornerY + heightTranslation, 0, 16); - float sizeZ = MathUtils.clamp(Collections.max(topCornerZs) - cornerZ, 0 ,16); - - return new BoxComponent(cornerX, cornerY, cornerZ, sizeX, sizeY, sizeZ); + double offsetX = boundingBox.getSizeX() * 0.5; + double offsetY = boundingBox.getSizeY() * 0.5; + double offsetZ = boundingBox.getSizeZ() * 0.5; + + minX = Math.min(minX, (float) (boundingBox.getMiddleX() - offsetX)); + minY = Math.min(minY, (float) (boundingBox.getMiddleY() - offsetY)); + minZ = Math.min(minZ, (float) (boundingBox.getMiddleZ() - offsetZ)); + + maxX = Math.max(maxX, (float) (boundingBox.getMiddleX() + offsetX)); + maxY = Math.max(maxY, (float) (boundingBox.getMiddleY() + offsetY)); + maxZ = Math.max(maxZ, (float) (boundingBox.getMiddleZ() + offsetZ)); + } + minX = MathUtils.clamp(minX, 0, 1); + minY = MathUtils.clamp(minY + heightTranslation, 0, 1); + minZ = MathUtils.clamp(minZ, 0, 1); + maxX = MathUtils.clamp(maxX, 0, 1); + maxY = MathUtils.clamp(maxY + heightTranslation, 0, 1); + maxZ = MathUtils.clamp(maxZ, 0, 1); + + return new BoxComponent( + 16 * (1 - maxX) - 8, // For some odd reason X is mirrored on Bedrock + 16 * minY, + 16 * minZ - 8, + 16 * (maxX - minX), + 16 * (maxY - minY), + 16 * (maxZ - minZ) + ); } /** @@ -528,12 +529,11 @@ private BoxComponent createExtendedBoxComponent(int javaId) { if (blockCollision == null) { return null; } - BoundingBox boundingBox = blockCollision.getBoundingBoxes()[0]; - float offsetY = (float) boundingBox.getSizeY() * 8; - float cornerY = (float) boundingBox.getMiddleY() * 16 - offsetY; - float sizeY = (float) boundingBox.getSizeY() * 16; - if (cornerY > 16 || sizeY > 16) { - return createBoxComponent(javaId, -16); + for (BoundingBox box : blockCollision.getBoundingBoxes()) { + double maxY = 0.5 * box.getSizeY() + box.getMiddleY(); + if (maxY > 1) { + return createBoxComponent(javaId, -1); + } } return null; } From b95b49a3875abcd6f2dca65007c459046d507230 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Wed, 24 May 2023 02:10:31 -0400 Subject: [PATCH 104/134] Super minor nitpicks + Custom Skull NBT fix --- .../geysermc/geyser/api/block/custom/CustomBlockData.java | 6 +++--- .../api/block/custom/component/CustomBlockComponents.java | 6 +++--- .../java/org/geysermc/geyser/item/type/PlayerHeadItem.java | 4 ++-- .../geyser/level/block/GeyserCustomBlockComponents.java | 2 +- .../registry/populator/CustomItemRegistryPopulator.java | 6 ------ .../org/geysermc/geyser/registry/type/BlockMappings.java | 3 +-- .../bedrock/BedrockInventoryTransactionTranslator.java | 2 +- .../protocol/java/level/JavaLevelEventTranslator.java | 2 +- 8 files changed, 12 insertions(+), 19 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 26597ca3b79..4c0a552af9f 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -56,7 +56,7 @@ public interface CustomBlockData { * * @return If the custom block is included in the creative inventory. */ - @NonNull boolean includedInCreativeInventory(); + boolean includedInCreativeInventory(); /** * Gets the item's creative category, or tab id. @@ -77,7 +77,7 @@ public interface CustomBlockData { * * @return The components of the custom block. */ - @NonNull CustomBlockComponents components(); + @Nullable CustomBlockComponents components(); /** * Gets the custom block's map of block property names to CustomBlockProperty @@ -111,7 +111,7 @@ public interface CustomBlockData { interface Builder { Builder name(@NonNull String name); - Builder includedInCreativeInventory(@NonNull boolean includedInCreativeInventory); + Builder includedInCreativeInventory(boolean includedInCreativeInventory); Builder creativeCategory(@Nullable String creativeCategory); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 1926c5be50b..135ea4c75bc 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -130,7 +130,7 @@ public interface CustomBlockComponents { * * @return The rotation. */ - @Nullable boolean unitCube(); + boolean unitCube(); /** * Gets if the block should place only air @@ -138,7 +138,7 @@ public interface CustomBlockComponents { * * @return If the block should place only air. */ - @Nullable boolean placeAir(); + boolean placeAir(); /** * Gets the set of tags @@ -146,7 +146,7 @@ public interface CustomBlockComponents { * * @return The set of tags. */ - @Nullable Set tags(); + @NonNull Set tags(); interface Builder { Builder selectionBox(BoxComponent selectionBox); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java index 92dcfe01c1a..662448a5267 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PlayerHeadItem.java @@ -44,8 +44,8 @@ public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull Compo super.translateNbtToBedrock(session, tag); CompoundTag displayTag; - if (tag.get("display") instanceof CompoundTag) { - displayTag = tag; + if (tag.get("display") instanceof CompoundTag existingDisplayTag) { + displayTag = existingDisplayTag; } else { displayTag = new CompoundTag("display"); tag.put(displayTag); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 65a65a436d1..50b8e641232 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -151,7 +151,7 @@ public boolean placeAir() { } @Override - public Set tags() { + public @NotNull Set tags() { return tags; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 0cebc22a55b..8e10b99d717 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -49,12 +49,6 @@ import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; import javax.annotation.Nullable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.OptionalInt; import java.util.*; public class CustomItemRegistryPopulator { diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 71f6d9cbb76..8c5d4863fa8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -66,8 +66,7 @@ public class BlockMappings implements DefinitionRegistry { Int2ObjectMap extendedCollisionBoxes; public int getBedrockBlockId(int javaState) { - BlockDefinition bedrockBlock = getBedrockBlock(javaState); - return bedrockBlock != null ? bedrockBlock.getRuntimeId() : -1; + return getBedrockBlock(javaState).getRuntimeId(); } public GeyserBedrockBlock getBedrockBlock(int javaState) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index e63abb974f7..745e04dd7b3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -435,7 +435,7 @@ public void translate(GeyserSession session, InventoryTransactionPacket packet) LevelEventPacket blockBreakPacket = new LevelEventPacket(); blockBreakPacket.setType(LevelEvent.PARTICLE_DESTROY_BLOCK); blockBreakPacket.setPosition(packet.getBlockPosition().toFloat()); - blockBreakPacket.setData(session.getBlockMappings().getBedrockBlock(blockState).getRuntimeId()); + blockBreakPacket.setData(session.getBlockMappings().getBedrockBlockId(blockState)); session.sendUpstreamPacket(blockBreakPacket); session.setBreakingBlock(-1); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index dff7ae74237..d59b40b8fcc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -198,7 +198,7 @@ public void translate(GeyserSession session, ClientboundLevelEventPacket packet) effectPacket.setType(org.cloudburstmc.protocol.bedrock.data.LevelEvent.PARTICLE_DESTROY_BLOCK); BreakBlockEventData breakBlockEventData = (BreakBlockEventData) packet.getData(); - effectPacket.setData(session.getBlockMappings().getBedrockBlock(breakBlockEventData.getBlockState()).getRuntimeId()); + effectPacket.setData(session.getBlockMappings().getBedrockBlockId(breakBlockEventData.getBlockState())); } case BREAK_SPLASH_POTION, BREAK_SPLASH_POTION2 -> { effectPacket.setType(org.cloudburstmc.protocol.bedrock.data.LevelEvent.PARTICLE_POTION_SPLASH); From c602edd830b1e0cf6cc2621216e855bcc7226fbf Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Sat, 27 May 2023 13:18:03 -0400 Subject: [PATCH 105/134] Check custom skull is within Bedrock bounds Fixes NPE with custom skulls above y=320 or below y=-64 --- .../JavaLevelChunkWithLightTranslator.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index b253614c18a..f7827e10ba0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -426,14 +426,17 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke BlockDefinition blockDefinition = SkullBlockEntityTranslator.translateSkull(session, tag, Vector3i.from(x + chunkBlockX, y, z + chunkBlockZ), blockState); if (blockDefinition != null) { int bedrockSectionY = (y >> 4) - (bedrockDimension.minY() >> 4); - GeyserChunkSection bedrockSection = sections[bedrockSectionY]; - IntList palette = bedrockSection.getBlockStorageArray()[0].getPalette(); - if (palette instanceof IntImmutableList || palette instanceof IntLists.Singleton) { - // TODO there has to be a better way to expand the palette .-. - bedrockSection = bedrockSection.copy(); - sections[bedrockSectionY] = bedrockSection; + if (0 <= bedrockSectionY && bedrockSectionY < maxBedrockSectionY) { + // Custom skull is in a section accepted by Bedrock + GeyserChunkSection bedrockSection = sections[bedrockSectionY]; + IntList palette = bedrockSection.getBlockStorageArray()[0].getPalette(); + if (palette instanceof IntImmutableList || palette instanceof IntLists.Singleton) { + // TODO there has to be a better way to expand the palette .-. + bedrockSection = bedrockSection.copy(); + sections[bedrockSectionY] = bedrockSection; + } + bedrockSection.setFullBlock(x, y & 0xF, z, 0, blockDefinition.getRuntimeId()); } - bedrockSection.setFullBlock(x, y & 0xF, z, 0, blockDefinition.getRuntimeId()); } } } From 7f5a0383dc5b28147a62b9d3665aeef8d2a78bc3 Mon Sep 17 00:00:00 2001 From: davchoo <4722249+davchoo@users.noreply.github.com> Date: Sat, 27 May 2023 14:31:03 -0400 Subject: [PATCH 106/134] Add static builder methods to match CustomItemData API --- .../geyser/api/block/custom/CustomBlockData.java | 10 ++++++++++ .../block/custom/component/CustomBlockComponents.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index 4c0a552af9f..d097369a174 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -27,6 +27,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.GeyserApi; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; @@ -108,6 +109,15 @@ public interface CustomBlockData { */ CustomBlockState.@NonNull Builder blockStateBuilder(); + /** + * Create a Builder for CustomBlockData + * + * @return A CustomBlockData Builder + */ + static CustomBlockData.Builder builder() { + return GeyserApi.api().provider(CustomBlockData.Builder.class); + } + interface Builder { Builder name(@NonNull String name); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 135ea4c75bc..e31dae9b914 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -27,6 +27,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.GeyserApi; import java.util.List; import java.util.Map; @@ -148,6 +149,15 @@ public interface CustomBlockComponents { */ @NonNull Set tags(); + /** + * Create a Builder for CustomBlockComponents + * + * @return A CustomBlockComponents Builder + */ + static CustomBlockComponents.Builder builder() { + return GeyserApi.api().provider(CustomBlockComponents.Builder.class); + } + interface Builder { Builder selectionBox(BoxComponent selectionBox); From e8cd6c7666e71552d25868b381f4324ce20430eb Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 7 Jun 2023 21:48:39 -0700 Subject: [PATCH 107/134] Upstream Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- core/src/main/resources/mappings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index f69b4db9a6f..56c3eee7a52 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit f69b4db9a6f0e8fff8b29564195c76074210b924 +Subproject commit 56c3eee7a5241b5609d1936f2a11b05dd1a3d568 From 33b89eba66156d084b6f10c2b1a5acba604528e1 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 7 Jun 2023 23:50:44 -0700 Subject: [PATCH 108/134] Initial API setup for modded blocks (no impl yet) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../custom/nonvanilla/JavaBlockItem.java | 7 + .../custom/nonvanilla/JavaBlockState.java | 56 ++++++ .../custom/nonvanilla/JavaBoundingBox.java | 6 + .../GeyserDefineCustomBlocksEvent.java | 8 + .../level/block/GeyserJavaBlockState.java | 161 ++++++++++++++++++ 5 files changed, 238 insertions(+) create mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java new file mode 100644 index 00000000000..5143246d9d4 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockItem.java @@ -0,0 +1,7 @@ +package org.geysermc.geyser.api.block.custom.nonvanilla; + +import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; + +public record JavaBlockItem(@NonNull String identifier, @NonNegative int javaId, @NonNegative int stackSize) { +} diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java new file mode 100644 index 00000000000..5448c5f95ce --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java @@ -0,0 +1,56 @@ +package org.geysermc.geyser.api.block.custom.nonvanilla; + +import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.GeyserApi; + +public interface JavaBlockState { + @NonNull String identifier(); + + @NonNegative int javaId(); + + @NonNegative int stateGroupId(); + + @NonNegative float blockHardness(); + + @NonNull boolean waterlogged(); + + @NonNull JavaBoundingBox[] collision(); + + @NonNull boolean canBreakWithHand(); + + @Nullable String pickItem(); + + @Nullable String pistonBehavior(); + + @Nullable boolean hasBlockEntity(); + + static JavaBlockState.Builder builder() { + return GeyserApi.api().provider(JavaBlockState.Builder.class); + } + + interface Builder { + Builder identifier(@NonNull String identifier); + + Builder javaId(@NonNegative int javaId); + + Builder stateGroupId(@NonNegative int stateGroupId); + + Builder blockHardness(@NonNegative float blockHardness); + + Builder waterlogged(@NonNull boolean waterlogged); + + Builder collision(@NonNull JavaBoundingBox[] collision); + + Builder canBreakWithHand(@NonNull boolean canBreakWithHand); + + Builder pickItem(@Nullable String pickItem); + + Builder pistonBehavior(@Nullable String pistonBehavior); + + Builder hasBlockEntity(@Nullable boolean hasBlockEntity); + + JavaBlockState build(); + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java new file mode 100644 index 00000000000..56a4ca3da5f --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java @@ -0,0 +1,6 @@ +package org.geysermc.geyser.api.block.custom.nonvanilla; + +import org.checkerframework.checker.nullness.qual.NonNull; + +public record JavaBoundingBox(@NonNull double middleX, @NonNull double middleY, @NonNull double middleZ, @NonNull double sizeX, @NonNull double sizeY, @NonNull double sizeZ) { +} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 1dd135521dc..98d35b2938a 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -63,4 +63,12 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param customBlockData the custom block data with which to override java item identifier */ public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); + + // Modded implementation + // Basically instead of just the javaIdentifier we need an object that contains all the stuff we need to fully register the new java block + // e.g. identifier/namespace, runtime id, waterlogged, collision, etc. + // And this will be associated with a custom block state + + // Then we can have a method to register an "item" associated with some custom block data + } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java new file mode 100644 index 00000000000..725afe6df18 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java @@ -0,0 +1,161 @@ +package org.geysermc.geyser.level.block; + +import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBoundingBox; + +public class GeyserJavaBlockState implements JavaBlockState { + String identifier; + int javaId; + int stateGroupId; + float blockHardness; + boolean waterlogged; + JavaBoundingBox[] collision; + boolean canBreakWithHand; + String pickItem; + String pistonBehavior; + boolean hasBlockEntity; + + private GeyserJavaBlockState(JavaBlockStateBuilder builder) { + this.identifier = builder.identifier; + this.javaId = builder.javaId; + this.stateGroupId = builder.stateGroupId; + this.blockHardness = builder.blockHardness; + this.waterlogged = builder.waterlogged; + this.collision = builder.collision; + this.canBreakWithHand = builder.canBreakWithHand; + this.pickItem = builder.pickItem; + this.pistonBehavior = builder.pistonBehavior; + this.hasBlockEntity = builder.hasBlockEntity; + } + + @Override + public @NonNull String identifier() { + return identifier; + } + + @Override + public @NonNegative int javaId() { + return javaId; + } + + @Override + public @NonNegative int stateGroupId() { + return stateGroupId; + } + + @Override + public @NonNegative float blockHardness() { + return blockHardness; + } + + @Override + public @NonNull boolean waterlogged() { + return waterlogged; + } + + @Override + public @NonNull JavaBoundingBox[] collision() { + return collision; + } + + @Override + public @NonNull boolean canBreakWithHand() { + return canBreakWithHand; + } + + @Override + public @Nullable String pickItem() { + return pickItem; + } + + @Override + public @Nullable String pistonBehavior() { + return pistonBehavior; + } + + @Override + public @Nullable boolean hasBlockEntity() { + return hasBlockEntity; + } + + public static class JavaBlockStateBuilder implements Builder { + private String identifier; + private int javaId; + private int stateGroupId; + private float blockHardness; + private boolean waterlogged; + private JavaBoundingBox[] collision; + private boolean canBreakWithHand; + private String pickItem; + private String pistonBehavior; + private boolean hasBlockEntity; + + @Override + public Builder identifier(@NonNull String identifier) { + this.identifier = identifier; + return this; + } + + @Override + public Builder javaId(@NonNegative int javaId) { + this.javaId = javaId; + return this; + } + + @Override + public Builder stateGroupId(@NonNegative int stateGroupId) { + this.stateGroupId = stateGroupId; + return this; + } + + @Override + public Builder blockHardness(@NonNegative float blockHardness) { + this.blockHardness = blockHardness; + return this; + } + + @Override + public Builder waterlogged(@NonNull boolean waterlogged) { + this.waterlogged = waterlogged; + return this; + } + + @Override + public Builder collision(@NonNull JavaBoundingBox[] collision) { + this.collision = collision; + return this; + } + + @Override + public Builder canBreakWithHand(@NonNull boolean canBreakWithHand) { + this.canBreakWithHand = canBreakWithHand; + return this; + } + + @Override + public Builder pickItem(@Nullable String pickItem) { + this.pickItem = pickItem; + return this; + } + + @Override + public Builder pistonBehavior(@Nullable String pistonBehavior) { + this.pistonBehavior = pistonBehavior; + return this; + } + + @Override + public Builder hasBlockEntity(@Nullable boolean hasBlockEntity) { + this.hasBlockEntity = hasBlockEntity; + return this; + } + + @Override + public JavaBlockState build() { + return new GeyserJavaBlockState(this); + } + } +} From 9ce1df1c36d49ae4a93fb79be48b0c4e715556f9 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 10 Jun 2023 02:33:50 -0700 Subject: [PATCH 109/134] More work on nonvanilla blocks (nonfunctional) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../GeyserDefineCustomBlocksEvent.java | 6 ++++ .../geyser/registry/BlockRegistries.java | 12 +++++++ .../populator/BlockRegistryPopulator.java | 36 +++++++++++++++++-- .../CustomBlockRegistryPopulator.java | 26 ++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 98d35b2938a..32a4236dcda 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -28,6 +28,8 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.event.Event; /** @@ -68,7 +70,11 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { // Basically instead of just the javaIdentifier we need an object that contains all the stuff we need to fully register the new java block // e.g. identifier/namespace, runtime id, waterlogged, collision, etc. // And this will be associated with a custom block state + + public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); // Then we can have a method to register an "item" associated with some custom block data + + public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index be49d16ea59..3a33b247737 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -33,6 +33,8 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.registry.loader.CollisionRegistryLoader; import org.geysermc.geyser.registry.loader.RegistryLoaders; import org.geysermc.geyser.registry.populator.BlockRegistryPopulator; @@ -109,11 +111,21 @@ public class BlockRegistries { */ public static final MappedRegistry> CUSTOM_BLOCK_STATE_OVERRIDES = MappedRegistry.create(RegistryLoaders.empty(Int2ObjectOpenHashMap::new)); + /** + * A registry which stores non vanilla java blockstates and the custom block state it should be replaced with. + */ + public static final SimpleMappedRegistry NON_VANILLA_BLOCK_STATE_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** * A registry which stores clean Java Ids and the custom block it should be replaced with in the context of items. */ public static final SimpleMappedRegistry CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** + * A registry which stores non vanilla java block items and the custom block it should be replaced with in the context of items. + */ + public static final SimpleMappedRegistry NON_VANILLA_CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); + /** * A registry which stores Custom Block Data for extended collision boxes and the Java IDs of blocks that will have said extended collision boxes placed above them. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 763e25638b5..a065361f5e1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -41,6 +41,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.registry.BlockRegistries; @@ -232,8 +233,23 @@ private static void registerBedrockBlocks() { BiFunction stateMapper = blockMappers.getOrDefault(palette.getKey(), emptyMapper); - GeyserBedrockBlock[] javaToBedrockBlocks = new GeyserBedrockBlock[BLOCKS_JSON.size()]; - GeyserBedrockBlock[] javaToVanillaBedrockBlocks = new GeyserBedrockBlock[BLOCKS_JSON.size()]; + int javaBlocksSize = BLOCKS_JSON.size(); + int minCustomRuntimeID = -1; + int maxCustomRuntimeID = -1; + + if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + minCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); + maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); + + if (minCustomRuntimeID <= BLOCKS_JSON.size()) { + throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + javaBlocksSize + ")"); + } + + javaBlocksSize = maxCustomRuntimeID; + } + + GeyserBedrockBlock[] javaToBedrockBlocks = new GeyserBedrockBlock[javaBlocksSize]; + GeyserBedrockBlock[] javaToVanillaBedrockBlocks = new GeyserBedrockBlock[javaBlocksSize]; Map flowerPotBlocks = new Object2ObjectOpenHashMap<>(); Map itemFrames = new Object2ObjectOpenHashMap<>(); @@ -293,6 +309,22 @@ private static void registerBedrockBlocks() { javaToBedrockBlocks[javaRuntimeId] = bedrockDefinition; } + if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + // First ensure all non vanilla runtime IDs at minimum are air in case they aren't consecutive + Arrays.fill(javaToVanillaBedrockBlocks, minCustomRuntimeID, javaToVanillaBedrockBlocks.length, airDefinition); + Arrays.fill(javaToBedrockBlocks, minCustomRuntimeID, javaToBedrockBlocks.length, airDefinition); + + Set usedNonVanillaRuntimeIDs = new ObjectOpenHashSet<>(); + + for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { + if (usedNonVanillaRuntimeIDs.contains(javaBlockState.javaId())) { + throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); + } + + // Build the GeyserBedrockBlock... + } + } + if (commandBlockDefinition == null) { throw new AssertionError("Unable to find command block in palette"); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 45748766c7f..c97a72cab81 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -18,6 +18,8 @@ import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; @@ -48,7 +50,9 @@ public static void populate() { Set customBlockNames = new ObjectOpenHashSet<>(); Set customBlocks = new ObjectOpenHashSet<>(); Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); + Map nonVanillaBlockStateOverrides = new HashMap<>(); Map customBlockItemOverrides = new HashMap<>(); + Map nonVanillaCustomItemOverrides = new HashMap<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override @@ -81,6 +85,14 @@ public void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBloc } } + @Override + public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState) { + if (!customBlocks.contains(customBlockState.block())) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); + } + nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); + } + @Override public void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData) { if (!customBlocks.contains(customBlockData)) { @@ -88,6 +100,14 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom } customBlockItemOverrides.put(javaIdentifier, customBlockData); } + + @Override + public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { + if (!customBlocks.contains(customBlockData)) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); + } + nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); + } }); for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { @@ -124,9 +144,15 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + blockStateOverrides.size() + " custom block overrides."); + BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(nonVanillaBlockStateOverrides); + GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaBlockStateOverrides.size() + " non-vanilla block overrides."); + BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); + BlockRegistries.NON_VANILLA_CUSTOM_BLOCK_ITEM_OVERRIDES.set(nonVanillaCustomItemOverrides); + GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaCustomItemOverrides.size() + " non-vanilla custom item overrides."); + BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); } From a1bb4840652236e704fb14362a877c3a90c0147a Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 11 Jun 2023 11:23:25 -0700 Subject: [PATCH 110/134] Fix compile Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../platform/fabric/world/GeyserFabricWorldManager.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java index f4850f974e0..9cd01f99369 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java @@ -72,7 +72,7 @@ public void sendLecternData(GeyserSession session, int x, int z, List BlockPos pos = new BlockPos(x, y, z); // Don't create a new block entity if invalid - BlockEntity blockEntity = player.getLevel().getChunkAt(pos).getBlockEntity(pos); + BlockEntity blockEntity = player.level().getChunkAt(pos).getBlockEntity(pos); if (blockEntity instanceof BannerBlockEntity banner) { // Potentially exposes other NBT data? But we need to get the NBT data for the banner patterns *and* // the banner might have a custom name, both of which a Java client knows and caches From 9e34c162013f4c2f28653202fc82d305788369bb Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 11 Jun 2023 13:02:40 -0700 Subject: [PATCH 111/134] Update submodules Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- core/src/main/resources/languages | 2 +- core/src/main/resources/mappings | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/languages b/core/src/main/resources/languages index f6685c4ccc6..24be9ef7f85 160000 --- a/core/src/main/resources/languages +++ b/core/src/main/resources/languages @@ -1 +1 @@ -Subproject commit f6685c4ccc6e77b07402d45cb41213559004b7d6 +Subproject commit 24be9ef7f850f7d180650a65792c266c709cadf5 diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 56c3eee7a52..cf6fdf31fe7 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 56c3eee7a5241b5609d1936f2a11b05dd1a3d568 +Subproject commit cf6fdf31fe7c607d7fb3a4a42b86def45fe86385 From 6b4b0e11874660e2a2f3fdec6003b14c634081be Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 11 Jun 2023 15:34:15 -0700 Subject: [PATCH 112/134] Modded reg so far (not done) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../populator/BlockRegistryPopulator.java | 84 ++++++++++++------- .../geyser/registry/type/BlockMapping.java | 1 + 2 files changed, 53 insertions(+), 32 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index a065361f5e1..52b8d95b18b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -85,6 +85,9 @@ public static void populate(Stage stage) { * Stores the raw blocks JSON until it is no longer needed. */ private static JsonNode BLOCKS_JSON; + private static int minCustomRuntimeID = -1; + private static int maxCustomRuntimeID = -1; + private static int javaBlocksSize = -1; private static void nullifyBlocksNode() { BLOCKS_JSON = null; @@ -233,21 +236,6 @@ private static void registerBedrockBlocks() { BiFunction stateMapper = blockMappers.getOrDefault(palette.getKey(), emptyMapper); - int javaBlocksSize = BLOCKS_JSON.size(); - int minCustomRuntimeID = -1; - int maxCustomRuntimeID = -1; - - if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { - minCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); - maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); - - if (minCustomRuntimeID <= BLOCKS_JSON.size()) { - throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + javaBlocksSize + ")"); - } - - javaBlocksSize = maxCustomRuntimeID; - } - GeyserBedrockBlock[] javaToBedrockBlocks = new GeyserBedrockBlock[javaBlocksSize]; GeyserBedrockBlock[] javaToVanillaBedrockBlocks = new GeyserBedrockBlock[javaBlocksSize]; @@ -309,22 +297,6 @@ private static void registerBedrockBlocks() { javaToBedrockBlocks[javaRuntimeId] = bedrockDefinition; } - if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { - // First ensure all non vanilla runtime IDs at minimum are air in case they aren't consecutive - Arrays.fill(javaToVanillaBedrockBlocks, minCustomRuntimeID, javaToVanillaBedrockBlocks.length, airDefinition); - Arrays.fill(javaToBedrockBlocks, minCustomRuntimeID, javaToBedrockBlocks.length, airDefinition); - - Set usedNonVanillaRuntimeIDs = new ObjectOpenHashSet<>(); - - for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { - if (usedNonVanillaRuntimeIDs.contains(javaBlockState.javaId())) { - throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); - } - - // Build the GeyserBedrockBlock... - } - } - if (commandBlockDefinition == null) { throw new AssertionError("Unable to find command block in palette"); } @@ -346,6 +318,17 @@ private static void registerBedrockBlocks() { } builder.bedrockMovingBlock(movingBlockDefinition); + if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + // First ensure all non vanilla runtime IDs at minimum are air in case they aren't consecutive + Arrays.fill(javaToVanillaBedrockBlocks, minCustomRuntimeID, javaToVanillaBedrockBlocks.length, airDefinition); + Arrays.fill(javaToBedrockBlocks, minCustomRuntimeID, javaToBedrockBlocks.length, airDefinition); + + for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { + + // Build the GeyserBedrockBlock... + } + } + // Loop around again to find all item frame runtime IDs Object2ObjectMaps.fastForEach(blockStateOrderedMap, entry -> { String name = entry.getKey().getString("name"); @@ -377,7 +360,20 @@ private static void registerJavaBlocks() { throw new AssertionError("Unable to load Java block mappings", e); } - BlockRegistries.JAVA_BLOCKS.set(new BlockMapping[blocksJson.size()]); // Set array size to number of blockstates + javaBlocksSize = blocksJson.size(); + + if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + minCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); + maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); + + if (minCustomRuntimeID <= blocksJson.size()) { + throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + javaBlocksSize + ")"); + } + + javaBlocksSize = maxCustomRuntimeID; + } + + BlockRegistries.JAVA_BLOCKS.set(new BlockMapping[javaBlocksSize]); // Set array size to number of blockstates Deque cleanIdentifiers = new ArrayDeque<>(); @@ -515,6 +511,30 @@ private static void registerJavaBlocks() { } BlockStateValues.JAVA_WATER_ID = waterRuntimeId; + if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + Set usedNonVanillaRuntimeIDs = new HashSet<>(); + Set usedUniqueRuntimeIDs = new HashSet<>(); + + for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { + if (usedNonVanillaRuntimeIDs.contains(javaBlockState.javaId())) { + throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); + } + + CustomBlockState customBlockState = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().get(javaBlockState); + + BlockMapping nonVanillaBlockMapping = BlockMapping.builder() + .isNonVanilla(true) + .javaIdentifier(javaBlockState.identifier()) + .javaBlockId(javaBlockState.stateGroupId()) + .hardness(javaBlockState.blockHardness()) + .pistonBehavior(PistonBehavior.getByName(javaBlockState.pistonBehavior())) + .isBlockEntity(javaBlockState.hasBlockEntity()) + .build(); + + String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); + } + } + BlockRegistries.CLEAN_JAVA_IDENTIFIERS.set(cleanIdentifiers.toArray(new String[0])); BLOCKS_JSON = blocksJson; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java index 34cde0acf23..5289991585f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java @@ -56,6 +56,7 @@ public class BlockMapping { @Nonnull PistonBehavior pistonBehavior; boolean isBlockEntity; + boolean isNonVanilla; /** * @return the identifier without the additional block states From 32dda8f258d61de7b53a0cc40ad330c3cf6e2210 Mon Sep 17 00:00:00 2001 From: RednedEpic Date: Sat, 24 Jun 2023 21:40:24 -0500 Subject: [PATCH 113/134] Add non-vanilla registration and fix a few bugs --- .../custom/NonVanillaCustomBlockData.java | 51 +++++++++++++++ .../level/block/GeyserCustomBlockData.java | 21 ++++--- .../GeyserNonVanillaCustomBlockData.java | 62 +++++++++++++++++++ .../geyser/registry/BlockRegistries.java | 2 +- .../loader/CollisionRegistryLoader.java | 5 ++ .../loader/ProviderRegistryLoader.java | 6 ++ .../populator/BlockRegistryPopulator.java | 48 +++++++++++--- .../populator/ItemRegistryPopulator.java | 8 +-- 8 files changed, 180 insertions(+), 23 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java new file mode 100644 index 00000000000..529a339ed3d --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom; + +import lombok.NonNull; +import org.geysermc.geyser.api.GeyserApi; + +/** + * Represents a completely custom block that is not based on an existing vanilla Minecraft block. + */ +public interface NonVanillaCustomBlockData extends CustomBlockData { + + /** + * Create a Builder for NonVanillaCustomBlockData + * + * @return A NonVanillaCustomBlockData Builder + */ + static NonVanillaCustomBlockData.Builder builder() { + return GeyserApi.api().provider(NonVanillaCustomBlockData.Builder.class); + } + + interface Builder extends CustomBlockData.Builder { + + Builder identifier(@NonNull String identifier); + + NonVanillaCustomBlockData build(); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index b6b4a2ca00f..c3ad4e0508d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.level.block; import it.unimi.dsi.fastutil.objects.*; +import lombok.RequiredArgsConstructor; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; @@ -43,19 +44,19 @@ import java.util.List; import java.util.Map; -@Value +@RequiredArgsConstructor public class GeyserCustomBlockData implements CustomBlockData { - String name; - boolean includedInCreativeInventory; - String creativeCategory; - String creativeGroup; - CustomBlockComponents components; - Map> properties; - List permutations; + private final String name; + private final boolean includedInCreativeInventory; + private final String creativeCategory; + private final String creativeGroup; + private final CustomBlockComponents components; + private final Map> properties; + private final List permutations; - Map defaultProperties; + private final Map defaultProperties; - private GeyserCustomBlockData(CustomBlockDataBuilder builder) { + GeyserCustomBlockData(CustomBlockDataBuilder builder) { this.name = builder.name; if (name == null) { throw new IllegalStateException("Name must be set"); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java new file mode 100644 index 00000000000..a9fde77995e --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; + +public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData implements NonVanillaCustomBlockData { + private final String identifier; + + GeyserNonVanillaCustomBlockData(NonVanillaCustomBlockDataBuilder builder) { + super(builder); + + this.identifier = builder.identifier; + if (identifier == null) { + throw new IllegalStateException("Identifier must be set"); + } + } + + @Override + public @NonNull String identifier() { + return this.identifier; + } + + public static class NonVanillaCustomBlockDataBuilder extends CustomBlockDataBuilder implements NonVanillaCustomBlockData.Builder { + private String identifier; + + @Override + public NonVanillaCustomBlockDataBuilder identifier(@NonNull String identifier) { + this.identifier = identifier; + return this; + } + + @Override + public NonVanillaCustomBlockData build() { + return new GeyserNonVanillaCustomBlockData(this); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 3a33b247737..5fc131fb51c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -139,9 +139,9 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); + CustomBlockRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); - CustomBlockRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java index 69ad16743e4..bf2d72b27b8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java @@ -79,6 +79,11 @@ public Int2ObjectMap load(Pair input) { Map collisionInstances = new Object2ObjectOpenHashMap<>(); for (int i = 0; i < blockMappings.length; i++) { BlockMapping blockMapping = blockMappings[i]; + if (blockMapping == null) { + GeyserImpl.getInstance().getLogger().warning("Missing block mapping for Java block " + i); + continue; + } + BlockCollision newCollision = instantiateCollision(blockMapping, annotationMap, collisionList); if (newCollision != null) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 3fe71dd0684..afb5b69407d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -26,7 +26,9 @@ package org.geysermc.geyser.registry.loader; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.event.EventRegistrar; import org.geysermc.geyser.api.extension.Extension; @@ -40,6 +42,8 @@ import org.geysermc.geyser.item.GeyserNonVanillaCustomItemData; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserJavaBlockState; +import org.geysermc.geyser.level.block.GeyserNonVanillaCustomBlockData; import org.geysermc.geyser.registry.provider.ProviderSupplier; import java.util.Map; @@ -55,6 +59,8 @@ public Map, ProviderSupplier> load(Map, ProviderSupplier> prov providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.CustomBlockComponentsBuilder()); providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); + providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.JavaBlockStateBuilder()); + providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.NonVanillaCustomBlockDataBuilder()); providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 52b8d95b18b..3b929353a3b 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -318,14 +318,31 @@ private static void registerBedrockBlocks() { } builder.bedrockMovingBlock(movingBlockDefinition); - if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + Map nonVanillaStateOverrides = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get(); + if (nonVanillaStateOverrides.size() > 0) { // First ensure all non vanilla runtime IDs at minimum are air in case they aren't consecutive Arrays.fill(javaToVanillaBedrockBlocks, minCustomRuntimeID, javaToVanillaBedrockBlocks.length, airDefinition); Arrays.fill(javaToBedrockBlocks, minCustomRuntimeID, javaToBedrockBlocks.length, airDefinition); - for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { + for (Map.Entry entry : nonVanillaStateOverrides.entrySet()) { + GeyserBedrockBlock bedrockDefinition = customBlockStateDefinitions.get(entry.getValue()); + if (bedrockDefinition == null) { + GeyserImpl.getInstance().getLogger().warning("Unable to find custom block for " + entry.getValue()); + continue; + } + + JavaBlockState javaState = entry.getKey(); + int stateRuntimeId = javaState.javaId(); + + String javaId = javaState.identifier(); + boolean waterlogged = javaId.contains("waterlogged=true"); + + if (waterlogged) { + BlockRegistries.WATERLOGGED.register(set -> set.set(stateRuntimeId)); + } - // Build the GeyserBedrockBlock... + javaToVanillaBedrockBlocks[stateRuntimeId] = bedrockDefinition; // TODO: Check this? + javaToBedrockBlocks[stateRuntimeId] = bedrockDefinition; } } @@ -366,11 +383,11 @@ private static void registerJavaBlocks() { minCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); - if (minCustomRuntimeID <= blocksJson.size()) { + if (minCustomRuntimeID < blocksJson.size()) { throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + javaBlocksSize + ")"); } - javaBlocksSize = maxCustomRuntimeID; + javaBlocksSize = maxCustomRuntimeID + 1; // Runtime ids start at 0, so we need to add 1 } BlockRegistries.JAVA_BLOCKS.set(new BlockMapping[javaBlocksSize]); // Set array size to number of blockstates @@ -522,16 +539,31 @@ private static void registerJavaBlocks() { CustomBlockState customBlockState = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().get(javaBlockState); - BlockMapping nonVanillaBlockMapping = BlockMapping.builder() + String javaId = javaBlockState.identifier(); + int stateRuntimeId = javaBlockState.javaId(); + BlockMapping blockMapping = BlockMapping.builder() .isNonVanilla(true) - .javaIdentifier(javaBlockState.identifier()) + .javaIdentifier(javaId) .javaBlockId(javaBlockState.stateGroupId()) .hardness(javaBlockState.blockHardness()) - .pistonBehavior(PistonBehavior.getByName(javaBlockState.pistonBehavior())) + .pistonBehavior(javaBlockState.pistonBehavior() == null ? PistonBehavior.NORMAL : PistonBehavior.getByName(javaBlockState.pistonBehavior())) .isBlockEntity(javaBlockState.hasBlockEntity()) .build(); String cleanJavaIdentifier = BlockUtils.getCleanIdentifier(javaBlockState.identifier()); + String bedrockIdentifier = customBlockState.block().identifier(); + + if (!cleanJavaIdentifier.equals(cleanIdentifiers.peekLast())) { + uniqueJavaId++; + cleanIdentifiers.add(cleanJavaIdentifier.intern()); + } + + BlockRegistries.JAVA_IDENTIFIER_TO_ID.register(javaId, stateRuntimeId); + BlockRegistries.JAVA_BLOCKS.register(stateRuntimeId, blockMapping); + + // Keeping this here since this is currently unchanged between versions + // It's possible to only have this store differences in names, but the key set of all Java names is used in sending command suggestions + BlockRegistries.JAVA_TO_BEDROCK_IDENTIFIERS.register(cleanJavaIdentifier.intern(), bedrockIdentifier.intern()); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index c5700c27f32..780fc3ff52a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -379,7 +379,7 @@ public static void populate() { int customProtocolId = nextFreeBedrockId++; mappingItem.setBedrockData(customProtocolId); bedrockIdentifier = customBlockData.identifier(); - definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, true); + definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, false); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlockData, definition); customIdMappings.put(customProtocolId, bedrockIdentifier); @@ -433,10 +433,10 @@ public static void populate() { for (CustomItemData customItem : customItemsToLoad) { int customProtocolId = nextFreeBedrockId++; - String customItemName = Constants.GEYSER_CUSTOM_NAMESPACE + ":" + customItem.name(); + String customItemName = customItem instanceof NonVanillaCustomItemData nonVanillaItem ? nonVanillaItem.identifier() : Constants.GEYSER_CUSTOM_NAMESPACE + ":" + customItem.name(); if (!registeredItemNames.add(customItemName)) { if (firstMappingsPass) { - GeyserImpl.getInstance().getLogger().error("Custom item name '" + customItem.name() + "' already exists and was registered again! Skipping..."); + GeyserImpl.getInstance().getLogger().error("Custom item name '" + customItemName + "' already exists and was registered again! Skipping..."); } continue; } @@ -562,7 +562,7 @@ public static void populate() { int customProtocolId = nextFreeBedrockId++; String identifier = customBlock.identifier(); - final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, true); + final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, false); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); From bc92b4f32ee36e7548e7c220bd5de018555e7116 Mon Sep 17 00:00:00 2001 From: RednedEpic Date: Sun, 25 Jun 2023 14:59:47 -0500 Subject: [PATCH 114/134] Fixes for non-vanilla blocks --- .../main/java/org/geysermc/geyser/GeyserImpl.java | 1 + .../registry/populator/ItemRegistryPopulator.java | 14 ++++++++++---- .../protocol/java/JavaUpdateRecipesTranslator.java | 6 +++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 8204cfd3b57..6277c338f9b 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -72,6 +72,7 @@ import org.geysermc.geyser.pack.ResourcePack; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.populator.RecipeRegistryPopulator; import org.geysermc.geyser.scoreboard.ScoreboardUpdater; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.PendingMicrosoftAuthentication; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 780fc3ff52a..57ceba55bba 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -51,6 +51,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; @@ -379,7 +380,7 @@ public static void populate() { int customProtocolId = nextFreeBedrockId++; mappingItem.setBedrockData(customProtocolId); bedrockIdentifier = customBlockData.identifier(); - definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, false); + definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, true); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlockData, definition); customIdMappings.put(customProtocolId, bedrockIdentifier); @@ -559,10 +560,17 @@ public static void populate() { if (customBlockItemDefinitions.containsKey(customBlock)) { continue; } + + // Non-vanilla custom blocks will be handled in the item + // registry, so we don't need to do anything here. + if (customBlock instanceof NonVanillaCustomBlockData) { + continue; + } + int customProtocolId = nextFreeBedrockId++; String identifier = customBlock.identifier(); - final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, false); + final ItemDefinition definition = new SimpleItemDefinition(identifier, customProtocolId, true); registry.put(customProtocolId, definition); customBlockItemDefinitions.put(customBlock, definition); customIdMappings.put(customProtocolId, identifier); @@ -577,8 +585,6 @@ public static void populate() { .count(1) .build()); } - - // And lastly we need to figure out what to do about non-vanilla custom blocks } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index bef6b988473..349da34b80c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -96,7 +96,7 @@ public void translate(GeyserSession session, ClientboundUpdateRecipesPacket pack case CRAFTING_SHAPELESS -> { ShapelessRecipeData shapelessRecipeData = (ShapelessRecipeData) recipe.getData(); ItemData output = ItemTranslator.translateToBedrock(session, shapelessRecipeData.getResult()); - if (output.equals(ItemData.AIR)) { + if (!output.isValid()) { // Likely modded item that Bedrock will complain about if it persists continue; } @@ -117,7 +117,7 @@ public void translate(GeyserSession session, ClientboundUpdateRecipesPacket pack case CRAFTING_SHAPED -> { ShapedRecipeData shapedRecipeData = (ShapedRecipeData) recipe.getData(); ItemData output = ItemTranslator.translateToBedrock(session, shapedRecipeData.getResult()); - if (output.equals(ItemData.AIR)) { + if (!output.isValid()) { // Likely modded item that Bedrock will complain about if it persists continue; } @@ -198,7 +198,7 @@ public void translate(GeyserSession session, ClientboundUpdateRecipesPacket pack ItemDescriptorWithCount descriptor = ItemDescriptorWithCount.fromItem(input); ItemStack javaOutput = stoneCuttingData.getResult(); ItemData output = ItemTranslator.translateToBedrock(session, javaOutput); - if (input.equals(ItemData.AIR) || output.equals(ItemData.AIR)) { + if (!input.isValid() || !output.isValid()) { // Probably modded items continue; } From e1118082b3554a3bcb00ddd4d1d36ec30f85017a Mon Sep 17 00:00:00 2001 From: RednedEpic Date: Sun, 25 Jun 2023 15:00:24 -0500 Subject: [PATCH 115/134] Remove import --- core/src/main/java/org/geysermc/geyser/GeyserImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 6277c338f9b..8204cfd3b57 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -72,7 +72,6 @@ import org.geysermc.geyser.pack.ResourcePack; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.populator.RecipeRegistryPopulator; import org.geysermc.geyser.scoreboard.ScoreboardUpdater; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.PendingMicrosoftAuthentication; From 25b5906f0ae02bd244fe892275469926b38e60f1 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 3 Jul 2023 16:50:52 -0700 Subject: [PATCH 116/134] CustomRegPop. go1st for now; must split for modded Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../java/org/geysermc/geyser/registry/BlockRegistries.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 5fc131fb51c..fda35e27f9c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -139,9 +139,11 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); - CustomBlockRegistryPopulator.populate(); + // We need to split so modded blocks are registered first + // CustomBlockRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); + CustomBlockRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } From 1d869611206232059cb3ee6886f52d29d0fbf9f9 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 14 Jul 2023 18:16:04 -0700 Subject: [PATCH 117/134] Address silent change to geo component for blocks Co-Authored-By: Unoqwy Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../populator/CustomBlockRegistryPopulator.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index c97a72cab81..91e1de78d6c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -8,6 +8,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v582.Bedrock_v582; +import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -263,9 +264,13 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox())); } if (components.geometry() != null) { - builder.putCompound("minecraft:geometry", NbtMap.builder() - .putString("value", components.geometry()) - .build()); + NbtMapBuilder geometryBuilder = NbtMap.builder(); + if (protocolVersion >= Bedrock_v594.CODEC.getProtocolVersion()) { + geometryBuilder.putString("identifier", components.geometry()); + } else { + geometryBuilder.putString("value", components.geometry()); + } + builder.putCompound("minecraft:geometry", geometryBuilder.build()); } if (!components.materialInstances().isEmpty()) { NbtMapBuilder materialsBuilder = NbtMap.builder(); From 50b8262aa9c8c01a2ed3171c155de9f5811ab798 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 29 Jul 2023 18:00:24 -0700 Subject: [PATCH 118/134] Seperate bedrock, vanilla, & nonvanilla block reg Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../GeyserDefineCustomBlocksEvent.java | 32 ----- .../GeyserRegisterNonVanillaBlocksEvent.java | 53 ++++++++ .../GeyserRegisterVanillaBlocksEvent.java | 53 ++++++++ .../geyser/registry/BlockRegistries.java | 7 +- .../CustomBlockRegistryPopulator.java | 115 +++++++++++++----- 5 files changed, 192 insertions(+), 68 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index 32a4236dcda..bb5bc3d1e01 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -45,36 +45,4 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param customBlockData the custom block to register */ public abstract void register(@NonNull CustomBlockData customBlockData); - - /** - * Registers the given {@link CustomBlockState} as an override for the - * given java state identifier - * Java state identifiers are listed in - * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json - * - * @param javaIdentifier the java state identifier to override - * @param customBlockState the custom block state with which to override java state identifier - */ - public abstract void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); - - /** - * Registers the given {@link CustomBlockData} as an override for the - * given java item identifier - * - * @param javaIdentifier the java item identifier to override - * @param customBlockData the custom block data with which to override java item identifier - */ - public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); - - // Modded implementation - // Basically instead of just the javaIdentifier we need an object that contains all the stuff we need to fully register the new java block - // e.g. identifier/namespace, runtime id, waterlogged, collision, etc. - // And this will be associated with a custom block state - - public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); - - // Then we can have a method to register an "item" associated with some custom block data - - public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); - } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java new file mode 100644 index 00000000000..c70cb5bc87a --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.event.Event; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; +import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; + +public interface GeyserRegisterNonVanillaBlocksEvent extends Event { + /** + * Registers the given {@link CustomBlockState} as an override for the + * given {@link JavaBlockState} + * + * @param javaBlockState the java block state for the non-vanilla block + * @param customBlockState the custom block state with which to override java state identifier + */ + public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); + + /** + * Registers the given {@link CustomBlockData} as an override for the + * given {@link JavaBlockItem } + * + * @param javaBlockItem the java block item for the non-vanilla block + * @param customBlockData the custom block data with which to override java item identifier + */ + public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java new file mode 100644 index 00000000000..57107f3b7a9 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.event.Event; +import org.geysermc.geyser.api.block.custom.CustomBlockData; +import org.geysermc.geyser.api.block.custom.CustomBlockState; + +public interface GeyserRegisterVanillaBlocksEvent extends Event { + /** + * Registers the given {@link CustomBlockState} as an override for the + * given java state identifier + * Java state identifiers are listed in + * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json + * + * @param javaIdentifier the java state identifier to override + * @param customBlockState the custom block state with which to override java state identifier + */ + public abstract void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); + + /** + * Registers the given {@link CustomBlockData} as an override for the + * given java item identifier + * + * @param javaIdentifier the java item identifier to override + * @param customBlockData the custom block data with which to override java item identifier + */ + public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index fda35e27f9c..c60683bcedb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -139,11 +139,12 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); - // We need to split so modded blocks are registered first - // CustomBlockRegistryPopulator.populate(); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.BEDROCK); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); - CustomBlockRegistryPopulator.populate(); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 91e1de78d6c..b8ddc280de6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -24,6 +24,8 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; +import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterNonVanillaBlocksEvent; +import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterVanillaBlocksEvent; import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; @@ -40,21 +42,43 @@ import java.util.Set; public class CustomBlockRegistryPopulator { + /** + * The stage of population + */ + public enum Stage { + BEDROCK, + VANILLA, + NON_VANILLA, + REGISTRATION; + } /** - * Registers all custom blocks defined by extensions and user supplied mappings + * Populates the custom block registries by stage + * @param stage the stage to populate */ - public static void populate() { + public static void populate(Stage stage) { if (!GeyserImpl.getInstance().getConfig().isAddNonBedrockItems()) { return; } - Set customBlockNames = new ObjectOpenHashSet<>(); - Set customBlocks = new ObjectOpenHashSet<>(); - Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); - Map nonVanillaBlockStateOverrides = new HashMap<>(); - Map customBlockItemOverrides = new HashMap<>(); - Map nonVanillaCustomItemOverrides = new HashMap<>(); + + switch (stage) { + case BEDROCK -> { populateBedrock(); } + case VANILLA -> { populateVanilla(); } + case NON_VANILLA -> { populateNonVanilla(); } + case REGISTRATION -> { registration(); } + default -> { throw new IllegalArgumentException("Unknown stage: " + stage); } + } + } + + private static Set customBlocks; + private static Set customBlockNames; + /** + * Initializes custom blocks defined by API + */ + private static void populateBedrock() { + customBlocks = new ObjectOpenHashSet<>(); + customBlockNames = new ObjectOpenHashSet<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void register(@NonNull CustomBlockData customBlockData) { @@ -69,7 +93,17 @@ public void register(@NonNull CustomBlockData customBlockData) { } customBlocks.add(customBlockData); } - + }); + } + + /** + * Registers all vanilla custom blocks and skulls defined by API and mappings + */ + private static void populateVanilla() { + Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); + Map customBlockItemOverrides = new HashMap<>(); + + GeyserImpl.getInstance().getEventBus().fire(new GeyserRegisterVanillaBlocksEvent() { @Override public void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { int id = BlockRegistries.JAVA_IDENTIFIER_TO_ID.getOrDefault(javaIdentifier, -1); @@ -86,14 +120,6 @@ public void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBloc } } - @Override - public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState) { - if (!customBlocks.contains(customBlockState.block())) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); - } - nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); - } - @Override public void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData) { if (!customBlocks.contains(customBlockData)) { @@ -101,14 +127,6 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom } customBlockItemOverrides.put(javaIdentifier, customBlockData); } - - @Override - public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { - if (!customBlocks.contains(customBlockData)) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); - } - nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); - } }); for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { @@ -139,23 +157,54 @@ public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull }); }); - BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); - GeyserImpl.getInstance().getLogger().info("Registered " + customBlocks.size() + " custom blocks."); - BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + blockStateOverrides.size() + " custom block overrides."); - BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(nonVanillaBlockStateOverrides); - GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaBlockStateOverrides.size() + " non-vanilla block overrides."); - BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(customBlockItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + customBlockItemOverrides.size() + " custom block item overrides."); + BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); + GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); + } + + /** + * Registers all non-vanilla custom blocks defined by API + */ + private static void populateNonVanilla() { + Map nonVanillaBlockStateOverrides = new HashMap<>(); + Map nonVanillaCustomItemOverrides = new HashMap<>(); + + GeyserImpl.getInstance().getEventBus().fire(new GeyserRegisterNonVanillaBlocksEvent() { + @Override + public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState) { + if (!customBlocks.contains(customBlockState.block())) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); + } + nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); + } + + @Override + public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { + if (!customBlocks.contains(customBlockData)) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); + } + nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); + } + }); + + BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(nonVanillaBlockStateOverrides); + GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaBlockStateOverrides.size() + " non-vanilla block overrides."); + BlockRegistries.NON_VANILLA_CUSTOM_BLOCK_ITEM_OVERRIDES.set(nonVanillaCustomItemOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaCustomItemOverrides.size() + " non-vanilla custom item overrides."); + } - BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); - GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); + /** + * Registers all bedrock custom blocks defined in previous stages + */ + private static void registration() { + BlockRegistries.CUSTOM_BLOCKS.set(customBlocks.toArray(new CustomBlockData[0])); + GeyserImpl.getInstance().getLogger().info("Registered " + customBlocks.size() + " custom blocks."); } /** From 6ba0bf18c68c0ee9212f4dbeee2544bc197f2e70 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 29 Jul 2023 23:12:21 -0700 Subject: [PATCH 119/134] Single event Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../GeyserDefineCustomBlocksEvent.java | 39 ++++++++- .../GeyserRegisterNonVanillaBlocksEvent.java | 53 ------------ .../GeyserRegisterVanillaBlocksEvent.java | 53 ------------ .../geyser/registry/BlockRegistries.java | 8 +- .../CustomBlockRegistryPopulator.java | 81 +++++++++---------- 5 files changed, 81 insertions(+), 153 deletions(-) delete mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java delete mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index bb5bc3d1e01..b8aba1362c3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -38,11 +38,48 @@ * This event will not be called if the "add-non-bedrock-items" setting is disabled in the Geyser config. */ public abstract class GeyserDefineCustomBlocksEvent implements Event { - /** * Registers the given {@link CustomBlockData} as a custom block * * @param customBlockData the custom block to register */ public abstract void register(@NonNull CustomBlockData customBlockData); + + /** + * Registers the given {@link CustomBlockState} as an override for the + * given java state identifier + * Java state identifiers are listed in + * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json + * + * @param javaIdentifier the java state identifier to override + * @param customBlockState the custom block state with which to override java state identifier + */ + public abstract void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); + + /** + * Registers the given {@link CustomBlockData} as an override for the + * given java item identifier + * + * @param javaIdentifier the java item identifier to override + * @param customBlockData the custom block data with which to override java item identifier + */ + public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); + + /** + * Registers the given {@link CustomBlockState} as an override for the + * given {@link JavaBlockState} + * + * @param javaBlockState the java block state for the non-vanilla block + * @param customBlockState the custom block state with which to override java state identifier + */ + public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); + + /** + * Registers the given {@link CustomBlockData} as an override for the + * given {@link JavaBlockItem } + * + * @param javaBlockItem the java block item for the non-vanilla block + * @param customBlockData the custom block data with which to override java item identifier + */ + public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java deleted file mode 100644 index c70cb5bc87a..00000000000 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterNonVanillaBlocksEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.event.lifecycle; - -import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.event.Event; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; -import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; - -public interface GeyserRegisterNonVanillaBlocksEvent extends Event { - /** - * Registers the given {@link CustomBlockState} as an override for the - * given {@link JavaBlockState} - * - * @param javaBlockState the java block state for the non-vanilla block - * @param customBlockState the custom block state with which to override java state identifier - */ - public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); - - /** - * Registers the given {@link CustomBlockData} as an override for the - * given {@link JavaBlockItem } - * - * @param javaBlockItem the java block item for the non-vanilla block - * @param customBlockData the custom block data with which to override java item identifier - */ - public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); -} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java deleted file mode 100644 index 57107f3b7a9..00000000000 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserRegisterVanillaBlocksEvent.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.api.event.lifecycle; - -import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.event.Event; -import org.geysermc.geyser.api.block.custom.CustomBlockData; -import org.geysermc.geyser.api.block.custom.CustomBlockState; - -public interface GeyserRegisterVanillaBlocksEvent extends Event { - /** - * Registers the given {@link CustomBlockState} as an override for the - * given java state identifier - * Java state identifiers are listed in - * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json - * - * @param javaIdentifier the java state identifier to override - * @param customBlockState the custom block state with which to override java state identifier - */ - public abstract void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState); - - /** - * Registers the given {@link CustomBlockData} as an override for the - * given java item identifier - * - * @param javaIdentifier the java item identifier to override - * @param customBlockData the custom block data with which to override java item identifier - */ - public abstract void registerItemOverride(@NonNull String javaIdentifier, @NonNull CustomBlockData customBlockData); -} diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index c60683bcedb..d6f14033107 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -139,12 +139,12 @@ public class BlockRegistries { static { CustomSkullRegistryPopulator.populate(); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.PRE_INIT); - CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.BEDROCK); - CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.DEFINITION); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.NON_VANILLA_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_JAVA); COLLISIONS = IntMappedRegistry.create(Pair.of("org.geysermc.geyser.translator.collision.CollisionRemapper", "mappings/collision.json"), CollisionRegistryLoader::new); - CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA); - CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.REGISTRATION); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.VANILLA_REGISTRATION); + CustomBlockRegistryPopulator.populate(CustomBlockRegistryPopulator.Stage.CUSTOM_REGISTRATION); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.INIT_BEDROCK); BlockRegistryPopulator.populate(BlockRegistryPopulator.Stage.POST_INIT); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index b8ddc280de6..7b7cf47ae84 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -24,8 +24,6 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; -import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterNonVanillaBlocksEvent; -import org.geysermc.geyser.api.event.lifecycle.GeyserRegisterVanillaBlocksEvent; import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; @@ -46,10 +44,10 @@ public class CustomBlockRegistryPopulator { * The stage of population */ public enum Stage { - BEDROCK, - VANILLA, - NON_VANILLA, - REGISTRATION; + DEFINITION, + VANILLA_REGISTRATION, + NON_VANILLA_REGISTRATION, + CUSTOM_REGISTRATION; } /** @@ -62,16 +60,20 @@ public static void populate(Stage stage) { } switch (stage) { - case BEDROCK -> { populateBedrock(); } - case VANILLA -> { populateVanilla(); } - case NON_VANILLA -> { populateNonVanilla(); } - case REGISTRATION -> { registration(); } + case DEFINITION -> { populateBedrock(); } + case VANILLA_REGISTRATION -> { populateVanilla(); } + case NON_VANILLA_REGISTRATION -> { populateNonVanilla(); } + case CUSTOM_REGISTRATION -> { registration(); } default -> { throw new IllegalArgumentException("Unknown stage: " + stage); } } } private static Set customBlocks; private static Set customBlockNames; + private static Int2ObjectMap blockStateOverrides; + private static Map customBlockItemOverrides; + private static Map nonVanillaBlockStateOverrides; + private static Map nonVanillaCustomItemOverrides; /** * Initializes custom blocks defined by API @@ -79,6 +81,11 @@ public static void populate(Stage stage) { private static void populateBedrock() { customBlocks = new ObjectOpenHashSet<>(); customBlockNames = new ObjectOpenHashSet<>(); + blockStateOverrides = new Int2ObjectOpenHashMap<>(); + customBlockItemOverrides = new HashMap<>(); + nonVanillaBlockStateOverrides = new HashMap<>(); + nonVanillaCustomItemOverrides = new HashMap<>(); + GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void register(@NonNull CustomBlockData customBlockData) { @@ -93,17 +100,7 @@ public void register(@NonNull CustomBlockData customBlockData) { } customBlocks.add(customBlockData); } - }); - } - /** - * Registers all vanilla custom blocks and skulls defined by API and mappings - */ - private static void populateVanilla() { - Int2ObjectMap blockStateOverrides = new Int2ObjectOpenHashMap<>(); - Map customBlockItemOverrides = new HashMap<>(); - - GeyserImpl.getInstance().getEventBus().fire(new GeyserRegisterVanillaBlocksEvent() { @Override public void registerOverride(@NonNull String javaIdentifier, @NonNull CustomBlockState customBlockState) { int id = BlockRegistries.JAVA_IDENTIFIER_TO_ID.getOrDefault(javaIdentifier, -1); @@ -127,8 +124,29 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom } customBlockItemOverrides.put(javaIdentifier, customBlockData); } + + @Override + public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState) { + if (!customBlocks.contains(customBlockState.block())) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); + } + nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); + } + + @Override + public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { + if (!customBlocks.contains(customBlockData)) { + throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); + } + nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); + } }); - + } + + /** + * Registers all vanilla custom blocks and skulls defined by API and mappings + */ + private static void populateVanilla() { for (CustomSkull customSkull : BlockRegistries.CUSTOM_SKULLS.get().values()) { customBlocks.add(customSkull.getCustomBlockData()); } @@ -171,27 +189,6 @@ public void registerItemOverride(@NonNull String javaIdentifier, @NonNull Custom * Registers all non-vanilla custom blocks defined by API */ private static void populateNonVanilla() { - Map nonVanillaBlockStateOverrides = new HashMap<>(); - Map nonVanillaCustomItemOverrides = new HashMap<>(); - - GeyserImpl.getInstance().getEventBus().fire(new GeyserRegisterNonVanillaBlocksEvent() { - @Override - public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState) { - if (!customBlocks.contains(customBlockState.block())) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockState.name()); - } - nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); - } - - @Override - public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { - if (!customBlocks.contains(customBlockData)) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); - } - nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); - } - }); - BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(nonVanillaBlockStateOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaBlockStateOverrides.size() + " non-vanilla block overrides."); From df1aa27fa8e92d00fe88d70a712a9402e6f95195 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 30 Jul 2023 12:54:00 -0700 Subject: [PATCH 120/134] Impl MaterialInstance as builder per @Redned235 Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../custom/component/MaterialInstance.java | 59 ++++++++-- .../level/block/GeyserCustomBlockData.java | 1 - .../level/block/GeyserMaterialInstance.java | 102 ++++++++++++++++++ .../mappings/versions/MappingsReader_v1.java | 8 +- .../CustomBlockRegistryPopulator.java | 8 +- .../geyser/registry/type/CustomSkull.java | 9 +- 6 files changed, 175 insertions(+), 12 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java index bed877ae896..26edab2f63e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/MaterialInstance.java @@ -26,14 +26,59 @@ package org.geysermc.geyser.api.block.custom.component; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.GeyserApi; /** - * This class is used to store a material instance for a custom block. - * - * @param texture The texture of the block - * @param renderMethod The render method of the block - * @param faceDimming Whether the block should be dimmed on certain faces - * @param ambientOcclusion Whether the block should have ambient occlusion + * This class is used to store data for a material instance. */ -public record MaterialInstance(@NonNull String texture, @NonNull String renderMethod, boolean faceDimming, boolean ambientOcclusion) { +public interface MaterialInstance { + /** + * Gets the texture of the block + * + * @return The texture of the block. + */ + @NonNull String texture(); + + /** + * Gets the render method of the block + * + * @return The render method of the block. + */ + @Nullable String renderMethod(); + + /** + * Gets if the block should be dimmed on certain faces + * + * @return If the block should be dimmed on certain faces. + */ + @Nullable boolean faceDimming(); + + /** + * Gets if the block should have ambient occlusion + * + * @return If the block should have ambient occlusion. + */ + @Nullable boolean ambientOcclusion(); + + /** + * Creates a builder for MaterialInstance. + * + * @return a builder for MaterialInstance + */ + static MaterialInstance.Builder builder() { + return GeyserApi.api().provider(MaterialInstance.Builder.class); + } + + interface Builder { + Builder texture(@NonNull String texture); + + Builder renderMethod(@Nullable String renderMethod); + + Builder faceDimming(@Nullable boolean faceDimming); + + Builder ambientOcclusion(@Nullable boolean ambientOcclusion); + + MaterialInstance build(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index c3ad4e0508d..327d2b9177d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -27,7 +27,6 @@ import it.unimi.dsi.fastutil.objects.*; import lombok.RequiredArgsConstructor; -import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java new file mode 100644 index 00000000000..80a880152f1 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import lombok.RequiredArgsConstructor; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; + +@RequiredArgsConstructor +public class GeyserMaterialInstance implements MaterialInstance { + private final String texture; + private final String renderMethod; + private final boolean faceDimming; + private final boolean ambientOcclusion; + + GeyserMaterialInstance(MaterialInstanceBuilder builder) { + this.texture = builder.texture; + this.renderMethod = builder.renderMethod; + this.faceDimming = builder.faceDimming; + this.ambientOcclusion = builder.ambientOcclusion; + } + + @Override + public @NonNull String texture() { + return texture; + } + + @Override + public @Nullable String renderMethod() { + return renderMethod; + } + + @Override + public @Nullable boolean faceDimming() { + return faceDimming; + } + + @Override + public @Nullable boolean ambientOcclusion() { + return ambientOcclusion; + } + + public static class MaterialInstanceBuilder implements Builder { + private String texture; + private String renderMethod; + private boolean faceDimming; + private boolean ambientOcclusion; + + @Override + public Builder texture(@NonNull String texture) { + this.texture = texture; + return this; + } + + @Override + public Builder renderMethod(@Nullable String renderMethod) { + this.renderMethod = renderMethod; + return this; + } + + @Override + public Builder faceDimming(@Nullable boolean faceDimming) { + this.faceDimming = faceDimming; + return this; + } + + @Override + public Builder ambientOcclusion(@Nullable boolean ambientOcclusion) { + this.ambientOcclusion = ambientOcclusion; + return this; + } + + @Override + public MaterialInstance build() { + return new GeyserMaterialInstance(this); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index dfd9fda656e..d6b4c7f163a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -42,6 +42,7 @@ import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; +import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.CustomBlockComponentsMapping; @@ -591,7 +592,12 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n ambientOcclusion = node.get("ambient_occlusion").asBoolean(); } - return new MaterialInstance(texture, renderMethod, faceDimming, ambientOcclusion); + return new MaterialInstanceBuilder() + .texture(texture) + .renderMethod(renderMethod) + .faceDimming(faceDimming) + .ambientOcclusion(ambientOcclusion) + .build(); } /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 7b7cf47ae84..30dea0e295e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -27,6 +27,7 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; +import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; @@ -448,7 +449,12 @@ private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComp new CustomBlockComponentsBuilder() .collisionBox(boxComponent) .selectionBox(BoxComponent.emptyBox()) - .materialInstance("*", new MaterialInstance("glass", "alpha_test", false, false)) + .materialInstance("*", new MaterialInstanceBuilder() + .texture("glass") + .renderMethod("alpha_test") + .faceDimming(false) + .ambientOcclusion(false) + .build()) .lightDampening(0) .geometry("geometry.invisible") .build()) diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index b23a607d3a1..db85b3e2e27 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -31,10 +31,10 @@ import org.geysermc.geyser.api.block.custom.CustomBlockState; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; -import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import java.util.ArrayList; import java.util.List; @@ -66,7 +66,12 @@ public CustomSkull(String skinHash) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .destructibleByMining(1.5f) - .materialInstance("*", new MaterialInstance("geyser." + skinHash + "_player_skin", "alpha_test", true, true)) + .materialInstance("*", new MaterialInstanceBuilder() + .texture("geyser." + skinHash + "_player_skin") + .renderMethod("alpha_test") + .faceDimming(true) + .ambientOcclusion(true) + .build()) .lightDampening(0) .placeAir(true) .build(); From 4ff4c052152d440c9b4b238db13f1fc097653a67 Mon Sep 17 00:00:00 2001 From: ImDaBigBoss <67973871+ImDaBigBoss@users.noreply.github.com> Date: Sat, 5 Aug 2023 01:34:34 +0200 Subject: [PATCH 121/134] Added creative category enum & added some missing overrides (#7) --- .../api/block/custom/CustomBlockData.java | 5 +- .../custom/NonVanillaCustomBlockData.java | 35 ++++++++++- .../geyser/api/util/CreativeCategory.java | 62 +++++++++++++++++++ .../level/block/GeyserCustomBlockData.java | 9 +-- .../GeyserNonVanillaCustomBlockData.java | 51 +++++++++++++++ .../mappings/versions/MappingsReader_v1.java | 10 ++- .../CustomBlockRegistryPopulator.java | 5 +- 7 files changed, 166 insertions(+), 11 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java index d097369a174..9f142faabd6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockData.java @@ -30,6 +30,7 @@ import org.geysermc.geyser.api.GeyserApi; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; +import org.geysermc.geyser.api.util.CreativeCategory; import java.util.List; import java.util.Map; @@ -64,7 +65,7 @@ public interface CustomBlockData { * * @return the item's creative category */ - @Nullable String creativeCategory(); + @Nullable CreativeCategory creativeCategory(); /** * Gets the item's creative group. @@ -123,7 +124,7 @@ interface Builder { Builder includedInCreativeInventory(boolean includedInCreativeInventory); - Builder creativeCategory(@Nullable String creativeCategory); + Builder creativeCategory(@Nullable CreativeCategory creativeCategory); Builder creativeGroup(@Nullable String creativeGroup); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java index 529a339ed3d..23c67449c2d 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java @@ -25,8 +25,13 @@ package org.geysermc.geyser.api.block.custom; -import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.GeyserApi; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.util.CreativeCategory; + +import java.util.List; /** * Represents a completely custom block that is not based on an existing vanilla Minecraft block. @@ -46,6 +51,34 @@ interface Builder extends CustomBlockData.Builder { Builder identifier(@NonNull String identifier); + @Override + Builder name(@NonNull String name); + + @Override + Builder includedInCreativeInventory(boolean includedInCreativeInventory); + + @Override + Builder creativeCategory(@Nullable CreativeCategory creativeCategory); + + @Override + Builder creativeGroup(@Nullable String creativeGroup); + + @Override + Builder components(@NonNull CustomBlockComponents components); + + @Override + Builder booleanProperty(@NonNull String propertyName); + + @Override + Builder intProperty(@NonNull String propertyName, List values); + + @Override + Builder stringProperty(@NonNull String propertyName, List values); + + @Override + Builder permutations(@NonNull List permutations); + + @Override NonVanillaCustomBlockData build(); } } diff --git a/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java new file mode 100644 index 00000000000..af79c195615 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.util; + +/** + * Represents the creative menu categories or tabs. + */ +public enum CreativeCategory { + COMMANDS("commands", 1), + CONSTRUCTION("construction", 2), + EQUIPMENT("equipment", 3), + ITEMS("items", 4), + NATURE("nature", 5), + NONE("none", 6); + + private final String internalName; + private final int id; + + CreativeCategory(String internalName, int id) { + this.internalName = internalName; + this.id = id; + } + + /** + * Gets the internal name of the category. + * @return the name of the category + */ + public String internalName() { + return internalName; + } + + /** + * Gets the internal ID of the category. + * @return the ID of the category + */ + public int id() { + return id; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 327d2b9177d..413a4d1edba 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -36,6 +36,7 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; +import org.geysermc.geyser.api.util.CreativeCategory; import org.jetbrains.annotations.NotNull; import javax.annotation.Nullable; @@ -47,7 +48,7 @@ public class GeyserCustomBlockData implements CustomBlockData { private final String name; private final boolean includedInCreativeInventory; - private final String creativeCategory; + private final CreativeCategory creativeCategory; private final String creativeGroup; private final CustomBlockComponents components; private final Map> properties; @@ -111,7 +112,7 @@ public boolean includedInCreativeInventory() { } @Override - public @Nullable String creativeCategory() { + public @Nullable CreativeCategory creativeCategory() { return creativeCategory; } @@ -148,7 +149,7 @@ public CustomBlockComponents components() { public static class CustomBlockDataBuilder implements Builder { private String name; private boolean includedInCreativeInventory; - private String creativeCategory; + private CreativeCategory creativeCategory; private String creativeGroup; private CustomBlockComponents components; private final Object2ObjectMap> properties = new Object2ObjectOpenHashMap<>(); @@ -167,7 +168,7 @@ public Builder includedInCreativeInventory(boolean includedInCreativeInventory) } @Override - public Builder creativeCategory(@Nullable String creativeCategory) { + public Builder creativeCategory(@Nullable CreativeCategory creativeCategory) { this.creativeCategory = creativeCategory; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java index a9fde77995e..bdc69e322ea 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java @@ -26,7 +26,13 @@ package org.geysermc.geyser.level.block; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.util.CreativeCategory; + +import java.util.List; public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData implements NonVanillaCustomBlockData { private final String identifier; @@ -54,6 +60,51 @@ public NonVanillaCustomBlockDataBuilder identifier(@NonNull String identifier) { return this; } + @Override + public NonVanillaCustomBlockDataBuilder name(@NonNull String name) { + return (NonVanillaCustomBlockDataBuilder) super.name(name); + } + + @Override + public NonVanillaCustomBlockDataBuilder includedInCreativeInventory(boolean includedInCreativeInventory) { + return (NonVanillaCustomBlockDataBuilder) super.includedInCreativeInventory(includedInCreativeInventory); + } + + @Override + public NonVanillaCustomBlockDataBuilder creativeCategory(@Nullable CreativeCategory creativeCategories) { + return (NonVanillaCustomBlockDataBuilder) super.creativeCategory(creativeCategories); + } + + @Override + public NonVanillaCustomBlockDataBuilder creativeGroup(@Nullable String creativeGroup) { + return (NonVanillaCustomBlockDataBuilder) super.creativeGroup(creativeGroup); + } + + @Override + public NonVanillaCustomBlockDataBuilder components(@NonNull CustomBlockComponents components) { + return (NonVanillaCustomBlockDataBuilder) super.components(components); + } + + @Override + public NonVanillaCustomBlockDataBuilder booleanProperty(@NonNull String propertyName) { + return (NonVanillaCustomBlockDataBuilder) super.booleanProperty(propertyName); + } + + @Override + public NonVanillaCustomBlockDataBuilder intProperty(@NonNull String propertyName, List values) { + return (NonVanillaCustomBlockDataBuilder) super.intProperty(propertyName, values); + } + + @Override + public NonVanillaCustomBlockDataBuilder stringProperty(@NonNull String propertyName, List values) { + return (NonVanillaCustomBlockDataBuilder) super.stringProperty(propertyName, values); + } + + @Override + public NonVanillaCustomBlockDataBuilder permutations(@NonNull List permutations) { + return (NonVanillaCustomBlockDataBuilder) super.permutations(permutations); + } + @Override public NonVanillaCustomBlockData build() { return new GeyserNonVanillaCustomBlockData(this); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index d6b4c7f163a..812b4d49745 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -39,6 +39,7 @@ import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; +import org.geysermc.geyser.api.util.CreativeCategory; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; @@ -200,9 +201,14 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node boolean includedInCreativeInventory = node.has("included_in_creative_inventory") && node.get("included_in_creative_inventory").asBoolean(); - String creativeCategory = "none"; + CreativeCategory creativeCategory = CreativeCategory.NONE; if (node.has("creative_category")) { - creativeCategory = node.get("creative_category").asText(); + String categoryName = node.get("creative_category").asText(); + try { + creativeCategory = CreativeCategory.valueOf(categoryName); + } catch (IllegalArgumentException e) { + throw new InvalidCustomMappingsFileException("Invalid creative category \"" + categoryName + "\" for block \"" + name + "\""); + } } String creativeGroup = ""; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 30dea0e295e..7feb2880b66 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -24,6 +24,7 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; +import org.geysermc.geyser.api.util.CreativeCategory; import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; @@ -268,7 +269,7 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, properties.add(propertyBuilder.build()); } - String creativeCategory = customBlock.creativeCategory() != null ? customBlock.creativeCategory() : "none"; + CreativeCategory creativeCategory = customBlock.creativeCategory() != null ? customBlock.creativeCategory() : CreativeCategory.NONE; String creativeGroup = customBlock.creativeGroup() != null ? customBlock.creativeGroup() : ""; NbtMap propertyTag = NbtMap.builder() .putCompound("components", CustomBlockRegistryPopulator.convertComponents(customBlock.components(), protocolVersion)) @@ -276,7 +277,7 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, // in the future, this can be used to replace items in the creative inventory // this would require us to map https://wiki.bedrock.dev/documentation/creative-categories.html#for-blocks programatically .putCompound("menu_category", NbtMap.builder() - .putString("category", creativeCategory) + .putString("category", creativeCategory.internalName()) .putString("group", creativeGroup) .putBoolean("is_hidden_in_commands", false) .build()) From 5db3101df3aa478cfa2334c26ccad9561ef4dc09 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 4 Aug 2023 17:16:25 -0700 Subject: [PATCH 122/134] Add material instance to provider registry Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geysermc/geyser/registry/loader/ProviderRegistryLoader.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index af7583e37f3..34fce1050b5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -44,6 +44,7 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; import org.geysermc.geyser.level.block.GeyserJavaBlockState; +import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.level.block.GeyserNonVanillaCustomBlockData; import org.geysermc.geyser.pack.path.GeyserPathPackCodec; import org.geysermc.geyser.registry.provider.ProviderSupplier; @@ -65,6 +66,7 @@ public Map, ProviderSupplier> load(Map, ProviderSupplier> prov providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.JavaBlockStateBuilder()); providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.NonVanillaCustomBlockDataBuilder()); + providers.put(GeyserMaterialInstance.Builder.class, args -> new GeyserMaterialInstance.MaterialInstanceBuilder()); providers.put(EventRegistrar.class, args -> new GeyserEventRegistrar(args[0])); providers.put(PathPackCodec.class, args -> new GeyserPathPackCodec((Path) args[0])); From 265a65709bbe76d850b5e430700eb751e0a8b949 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 4 Aug 2023 17:17:44 -0700 Subject: [PATCH 123/134] oops Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/registry/loader/ProviderRegistryLoader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 34fce1050b5..45ca04b9e6e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -28,6 +28,7 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.event.EventRegistrar; @@ -66,7 +67,7 @@ public Map, ProviderSupplier> load(Map, ProviderSupplier> prov providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.JavaBlockStateBuilder()); providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.NonVanillaCustomBlockDataBuilder()); - providers.put(GeyserMaterialInstance.Builder.class, args -> new GeyserMaterialInstance.MaterialInstanceBuilder()); + providers.put(MaterialInstance.Builder.class, args -> new GeyserMaterialInstance.MaterialInstanceBuilder()); providers.put(EventRegistrar.class, args -> new GeyserEventRegistrar(args[0])); providers.put(PathPackCodec.class, args -> new GeyserPathPackCodec((Path) args[0])); From e40cab2f7432c4567a82f34438d40348c8a8d2b7 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 4 Aug 2023 17:58:59 -0700 Subject: [PATCH 124/134] Fix case of correctBedrockIdentifier not found Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/registry/populator/ItemRegistryPopulator.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 70966bdbfef..f243d358a09 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -60,12 +60,6 @@ import org.geysermc.geyser.item.GeyserCustomMappingData; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.type.BlockMappings; -import org.geysermc.geyser.registry.type.GeyserMappingItem; -import org.geysermc.geyser.registry.type.ItemMapping; -import org.geysermc.geyser.registry.type.ItemMappings; -import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; -import org.geysermc.geyser.registry.type.PaletteItem; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.*; @@ -282,7 +276,7 @@ public static void populate() { bedrockBlock = blockOverride; } else { // Try to get an example block runtime ID from the creative contents packet, for Bedrock identifier obtaining - int aValidBedrockBlockId = blacklistedIdentifiers.getOrDefault(bedrockIdentifier, -1); + int aValidBedrockBlockId = blacklistedIdentifiers.getOrDefault(bedrockIdentifier, customBlockItemOverride != null ? customBlockItemOverride.getRuntimeId() : -1); if (aValidBedrockBlockId == -1 && customBlockItemOverride == null) { // Fallback bedrockBlock = blockMappings.getBedrockBlock(firstBlockRuntimeId); From 5d530ab7d79bbb9cdfceed4a393c127a266792d3 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 4 Aug 2023 18:22:26 -0700 Subject: [PATCH 125/134] Fix docs Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../api/block/custom/CustomBlockState.java | 2 +- .../custom/nonvanilla/JavaBlockState.java | 55 +++++++++++++++++++ .../block/custom/property/PropertyType.java | 10 ++-- .../geyser/api/util/CreativeCategory.java | 6 +- 4 files changed, 66 insertions(+), 7 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java index 44ed2997020..70b3c1e2d23 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/CustomBlockState.java @@ -54,7 +54,7 @@ public interface CustomBlockState { * @param propertyName the property name * @return the boolean, int, or string property. */ - @NonNull T property(String propertyName); + @NonNull T property(@NonNull String propertyName); /** * Gets a map of the properties for the state diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java index 5448c5f95ce..6293506a8ee 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java @@ -6,26 +6,81 @@ import org.geysermc.geyser.api.GeyserApi; public interface JavaBlockState { + /** + * Gets the identifier of the block state + * + * @return the identifier of the block state + */ @NonNull String identifier(); + /** + * Gets the Java ID of the block state + * + * @return the Java ID of the block state + */ @NonNegative int javaId(); + /** + * Gets the state group ID of the block state + * + * @return the state group ID of the block state + */ @NonNegative int stateGroupId(); + /** + * Gets the block hardness of the block state + * + * @return the block hardness of the block state + */ @NonNegative float blockHardness(); + /** + * Gets whether the block state is waterlogged + * + * @return whether the block state is waterlogged + */ @NonNull boolean waterlogged(); + /** + * Gets the collision of the block state + * + * @return the collision of the block state + */ @NonNull JavaBoundingBox[] collision(); + /** + * Gets whether the block state can be broken with hand + * + * @return whether the block state can be broken with hand + */ @NonNull boolean canBreakWithHand(); + /** + * Gets the pick item of the block state + * + * @return the pick item of the block state + */ @Nullable String pickItem(); + /** + * Gets the piston behavior of the block state + * + * @return the piston behavior of the block state + */ @Nullable String pistonBehavior(); + /** + * Gets whether the block state has block entity + * + * @return whether the block state has block entity + */ @Nullable boolean hasBlockEntity(); + /** + * Creates a new {@link JavaBlockState.Builder} instance + * + * @return a new {@link JavaBlockState.Builder} instance + */ static JavaBlockState.Builder builder() { return GeyserApi.api().provider(JavaBlockState.Builder.class); } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java index 3ab73243b4c..48f25c36c90 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/property/PropertyType.java @@ -40,7 +40,7 @@ public class PropertyType { * * @return The property type for a boolean. */ - public static PropertyType booleanProp() { + @NonNull public static PropertyType booleanProp() { return BOOLEAN; } @@ -49,7 +49,7 @@ public static PropertyType booleanProp() { * * @return The property type for an integer. */ - public static PropertyType integerProp() { + @NonNull public static PropertyType integerProp() { return INTEGER; } @@ -58,18 +58,18 @@ public static PropertyType integerProp() { * * @return The property type for a string. */ - public static PropertyType stringProp() { + @NonNull public static PropertyType stringProp() { return STRING; } - @NonNull private final Class typeClass; + private final Class typeClass; /** * Gets the class of the property type * * @return The class of the property type. */ - public Class typeClass() { + @NonNull public Class typeClass() { return typeClass; } diff --git a/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java index af79c195615..7519ff15720 100644 --- a/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java +++ b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.api.util; +import org.checkerframework.checker.nullness.qual.NonNull; + /** * Represents the creative menu categories or tabs. */ @@ -46,14 +48,16 @@ public enum CreativeCategory { /** * Gets the internal name of the category. + * * @return the name of the category */ - public String internalName() { + @NonNull public String internalName() { return internalName; } /** * Gets the internal ID of the category. + * * @return the ID of the category */ public int id() { From ac249b0ebcedbc3e5be76b7a02684741a093fba5 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 8 Aug 2023 19:32:52 -0700 Subject: [PATCH 126/134] Address @Camotoy's review Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../level/JavaLevelChunkWithLightTranslator.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 03b07187652..080d5df8ed6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -87,7 +87,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4)); if (bedrockSectionY < 0 || maxBedrockSectionY < bedrockSectionY) { // Ignore this chunk section since it goes outside the bounds accepted by the Bedrock client - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { EXTENDED_COLLISIONS_STORAGE.get().clear(); } extendedCollisionNextSection = false; @@ -139,7 +139,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // No need to encode an empty section... if (javaSection.isBlockCountEmpty()) { // Unless we need to send extended collisions - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { if (extendedCollision) { int blocks = EXTENDED_COLLISIONS_STORAGE.get().bottomLayerCollisions() + 1; BitArray bedrockData = BitArrayVersion.forBitsCeil(Integer.SIZE - Integer.numberOfLeadingZeros(blocks)).createArray(BlockStorage.SIZE); @@ -179,7 +179,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } // Extended collision blocks - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { if (EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY) != 0) { if (javaId == BlockStateValues.JAVA_AIR_ID) { section.getBlockStorageArray()[0].setFullBlock(xzy, EXTENDED_COLLISIONS_STORAGE.get().get(yzx, sectionY)); @@ -221,7 +221,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke } else { sections[bedrockSectionY] = new GeyserChunkSection(new BlockStorage[] {blockStorage}, bedrockSectionY); } - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { EXTENDED_COLLISIONS_STORAGE.get().clear(); extendedCollisionNextSection = false; } @@ -248,7 +248,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke airPaletteId = i; } - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { if (session.getBlockMappings().getExtendedCollisionBoxes().get(javaId) != null) { extendedCollision = true; extendedCollisionsInPalette++; @@ -278,7 +278,7 @@ public void translate(GeyserSession session, ClientboundLevelChunkWithLightPacke // We need to ensure we use enough bits to represent extended collision blocks in the chunk section int sectionCollisionBlocks = 0; - if (USE_EXTENDED_COLLISIONS) { + if (useExtendedCollisions) { int bottomLayerCollisions = extendedCollision ? EXTENDED_COLLISIONS_STORAGE.get().bottomLayerCollisions() : 0; sectionCollisionBlocks = bottomLayerCollisions + extendedCollisionsInPalette; } From ba7708f25b97b5bc07c31a3be48b3f31cc1df6a0 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 9 Aug 2023 17:15:47 -0700 Subject: [PATCH 127/134] Address review from @davchoo Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../lifecycle/GeyserDefineCustomBlocksEvent.java | 9 --------- .../geyser/registry/BlockRegistries.java | 5 ----- .../populator/BlockRegistryPopulator.java | 8 ++++---- .../populator/CustomBlockRegistryPopulator.java | 16 +--------------- 4 files changed, 5 insertions(+), 33 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index b8aba1362c3..b1a01d7e6e8 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -73,13 +73,4 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { * @param customBlockState the custom block state with which to override java state identifier */ public abstract void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull CustomBlockState customBlockState); - - /** - * Registers the given {@link CustomBlockData} as an override for the - * given {@link JavaBlockItem } - * - * @param javaBlockItem the java block item for the non-vanilla block - * @param customBlockData the custom block data with which to override java item identifier - */ - public abstract void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index d6f14033107..49fd90cf720 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -121,11 +121,6 @@ public class BlockRegistries { */ public static final SimpleMappedRegistry CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); - /** - * A registry which stores non vanilla java block items and the custom block it should be replaced with in the context of items. - */ - public static final SimpleMappedRegistry NON_VANILLA_CUSTOM_BLOCK_ITEM_OVERRIDES = SimpleMappedRegistry.create(RegistryLoaders.empty(Object2ObjectOpenHashMap::new)); - /** * A registry which stores Custom Block Data for extended collision boxes and the Java IDs of blocks that will have said extended collision boxes placed above them. */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 749002d09bf..ce6cec075fe 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -366,8 +366,7 @@ private static void registerBedrockBlocks() { JavaBlockState javaState = entry.getKey(); int stateRuntimeId = javaState.javaId(); - String javaId = javaState.identifier(); - boolean waterlogged = javaId.contains("waterlogged=true"); + boolean waterlogged = javaState.waterlogged(); if (waterlogged) { BlockRegistries.WATERLOGGED.register(set -> set.set(stateRuntimeId)); @@ -563,10 +562,9 @@ private static void registerJavaBlocks() { if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { Set usedNonVanillaRuntimeIDs = new HashSet<>(); - Set usedUniqueRuntimeIDs = new HashSet<>(); for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { - if (usedNonVanillaRuntimeIDs.contains(javaBlockState.javaId())) { + if (!usedNonVanillaRuntimeIDs.add(javaBlockState.javaId())) { throw new RuntimeException("Duplicate runtime ID " + javaBlockState.javaId() + " for non vanilla Java block state " + javaBlockState.identifier()); } @@ -575,6 +573,8 @@ private static void registerJavaBlocks() { String javaId = javaBlockState.identifier(); int stateRuntimeId = javaBlockState.javaId(); BlockMapping blockMapping = BlockMapping.builder() + .canBreakWithHand(javaBlockState.canBreakWithHand()) + .pickItem(javaBlockState.pickItem()) .isNonVanilla(true) .javaIdentifier(javaId) .javaBlockId(javaBlockState.stateGroupId()) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 7feb2880b66..d369ed4bb84 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -75,7 +75,6 @@ public static void populate(Stage stage) { private static Int2ObjectMap blockStateOverrides; private static Map customBlockItemOverrides; private static Map nonVanillaBlockStateOverrides; - private static Map nonVanillaCustomItemOverrides; /** * Initializes custom blocks defined by API @@ -86,7 +85,6 @@ private static void populateBedrock() { blockStateOverrides = new Int2ObjectOpenHashMap<>(); customBlockItemOverrides = new HashMap<>(); nonVanillaBlockStateOverrides = new HashMap<>(); - nonVanillaCustomItemOverrides = new HashMap<>(); GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override @@ -134,14 +132,6 @@ public void registerOverride(@NonNull JavaBlockState javaBlockState, @NonNull Cu } nonVanillaBlockStateOverrides.put(javaBlockState, customBlockState); } - - @Override - public void registerItemOverride(@NonNull JavaBlockItem javaBlockItem, @NonNull CustomBlockData customBlockData) { - if (!customBlocks.contains(customBlockData)) { - throw new IllegalArgumentException("Custom block is unregistered. Name: " + customBlockData.name()); - } - nonVanillaCustomItemOverrides.put(javaBlockItem, customBlockData); - } }); } @@ -193,9 +183,6 @@ private static void populateVanilla() { private static void populateNonVanilla() { BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(nonVanillaBlockStateOverrides); GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaBlockStateOverrides.size() + " non-vanilla block overrides."); - - BlockRegistries.NON_VANILLA_CUSTOM_BLOCK_ITEM_OVERRIDES.set(nonVanillaCustomItemOverrides); - GeyserImpl.getInstance().getLogger().info("Registered " + nonVanillaCustomItemOverrides.size() + " non-vanilla custom item overrides."); } /** @@ -364,8 +351,7 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putByte("lightLevel", components.lightDampening().byteValue()) .build()); } - // TODO: remove this protocol check when 1.19.80 becomes required w/ Java 1.20 - if (components.transformation() != null && protocolVersion >= Bedrock_v582.CODEC.getProtocolVersion()) { + if (components.transformation() != null) { builder.putCompound("minecraft:transformation", NbtMap.builder() .putInt("RX", MathUtils.unwrapDegreesToInt(components.transformation().rx()) / 90) .putInt("RY", MathUtils.unwrapDegreesToInt(components.transformation().ry()) / 90) From 70519772ef92af51e7e7f66aa260b22dfce69839 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Fri, 11 Aug 2023 18:11:35 -0700 Subject: [PATCH 128/134] Set namespace of custom blocks vs ident direct Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../custom/NonVanillaCustomBlockData.java | 9 ++++++- .../GeyserNonVanillaCustomBlockData.java | 25 +++++++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java index 23c67449c2d..4ab186ce621 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/NonVanillaCustomBlockData.java @@ -37,6 +37,13 @@ * Represents a completely custom block that is not based on an existing vanilla Minecraft block. */ public interface NonVanillaCustomBlockData extends CustomBlockData { + /** + * Gets the namespace of the custom block + * + * @return The namespace of the custom block. + */ + @NonNull String namespace(); + /** * Create a Builder for NonVanillaCustomBlockData @@ -49,7 +56,7 @@ static NonVanillaCustomBlockData.Builder builder() { interface Builder extends CustomBlockData.Builder { - Builder identifier(@NonNull String identifier); + Builder namespace(@NonNull String namespace); @Override Builder name(@NonNull String name); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java index bdc69e322ea..89bde67389d 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java @@ -35,34 +35,43 @@ import java.util.List; public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData implements NonVanillaCustomBlockData { - private final String identifier; + private final String namespace; + private final String name; GeyserNonVanillaCustomBlockData(NonVanillaCustomBlockDataBuilder builder) { super(builder); - this.identifier = builder.identifier; - if (identifier == null) { + this.namespace = builder.namespace; + if (namespace == null) { throw new IllegalStateException("Identifier must be set"); } + this.name = builder.name; } @Override public @NonNull String identifier() { - return this.identifier; + return this.namespace + ":" + this.name; + } + + @Override + public @NonNull String namespace() { + return this.namespace; } public static class NonVanillaCustomBlockDataBuilder extends CustomBlockDataBuilder implements NonVanillaCustomBlockData.Builder { - private String identifier; + private String namespace; + private String name; @Override - public NonVanillaCustomBlockDataBuilder identifier(@NonNull String identifier) { - this.identifier = identifier; + public NonVanillaCustomBlockDataBuilder namespace(@NonNull String namespace) { + this.namespace = namespace; return this; } @Override public NonVanillaCustomBlockDataBuilder name(@NonNull String name) { - return (NonVanillaCustomBlockDataBuilder) super.name(name); + this.name = name; + return this; } @Override From aca66be74a3901d2a8d187e2c7d057e0e7f1b9f5 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:24:59 -0700 Subject: [PATCH 129/134] Address review from @rtm516 Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../registry/loader/ResourcePackLoader.java | 3 +- .../mappings/versions/MappingsReader_v1.java | 28 +++++++++++++++++++ .../CustomBlockRegistryPopulator.java | 25 +++++++++++++++-- .../CustomItemRegistryPopulator.java | 1 + 4 files changed, 52 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java index 7b8e9d02bed..1991dc9fdd0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java @@ -75,8 +75,7 @@ public Map load(Path directory) { } } - List resourcePacks; - + List resourcePacks; try (Stream stream = Files.walk(directory)) { resourcePacks = stream.filter(PACK_MATCHER::matches) .collect(Collectors.toCollection(ArrayList::new)); // toList() does not guarantee mutability diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 812b4d49745..1f5084295eb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -61,12 +61,23 @@ import java.util.function.Predicate; import java.util.stream.Collectors; +/** + * A class responsible for reading custom item and block mappings from a JSON file + */ public class MappingsReader_v1 extends MappingsReader { @Override public void readItemMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { this.readItemMappingsV1(file, mappingsRoot, consumer); } + /** + * Read item block from a JSON node + * + * @param file The path to the file + * @param mappingsRoot The {@link JsonNode} containing the mappings + * @param consumer The consumer to accept the mappings + * @see #readBlockMappingsV1(Path, JsonNode, BiConsumer) + */ @Override public void readBlockMappings(Path file, JsonNode mappingsRoot, BiConsumer consumer) { this.readBlockMappingsV1(file, mappingsRoot, consumer); @@ -91,6 +102,14 @@ public void readItemMappingsV1(Path file, JsonNode mappingsRoot, BiConsumer consumer) { JsonNode blocksNode = mappingsRoot.get("blocks"); @@ -183,6 +202,7 @@ public CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMa /** * Read a block mapping entry from a JSON node and Java identifier + * * @param identifier The Java identifier of the block * @param node The {@link JsonNode} containing the block mapping entry * @return The {@link CustomBlockMapping} record to be read by {@link org.geysermc.geyser.registry.populator.CustomBlockRegistryPopulator} @@ -321,6 +341,7 @@ private CustomBlockMapping createCustomBlockMapping(CustomBlockData.Builder cust /** * Creates a {@link CustomBlockComponents} object for the passed state override or base block node, Java block state identifier, and custom block name + * * @param node the state override or base block {@link JsonNode} * @param stateKey the Java block state identifier * @param name the name of the custom block @@ -470,6 +491,7 @@ private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode /** * Creates a {@link BoxComponent} based on a Java block's collision with provided bounds and offsets + * * @param javaId the block's Java ID * @param heightTranslation the height translation of the box * @return the {@link BoxComponent} @@ -519,6 +541,7 @@ private BoxComponent createBoxComponent(int javaId, float heightTranslation) { /** * Creates a {@link BoxComponent} based on a Java block's collision + * * @param javaId the block's Java ID * @return the {@link BoxComponent} */ @@ -528,6 +551,7 @@ private BoxComponent createBoxComponent(int javaId) { /** * Creates the {@link BoxComponent} for an extended collision box based on a Java block's collision + * * @param javaId the block's Java ID * @return the {@link BoxComponent} or null if the block's collision box would not exceed 16 y units */ @@ -547,6 +571,7 @@ private BoxComponent createExtendedBoxComponent(int javaId) { /** * Creates a {@link BoxComponent} from a JSON Node + * * @param node the JSON node * @return the {@link BoxComponent} */ @@ -572,6 +597,7 @@ private BoxComponent createBoxComponent(JsonNode node) { /** * Creates the {@link MaterialInstance} for the passed material instance node and custom block name * The name is used as a fallback if no texture is provided by the node + * * @param node the material instance node * @param name the custom block name * @return the {@link MaterialInstance} @@ -608,6 +634,7 @@ private MaterialInstance createMaterialInstanceComponent(JsonNode node, String n /** * Creates the list of {@link PlacementConditions} for the passed conditions node + * * @param node the conditions node * @return the list of {@link PlacementConditions} */ @@ -650,6 +677,7 @@ private List createPlacementFilterComponent(JsonNode node) /** * Splits the given java state identifier into an array of property=value pairs + * * @param state the java state identifier * @return the array of property=value pairs */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index d369ed4bb84..28e333d0bef 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -7,7 +7,6 @@ import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; -import org.cloudburstmc.protocol.bedrock.codec.v582.Bedrock_v582; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.geysermc.geyser.GeyserImpl; @@ -19,7 +18,6 @@ import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; -import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; @@ -54,6 +52,7 @@ public enum Stage { /** * Populates the custom block registries by stage + * * @param stage the stage to populate */ public static void populate(Stage stage) { @@ -196,6 +195,7 @@ private static void registration() { /** * Generates and appends all custom block states to the provided list of custom block states * Appends the custom block states to the provided list of NBT maps + * * @param customBlock the custom block data to generate states for * @param blockStates the list of NBT maps to append the custom block states to * @param customExtBlockStates the list of custom block states to append the custom block states to @@ -227,6 +227,7 @@ static void generateCustomBlockStates(CustomBlockData customBlock, List /** * Generates and returns the block property data for the provided custom block + * * @param customBlock the custom block to generate block property data for * @param protocolVersion the protocol version to use for the block property data * @return the block property data for the provided custom block @@ -282,22 +283,26 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, * @param protocolVersion the protocol version to use for the conversion * @return the NBT representation of the provided custom block components */ - static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { + private static NbtMap convertComponents(CustomBlockComponents components, int protocolVersion) { if (components == null) { return NbtMap.EMPTY; } + NbtMapBuilder builder = NbtMap.builder(); if (components.displayName() != null) { builder.putCompound("minecraft:display_name", NbtMap.builder() .putString("value", components.displayName()) .build()); } + if (components.selectionBox() != null) { builder.putCompound("minecraft:selection_box", convertBox(components.selectionBox())); } + if (components.collisionBox() != null) { builder.putCompound("minecraft:collision_box", convertBox(components.collisionBox())); } + if (components.geometry() != null) { NbtMapBuilder geometryBuilder = NbtMap.builder(); if (protocolVersion >= Bedrock_v594.CODEC.getProtocolVersion()) { @@ -307,6 +312,7 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe } builder.putCompound("minecraft:geometry", geometryBuilder.build()); } + if (!components.materialInstances().isEmpty()) { NbtMapBuilder materialsBuilder = NbtMap.builder(); for (Map.Entry entry : components.materialInstances().entrySet()) { @@ -318,6 +324,7 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putBoolean("ambient_occlusion", materialInstance.faceDimming()) .build()); } + builder.putCompound("minecraft:material_instances", NbtMap.builder() // we could read these, but there is no functional reason to use them at the moment // they only allow you to make aliases for material instances @@ -326,31 +333,37 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putCompound("materials", materialsBuilder.build()) .build()); } + if (components.placementFilter() != null) { builder.putCompound("minecraft:placement_filter", NbtMap.builder() .putList("conditions", NbtType.COMPOUND, convertPlacementFilter(components.placementFilter())) .build()); } + if (components.destructibleByMining() != null) { builder.putCompound("minecraft:destructible_by_mining", NbtMap.builder() .putFloat("value", components.destructibleByMining()) .build()); } + if (components.friction() != null) { builder.putCompound("minecraft:friction", NbtMap.builder() .putFloat("value", components.friction()) .build()); } + if (components.lightEmission() != null) { builder.putCompound("minecraft:light_emission", NbtMap.builder() .putByte("emission", components.lightEmission().byteValue()) .build()); } + if (components.lightDampening() != null) { builder.putCompound("minecraft:light_dampening", NbtMap.builder() .putByte("lightLevel", components.lightDampening().byteValue()) .build()); } + if (components.transformation() != null) { builder.putCompound("minecraft:transformation", NbtMap.builder() .putInt("RX", MathUtils.unwrapDegreesToInt(components.transformation().rx()) / 90) @@ -364,9 +377,11 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putFloat("TZ", components.transformation().tz()) .build()); } + if (components.unitCube()) { builder.putCompound("minecraft:unit_cube", NbtMap.EMPTY); } + // place_air is not an actual component // We just apply a dummy event to prevent the client from trying to place a block // This mitigates the issue with the client sometimes double placing blocks @@ -375,14 +390,17 @@ static NbtMap convertComponents(CustomBlockComponents components, int protocolVe .putString("triggerType", "geyser:place_event") .build()); } + if (!components.tags().isEmpty()) { components.tags().forEach(tag -> builder.putCompound("tag:" + tag, NbtMap.EMPTY)); } + return builder.build(); } /** * Converts the provided box component to an {@link NbtMap} + * * @param boxComponent the box component to convert * @return the NBT representation of the provided box component */ @@ -396,6 +414,7 @@ private static NbtMap convertBox(BoxComponent boxComponent) { /** * Converts the provided placement filter to a list of {@link NbtMap} + * * @param placementFilter the placement filter to convert * @return the NBT representation of the provided placement filter */ diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 693ca983432..3f3f5a4ba9a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -312,6 +312,7 @@ private static boolean computeToolProperties(String toolTier, String toolType, N .putInt("speed", 0) .build() )); + componentBuilder.putCompound("minecraft:digger", NbtMap.builder() .putList("destroy_speeds", NbtType.COMPOUND, speed) From bd74e366177f7c818a6d86117e9e026874f80275 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:32:11 -0700 Subject: [PATCH 130/134] One more Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../registry/populator/CustomBlockRegistryPopulator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 28e333d0bef..bcbad987ccb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -279,6 +279,7 @@ static BlockPropertyData generateBlockPropertyData(CustomBlockData customBlock, /** * Converts the provided custom block components to an {@link NbtMap} to be sent to the client in the StartGame packet + * * @param components the custom block components to convert * @param protocolVersion the protocol version to use for the conversion * @return the NBT representation of the provided custom block components @@ -324,7 +325,7 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr .putBoolean("ambient_occlusion", materialInstance.faceDimming()) .build()); } - + builder.putCompound("minecraft:material_instances", NbtMap.builder() // we could read these, but there is no functional reason to use them at the moment // they only allow you to make aliases for material instances From 7dd77d238bad9dcf28f621b5f0e8e17dbcd16bce Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sat, 19 Aug 2023 21:04:14 +0100 Subject: [PATCH 131/134] Remove rogue space --- .../org/geysermc/geyser/registry/loader/ResourcePackLoader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java index 1991dc9fdd0..800a3d22c6e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ResourcePackLoader.java @@ -75,7 +75,7 @@ public Map load(Path directory) { } } - List resourcePacks; + List resourcePacks; try (Stream stream = Files.walk(directory)) { resourcePacks = stream.filter(PACK_MATCHER::matches) .collect(Collectors.toCollection(ArrayList::new)); // toList() does not guarantee mutability From 0c90a82e11fd209d644320c2fcecb10c336adee0 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 20 Aug 2023 15:08:03 -0700 Subject: [PATCH 132/134] Geo component as builder Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../component/CustomBlockComponents.java | 4 +- .../custom/component/GeometryComponent.java | 69 +++++++++++++++++ .../block/GeyserCustomBlockComponents.java | 9 ++- .../level/block/GeyserGeometryComponent.java | 76 +++++++++++++++++++ .../loader/ProviderRegistryLoader.java | 3 + .../mappings/versions/MappingsReader_v1.java | 26 ++++++- .../CustomBlockRegistryPopulator.java | 15 +++- .../geyser/registry/type/CustomSkull.java | 13 +++- 8 files changed, 201 insertions(+), 14 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/block/custom/component/GeometryComponent.java create mode 100644 core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index e31dae9b914..03672309285 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -67,7 +67,7 @@ public interface CustomBlockComponents { * * @return The geometry. */ - @Nullable String geometry(); + @Nullable GeometryComponent geometry(); /** * Gets the material instances component @@ -165,7 +165,7 @@ interface Builder { Builder displayName(String displayName); - Builder geometry(String geometry); + Builder geometry(GeometryComponent geometry); Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance); diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/GeometryComponent.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/GeometryComponent.java new file mode 100644 index 00000000000..6d85989a7f6 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/GeometryComponent.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.block.custom.component; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.GeyserApi; + +import java.util.Map; + +/** + * This class is used to store data for a geometry component. + */ +public interface GeometryComponent { + + /** + * Gets the identifier of the geometry + * + * @return The identifier of the geometry. + */ + @NonNull String identifier(); + + /** + * Gets the bone visibility of the geometry + * + * @return The bone visibility of the geometry. + */ + @Nullable Map boneVisibility(); + + /** + * Creates a builder for GeometryComponent + * + * @return a builder for GeometryComponent. + */ + static GeometryComponent.Builder builder() { + return GeyserApi.api().provider(GeometryComponent.Builder.class); + } + + interface Builder { + Builder identifier(@NonNull String identifier); + + Builder boneVisibility(@Nullable Map boneVisibility); + + GeometryComponent build(); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index 50b8e641232..e43e168ee74 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -33,6 +33,7 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.GeometryComponent; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.TransformationComponent; @@ -48,7 +49,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { BoxComponent selectionBox; BoxComponent collisionBox; String displayName; - String geometry; + GeometryComponent geometry; Map materialInstances; List placementFilter; Float destructibleByMining; @@ -101,7 +102,7 @@ public String displayName() { } @Override - public String geometry() { + public GeometryComponent geometry() { return geometry; } @@ -159,7 +160,7 @@ public static class CustomBlockComponentsBuilder implements Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; protected String displayName; - protected String geometry; + protected GeometryComponent geometry; protected final Object2ObjectMap materialInstances = new Object2ObjectOpenHashMap<>(); protected List placementFilter; protected Float destructibleByMining; @@ -210,7 +211,7 @@ public Builder displayName(String displayName) { } @Override - public Builder geometry(String geometry) { + public Builder geometry(GeometryComponent geometry) { this.geometry = geometry; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java new file mode 100644 index 00000000000..c23fc87a257 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.level.block; + +import lombok.RequiredArgsConstructor; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.block.custom.component.GeometryComponent; + +import java.util.Map; + +@RequiredArgsConstructor +public class GeyserGeometryComponent implements GeometryComponent { + private final String identifier; + private final Map boneVisibility; + + GeyserGeometryComponent(GeometryComponentBuilder builder) { + this.identifier = builder.identifier; + this.boneVisibility = builder.boneVisibility; + } + + @Override + public @NonNull String identifier() { + return identifier; + } + + @Override + public @Nullable Map boneVisibility() { + return boneVisibility; + } + + public static class GeometryComponentBuilder implements Builder { + private String identifier; + private Map boneVisibility; + + @Override + public GeometryComponent.Builder identifier(@NonNull String identifier) { + this.identifier = identifier; + return this; + } + + @Override + public GeometryComponent.Builder boneVisibility(@Nullable Map boneVisibility) { + this.boneVisibility = boneVisibility; + return this; + } + + @Override + public GeometryComponent build() { + return new GeyserGeometryComponent(this); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 45ca04b9e6e..13d7a4d77d8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -28,6 +28,7 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.GeometryComponent; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.api.command.Command; @@ -44,6 +45,7 @@ import org.geysermc.geyser.item.GeyserNonVanillaCustomItemData; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserGeometryComponent; import org.geysermc.geyser.level.block.GeyserJavaBlockState; import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.level.block.GeyserNonVanillaCustomBlockData; @@ -68,6 +70,7 @@ public Map, ProviderSupplier> load(Map, ProviderSupplier> prov providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.JavaBlockStateBuilder()); providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.NonVanillaCustomBlockDataBuilder()); providers.put(MaterialInstance.Builder.class, args -> new GeyserMaterialInstance.MaterialInstanceBuilder()); + providers.put(GeometryComponent.Builder.class, args -> new GeyserGeometryComponent.GeometryComponentBuilder()); providers.put(EventRegistrar.class, args -> new GeyserEventRegistrar(args[0])); providers.put(PathPackCodec.class, args -> new GeyserPathPackCodec((Path) args[0])); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 1f5084295eb..51c2220cbf9 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -43,6 +43,7 @@ import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; +import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; @@ -225,7 +226,7 @@ public CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node if (node.has("creative_category")) { String categoryName = node.get("creative_category").asText(); try { - creativeCategory = CreativeCategory.valueOf(categoryName); + creativeCategory = CreativeCategory.valueOf(categoryName.toUpperCase()); } catch (IllegalArgumentException e) { throw new InvalidCustomMappingsFileException("Invalid creative category \"" + categoryName + "\" for block \"" + name + "\""); } @@ -383,7 +384,28 @@ private CustomBlockComponentsMapping createCustomBlockComponentsMapping(JsonNode builder.destructibleByMining(destructibleByMining); if (node.has("geometry")) { - builder.geometry(node.get("geometry").asText()); + if (node.get("geometry").isTextual()) { + builder.geometry(new GeometryComponentBuilder() + .identifier(node.get("geometry").asText()) + .build()); + } else { + JsonNode geometry = node.get("geometry"); + GeometryComponentBuilder geometryBuilder = new GeometryComponentBuilder(); + if (geometry.has("identifier")) { + geometryBuilder.identifier(geometry.get("identifier").asText()); + } + if (geometry.has("bone_visibility")) { + JsonNode boneVisibility = geometry.get("bone_visibility"); + if (boneVisibility.isObject()) { + Map boneVisibilityMap = new Object2ObjectOpenHashMap<>(); + boneVisibility.fields().forEachRemaining(entry -> { + boneVisibilityMap.put(entry.getKey(), entry.getValue().isBoolean() ? (entry.getValue().asBoolean() ? "1" : "0") : entry.getValue().asText()); + }); + geometryBuilder.boneVisibility(boneVisibilityMap); + } + } + builder.geometry(geometryBuilder.build()); + } } String displayName = name; diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index bcbad987ccb..5d453582c54 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -26,6 +26,7 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; +import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; @@ -307,9 +308,15 @@ private static NbtMap convertComponents(CustomBlockComponents components, int pr if (components.geometry() != null) { NbtMapBuilder geometryBuilder = NbtMap.builder(); if (protocolVersion >= Bedrock_v594.CODEC.getProtocolVersion()) { - geometryBuilder.putString("identifier", components.geometry()); + geometryBuilder.putString("identifier", components.geometry().identifier()); + if (components.geometry().boneVisibility() != null) { + NbtMapBuilder boneVisibilityBuilder = NbtMap.builder(); + components.geometry().boneVisibility().entrySet().forEach( + entry -> boneVisibilityBuilder.putString(entry.getKey(), entry.getValue())); + geometryBuilder.putCompound("bone_visibility", boneVisibilityBuilder.build()); + } } else { - geometryBuilder.putString("value", components.geometry()); + geometryBuilder.putString("value", components.geometry().identifier()); } builder.putCompound("minecraft:geometry", geometryBuilder.build()); } @@ -463,7 +470,9 @@ private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComp .ambientOcclusion(false) .build()) .lightDampening(0) - .geometry("geometry.invisible") + .geometry(new GeometryComponentBuilder() + .identifier("geometry.invisible") + .build()) .build()) .build(); return customBlockData; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index db85b3e2e27..5fe8a0edf60 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; import java.util.ArrayList; @@ -114,7 +115,9 @@ public CustomBlockState getFloorBlockState(int floorRotation) { private void addDefaultPermutation(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .geometry("geometry.geyser.player_skull_hand") + .geometry(new GeometryComponentBuilder() + .identifier("geometry.geyser.player_skull_hand") + .build()) .transformation(new TransformationComponent(0, 180, 0)) .build(); @@ -131,7 +134,9 @@ private void addFloorPermutations(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .selectionBox(FLOOR_BOX) .collisionBox(FLOOR_BOX) - .geometry("geometry.geyser.player_skull_floor_" + quadrantNames[i]) + .geometry(new GeometryComponentBuilder() + .identifier("geometry.geyser.player_skull_floor_" + quadrantNames[i]) + .build()) .transformation(new TransformationComponent(0, ROTATIONS[quadrant], 0)) .build(); @@ -148,7 +153,9 @@ private void addWallPermutations(List permutations) { CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() .selectionBox(WALL_BOX) .collisionBox(WALL_BOX) - .geometry("geometry.geyser.player_skull_wall") + .geometry(new GeometryComponentBuilder() + .identifier("geometry.geyser.player_skull_wall") + .build()) .transformation(new TransformationComponent(0, ROTATIONS[i], 0)) .build(); From ea42fdc8b34025c71597df02fe0bf76d2bb9cd17 Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Sun, 20 Aug 2023 18:40:10 -0700 Subject: [PATCH 133/134] use super name Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../level/block/GeyserNonVanillaCustomBlockData.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java index 89bde67389d..8b5056a6fad 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java @@ -36,7 +36,6 @@ public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData implements NonVanillaCustomBlockData { private final String namespace; - private final String name; GeyserNonVanillaCustomBlockData(NonVanillaCustomBlockDataBuilder builder) { super(builder); @@ -45,12 +44,11 @@ public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData imple if (namespace == null) { throw new IllegalStateException("Identifier must be set"); } - this.name = builder.name; } @Override public @NonNull String identifier() { - return this.namespace + ":" + this.name; + return this.namespace + ":" + super.name(); } @Override @@ -60,7 +58,6 @@ public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData imple public static class NonVanillaCustomBlockDataBuilder extends CustomBlockDataBuilder implements NonVanillaCustomBlockData.Builder { private String namespace; - private String name; @Override public NonVanillaCustomBlockDataBuilder namespace(@NonNull String namespace) { @@ -70,8 +67,7 @@ public NonVanillaCustomBlockDataBuilder namespace(@NonNull String namespace) { @Override public NonVanillaCustomBlockDataBuilder name(@NonNull String name) { - this.name = name; - return this; + return (NonVanillaCustomBlockDataBuilder) super.name(name); } @Override From 1be0be7e2481a431faebf417acc79ba31be3570b Mon Sep 17 00:00:00 2001 From: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> Date: Mon, 21 Aug 2023 13:29:48 -0700 Subject: [PATCH 134/134] Bump version Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- build.gradle.kts | 6 +++--- gradle.properties | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index aadb0bdbb86..4cb5b022311 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,9 +5,9 @@ plugins { } allprojects { - group = "org.geysermc.geyser" - version = "2.1.2-SNAPSHOT" - description = "Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers." + group = properties["group"] as String + "." + properties["id"] as String + version = properties["version"] as String + description = properties["description"] as String } java { diff --git a/gradle.properties b/gradle.properties index 0a463e38f15..b6425f76dad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,4 +6,6 @@ org.gradle.parallel=true org.gradle.vfs.watch=false group=org.geysermc -version=2.1.1-SNAPSHOT \ No newline at end of file +id=geyser +version=2.2.0-SNAPSHOT +description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. \ No newline at end of file