From b0922d967fa76da6def15bdb93c6cea162484e0a Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sun, 20 Jun 2021 18:49:53 +0300 Subject: [PATCH 01/72] Server side crash fix --- gradle.properties | 4 ++-- src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java | 3 +++ src/main/java/ru/betterend/blocks/ChandelierBlock.java | 5 +++++ src/main/java/ru/betterend/blocks/EmeraldIceBlock.java | 3 +++ .../java/ru/betterend/blocks/HydraluxPetalColoredBlock.java | 3 +++ src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java | 4 ++++ .../java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java | 1 + src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java | 3 +++ src/main/java/ru/betterend/blocks/basis/PedestalBlock.java | 5 +++++ .../java/ru/betterend/blocks/basis/StoneLanternBlock.java | 3 +++ src/main/java/ru/betterend/item/EnchantedItem.java | 3 +++ src/main/java/ru/betterend/item/EndAnvilItem.java | 3 +++ src/main/java/ru/betterend/item/tool/EndHammerItem.java | 3 +++ src/main/java/ru/betterend/rituals/InfusionRitual.java | 1 - src/main/resources/fabric.mod.json | 2 +- 15 files changed, 42 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index f902a279..a15787e2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.9.8-pre +mod_version = 0.9.8.1-pre maven_group = ru.betterend archives_base_name = better-end @@ -17,5 +17,5 @@ archives_base_name = better-end patchouli_version = 50-FABRIC fabric_version = 0.32.9+1.16 canvas_version = 1.0.+ -bclib_version = 0.1.38 +bclib_version = 0.1.42 rei_version = 5.8.10 \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index 0302faab..dc0ad6c3 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -7,6 +7,8 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Maps; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.renderer.block.model.BlockModel; @@ -57,6 +59,7 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = Maps.newHashMap(); textures.put("%glow%", getGlowTexture()); diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 21a906f7..622eeb5e 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -8,6 +8,8 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Maps; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.BlockModelRotation; @@ -46,11 +48,13 @@ public class ChandelierBlock extends BaseAttachedBlock implements IRenderTyped, } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation blockId) { return ModelsHelper.createItemModel(blockId); } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern; switch (blockState.getValue(FACING)) { @@ -67,6 +71,7 @@ public class ChandelierBlock extends BaseAttachedBlock implements IRenderTyped, } @Override + @Environment(EnvType.CLIENT) public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String state = "_wall"; BlockModelRotation rotation = BlockModelRotation.X0_Y0; diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index f8c010f1..e4ebe572 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -6,6 +6,8 @@ import java.util.Random; import org.jetbrains.annotations.Nullable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; @@ -85,6 +87,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index f9a882b5..599bbe15 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -4,6 +4,8 @@ import java.util.Optional; import org.jetbrains.annotations.Nullable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; @@ -31,6 +33,7 @@ public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements ICo } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String path = "betterend:block/block_petal_colored"; Optional pattern = Patterns.createJson(Patterns.BLOCK_PETAL_COLORED, path, path); diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index caf38d89..681e3578 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -7,6 +7,8 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; @@ -71,11 +73,13 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTyped, Blo } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Optional pattern = Patterns.createJson(Patterns.BLOCK_COLORED, "jellyshroom_cap"); return ModelsHelper.fromPattern(pattern); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 67ad0a06..b267bf84 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -81,6 +81,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { return getBlockModel(resourceLocation, defaultBlockState()); } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index f66fa6dc..f4ada8b3 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -2,6 +2,8 @@ package ru.betterend.blocks.basis; import java.util.Map; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; @@ -125,6 +127,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg } @Override + @Environment(EnvType.CLIENT) public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { String floor = blockState.getValue(IS_FLOOR) ? "_floor" : ""; ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 886e8435..2f91a682 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -10,6 +10,8 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; @@ -370,11 +372,13 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation blockId) { return getBlockModel(blockId, defaultBlockState()); } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { Map textures = createTexturesMap(); PedestalState state = blockState.getValue(STATE); @@ -401,6 +405,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } @Override + @Environment(EnvType.CLIENT) public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index b7319079..b8f2b7c9 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -4,6 +4,8 @@ import java.util.Optional; import org.jetbrains.annotations.Nullable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; @@ -44,6 +46,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider } @Override + @Environment(EnvType.CLIENT) public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { String blockName = resourceLocation.getPath(); Optional pattern = blockState.getValue(IS_FLOOR) ? diff --git a/src/main/java/ru/betterend/item/EnchantedItem.java b/src/main/java/ru/betterend/item/EnchantedItem.java index d210c855..814b9644 100644 --- a/src/main/java/ru/betterend/item/EnchantedItem.java +++ b/src/main/java/ru/betterend/item/EnchantedItem.java @@ -1,5 +1,7 @@ package ru.betterend.item; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -25,6 +27,7 @@ public class EnchantedItem extends ModelProviderItem { } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { ResourceLocation sourceId = Registry.ITEM.getKey(source); return ModelsHelper.createItemModel(sourceId); diff --git a/src/main/java/ru/betterend/item/EndAnvilItem.java b/src/main/java/ru/betterend/item/EndAnvilItem.java index 9b8b4d04..c1b1625c 100644 --- a/src/main/java/ru/betterend/item/EndAnvilItem.java +++ b/src/main/java/ru/betterend/item/EndAnvilItem.java @@ -1,5 +1,7 @@ package ru.betterend.item; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; @@ -30,6 +32,7 @@ public class EndAnvilItem extends BaseAnvilItem { } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { Block block = getBlock(); ResourceLocation blockId = Registry.BLOCK.getKey(block); diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index fa990cf9..0cef9ded 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -8,6 +8,8 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import io.netty.util.internal.ThreadLocalRandom; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; @@ -133,6 +135,7 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, I } @Override + @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createHandheldItem(resourceLocation); } diff --git a/src/main/java/ru/betterend/rituals/InfusionRitual.java b/src/main/java/ru/betterend/rituals/InfusionRitual.java index f240ec47..005e6b38 100644 --- a/src/main/java/ru/betterend/rituals/InfusionRitual.java +++ b/src/main/java/ru/betterend/rituals/InfusionRitual.java @@ -11,7 +11,6 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index b880fc77..90a89ea6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -46,7 +46,7 @@ "fabricloader": ">=0.11.0", "fabric": ">=0.32.0", "minecraft": ">=1.16.4", - "bclib": ">=0.1.38" + "bclib": ">=0.1.42" }, "suggests": { "byg": ">=1.1.3", From ff3194fedf97713d3fb22beea7b3f386abc0a4dc Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 01:22:30 +0300 Subject: [PATCH 02/72] Small water plant placing fix --- gradle.properties | 2 +- src/main/java/ru/betterend/blocks/FlamaeaBlock.java | 2 +- src/main/java/ru/betterend/interfaces/ISpetialItem.java | 7 ------- 3 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 src/main/java/ru/betterend/interfaces/ISpetialItem.java diff --git a/gradle.properties b/gradle.properties index a15787e2..85f2c954 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.9.8.1-pre +mod_version = 0.9.8.2-pre maven_group = ru.betterend archives_base_name = better-end diff --git a/src/main/java/ru/betterend/blocks/FlamaeaBlock.java b/src/main/java/ru/betterend/blocks/FlamaeaBlock.java index bba1a69d..03879d2f 100644 --- a/src/main/java/ru/betterend/blocks/FlamaeaBlock.java +++ b/src/main/java/ru/betterend/blocks/FlamaeaBlock.java @@ -18,8 +18,8 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; +import ru.bclib.interfaces.ISpetialItem; import ru.betterend.blocks.basis.EndPlantBlock; -import ru.betterend.interfaces.ISpetialItem; public class FlamaeaBlock extends EndPlantBlock implements ISpetialItem { private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 1, 16); diff --git a/src/main/java/ru/betterend/interfaces/ISpetialItem.java b/src/main/java/ru/betterend/interfaces/ISpetialItem.java deleted file mode 100644 index ef19bc36..00000000 --- a/src/main/java/ru/betterend/interfaces/ISpetialItem.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.betterend.interfaces; - -public interface ISpetialItem { - public int getStackSize(); - - public boolean canPlaceOnWater(); -} From bed07d2ad79afb6da9ca471ee1ea90edf8ccc759 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 12:16:54 +0300 Subject: [PATCH 03/72] Fixed missing caves in most biomes --- .../java/ru/betterend/registry/EndBiomes.java | 16 ++++------------ .../java/ru/betterend/world/biome/EndBiome.java | 12 ++++++++++-- .../world/generator/BetterEndBiomeSource.java | 3 ++- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index b39fd679..f3cdcbc9 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -61,7 +61,6 @@ import ru.betterend.world.generator.BiomeType; import ru.betterend.world.generator.GeneratorOptions; public class EndBiomes { - private static final Map ID_MAP = Maps.newHashMap(); public static final Set FABRIC_VOID = Sets.newHashSet(); private static final Set SUBBIOMES_UNMUTABLES = Sets.newHashSet(); @@ -154,6 +153,7 @@ public class EndBiomes { hasCaves = JsonFactory.getBoolean(element.getAsJsonObject(), "has_caves", true); } EndBiome endBiome = new EndBiome(id, biome, fog, chance, hasCaves); + System.out.println("Added biome: " + endBiome); if (isVoid) { VOID_BIOMES.addBiomeMutable(endBiome); @@ -161,7 +161,7 @@ public class EndBiomes { else { LAND_BIOMES.addBiomeMutable(endBiome); } - ID_MAP.put(id, endBiome); + BiomeAPI.registerBiome(endBiome); } } } @@ -274,7 +274,7 @@ public class EndBiomes { parent.addSubBiome(endBiome); SUBBIOMES.add(endBiome); SUBBIOMES_UNMUTABLES.add(endBiome.getID()); - ID_MAP.put(endBiome.getID(), endBiome); + BiomeAPI.registerBiome(endBiome); } return endBiome; } @@ -291,7 +291,6 @@ public class EndBiomes { parent.addSubBiome(biome); SUBBIOMES.add(biome); SUBBIOMES_UNMUTABLES.add(biome.getID()); - ID_MAP.put(biome.getID(), biome); BiomeAPI.addEndLandBiomeToFabricApi(biome); } return biome; @@ -307,7 +306,6 @@ public class EndBiomes { if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); addToPicker(biome, type); - ID_MAP.put(biome.getID(), biome); if (type == BiomeType.LAND) { BiomeAPI.addEndLandBiomeToFabricApi(biome); } @@ -328,7 +326,6 @@ public class EndBiomes { BiomeAPI.registerBiome(biome); SUBBIOMES.add(biome); SUBBIOMES_UNMUTABLES.add(biome.getID()); - ID_MAP.put(biome.getID(), biome); BiomeAPI.addEndLandBiomeToFabricApi(biome); } return biome; @@ -341,7 +338,7 @@ public class EndBiomes { */ public static void addSubBiomeIntegration(EndBiome biome, ResourceLocation parent) { if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { - EndBiome parentBiome = ID_MAP.get(parent); + BCLBiome parentBiome = BiomeAPI.getBiome(parent); if (parentBiome != null && !parentBiome.containsSubBiome(biome)) { parentBiome.addSubBiome(biome); } @@ -369,7 +366,6 @@ public class EndBiomes { if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); CAVE_BIOMES.addBiome(biome); - ID_MAP.put(biome.getID(), biome); } return biome; } @@ -377,8 +373,4 @@ public class EndBiomes { public static EndCaveBiome getCaveBiome(int x, int z) { return (EndCaveBiome) caveBiomeMap.getBiome(x, z); } - - public static boolean hasBiome(ResourceLocation biomeID) { - return ID_MAP.containsKey(biomeID); - } } diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index e2c210b5..b0e33d89 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,14 +5,22 @@ import net.minecraft.world.level.biome.Biome; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiomeDef; import ru.betterend.config.Configs; +import ru.betterend.registry.EndFeatures; public class EndBiome extends BCLBiome { - public EndBiome(BCLBiomeDef definition) { - super(definition.loadConfigValues(Configs.BIOME_CONFIG)); + public EndBiome(BCLBiomeDef def) { + super(updateDef(def)); + } public EndBiome(ResourceLocation id, Biome biome, float fogDensity, float genChance, boolean hasCaves) { super(id, biome, fogDensity, genChance); this.addCustomData("has_caves", hasCaves); } + + private static BCLBiomeDef updateDef(BCLBiomeDef def) { + def.loadConfigValues(Configs.BIOME_CONFIG); + EndFeatures.addDefaultFeatures(def); + return def; + } } diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index 602a095b..c5f81571 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -63,7 +63,8 @@ public class BetterEndBiomeSource extends BiomeSource { private static List getBiomes(Registry biomeRegistry) { List list = Lists.newArrayList(); biomeRegistry.forEach((biome) -> { - if (EndBiomes.hasBiome(biomeRegistry.getKey(biome))) { + BCLBiome bclBiome = BiomeAPI.getBiome(biomeRegistry.getKey(biome)); + if (bclBiome instanceof EndBiome) { list.add(biome); } }); From 684f3073ca4b836c3792429702f424df702a2000 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 12:25:26 +0300 Subject: [PATCH 04/72] Fixed missing cave population & tags --- .../java/ru/betterend/registry/EndBiomes.java | 1 - .../java/ru/betterend/registry/EndTags.java | 47 +++---------------- 2 files changed, 6 insertions(+), 42 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index f3cdcbc9..7dd8ee5f 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -153,7 +153,6 @@ public class EndBiomes { hasCaves = JsonFactory.getBoolean(element.getAsJsonObject(), "has_caves", true); } EndBiome endBiome = new EndBiome(id, biome, fog, chance, hasCaves); - System.out.println("Added biome: " + endBiome); if (isVoid) { VOID_BIOMES.addBiomeMutable(endBiome); diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index 7ce95c65..bcae1aff 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -1,20 +1,14 @@ package ru.betterend.registry; import java.util.List; -import java.util.function.Supplier; - import com.google.common.collect.Lists; -import net.fabricmc.fabric.api.tag.TagRegistry; import net.fabricmc.fabric.impl.tool.attribute.ToolManagerImpl; import net.fabricmc.fabric.impl.tool.attribute.handlers.ModdedToolsVanillaBlocksToolHandler; import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.tags.Tag; -import net.minecraft.tags.Tag.Named; -import net.minecraft.tags.TagCollection; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Item; import net.minecraft.world.level.biome.Biome; @@ -39,43 +33,12 @@ public class EndTags { // https://fabricmc.net/wiki/tutorial:tags // Block Tags - public static final Tag.Named PEDESTALS = makeBlockTag("pedestal"); - public static final Tag.Named END_STONES = makeCommonBlockTag("end_stones"); - public static final Tag.Named DRAGON_IMMUNE = getMCBlockTag("dragon_immune"); + public static final Tag.Named PEDESTALS = TagAPI.makeBlockTag(BetterEnd.MOD_ID, "pedestal"); + public static final Tag.Named END_STONES = TagAPI.makeCommonBlockTag("end_stones"); + public static final Tag.Named DRAGON_IMMUNE = TagAPI.getMCBlockTag("dragon_immune"); // Item Tags - public final static Tag.Named HAMMERS = makeFabricItemTag("hammers"); - - public static Tag.Named makeTag(Supplier> containerSupplier, ResourceLocation id) { - Tag tag = containerSupplier.get().getTag(id); - return tag == null ? TagRegistry.create(id, containerSupplier) : (Named) tag; - } - - public static Tag.Named makeBlockTag(String name) { - return makeTag(BlockTags::getAllTags, BetterEnd.makeID(name)); - } - - public static Tag.Named makeItemTag(String name) { - return makeTag(ItemTags::getAllTags, BetterEnd.makeID(name)); - } - - public static Tag.Named makeCommonBlockTag(String name) { - return makeTag(BlockTags::getAllTags, new ResourceLocation("c", name)); - } - - public static Tag.Named makeCommonItemTag(String name) { - return makeTag(ItemTags::getAllTags, new ResourceLocation("c", name)); - } - - public static Tag.Named makeFabricItemTag(String name) { - return makeTag(ItemTags::getAllTags, new ResourceLocation("fabric", name)); - } - - public static Tag.Named getMCBlockTag(String name) { - ResourceLocation id = new ResourceLocation(name); - Tag tag = BlockTags.getAllTags().getTag(id); - return tag == null ? (Named) TagRegistry.block(id) : (Named) tag; - } + public final static Tag.Named HAMMERS = TagAPI.makeItemTag("fabric", "hammers"); public static void register() { TagAPI.addEndGround(EndBlocks.THALLASIUM.ore); @@ -104,6 +67,8 @@ public class EndTags { ComposterBlockAccessor.callAdd(0.1F, block); } }); + TagAPI.addEndGround(EndBlocks.CAVE_MOSS); + TagHelper.addTag(BlockTags.NYLIUM, EndBlocks.CAVE_MOSS); BonemealAPI.addSpreadableBlock(EndBlocks.CAVE_MOSS); List hammers = Lists.newArrayList(); From 4dce2d5d7eebccb82a9e0fc55ba2fa056cbcd4d0 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 12:46:52 +0300 Subject: [PATCH 05/72] Fix for caves breaking surface vertically --- gradle.properties | 2 +- .../terrain/caves/TunelCaveFeature.java | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 85f2c954..b169f1c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.9.8.2-pre +mod_version = 0.9.8.3-pre maven_group = ru.betterend archives_base_name = better-end diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index ed518538..cac45184 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -12,14 +12,17 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; +import ru.bclib.world.biomes.BCLBiome; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; @@ -43,17 +46,30 @@ public class TunelCaveFeature extends EndCaveFeature { Set positions = Sets.newHashSet(); MutableBlockPos pos = new MutableBlockPos(); + + float a = hasCaves(world, pos.set(x1, 0, z1)) ? 1F : 0F; + float b = hasCaves(world, pos.set(x2, 0, z1)) ? 1F : 0F; + float c = hasCaves(world, pos.set(x1, 0, z2)) ? 1F : 0F; + float d = hasCaves(world, pos.set(x2, 0, z2)) ? 1F : 0F; + for (int x = x1; x < x2; x++) { pos.setX(x); + float dx = (float) (x - x1) / 16F; + float da = Mth.lerp(dx, a, b); + float db = Mth.lerp(dx, c, d); for (int z = z1; z < z2; z++) { pos.setZ(z); + float dz = (float) (z - z1) / 16F; + float density = 1 - Mth.lerp(dz, da, db); + int wheight = world.getHeight(Types.WORLD_SURFACE_WG, x, z); for (int y = 0; y < y2; y++) { pos.setY(y); + float gradient = 1 - Mth.clamp((wheight - y) * 0.1F, 0F, 1F); float val = Mth.abs((float) noiseH.eval(x * 0.02, y * 0.01, z * 0.02)); float vert = Mth.sin((y + (float) noiseV.eval(x * 0.01, z * 0.01) * 20) * 0.1F) * 0.9F; float dist = (float) noiseD.eval(x * 0.1, y * 0.1, z * 0.1) * 0.12F; - vert *= vert; - if (val + vert + dist < 0.15 && world.getBlockState(pos).is(TagAPI.GEN_TERRAIN) && noWaterNear(world, pos)) { + val = (val + vert * vert + dist) + density + gradient; + if (val < 0.15 && world.getBlockState(pos).is(TagAPI.GEN_TERRAIN) && noWaterNear(world, pos)) { BlocksHelper.setWithoutUpdate(world, pos, AIR); positions.add(pos.immutable()); int height = world.getHeight(Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); @@ -192,4 +208,17 @@ public class TunelCaveFeature extends EndCaveFeature { } }); } + + protected boolean hasCaves(WorldGenLevel world, BlockPos pos) { + return hasCavesInBiome(world, pos.offset(-8, 0, -8)) && + hasCavesInBiome(world, pos.offset(8, 0, -8)) && + hasCavesInBiome(world, pos.offset(-8, 0, 8)) && + hasCavesInBiome(world, pos.offset(8, 0, 8)); + } + + protected boolean hasCavesInBiome(WorldGenLevel world, BlockPos pos) { + Biome biome = world.getBiome(pos); + BCLBiome endBiome = BiomeAPI.getFromBiome(biome); + return endBiome.getCustomData("has_caves", true); + } } From 37394eba114387f59ca4242104cfaa26f6c3a0ba Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 21:38:56 +0300 Subject: [PATCH 06/72] Parallel cave generation & block fixing --- .../java/ru/betterend/util/BlockFixer.java | 328 +++++++++--------- .../terrain/caves/EndCaveFeature.java | 22 +- .../terrain/caves/RoundCaveFeature.java | 69 ++-- .../terrain/caves/TunelCaveFeature.java | 59 ++-- 4 files changed, 243 insertions(+), 235 deletions(-) diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index 9e9a0dcb..f0cdbc91 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,6 +1,7 @@ package ru.betterend.util; import java.util.Set; +import java.util.stream.IntStream; import com.google.common.collect.Sets; @@ -20,187 +21,194 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; public class BlockFixer { - private static final MutableBlockPos POS = new MutableBlockPos(); private static final BlockState AIR = Blocks.AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); - + public static void fixBlocks(LevelAccessor world, BlockPos start, BlockPos end) { - BlockState state; - Set doubleCheck = Sets.newHashSet(); - for (int x = start.getX(); x <= end.getX(); x++) { - POS.setX(x); - for (int z = start.getZ(); z <= end.getZ(); z++) { - POS.setZ(z); - for (int y = start.getY(); y <= end.getY(); y++) { - POS.setY(y); - state = world.getBlockState(POS); - - if (state.getBlock() instanceof FurBlock) { - doubleCheck.add(POS.immutable()); - } - // Liquids - else if (!state.getFluidState().isEmpty()) { - if (!state.canSurvive(world, POS)) { - BlocksHelper.setWithoutUpdate(world, POS, WATER); - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - while (!state.canSurvive(world, POS)) { - state = state.getFluidState().isEmpty() ? AIR : WATER; - BlocksHelper.setWithoutUpdate(world, POS, state); - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - } - } - POS.setY(y - 1); - if (world.isEmptyBlock(POS)) { - POS.setY(y); - while (!world.getFluidState(POS).isEmpty()) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - } - continue; - } - for (Direction dir : BlocksHelper.HORIZONTAL) { - if (world.isEmptyBlock(POS.relative(dir))) { - world.getLiquidTicks().scheduleTick(POS, state.getFluidState().getType(), 0); - break; - } - } - } - else if (state.is(EndBlocks.SMARAGDANT_CRYSTAL)) { + Set doubleCheck = Sets.newConcurrentHashSet(); + int dx = end.getX() - start.getX() + 1; + int dz = end.getZ() - start.getZ() + 1; + int count = dx * dz; + IntStream.range(0, count).parallel().forEach(index -> { + MutableBlockPos POS = new MutableBlockPos(); + POS.setX((index % dx) + start.getX()); + POS.setZ((index / dx) + start.getZ()); + BlockState state; + for (int y = start.getY(); y <= end.getY(); y++) { + POS.setY(y); + state = world.getBlockState(POS); + + if (state.getBlock() instanceof FurBlock) { + doubleCheck.add(POS.immutable()); + } + // Liquids + else if (!state.getFluidState().isEmpty()) { + if (!state.canSurvive(world, POS)) { + setWithoutUpdate(world, POS, WATER); POS.setY(POS.getY() - 1); - if (world.isEmptyBlock(POS)) { + state = world.getBlockState(POS); + while (!state.canSurvive(world, POS)) { + state = state.getFluidState().isEmpty() ? AIR : WATER; + setWithoutUpdate(world, POS, state); + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); + } + } + POS.setY(y - 1); + if (world.isEmptyBlock(POS)) { + POS.setY(y); + while (!world.getFluidState(POS).isEmpty()) { + setWithoutUpdate(world, POS, AIR); POS.setY(POS.getY() + 1); - while (state.is(EndBlocks.SMARAGDANT_CRYSTAL)) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); + } + continue; + } + for (Direction dir : BlocksHelper.HORIZONTAL) { + if (world.isEmptyBlock(POS.relative(dir))) { + world.getLiquidTicks().scheduleTick(POS, state.getFluidState().getType(), 0); + break; + } + } + } + else if (state.is(EndBlocks.SMARAGDANT_CRYSTAL)) { + POS.setY(POS.getY() - 1); + if (world.isEmptyBlock(POS)) { + POS.setY(POS.getY() + 1); + while (state.is(EndBlocks.SMARAGDANT_CRYSTAL)) { + setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() + 1); + state = world.getBlockState(POS); + } + } + } + else if (state.getBlock() instanceof StalactiteBlock) { + if (!state.canSurvive(world, POS)) { + if (world.getBlockState(POS.above()).getBlock() instanceof StalactiteBlock) { + while (state.getBlock() instanceof StalactiteBlock) { + setWithoutUpdate(world, POS, AIR); POS.setY(POS.getY() + 1); state = world.getBlockState(POS); } } - } - else if (state.getBlock() instanceof StalactiteBlock) { - if (!state.canSurvive(world, POS)) { - if (world.getBlockState(POS.above()).getBlock() instanceof StalactiteBlock) { - while (state.getBlock() instanceof StalactiteBlock) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - state = world.getBlockState(POS); - } - } - else { - while (state.getBlock() instanceof StalactiteBlock) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - } - } - } - } - else if (state.is(EndBlocks.CAVE_PUMPKIN)) { - if (!world.getBlockState(POS.above()).is(EndBlocks.CAVE_PUMPKIN_SEED)) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - } - } - else if (!state.canSurvive(world, POS)) { - // Chorus - if (state.is(Blocks.CHORUS_PLANT)) { - Set ends = Sets.newHashSet(); - Set add = Sets.newHashSet(); - ends.add(POS.immutable()); - - for (int i = 0; i < 64 && !ends.isEmpty(); i++) { - ends.forEach((pos) -> { - BlocksHelper.setWithoutUpdate(world, pos, AIR); - for (Direction dir : BlocksHelper.HORIZONTAL) { - BlockPos p = pos.relative(dir); - BlockState st = world.getBlockState(p); - if ((st.is(Blocks.CHORUS_PLANT) || st.is(Blocks.CHORUS_FLOWER)) && !st.canSurvive(world, p)) { - add.add(p); - } - } - BlockPos p = pos.above(); - BlockState st = world.getBlockState(p); - if ((st.is(Blocks.CHORUS_PLANT) || st.is(Blocks.CHORUS_FLOWER)) && !st.canSurvive(world, p)) { - add.add(p); - } - }); - ends.clear(); - ends.addAll(add); - add.clear(); - } - } - // Vines - else if (state.getBlock() instanceof BaseVineBlock) { - while (world.getBlockState(POS).getBlock() instanceof BaseVineBlock) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() - 1); - } - } - // Falling blocks - else if (state.getBlock() instanceof FallingBlock) { - BlockState falling = state; - - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - - int ray = BlocksHelper.downRayRep(world, POS.immutable(), 64); - if (ray > 32) { - BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.defaultBlockState()); - if (world.getRandom().nextBoolean()) { - POS.setY(POS.getY() - 1); - state = world.getBlockState(POS); - BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE.defaultBlockState()); - } - } - else { - POS.setY(y); - BlockState replacement = AIR; - for (Direction dir : BlocksHelper.HORIZONTAL) { - state = world.getBlockState(POS.relative(dir)); - if (!state.getFluidState().isEmpty()) { - replacement = state; - break; - } - } - BlocksHelper.setWithoutUpdate(world, POS, replacement); - POS.setY(y - ray); - BlocksHelper.setWithoutUpdate(world, POS, falling); - } - } - // Blocks without support else { - // Blue Vine - if (state.getBlock() instanceof BlueVineBlock) { - while (state.is(EndBlocks.BLUE_VINE) || state.is(EndBlocks.BLUE_VINE_LANTERN) || state.is(EndBlocks.BLUE_VINE_FUR)) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - state = world.getBlockState(POS); - } - } - // Double plants - if (state.getBlock() instanceof BaseDoublePlantBlock) { - BlocksHelper.setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - BlocksHelper.setWithoutUpdate(world, POS, AIR); - } - // Other blocks - else { - BlocksHelper.setWithoutUpdate(world, POS, getAirOrFluid(state)); + while (state.getBlock() instanceof StalactiteBlock) { + setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); } } } } + else if (state.is(EndBlocks.CAVE_PUMPKIN)) { + if (!world.getBlockState(POS.above()).is(EndBlocks.CAVE_PUMPKIN_SEED)) { + setWithoutUpdate(world, POS, AIR); + } + } + else if (!state.canSurvive(world, POS)) { + // Chorus + if (state.is(Blocks.CHORUS_PLANT)) { + Set ends = Sets.newHashSet(); + Set add = Sets.newHashSet(); + ends.add(POS.immutable()); + + for (int i = 0; i < 64 && !ends.isEmpty(); i++) { + ends.forEach((pos) -> { + setWithoutUpdate(world, pos, AIR); + for (Direction dir : BlocksHelper.HORIZONTAL) { + BlockPos p = pos.relative(dir); + BlockState st = world.getBlockState(p); + if ((st.is(Blocks.CHORUS_PLANT) || st.is(Blocks.CHORUS_FLOWER)) && !st.canSurvive(world, p)) { + add.add(p); + } + } + BlockPos p = pos.above(); + BlockState st = world.getBlockState(p); + if ((st.is(Blocks.CHORUS_PLANT) || st.is(Blocks.CHORUS_FLOWER)) && !st.canSurvive(world, p)) { + add.add(p); + } + }); + ends.clear(); + ends.addAll(add); + add.clear(); + } + } + // Vines + else if (state.getBlock() instanceof BaseVineBlock) { + while (world.getBlockState(POS).getBlock() instanceof BaseVineBlock) { + setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() - 1); + } + } + // Falling blocks + else if (state.getBlock() instanceof FallingBlock) { + BlockState falling = state; + + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); + + int ray = BlocksHelper.downRayRep(world, POS.immutable(), 64); + if (ray > 32) { + setWithoutUpdate(world, POS, Blocks.END_STONE.defaultBlockState()); + if (world.getRandom().nextBoolean()) { + POS.setY(POS.getY() - 1); + state = world.getBlockState(POS); + setWithoutUpdate(world, POS, Blocks.END_STONE.defaultBlockState()); + } + } + else { + POS.setY(y); + BlockState replacement = AIR; + for (Direction dir : BlocksHelper.HORIZONTAL) { + state = world.getBlockState(POS.relative(dir)); + if (!state.getFluidState().isEmpty()) { + replacement = state; + break; + } + } + setWithoutUpdate(world, POS, replacement); + POS.setY(y - ray); + setWithoutUpdate(world, POS, falling); + } + } + // Blocks without support + else { + // Blue Vine + if (state.getBlock() instanceof BlueVineBlock) { + while (state.is(EndBlocks.BLUE_VINE) || state.is(EndBlocks.BLUE_VINE_LANTERN) || state.is(EndBlocks.BLUE_VINE_FUR)) { + setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() + 1); + state = world.getBlockState(POS); + } + } + // Double plants + if (state.getBlock() instanceof BaseDoublePlantBlock) { + setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() + 1); + setWithoutUpdate(world, POS, AIR); + } + // Other blocks + else { + setWithoutUpdate(world, POS, getAirOrFluid(state)); + } + } + } } - } - + }); + doubleCheck.forEach((pos) -> { if (!world.getBlockState(pos).canSurvive(world, pos)) { - BlocksHelper.setWithoutUpdate(world, pos, AIR); + setWithoutUpdate(world, pos, AIR); } }); } - + private static BlockState getAirOrFluid(BlockState state) { return state.getFluidState().isEmpty() ? AIR : state.getFluidState().createLegacyBlock(); } + + private static void setWithoutUpdate(LevelAccessor world, BlockPos pos, BlockState state) { + synchronized (world) { + BlocksHelper.setWithoutUpdate(world, pos, state); + } + } } diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 964fa6b3..61abf3ce 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -58,19 +58,17 @@ public abstract class EndCaveFeature extends DefaultFeature { if (!caveBlocks.isEmpty()) { if (biome != null) { setBiomes(world, biome, caveBlocks); - Set floorPositions = Sets.newHashSet(); - Set ceilPositions = Sets.newHashSet(); - MutableBlockPos mut = new MutableBlockPos(); - caveBlocks.forEach((bpos) -> { - mut.set(bpos); - if (world.getBlockState(mut).getMaterial().isReplaceable()) { - mut.setY(bpos.getY() - 1); - if (world.getBlockState(mut).is(TagAPI.GEN_TERRAIN)) { - floorPositions.add(mut.immutable()); + Set floorPositions = Sets.newConcurrentHashSet(); + Set ceilPositions = Sets.newConcurrentHashSet(); + caveBlocks.parallelStream().forEach((bpos) -> { + if (world.getBlockState(bpos).getMaterial().isReplaceable()) { + BlockPos side = bpos.below(); + if (world.getBlockState(side).is(TagAPI.GEN_TERRAIN)) { + floorPositions.add(side); } - mut.setY(bpos.getY() + 1); - if (world.getBlockState(mut).is(TagAPI.GEN_TERRAIN)) { - ceilPositions.add(mut.immutable()); + side = bpos.above(); + if (world.getBlockState(side).is(TagAPI.GEN_TERRAIN)) { + ceilPositions.add(side); } } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java index 58364bd6..05d2179f 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/RoundCaveFeature.java @@ -2,6 +2,7 @@ package ru.betterend.world.features.terrain.caves; import java.util.Random; import java.util.Set; +import java.util.stream.IntStream; import com.google.common.collect.Sets; @@ -30,47 +31,45 @@ public class RoundCaveFeature extends EndCaveFeature { double hr = radius * 0.75; double nr = radius * 0.25; - BlockState state; - MutableBlockPos bpos = new MutableBlockPos(); - Set blocks = Sets.newHashSet(); - for (int x = x1; x <= x2; x++) { - int xsq = x - center.getX(); - xsq *= xsq; + int dx = x2 - x1 + 1; + int dz = z2 - z1 + 1; + int count = dx * dz; + Set blocks = Sets.newConcurrentHashSet(); + IntStream.range(0, count).parallel().forEach(index -> { + MutableBlockPos bpos = new MutableBlockPos(); + int x = (index % dx) + x1; + int z = (index / dx) + z1; bpos.setX(x); - for (int z = z1; z <= z2; z++) { - int zsq = z - center.getZ(); - zsq *= zsq; - bpos.setZ(z); - for (int y = y1; y <= y2; y++) { - int ysq = y - center.getY(); - ysq *= 1.6; - ysq *= ysq; + bpos.setZ(z); + int xsq = MHelper.sqr(x - center.getX()); + int zsq = MHelper.sqr(z - center.getZ()); + int dxz = xsq + zsq; + BlockState state; + for (int y = y1; y <= y2; y++) { + int ysq = (int) MHelper.sqr((y - center.getY()) * 1.6); + double r = noise.eval(x * 0.1, y * 0.1, z * 0.1) * nr + hr; + double dist = dxz + ysq; + if (dist < r * r) { bpos.setY(y); - double r = noise.eval(x * 0.1, y * 0.1, z * 0.1) * nr + hr; - double dist = xsq + ysq + zsq; - if (dist < r * r) { - state = world.getBlockState(bpos); - if (isReplaceable(state) && !isWaterNear(world, bpos)) { - BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR); - blocks.add(bpos.immutable()); - - while (state.getMaterial().equals(Material.LEAVES)) { - BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR); - bpos.setY(bpos.getY() + 1); - state = world.getBlockState(bpos); - } - - bpos.setY(y - 1); - while (state.getMaterial().equals(Material.LEAVES)) { - BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR); - bpos.setY(bpos.getY() - 1); - state = world.getBlockState(bpos); - } + state = world.getBlockState(bpos); + if (isReplaceable(state) && !isWaterNear(world, bpos)) { + blocks.add(bpos.immutable()); + + while (state.getMaterial().equals(Material.LEAVES)) { + bpos.setY(bpos.getY() + 1); + state = world.getBlockState(bpos); + } + + bpos.setY(y - 1); + while (state.getMaterial().equals(Material.LEAVES)) { + bpos.setY(bpos.getY() - 1); + state = world.getBlockState(bpos); } } } } - } + }); + blocks.forEach(bpos -> BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR)); return blocks; } diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index cac45184..24cbea5a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -3,6 +3,7 @@ package ru.betterend.world.features.terrain.caves; import java.util.Map; import java.util.Random; import java.util.Set; +import java.util.stream.IntStream; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -15,6 +16,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.Feature; @@ -34,55 +36,56 @@ public class TunelCaveFeature extends EndCaveFeature { if ((long) cx * (long) cx + (long) cz + (long) cz < 256) { return Sets.newHashSet(); } + int x1 = cx << 4; int z1 = cz << 4; int x2 = x1 + 16; int z2 = z1 + 16; - int y2 = world.getHeight(); + Random rand = new Random(world.getSeed()); OpenSimplexNoise noiseH = new OpenSimplexNoise(rand.nextInt()); OpenSimplexNoise noiseV = new OpenSimplexNoise(rand.nextInt()); OpenSimplexNoise noiseD = new OpenSimplexNoise(rand.nextInt()); - Set positions = Sets.newHashSet(); - MutableBlockPos pos = new MutableBlockPos(); + Set positions = Sets.newConcurrentHashSet(); - float a = hasCaves(world, pos.set(x1, 0, z1)) ? 1F : 0F; - float b = hasCaves(world, pos.set(x2, 0, z1)) ? 1F : 0F; - float c = hasCaves(world, pos.set(x1, 0, z2)) ? 1F : 0F; - float d = hasCaves(world, pos.set(x2, 0, z2)) ? 1F : 0F; + float a = hasCaves(world, new BlockPos(x1, 0, z1)) ? 1F : 0F; + float b = hasCaves(world, new BlockPos(x2, 0, z1)) ? 1F : 0F; + float c = hasCaves(world, new BlockPos(x1, 0, z2)) ? 1F : 0F; + float d = hasCaves(world, new BlockPos(x2, 0, z2)) ? 1F : 0F; - for (int x = x1; x < x2; x++) { - pos.setX(x); - float dx = (float) (x - x1) / 16F; + ChunkAccess chunk = world.getChunk(cx, cz); + IntStream.range(0, 256).parallel().forEach(index -> { + MutableBlockPos pos = new MutableBlockPos(); + int x = index & 15; + int z = index >> 4; + int wheight = chunk.getHeight(Types.WORLD_SURFACE_WG, x, z); + float dx = x / 16F; + float dz = z / 16F; + pos.setX(x + x1); + pos.setZ(z + z1); float da = Mth.lerp(dx, a, b); float db = Mth.lerp(dx, c, d); - for (int z = z1; z < z2; z++) { - pos.setZ(z); - float dz = (float) (z - z1) / 16F; - float density = 1 - Mth.lerp(dz, da, db); - int wheight = world.getHeight(Types.WORLD_SURFACE_WG, x, z); - for (int y = 0; y < y2; y++) { + float density = 1 - Mth.lerp(dz, da, db); + if (density < 0.5) { + for (int y = 0; y < wheight; y++) { pos.setY(y); float gradient = 1 - Mth.clamp((wheight - y) * 0.1F, 0F, 1F); - float val = Mth.abs((float) noiseH.eval(x * 0.02, y * 0.01, z * 0.02)); - float vert = Mth.sin((y + (float) noiseV.eval(x * 0.01, z * 0.01) * 20) * 0.1F) * 0.9F; - float dist = (float) noiseD.eval(x * 0.1, y * 0.1, z * 0.1) * 0.12F; + if (gradient > 0.5) { + break; + } + float val = Mth.abs((float) noiseH.eval(pos.getX() * 0.02, y * 0.01, pos.getZ() * 0.02)); + float vert = Mth.sin((y + (float) noiseV.eval(pos.getX() * 0.01, pos.getZ() * 0.01) * 20) * 0.1F) * 0.9F; + float dist = (float) noiseD.eval(pos.getX() * 0.1, y * 0.1, pos.getZ() * 0.1) * 0.12F; val = (val + vert * vert + dist) + density + gradient; if (val < 0.15 && world.getBlockState(pos).is(TagAPI.GEN_TERRAIN) && noWaterNear(world, pos)) { - BlocksHelper.setWithoutUpdate(world, pos, AIR); positions.add(pos.immutable()); - int height = world.getHeight(Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); - if (height < pos.getY() + 4) { - while (pos.getY() < height && noWaterNear(world, pos)) { - pos.setY(pos.getY() + 1); - BlocksHelper.setWithoutUpdate(world, pos, AIR); - } - } } } } - } + }); + positions.forEach(bpos -> BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR)); + return positions; } From 262b2496549b1034cdc447ad78343de778b67010 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Mon, 21 Jun 2021 21:52:05 +0300 Subject: [PATCH 07/72] Version change --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b169f1c8..012f8840 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.9.8.3-pre +mod_version = 0.9.8.4-pre maven_group = ru.betterend archives_base_name = better-end From 30204a2aeeecb051c33129a0bcb1c562b293c76d Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Tue, 22 Jun 2021 13:32:44 +0300 Subject: [PATCH 08/72] Wrong chest registry fix --- gradle.properties | 2 +- src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 012f8840..7c15972e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -8,7 +8,7 @@ yarn_mappings=6 loader_version=0.11.3 # Mod Properties -mod_version = 0.9.8.4-pre +mod_version = 0.9.8.5-pre maven_group = ru.betterend archives_base_name = better-end diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index c42dc9e9..57df31f3 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -16,6 +16,7 @@ import ru.bclib.blocks.BaseBarkBlock; import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBookshelfBlock; +import ru.bclib.blocks.BaseChestBlock; import ru.bclib.blocks.BaseComposterBlock; import ru.bclib.blocks.BaseCraftingTableBlock; import ru.bclib.blocks.BaseDoorBlock; @@ -90,7 +91,7 @@ public class WoodenMaterial { ladder = EndBlocks.registerBlock(name + "_ladder", new BaseLadderBlock(planks)); sign = EndBlocks.registerBlock(name + "_sign", new BaseSignBlock(planks)); - chest = EndBlocks.registerBlock(name + "_chest", new BaseFenceBlock(planks)); + chest = EndBlocks.registerBlock(name + "_chest", new BaseChestBlock(planks)); barrel = EndBlocks.registerBlock(name + "_barrel", new BaseBarrelBlock(planks)); shelf = EndBlocks.registerBlock(name + "_bookshelf", new BaseBookshelfBlock(planks)); composter = EndBlocks.registerBlock(name + "_composter", new BaseComposterBlock(planks)); From 08fc14439abcf251d0bfda23138ed40152aa4eac Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 17:27:12 +0200 Subject: [PATCH 09/72] Compiler Fixes for `EndStoneSmelter` --- .../ru/betterend/blocks/EndStoneSmelter.java | 28 ++++--- .../entities/EndStoneSmelterBlockEntity.java | 74 +++++++++---------- 2 files changed, 52 insertions(+), 50 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index 46e17878..9065479e 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -1,10 +1,6 @@ package ru.betterend.blocks; -import java.util.List; -import java.util.Random; - import com.google.common.collect.Lists; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -21,13 +17,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; @@ -38,8 +31,13 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockWithEntity; import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; +import ru.betterend.registry.EndBlockEntities; + +import java.util.List; +import java.util.Random; public class EndStoneSmelter extends BaseBlockWithEntity { public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; @@ -79,8 +77,8 @@ public class EndStoneSmelter extends BaseBlockWithEntity { } @Override - public BlockEntity newBlockEntity(BlockGetter world) { - return new EndStoneSmelterBlockEntity(); + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new EndStoneSmelterBlockEntity(blockPos, blockState); } @Override @@ -149,4 +147,10 @@ public class EndStoneSmelter extends BaseBlockWithEntity { world.addParticle(ParticleTypes.SMOKE, x + offX, y + offY, z + offZ, 0.0D, 0.0D, 0.0D); } } + + + @Nullable + public BlockEntityTicker getTicker(Level level, BlockEntityType blockEntityType) { + return level.isClientSide() ? null : createTickerHelper(blockEntityType, EndBlockEntities.END_STONE_SMELTER, EndStoneSmelterBlockEntity::tick); + } } diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index 49516b35..b471f713 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,15 +1,11 @@ package ru.betterend.blocks.entities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - import com.google.common.collect.Lists; import com.google.common.collect.Maps; - import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import net.fabricmc.fabric.api.registry.FuelRegistry; +import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; @@ -37,7 +33,6 @@ import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity; import net.minecraft.world.level.block.entity.BaseContainerBlockEntity; -import net.minecraft.world.level.block.entity.TickableBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; import ru.betterend.BetterEnd; @@ -46,7 +41,11 @@ import ru.betterend.client.gui.EndStoneSmelterScreenHandler; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; -public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible, TickableBlockEntity { +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible { private static final int[] TOP_SLOTS = new int[] { 0, 1 }; private static final int[] BOTTOM_SLOTS = new int[] { 2, 3 }; @@ -62,8 +61,8 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme private int burnTime; private int fuelTime; - public EndStoneSmelterBlockEntity() { - super(EndBlockEntities.END_STONE_SMELTER); + public EndStoneSmelterBlockEntity(BlockPos blockPos, BlockState blockState) { + super(EndBlockEntities.END_STONE_SMELTER, blockPos, blockState); this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); this.recipesUsed = new Object2IntOpenHashMap<>(); this.propertyDelegate = new ContainerData() { @@ -225,61 +224,60 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme return new EndStoneSmelterScreenHandler(syncId, playerInventory, this, propertyDelegate); } - @Override - public void tick() { - if (level == null) return; + public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, EndStoneSmelterBlockEntity blockEntity) { + if (tickLevel == null) return; - boolean initialBurning = isBurning(); + boolean initialBurning = blockEntity.isBurning(); if (initialBurning) { - burnTime--; + blockEntity.burnTime--; } boolean burning = initialBurning; - if (!level.isClientSide) { - ItemStack fuel = inventory.get(2); - if (!burning && (fuel.isEmpty() || inventory.get(0).isEmpty() && inventory.get(1).isEmpty())) { - if (smeltTime > 0) { - smeltTime = Mth.clamp(smeltTime - 2, 0, smeltTimeTotal); + if (!tickLevel.isClientSide) { + ItemStack fuel = blockEntity.inventory.get(2); + if (!burning && (fuel.isEmpty() || blockEntity.inventory.get(0).isEmpty() && blockEntity.inventory.get(1).isEmpty())) { + if (blockEntity.smeltTime > 0) { + blockEntity.smeltTime = Mth.clamp(blockEntity.smeltTime - 2, 0, blockEntity.smeltTimeTotal); } } else { - Recipe recipe = level.getRecipeManager().getRecipeFor(AlloyingRecipe.TYPE, this, level).orElse(null); + Recipe recipe = tickLevel.getRecipeManager().getRecipeFor(AlloyingRecipe.TYPE, blockEntity, tickLevel).orElse(null); if (recipe == null) { - recipe = level.getRecipeManager().getRecipeFor(RecipeType.BLASTING, this, level).orElse(null); + recipe = tickLevel.getRecipeManager().getRecipeFor(RecipeType.BLASTING, blockEntity, tickLevel).orElse(null); } - boolean accepted = this.canAcceptRecipeOutput(recipe); + boolean accepted = blockEntity.canAcceptRecipeOutput(recipe); if (!burning && accepted) { - burnTime = getFuelTime(fuel); - fuelTime = burnTime; - burning = isBurning(); + blockEntity.burnTime = blockEntity.getFuelTime(fuel); + blockEntity.fuelTime = blockEntity.burnTime; + burning = blockEntity.isBurning(); if (burning) { if (!fuel.isEmpty()) { Item item = fuel.getItem(); fuel.shrink(1); if (fuel.isEmpty()) { Item remainFuel = item.getCraftingRemainingItem(); - inventory.set(2, remainFuel == null ? ItemStack.EMPTY : new ItemStack(remainFuel)); + blockEntity.inventory.set(2, remainFuel == null ? ItemStack.EMPTY : new ItemStack(remainFuel)); } } - setChanged(); + blockEntity.setChanged(); } } if (burning && accepted) { - this.smeltTime++; - if (smeltTime == smeltTimeTotal) { - smeltTime = 0; - smeltTimeTotal = getSmeltTime(); - craftRecipe(recipe); - setChanged(); + blockEntity.smeltTime++; + if (blockEntity.smeltTime == blockEntity.smeltTimeTotal) { + blockEntity.smeltTime = 0; + blockEntity.smeltTimeTotal = blockEntity.getSmeltTime(); + blockEntity.craftRecipe(recipe); + blockEntity.setChanged(); } } else { - smeltTime = 0; + blockEntity.smeltTime = 0; } } if (initialBurning != burning) { - level.setBlock(worldPosition, level.getBlockState(worldPosition).setValue(EndStoneSmelter.LIT, burning), 3); - setChanged(); + tickLevel.setBlock(tickPos, tickState.setValue(EndStoneSmelter.LIT, burning), 3); + blockEntity.setChanged(); } } } @@ -395,8 +393,8 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme } @Override - public void load(BlockState state, CompoundTag tag) { - super.load(state, tag); + public void load(CompoundTag tag) { + super.load(tag); inventory = NonNullList.withSize(getContainerSize(), ItemStack.EMPTY); ContainerHelper.loadAllItems(tag, inventory); burnTime = tag.getShort("BurnTime"); From 0ac3814cd5c5078eca450ed8d924831efd23283a Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 20:30:49 +0200 Subject: [PATCH 10/72] Updated `tick` --- .../betterend/blocks/basis/PedestalBlock.java | 14 +++++++++++ .../entities/BlockEntityHydrothermalVent.java | 15 ++++++------ .../blocks/entities/PedestalBlockEntity.java | 24 +++++++++---------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 2f91a682..6b580345 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; @@ -48,9 +50,11 @@ import ru.bclib.client.models.ModelsHelper; import ru.betterend.blocks.EndBlockProperties; import ru.betterend.blocks.EndBlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; +import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; import ru.betterend.blocks.entities.InfusionPedestalEntity; import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.client.models.Patterns; +import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; @@ -428,6 +432,16 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } }; } + + @Nullable + public BlockEntityTicker getTicker(Level level, BlockEntityType blockEntityType) { + return level.isClientSide() ? null : createTickerHelper(blockEntityType, EndBlockEntities.PEDESTAL, PedestalBlockEntity::tick); + } + + @Nullable + protected static BlockEntityTicker createTickerHelper(BlockEntityType blockEntityType, BlockEntityType blockEntityType2, BlockEntityTicker blockEntityTicker) { + return blockEntityType2 == blockEntityType ? blockEntityTicker : null; + } static { VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14); diff --git a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java index ecce043d..cc21085d 100644 --- a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java +++ b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java @@ -2,6 +2,7 @@ package ru.betterend.blocks.entities; import java.util.List; +import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -9,8 +10,8 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.Item; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.TickableBlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; @@ -20,18 +21,16 @@ import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndParticles; -public class BlockEntityHydrothermalVent extends BlockEntity implements TickableBlockEntity { +public class BlockEntityHydrothermalVent extends BlockEntity { private final static Vec3 POSITIVE_Y = new Vec3(0.0f, 1.0f, 0.0f); - public BlockEntityHydrothermalVent() { - super(EndBlockEntities.HYDROTHERMAL_VENT); + public BlockEntityHydrothermalVent(BlockPos blockPos, BlockState blockState) { + super(EndBlockEntities.HYDROTHERMAL_VENT, blockPos, blockState); } - @Override - public void tick() { + public static void tick(Level level, BlockPos worldPosition, BlockState state, BlockEntityHydrothermalVent blockEntity) { if (level != null) { - BlockState state = getBlockState(); if (state.is(EndBlocks.HYDROTHERMAL_VENT)) { boolean active = state.getValue(HydrothermalVentBlock.ACTIVATED); if (active && level.random.nextInt(20) == 0) { @@ -56,7 +55,7 @@ public class BlockEntityHydrothermalVent extends BlockEntity implements Tickable double mult = active ? 3.0 : 5.0; float force = (float) ((1.0 - (mutable.getY() / box.maxY)) / mult); entities.stream().filter(entity -> (int) entity.getY() == mutable.getY() && - hasElytra(entity) && entity.isFallFlying()) + blockEntity.hasElytra(entity) && entity.isFallFlying()) .forEach(entity -> entity.moveRelative(force, POSITIVE_Y)); } mutable.move(Direction.UP); diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 5dfe65e0..83a56db3 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,26 +1,27 @@ package ru.betterend.blocks.entities; import net.fabricmc.fabric.api.block.entity.BlockEntityClientSerializable; +import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.Container; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.entity.TickableBlockEntity; import net.minecraft.world.level.block.state.BlockState; import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndItems; -public class PedestalBlockEntity extends BlockEntity implements Container, TickableBlockEntity, BlockEntityClientSerializable { +public class PedestalBlockEntity extends BlockEntity implements Container, BlockEntityClientSerializable { private ItemStack activeItem = ItemStack.EMPTY; private final int maxAge = 314; private int age; - public PedestalBlockEntity() { - super(EndBlockEntities.PEDESTAL); + public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { + super(EndBlockEntities.PEDESTAL, blockPos, blockState); } public PedestalBlockEntity(BlockEntityType type) { @@ -103,8 +104,8 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Ticka } @Override - public void load(BlockState state, CompoundTag tag) { - super.load(state, tag); + public void load(CompoundTag tag) { + super.load(tag); fromTag(tag); } @@ -131,12 +132,11 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Ticka } } - @Override - public void tick() { - if (!isEmpty()) { - age++; - if (age > maxAge) { - age = 0; + public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { + if (!blockEntity.isEmpty()) { + blockEntity.age++; + if (blockEntity.age > blockEntity.maxAge) { + blockEntity.age = 0; } } } From cfa765437c7339719b63a9c5362218a9e0e363c6 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 20:31:56 +0200 Subject: [PATCH 11/72] =?UTF-8?q?=C3=80geable`,=20`MobBucketItem`,=20`Unif?= =?UTF-8?q?ormGenerator`=20and=20`ShuffleList`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/ru/betterend/entity/DragonflyEntity.java | 4 ++-- src/main/java/ru/betterend/entity/SilkMothEntity.java | 4 ++-- .../java/ru/betterend/integration/byg/BYGIntegration.java | 4 ++-- src/main/java/ru/betterend/item/EndBucketItem.java | 4 ++-- src/main/java/ru/betterend/util/LootTableUtil.java | 6 +++--- .../java/ru/betterend/world/biome/cave/EndCaveBiome.java | 6 +++--- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/ru/betterend/entity/DragonflyEntity.java b/src/main/java/ru/betterend/entity/DragonflyEntity.java index 63ff1ed3..998228cf 100644 --- a/src/main/java/ru/betterend/entity/DragonflyEntity.java +++ b/src/main/java/ru/betterend/entity/DragonflyEntity.java @@ -6,7 +6,7 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.entity.AgableMob; +import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -194,7 +194,7 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } @Override - public AgableMob getBreedOffspring(ServerLevel world, AgableMob entity) { + public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { return EndEntities.DRAGONFLY.create(world); } diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java index 4c54e387..98f3ac16 100644 --- a/src/main/java/ru/betterend/entity/SilkMothEntity.java +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -16,7 +16,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.AgableMob; +import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -162,7 +162,7 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { } @Override - public AgableMob getBreedOffspring(ServerLevel world, AgableMob entity) { + public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { return EndEntities.SILK_MOTH.create(world); } diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index 7306d1dd..845c63e4 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -5,7 +5,7 @@ import java.util.stream.Collectors; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.ai.behavior.WeightedList; +import net.minecraft.world.entity.ai.behavior.ShufflingList; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import ru.bclib.api.BiomeAPI; @@ -62,7 +62,7 @@ public class BYGIntegration extends ModIntegration implements EndBiomeIntegratio EndBiomes.LAND_BIOMES.removeMutableBiome(biomeID); EndBiomes.VOID_BIOMES.addBiomeMutable(endBiome); } - WeightedList subBiomes = this.getAndExecuteRuntime(biomeClass, obj, "getHills"); + ShufflingList subBiomes = this.getAndExecuteRuntime(biomeClass, obj, "getHills"); if (subBiomes != null) { subBiomes.stream().collect(Collectors.toList()).forEach((id) -> { BCLBiome subBiome = BiomeAPI.getBiome(id); diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index 7d7a729a..bccc0c06 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -1,12 +1,12 @@ package ru.betterend.item; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.item.FishBucketItem; +import net.minecraft.world.item.MobBucketItem; import net.minecraft.world.level.material.Fluids; import ru.bclib.client.models.ItemModelProvider; import ru.betterend.registry.EndItems; -public class EndBucketItem extends FishBucketItem implements ItemModelProvider { +public class EndBucketItem extends MobBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { super(type, Fluids.WATER, EndItems.makeEndItemSettings().stacksTo(1)); } diff --git a/src/main/java/ru/betterend/util/LootTableUtil.java b/src/main/java/ru/betterend/util/LootTableUtil.java index 1b8cb09d..f7439249 100644 --- a/src/main/java/ru/betterend/util/LootTableUtil.java +++ b/src/main/java/ru/betterend/util/LootTableUtil.java @@ -4,9 +4,9 @@ import net.fabricmc.fabric.api.loot.v1.FabricLootPoolBuilder; import net.fabricmc.fabric.api.loot.v1.event.LootTableLoadingCallback; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.Items; -import net.minecraft.world.level.storage.loot.RandomValueBounds; import net.minecraft.world.level.storage.loot.entries.LootItem; import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceCondition; +import net.minecraft.world.level.storage.loot.providers.number.UniformGenerator; import ru.betterend.registry.EndItems; public class LootTableUtil { @@ -16,13 +16,13 @@ public class LootTableUtil { LootTableLoadingCallback.EVENT.register((resourceManager, lootManager, id, supplier, setter) -> { if (END_CITY_TREASURE_ID.equals(id)) { FabricLootPoolBuilder builder = FabricLootPoolBuilder.builder(); - builder.setRolls(RandomValueBounds.between(0, 5)); + builder.setRolls(UniformGenerator.between(0, 5)); builder.withCondition(LootItemRandomChanceCondition.randomChance(0.5f).build()); builder.withEntry(LootItem.lootTableItem(Items.GHAST_TEAR).build()); supplier.withPool(builder); builder = FabricLootPoolBuilder.builder(); - builder.setRolls(RandomValueBounds.between(0, 5)); + builder.setRolls(UniformGenerator.between(0, 5)); builder.withCondition(LootItemRandomChanceCondition.randomChance(0.1f).build()); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_STRANGE_AND_ALIEN).build()); builder.withEntry(LootItem.lootTableItem(EndItems.MUSIC_DISC_GRASPING_AT_STARS).build()); diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index e25ea7db..79af7269 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -3,7 +3,7 @@ package ru.betterend.world.biome.cave; import java.util.Random; import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.ai.behavior.WeightedList; +import net.minecraft.world.entity.ai.behavior.ShufflingList; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; @@ -16,8 +16,8 @@ import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; public class EndCaveBiome extends EndBiome { - private WeightedList> floorFeatures = new WeightedList>(); - private WeightedList> ceilFeatures = new WeightedList>(); + private ShufflingList> floorFeatures = new ShufflingList>(); + private ShufflingList> ceilFeatures = new ShufflingList>(); public EndCaveBiome(BCLBiomeDef definition) { super(makeDef(definition)); From 4f053c161a4e19c4b820ed8ff2c3f4e292067fe9 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 21:59:24 +0200 Subject: [PATCH 12/72] More compiler fixes --- .../ru/betterend/blocks/EndPortalBlock.java | 4 +-- .../blocks/HelixTreeLeavesBlock.java | 2 +- .../blocks/HydrothermalVentBlock.java | 4 +-- .../ru/betterend/blocks/InfusionPedestal.java | 4 +-- .../ru/betterend/blocks/NeedlegrassBlock.java | 2 +- .../betterend/blocks/SilkMothHiveBlock.java | 2 +- .../blocks/SmallJellyshroomBlock.java | 2 +- .../blocks/VentBubbleColumnBlock.java | 15 +++++++-- .../ru/betterend/blocks/basis/FurBlock.java | 2 +- .../betterend/blocks/basis/PedestalBlock.java | 6 ++-- .../entities/InfusionPedestalEntity.java | 21 +++++++++---- .../blocks/entities/PedestalBlockEntity.java | 16 ++++++---- .../client/render/PedestalItemRenderer.java | 2 +- .../ru/betterend/entity/CubozoaEntity.java | 2 +- .../ru/betterend/entity/DragonflyEntity.java | 31 +++++++++---------- .../ru/betterend/entity/EndFishEntity.java | 2 +- .../ru/betterend/entity/SilkMothEntity.java | 22 ++++++------- .../item/model/CrystaliteArmorProvider.java | 4 +-- .../betterend/registry/EndModelProviders.java | 6 ++-- .../ru/betterend/rituals/EternalRitual.java | 2 +- 20 files changed, 84 insertions(+), 67 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index 6d5ab346..a419608e 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -94,7 +94,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I if (exitPos == null) return; if (entity instanceof ServerPlayer && ((ServerPlayer) entity).isCreative()) { ((ServerPlayer) entity).teleportTo(destination, exitPos.getX() + 0.5, exitPos.getY(), - exitPos.getZ() + 0.5, entity.yRot, entity.xRot); + exitPos.getZ() + 0.5, entity.getYRot(), entity.getXRot()); } else { ((TeleportingEntity) entity).be_setExitPos(exitPos); Optional teleported = Optional.ofNullable(entity.changeDimension(destination)); @@ -114,7 +114,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I private BlockPos findExitPos(ServerLevel currentWorld, ServerLevel targetWorld, BlockPos currentPos, Entity entity) { if (targetWorld == null) return null; - Registry registry = targetWorld.registryAccess().dimensionTypes(); + Registry registry = targetWorld.registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); ResourceLocation targetWorldId = targetWorld.dimension().location(); ResourceLocation currentWorldId = currentWorld.dimension().location(); double targetMultiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale(); diff --git a/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java index 625d503c..2a15a97e 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java @@ -79,7 +79,7 @@ public class HelixTreeLeavesBlock extends BaseBlock implements IColorProvider { public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); if (tool != null) { - if (tool.getItem().is(FabricToolTags.SHEARS) || tool.isCorrectToolForDrops(state) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool.is(FabricToolTags.SHEARS) || tool.isCorrectToolForDrops(state) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Collections.singletonList(new ItemStack(this)); } int fortune = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.BLOCK_FORTUNE, tool); diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 806455f5..96a55828 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -108,8 +108,8 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo } @Override - public BlockEntity newBlockEntity(BlockGetter world) { - return new BlockEntityHydrothermalVent(); + public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new BlockEntityHydrothermalVent(pos, state); } @Override diff --git a/src/main/java/ru/betterend/blocks/InfusionPedestal.java b/src/main/java/ru/betterend/blocks/InfusionPedestal.java index 2604055d..4b49d48d 100644 --- a/src/main/java/ru/betterend/blocks/InfusionPedestal.java +++ b/src/main/java/ru/betterend/blocks/InfusionPedestal.java @@ -44,8 +44,8 @@ public class InfusionPedestal extends PedestalBlock { } @Override - public BlockEntity newBlockEntity(BlockGetter world) { - return new InfusionPedestalEntity(); + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new InfusionPedestalEntity(blockPos, blockState); } @Override diff --git a/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java b/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java index 57807754..12d61fa8 100644 --- a/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java +++ b/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java @@ -34,7 +34,7 @@ public class NeedlegrassBlock extends EndPlantBlock { @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.getItem().is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Lists.newArrayList(new ItemStack(this)); } else { diff --git a/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java b/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java index a769f1a3..7cfc5aa6 100644 --- a/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java +++ b/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java @@ -89,7 +89,7 @@ public class SilkMothHiveBlock extends BaseBlock { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (hand == InteractionHand.MAIN_HAND) { ItemStack stack = player.getMainHandItem(); - if (stack.getItem().is(FabricToolTags.SHEARS) && state.getValue(FULLNESS) == 3) { + if (stack.is(FabricToolTags.SHEARS) && state.getValue(FULLNESS) == 3) { BlocksHelper.setWithUpdate(world, pos, state.setValue(FULLNESS, 0)); Direction dir = state.getValue(FACING); double px = pos.getX() + dir.getStepX() + 0.5; diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index 60aac3b5..7456529d 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -56,7 +56,7 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderT @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.getItem().is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Lists.newArrayList(new ItemStack(this)); } else { diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index e58333b7..2c337d21 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,5 +1,6 @@ package ru.betterend.blocks; +import java.util.Optional; import java.util.Random; import net.fabricmc.api.EnvType; @@ -9,9 +10,12 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -38,9 +42,9 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid } @Override - public Fluid takeLiquid(LevelAccessor world, BlockPos pos, BlockState state) { + public ItemStack pickupBlock(LevelAccessor world, BlockPos pos, BlockState state) { world.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); - return Fluids.WATER; + return new ItemStack(Items.WATER_BUCKET); } @Override @@ -120,4 +124,11 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid public FluidState getFluidState(BlockState state) { return Fluids.WATER.getSource(false); } + + + + @Override + public Optional getPickupSound() { + return Fluids.WATER.getPickupSound(); + } } diff --git a/src/main/java/ru/betterend/blocks/basis/FurBlock.java b/src/main/java/ru/betterend/blocks/basis/FurBlock.java index 0514f5b5..9f2b20aa 100644 --- a/src/main/java/ru/betterend/blocks/basis/FurBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FurBlock.java @@ -62,7 +62,7 @@ public class FurBlock extends BaseAttachedBlock implements IRenderTyped { @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.getItem().is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Lists.newArrayList(new ItemStack(this)); } else if (dropChance < 1 || MHelper.RANDOM.nextInt(dropChance) == 0) { diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 6b580345..d6a389fc 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -355,8 +355,8 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } @Override - public BlockEntity newBlockEntity(BlockGetter world) { - return new PedestalBlockEntity(); + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new PedestalBlockEntity(blockPos, blockState); } public boolean hasUniqueEntity() { @@ -440,7 +440,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { @Nullable protected static BlockEntityTicker createTickerHelper(BlockEntityType blockEntityType, BlockEntityType blockEntityType2, BlockEntityTicker blockEntityTicker) { - return blockEntityType2 == blockEntityType ? blockEntityTicker : null; + return blockEntityType2 == blockEntityType ? (BlockEntityTicker) blockEntityTicker : null; } static { diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index 2a6a4029..b13054dc 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -3,6 +3,7 @@ package ru.betterend.blocks.entities; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import ru.betterend.registry.EndBlockEntities; import ru.betterend.rituals.InfusionRitual; @@ -10,13 +11,21 @@ public class InfusionPedestalEntity extends PedestalBlockEntity { private InfusionRitual linkedRitual; - public InfusionPedestalEntity() { - super(EndBlockEntities.INFUSION_PEDESTAL); + public InfusionPedestalEntity(BlockPos blockPos, BlockState blockState) { + super(EndBlockEntities.INFUSION_PEDESTAL, blockPos, blockState); + } + + @Override + public void setLevel(Level world){ + super.setLevel(world); + if (hasRitual()) { + linkedRitual.setLocation(world, this.getBlockPos()); + } else { + linkRitual(new InfusionRitual(this, world, this.getBlockPos())); + } } - @Override public void setLevelAndPosition(Level world, BlockPos pos) { - super.setLevelAndPosition(world, pos); if (hasRitual()) { linkedRitual.setLocation(world, pos); } else { @@ -37,11 +46,11 @@ public class InfusionPedestalEntity extends PedestalBlockEntity { } @Override - public void tick() { + protected void tick(Level tickLevel, BlockPos tickPos, BlockState tickState){ if (hasRitual()) { linkedRitual.tick(); } - super.tick(); + super.tick(tickLevel, tickPos, tickState); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 83a56db3..1f917f00 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -20,7 +20,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block private final int maxAge = 314; private int age; - public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { + public PedestalBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { super(EndBlockEntities.PEDESTAL, blockPos, blockState); } @@ -132,12 +132,16 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block } } - public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { - if (!blockEntity.isEmpty()) { - blockEntity.age++; - if (blockEntity.age > blockEntity.maxAge) { - blockEntity.age = 0; + protected void tick(Level tickLevel, BlockPos tickPos, BlockState tickState){ + if (!this.isEmpty()) { + this.age++; + if (this.age > this.maxAge) { + this.age = 0; } } } + + public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { + blockEntity.tick(tickLevel, tickPos, tickState); + } } diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index e66cdee8..1002bb3d 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -24,7 +24,7 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) -public class PedestalItemRenderer extends BlockEntityRenderer { +public class PedestalItemRenderer implements BlockEntityRenderer { public PedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) { super(dispatcher); diff --git a/src/main/java/ru/betterend/entity/CubozoaEntity.java b/src/main/java/ru/betterend/entity/CubozoaEntity.java index e58053f4..794bcbf9 100644 --- a/src/main/java/ru/betterend/entity/CubozoaEntity.java +++ b/src/main/java/ru/betterend/entity/CubozoaEntity.java @@ -91,7 +91,7 @@ public class CubozoaEntity extends AbstractSchoolingFish { } @Override - protected ItemStack getBucketItemStack() { + public ItemStack getBucketItemStack() { ItemStack bucket = EndItems.BUCKET_CUBOZOA.getDefaultInstance(); CompoundTag tag = bucket.getOrCreateTag(); tag.putByte("Variant", entityData.get(VARIANT)); diff --git a/src/main/java/ru/betterend/entity/DragonflyEntity.java b/src/main/java/ru/betterend/entity/DragonflyEntity.java index 998228cf..b2a07c71 100644 --- a/src/main/java/ru/betterend/entity/DragonflyEntity.java +++ b/src/main/java/ru/betterend/entity/DragonflyEntity.java @@ -6,11 +6,8 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.entity.AgeableMob; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.*; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.FlyingMoveControl; @@ -21,6 +18,8 @@ import net.minecraft.world.entity.ai.goal.FollowParentGoal; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; +import net.minecraft.world.entity.ai.util.HoverRandomPos; import net.minecraft.world.entity.ai.util.RandomPos; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.animal.FlyingAnimal; @@ -98,18 +97,18 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } @Override - protected boolean makeFlySound() { - return true; - } - - @Override - public boolean causeFallDamage(float fallDistance, float damageMultiplier) { + public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { return false; } @Override - public boolean isMovementNoisy() { - return false; + protected Entity.MovementEmission getMovementEmission() { + return Entity.MovementEmission.EVENTS; + } + + @Override + public boolean isFlying() { + return !this.onGround; } @Override @@ -168,11 +167,11 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { private Vec3 getRandomLocation() { int h = BlocksHelper.downRay(DragonflyEntity.this.level, DragonflyEntity.this.blockPosition(), 16); Vec3 rotation = DragonflyEntity.this.getViewVector(0.0F); - Vec3 airPos = RandomPos.getAboveLandPos(DragonflyEntity.this, 8, 7, rotation, 1.5707964F, 2, 1); + Vec3 airPos = HoverRandomPos.getPos(DragonflyEntity.this, 8, 7, rotation.x, rotation.z, 1.5707964F, 3, 1); if (airPos != null) { if (isInVoid(airPos)) { for (int i = 0; i < 8; i++) { - airPos = RandomPos.getAboveLandPos(DragonflyEntity.this, 16, 7, rotation, MHelper.PI2, 2, 1); + airPos = HoverRandomPos.getPos(DragonflyEntity.this, 16, 7, rotation.x, rotation.z, MHelper.PI2, 3, 1); if (airPos != null && !isInVoid(airPos)) { return airPos; } @@ -184,7 +183,7 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } return airPos; } - return RandomPos.getAirPos(DragonflyEntity.this, 8, 4, -2, rotation, 1.5707963705062866D); + return AirAndWaterRandomPos.getPos(DragonflyEntity.this, 8, 4, -2, rotation.x, rotation.z, 1.5707963705062866D); } private boolean isInVoid(Vec3 pos) { diff --git a/src/main/java/ru/betterend/entity/EndFishEntity.java b/src/main/java/ru/betterend/entity/EndFishEntity.java index dec0cad8..c0550ac2 100644 --- a/src/main/java/ru/betterend/entity/EndFishEntity.java +++ b/src/main/java/ru/betterend/entity/EndFishEntity.java @@ -88,7 +88,7 @@ public class EndFishEntity extends AbstractSchoolingFish { } @Override - protected ItemStack getBucketItemStack() { + public ItemStack getBucketItemStack() { ItemStack bucket = EndItems.BUCKET_END_FISH.getDefaultInstance(); CompoundTag tag = bucket.getOrCreateTag(); tag.putByte("variant", entityData.get(VARIANT)); diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java index 98f3ac16..927bc096 100644 --- a/src/main/java/ru/betterend/entity/SilkMothEntity.java +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -4,6 +4,7 @@ import java.util.EnumSet; import java.util.List; import java.util.Random; +import net.minecraft.world.entity.*; import org.jetbrains.annotations.Nullable; import net.minecraft.core.BlockPos; @@ -16,11 +17,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.AgeableMob; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.FlyingMoveControl; @@ -142,18 +138,18 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { } @Override - protected boolean makeFlySound() { - return true; - } - - @Override - public boolean causeFallDamage(float fallDistance, float damageMultiplier) { + public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { return false; } @Override - public boolean isMovementNoisy() { - return false; + protected Entity.MovementEmission getMovementEmission() { + return Entity.MovementEmission.EVENTS; + } + + @Override + public boolean isFlying() { + return !this.onGround; } @Override diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index b631ad7e..1bba7c04 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -7,8 +7,6 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderingRegistry.ModelProvider; -import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderingRegistry.TextureProvider; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.resources.ResourceLocation; @@ -20,7 +18,7 @@ import ru.betterend.item.CrystaliteArmor; import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) -public class CrystaliteArmorProvider implements ModelProvider, TextureProvider { +public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider*/ { private final static ResourceLocation FIRST_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_1.png"); private final static ResourceLocation SECOND_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_2.png"); private final static CrystaliteHelmetModel HELMET_MODEL = new CrystaliteHelmetModel(1.0F); diff --git a/src/main/java/ru/betterend/registry/EndModelProviders.java b/src/main/java/ru/betterend/registry/EndModelProviders.java index 80952641..c9d2d3e5 100644 --- a/src/main/java/ru/betterend/registry/EndModelProviders.java +++ b/src/main/java/ru/betterend/registry/EndModelProviders.java @@ -2,7 +2,6 @@ package ru.betterend.registry; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.client.rendering.v1.ArmorRenderingRegistry; import ru.betterend.item.model.CrystaliteArmorProvider; @Environment(EnvType.CLIENT) @@ -11,7 +10,8 @@ public class EndModelProviders { public final static CrystaliteArmorProvider CRYSTALITE_PROVIDER = new CrystaliteArmorProvider(); public final static void register() { - ArmorRenderingRegistry.registerModel(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); - ArmorRenderingRegistry.registerTexture(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); + throw new RuntimeException("Needs Fix for 1.17"); + //ArmorRenderingRegistry.registerModel(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); + //ArmorRenderingRegistry.registerTexture(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); } } diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index 1d7ebbdc..60e126c4 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -293,7 +293,7 @@ public class EternalRitual { private BlockPos findPortalPos(int portalId) { MinecraftServer server = world.getServer(); ServerLevel targetWorld = (ServerLevel) getTargetWorld(portalId); - Registry registry = Objects.requireNonNull(server).registryAccess().dimensionTypes(); + Registry registry = Objects.requireNonNull(server).registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); double multiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale(); BlockPos.MutableBlockPos basePos = center.mutable().set(center.getX() / multiplier, center.getY(), center.getZ() / multiplier); BlockPos framePos = findFrame(targetWorld, basePos.mutable()); From e541763ada61270ecd308b32455da5ad843af7b7 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 22:23:20 +0200 Subject: [PATCH 13/72] Additional compiler fixes --- src/main/java/ru/betterend/blocks/EndStoneSmelter.java | 1 - src/main/java/ru/betterend/blocks/EternalPedestal.java | 4 ++-- src/main/java/ru/betterend/blocks/SilkMothNestBlock.java | 2 +- .../java/ru/betterend/blocks/SmallAmaranitaBlock.java | 9 +++++---- .../java/ru/betterend/blocks/SmallJellyshroomBlock.java | 3 ++- .../java/ru/betterend/blocks/basis/PedestalBlock.java | 1 - .../betterend/blocks/entities/EternalPedestalEntity.java | 5 +++-- src/main/java/ru/betterend/entity/DragonflyEntity.java | 1 - .../java/ru/betterend/entity/ShadowWalkerEntity.java | 2 +- src/main/java/ru/betterend/entity/SilkMothEntity.java | 8 +++++--- 10 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index 9065479e..1a25bf56 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -15,7 +15,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; -import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; diff --git a/src/main/java/ru/betterend/blocks/EternalPedestal.java b/src/main/java/ru/betterend/blocks/EternalPedestal.java index e1b5404e..c3087233 100644 --- a/src/main/java/ru/betterend/blocks/EternalPedestal.java +++ b/src/main/java/ru/betterend/blocks/EternalPedestal.java @@ -126,8 +126,8 @@ public class EternalPedestal extends PedestalBlock { } @Override - public BlockEntity newBlockEntity(BlockGetter world) { - return new EternalPedestalEntity(); + public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { + return new EternalPedestalEntity(blockPos, blockState); } @Override diff --git a/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java b/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java index 2d13649d..52e52178 100644 --- a/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java +++ b/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java @@ -150,7 +150,7 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (hand == InteractionHand.MAIN_HAND) { ItemStack stack = player.getMainHandItem(); - if (stack.getItem().is(FabricToolTags.SHEARS) && state.getValue(ACTIVE) && state.getValue(FULLNESS) == 3) { + if (stack.is(FabricToolTags.SHEARS) && state.getValue(ACTIVE) && state.getValue(FULLNESS) == 3) { BlocksHelper.setWithUpdate(world, pos, state.setValue(FULLNESS, 0)); Direction dir = state.getValue(FACING); double px = pos.getX() + dir.getStepX() + 0.5; diff --git a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java index 2bc6059b..13eb1b34 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,7 +1,5 @@ package ru.betterend.blocks; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.BlockGetter; @@ -9,6 +7,7 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -17,6 +16,8 @@ import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; +import java.util.Random; + public class SmallAmaranitaBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 10, 12); @@ -29,7 +30,7 @@ public class SmallAmaranitaBlock extends EndPlantBlock { public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlockPos bigPos = growBig(world, pos); if (bigPos != null) { - if (EndFeatures.GIGANTIC_AMARANITA.getFeature().place(world, null, random, bigPos, null)) { + if (EndFeatures.GIGANTIC_AMARANITA.getFeature().place(new FeaturePlaceContext<>(world, null, random, bigPos, null))) { replaceMushroom(world, bigPos); replaceMushroom(world, bigPos.south()); replaceMushroom(world, bigPos.east()); @@ -37,7 +38,7 @@ public class SmallAmaranitaBlock extends EndPlantBlock { } return; } - EndFeatures.LARGE_AMARANITA.getFeature().place(world, null, random, pos, null); + EndFeatures.LARGE_AMARANITA.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index 7456529d..1f76d9ec 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -23,6 +23,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; @@ -99,6 +100,6 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderT @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { BlocksHelper.setWithUpdate(world, pos, Blocks.AIR); - EndFeatures.JELLYSHROOM.getFeature().place(world, null, random, pos, null); + EndFeatures.JELLYSHROOM.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index d6a389fc..433ff1e8 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -50,7 +50,6 @@ import ru.bclib.client.models.ModelsHelper; import ru.betterend.blocks.EndBlockProperties; import ru.betterend.blocks.EndBlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; -import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; import ru.betterend.blocks.entities.InfusionPedestalEntity; import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.client.models.Patterns; diff --git a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java index d4da8a18..78bf9b6e 100644 --- a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java @@ -3,14 +3,15 @@ package ru.betterend.blocks.entities; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import ru.betterend.registry.EndBlockEntities; import ru.betterend.rituals.EternalRitual; public class EternalPedestalEntity extends PedestalBlockEntity { private EternalRitual linkedRitual; - public EternalPedestalEntity() { - super(EndBlockEntities.ETERNAL_PEDESTAL); + public EternalPedestalEntity(BlockPos blockPos, BlockState blockState) { + super(EndBlockEntities.ETERNAL_PEDESTAL, blockPos, blockState); } public boolean hasRitual() { diff --git a/src/main/java/ru/betterend/entity/DragonflyEntity.java b/src/main/java/ru/betterend/entity/DragonflyEntity.java index b2a07c71..0429c4ba 100644 --- a/src/main/java/ru/betterend/entity/DragonflyEntity.java +++ b/src/main/java/ru/betterend/entity/DragonflyEntity.java @@ -20,7 +20,6 @@ import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; import net.minecraft.world.entity.ai.util.HoverRandomPos; -import net.minecraft.world.entity.ai.util.RandomPos; import net.minecraft.world.entity.animal.Animal; import net.minecraft.world.entity.animal.FlyingAnimal; import net.minecraft.world.entity.player.Player; diff --git a/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java b/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java index 100bccac..bf5f2fd0 100644 --- a/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java +++ b/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java @@ -96,7 +96,7 @@ public class ShadowWalkerEntity extends Monster { } @Override - protected float getVoicePitch() { + public float getVoicePitch() { return MHelper.randRange(0.75F, 1.25F, random); } diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java index 927bc096..b2320f81 100644 --- a/src/main/java/ru/betterend/entity/SilkMothEntity.java +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -5,6 +5,8 @@ import java.util.List; import java.util.Random; import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.util.AirAndWaterRandomPos; +import net.minecraft.world.entity.ai.util.HoverRandomPos; import org.jetbrains.annotations.Nullable; import net.minecraft.core.BlockPos; @@ -235,8 +237,8 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { @Nullable private Vec3 getRandomLocation() { Vec3 vec3d3 = SilkMothEntity.this.getViewVector(0.0F); - Vec3 vec3d4 = RandomPos.getAboveLandPos(SilkMothEntity.this, 8, 7, vec3d3, 1.5707964F, 2, 1); - return vec3d4 != null ? vec3d4 : RandomPos.getAirPos(SilkMothEntity.this, 8, 4, -2, vec3d3, 1.5707963705062866D); + Vec3 vec3d4 = HoverRandomPos.getPos(SilkMothEntity.this, 8, 7, vec3d3.x, vec3d3.z, 1.5707964F, 3, 1); + return vec3d4 != null ? vec3d4 : AirAndWaterRandomPos.getPos(SilkMothEntity.this, 8, 4, -2, vec3d3.x, vec3d3.z, 1.5707963705062866D); } } @@ -295,7 +297,7 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { BlocksHelper.setWithUpdate(SilkMothEntity.this.hiveWorld, SilkMothEntity.this.hivePos, state.setValue(EndBlockProperties.FULLNESS, fullness)); } SilkMothEntity.this.level.playSound(null, SilkMothEntity.this.entrance, SoundEvents.BEEHIVE_ENTER, SoundSource.BLOCKS, 1, 1); - SilkMothEntity.this.remove(); + SilkMothEntity.this.discard(); } else { SilkMothEntity.this.hivePos = null; From 9372ecf28fc9bfc7131f7960e2919567bd9795e7 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 22:23:35 +0200 Subject: [PATCH 14/72] version updates --- build.gradle | 2 +- gradle.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 9f2e81dc..2227b888 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}" + //useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}" useApi "com.github.paulevsGitch:BCLib:${project.bclib_version}" useOptional "me.shedaniel:RoughlyEnoughItems:${project.rei_version}" diff --git a/gradle.properties b/gradle.properties index b9c4fd41..31e7b8e7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,7 +15,7 @@ archives_base_name = better-end # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 50-FABRIC -fabric_version = 0.35.2+1.17 +fabric_version = 0.36.0+1.17 canvas_version = 1.0.+ -bclib_version = 0.1.42 +bclib_version = 0.1.43 rei_version = 5.8.+ \ No newline at end of file From d8383121e35978cba1f325fc920f53a1b608a28c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 23:21:16 +0200 Subject: [PATCH 15/72] *Cubozoa* Model --- .../entity/model/CubozoaEntityModel.java | 132 +++++++++++------- .../RendererEntityCubozoa.java | 9 +- .../registry/EndEntitiesRenders.java | 41 ++++-- 3 files changed, 118 insertions(+), 64 deletions(-) rename src/main/java/ru/betterend/entity/{render => model}/RendererEntityCubozoa.java (84%) diff --git a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java index 91f0abda..b01a5b9c 100644 --- a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java @@ -2,46 +2,66 @@ package ru.betterend.entity.model; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; - import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import ru.betterend.entity.CubozoaEntity; public class CubozoaEntityModel extends BlockBenchModel { - private final ModelPart model; - private final ModelPart main_cube_r1; - private final ModelPart tentacle_center_1; - private final ModelPart tentacle_1; - private final ModelPart tentacle_center_2; - private final ModelPart tentacle_2; - private final ModelPart tentacle_center_3; - private final ModelPart tentacle_3; - private final ModelPart tentacle_center_4; - private final ModelPart tentacle_4; - private float scaleY; - private float scaleXZ; + private final static int TENTACLE_COUNT = 4; - public CubozoaEntityModel() { - super(RenderType::entityTranslucent); - - texWidth = 48; - texHeight = 48; - - model = new ModelPart(this); + private final ModelPart model; + private final ModelPart[] tentacle_center; + private final ModelPart[] tentacle; + private float scaleY; + private float scaleXZ; + + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + + PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .texOffs(0, 17) + .addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F), PartPose.offset(0.0F, 24.0F, 0.0F)); + /*model = new ModelPart(this); model.setPos(0.0F, 24.0F, 0.0F); - model.texOffs(0, 17).addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F, 0.0F); + model.texOffs(0, 17).addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F, 0.0F);*/ - main_cube_r1 = new ModelPart(this); + bodyPart.addOrReplaceChild("main_cube_r1", CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F), PartPose.offsetAndRotation(0.0F, -14.0F, 0.0F, 0.0F, 0.0F, -3.1416F)); + + /*main_cube_r1 = new ModelPart(this); main_cube_r1.setPos(0.0F, -14.0F, 0.0F); model.addChild(main_cube_r1); setRotationAngle(main_cube_r1, 0.0F, 0.0F, -3.1416F); - main_cube_r1.texOffs(0, 0).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F); + main_cube_r1.texOffs(0, 0).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F);*/ + float[] angles = {0, (float)Math.PI/-2, (float)Math.PI, (float)Math.PI/2}; - tentacle_center_1 = new ModelPart(this); + for (int i=1; i<=TENTACLE_COUNT; i++){ + PartDefinition tentaclePart = bodyPart + .addOrReplaceChild("tentacle_center_"+i, + CubeListBuilder.create(), + PartPose.offsetAndRotation( + 0.0F, 0.0F, 0.0F, + 0.0F, -1.5708F, 0.0F + ) + ); + + tentaclePart.addOrReplaceChild("tentacle_"+i, CubeListBuilder.create() + .texOffs(16, 17) + .addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F), + PartPose.offset(0.0F, -7.0F, 4.5F)); + } + /*tentacle_center_1 = new ModelPart(this); tentacle_center_1.setPos(0.0F, 0.0F, 0.0F); model.addChild(tentacle_center_1); - tentacle_1 = new ModelPart(this); tentacle_1.setPos(0.0F, -7.0F, 4.5F); @@ -52,7 +72,6 @@ public class CubozoaEntityModel extends BlockBenchModel { tentacle_center_2.setPos(0.0F, 0.0F, 0.0F); model.addChild(tentacle_center_2); setRotationAngle(tentacle_center_2, 0.0F, -1.5708F, 0.0F); - tentacle_2 = new ModelPart(this); tentacle_2.setPos(0.0F, -7.0F, 4.5F); @@ -63,7 +82,6 @@ public class CubozoaEntityModel extends BlockBenchModel { tentacle_center_3.setPos(0.0F, 0.0F, 0.0F); model.addChild(tentacle_center_3); setRotationAngle(tentacle_center_3, 0.0F, 3.1416F, 0.0F); - tentacle_3 = new ModelPart(this); tentacle_3.setPos(0.0F, -7.0F, 4.5F); @@ -74,31 +92,47 @@ public class CubozoaEntityModel extends BlockBenchModel { tentacle_center_4.setPos(0.0F, 0.0F, 0.0F); model.addChild(tentacle_center_4); setRotationAngle(tentacle_center_4, 0.0F, 1.5708F, 0.0F); - + tentacle_4 = new ModelPart(this); tentacle_4.setPos(0.0F, -7.0F, 4.5F); tentacle_center_4.addChild(tentacle_4); - tentacle_4.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); - } - - @Override - public void setupAnim(CubozoaEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { - float sin = Mth.sin(animationProgress * 0.13F); - scaleY = sin * 0.1F + 0.9F; - scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F; - - tentacle_1.xRot = sin * 0.15F; - tentacle_2.xRot = sin * 0.15F; - tentacle_3.xRot = sin * 0.15F; - tentacle_4.xRot = sin * 0.15F; - } + tentacle_4.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F);*/ - @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { - matrices.pushPose(); - matrices.scale(scaleXZ, scaleY, scaleXZ); - model.render(matrices, vertices, light, overlay); - matrices.popPose(); - } + /* texWidth = 48; + texHeight = 48; */ + return LayerDefinition.create(modelData, 48, 48); + } + + public CubozoaEntityModel(ModelPart modelPart) { + super(RenderType::entityTranslucent); + + tentacle = new ModelPart[TENTACLE_COUNT]; + tentacle_center = new ModelPart[TENTACLE_COUNT]; + + model = modelPart.getChild(PartNames.BODY); + for (int i=1; i<=TENTACLE_COUNT; i++){ + tentacle_center[i] = model.getChild("tentacle_center_"+i); + tentacle[i] = tentacle_center[i].getChild("tentacle_"+i); + } + } + + @Override + public void setupAnim(CubozoaEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + float sin = Mth.sin(animationProgress * 0.13F); + scaleY = sin * 0.1F + 0.9F; + scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F; + + for (int i=1; i<=TENTACLE_COUNT; i++){ + tentacle[i].xRot = sin * 0.15f; + } + } + + @Override + public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + matrices.pushPose(); + matrices.scale(scaleXZ, scaleY, scaleXZ); + model.render(matrices, vertices, light, overlay); + matrices.popPose(); + } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java b/src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java similarity index 84% rename from src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java rename to src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java index 5b6b78fe..27500043 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java +++ b/src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java @@ -1,11 +1,11 @@ -package ru.betterend.entity.render; +package ru.betterend.entity.model; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -13,13 +13,14 @@ import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; import ru.betterend.entity.CubozoaEntity; import ru.betterend.entity.model.CubozoaEntityModel; +import ru.betterend.registry.EndEntitiesRenders; public class RendererEntityCubozoa extends MobRenderer { private static final ResourceLocation[] TEXTURE = new ResourceLocation[2]; private static final RenderType[] GLOW = new RenderType[2]; - public RendererEntityCubozoa(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new CubozoaEntityModel(), 0.5f); + public RendererEntityCubozoa(EntityRendererProvider.Context ctx) { + super(ctx, new CubozoaEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f); this.addLayer(new EyesLayer(this) { @Override public RenderType renderType() { diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 30384554..d1e59f53 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -2,11 +2,16 @@ package ru.betterend.registry; import java.util.function.Function; +import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; +import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; -import ru.betterend.entity.render.RendererEntityCubozoa; +import ru.betterend.BetterEnd; +import ru.betterend.entity.model.CubozoaEntityModel; +import ru.betterend.entity.model.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityDragonfly; import ru.betterend.entity.render.RendererEntityEndFish; import ru.betterend.entity.render.RendererEntityEndSlime; @@ -14,19 +19,33 @@ import ru.betterend.entity.render.RendererEntityShadowWalker; import ru.betterend.entity.render.SilkMothEntityRenderer; public class EndEntitiesRenders { + public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly"); public static void register() { - register(EndEntities.DRAGONFLY, RendererEntityDragonfly::new); - register(EndEntities.END_SLIME, RendererEntityEndSlime::new); - register(EndEntities.END_FISH, RendererEntityEndFish::new); - register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker::new); - register(EndEntities.CUBOZOA, RendererEntityCubozoa::new); - register(EndEntities.SILK_MOTH, SilkMothEntityRenderer::new); + register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); + register(EndEntities.END_SLIME, RendererEntityEndSlime.class); + register(EndEntities.END_FISH, RendererEntityEndFish.class); + register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker.class); + register(EndEntities.CUBOZOA, RendererEntityCubozoa.class); + register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class); + + EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, CubozoaEntityModel::getTexturedModelData); } - - private static void register(EntityType type, Function> render) { - EntityRendererRegistry.INSTANCE.register(type, (entityRenderDispatcher, context) -> { - return render.apply(entityRenderDispatcher); + + private static void register(EntityType type, Class> renderer) { + EntityRendererRegistry.INSTANCE.register(type, (context) -> { + MobRenderer render = null; + try { + render = renderer.getConstructor(context.getClass()).newInstance(context); + } + catch (Exception e) { + e.printStackTrace(); + } + return render; }); } + + private static ModelLayerLocation registerMain(String id){ + return new ModelLayerLocation(new ResourceLocation(BetterEnd.MOD_ID, id), "main"); + } } From 6e9d8e8b49dcf45f5c1c56552a73f5a06488ce73 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 23:50:30 +0200 Subject: [PATCH 16/72] using getters for `abilities` and `yRot` --- .../java/ru/betterend/entity/EndSlimeEntity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index 24662f26..f790dbb5 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -322,7 +322,7 @@ public class EndSlimeEntity extends Slime { return false; } else { - return livingEntity instanceof Player && ((Player) livingEntity).abilities.invulnerable ? false : EndSlimeEntity.this.getMoveControl() instanceof EndSlimeMoveControl; + return livingEntity instanceof Player && ((Player) livingEntity).getAbilities().invulnerable ? false : EndSlimeEntity.this.getMoveControl() instanceof EndSlimeMoveControl; } } @@ -339,7 +339,7 @@ public class EndSlimeEntity extends Slime { else if (!livingEntity.isAlive()) { return false; } - else if (livingEntity instanceof Player && ((Player) livingEntity).abilities.invulnerable) { + else if (livingEntity instanceof Player && ((Player) livingEntity).getAbilities().invulnerable) { return false; } else { @@ -349,7 +349,7 @@ public class EndSlimeEntity extends Slime { public void tick() { EndSlimeEntity.this.lookAt(EndSlimeEntity.this.getTarget(), 10.0F, 10.0F); - ((EndSlimeMoveControl) EndSlimeEntity.this.getMoveControl()).look(EndSlimeEntity.this.yRot, EndSlimeEntity.this.isDealsDamage()); + ((EndSlimeMoveControl) EndSlimeEntity.this.getMoveControl()).look(EndSlimeEntity.this.getYRot(), EndSlimeEntity.this.isDealsDamage()); } } @@ -360,7 +360,7 @@ public class EndSlimeEntity extends Slime { public EndSlimeMoveControl(EndSlimeEntity slime) { super(slime); - this.targetYaw = 180.0F * slime.yRot / 3.1415927F; + this.targetYaw = 180.0F * slime.getYRot() / 3.1415927F; } public void look(float targetYaw, boolean jumpOften) { @@ -374,9 +374,9 @@ public class EndSlimeEntity extends Slime { } public void tick() { - this.mob.yRot = this.rotlerp(this.mob.yRot, this.targetYaw, 90.0F); - this.mob.yHeadRot = this.mob.yRot; - this.mob.yBodyRot = this.mob.yRot; + this.mob.setYRot(this.rotlerp(this.mob.getYRot(), this.targetYaw, 90.0F)); + this.mob.yHeadRot = this.mob.getYRot(); + this.mob.yBodyRot = this.mob.getYRot(); if (this.operation != MoveControl.Operation.MOVE_TO) { this.mob.setZza(0.0F); } From d6696feb16aa28197148b2e0b8497fccec46c8bc Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 23 Jun 2021 23:50:46 +0200 Subject: [PATCH 17/72] Signature changes --- src/main/java/ru/betterend/blocks/LumecornSeedBlock.java | 3 ++- .../ru/betterend/blocks/entities/PedestalBlockEntity.java | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index ed04a881..ec666d67 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; @@ -14,7 +15,7 @@ public class LumecornSeedBlock extends EndPlantWithAgeBlock { @Override public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - EndFeatures.LUMECORN.getFeature().place(world, null, random, pos, null); + EndFeatures.LUMECORN.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 1f917f00..c41a16bd 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -19,9 +19,13 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block private final int maxAge = 314; private int age; + + public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { + this(EndBlockEntities.PEDESTAL, blockPos, blockState); + } public PedestalBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { - super(EndBlockEntities.PEDESTAL, blockPos, blockState); + super(blockEntityType, blockPos, blockState); } public PedestalBlockEntity(BlockEntityType type) { From e5bf933758bdf7bfa9e128b62aad1db5c9b034df Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 09:19:20 +0200 Subject: [PATCH 18/72] Render *EndSlime* --- .../ru/betterend/entity/EndSlimeEntity.java | 5 +- .../entity/model/EndSlimeEntityModel.java | 100 +++++++++++++++--- .../RendererEntityCubozoa.java | 2 +- .../entity/render/RendererEntityEndSlime.java | 21 ++-- .../java/ru/betterend/interfaces/ISlime.java | 3 + .../ru/betterend/mixin/common/SlimeMixin.java | 14 ++- .../registry/EndEntitiesRenders.java | 16 +-- 7 files changed, 124 insertions(+), 37 deletions(-) rename src/main/java/ru/betterend/entity/{model => render}/RendererEntityCubozoa.java (96%) diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index f790dbb5..48393a06 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -116,7 +116,7 @@ public class EndSlimeEntity extends Slime { } @Override - public void remove() { + public void remove(RemovalReason reason) { int i = this.getSize(); if (!this.level.isClientSide && i > 1 && this.isDeadOrDying()) { Component text = this.getCustomName(); @@ -144,7 +144,8 @@ public class EndSlimeEntity extends Slime { this.level.addFreshEntity(slimeEntity); } } - this.removed = true; + + ((ISlime)this).entityRemove(reason); } @Override diff --git a/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java index 5d3bb97d..2abf6c55 100644 --- a/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java @@ -6,37 +6,90 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.ListModel; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.RenderType; import ru.bclib.util.MHelper; import ru.betterend.entity.EndSlimeEntity; public class EndSlimeEntityModel extends ListModel { - private final ModelPart flower; - private final ModelPart crop; private final ModelPart innerCube; private final ModelPart rightEye; private final ModelPart leftEye; private final ModelPart mouth; + private final ModelPart flower; + private final ModelPart crop; - public EndSlimeEntityModel(boolean onlyShell) { - super(RenderType::entityCutout); + public static LayerDefinition getShellOnlyTexturedModelData() { + return getTexturedModelData(true); + } + public static LayerDefinition getCompleteTexturedModelData() { + return getTexturedModelData(false); + } - this.innerCube = new ModelPart(this, 0, 16); - this.rightEye = new ModelPart(this, 32, 0); - this.leftEye = new ModelPart(this, 32, 4); - this.mouth = new ModelPart(this, 32, 8); - this.flower = new ModelPart(this); - this.crop = new ModelPart(this); + private static LayerDefinition getTexturedModelData(boolean onlyShell) { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + //this.innerCube = new ModelPart(this, 0, 16); if (onlyShell) { - this.innerCube.texOffs(0, 0); - this.innerCube.addBox(-4.0F, 16.0F, -4.0F, 8.0F, 8.0F, 8.0F); + modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-4.0F, 16.0F, -4.0F, 8.0F, 8.0F, 8.0F), + PartPose.ZERO); + /* this.innerCube.texOffs(0, 0); + this.innerCube.addBox(-4.0F, 16.0F, -4.0F, 8.0F, 8.0F, 8.0F);*/ } else { - this.innerCube.addBox(-3.0F, 17.0F, -3.0F, 6.0F, 6.0F, 6.0F); - this.rightEye.addBox(-3.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F); - this.leftEye.addBox(1.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F); - this.mouth.addBox(0.0F, 21.0F, -3.5F, 1.0F, 1.0F, 1.0F); + modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .texOffs(0, 16) + .addBox(-3.0F, 17.0F, -3.0F, 6.0F, 6.0F, 6.0F), + PartPose.ZERO); + //this.innerCube.addBox(-3.0F, 17.0F, -3.0F, 6.0F, 6.0F, 6.0F); + modelPartData.addOrReplaceChild(PartNames.RIGHT_EYE, CubeListBuilder.create() + .texOffs(32, 0) + .addBox(-3.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F), + PartPose.ZERO); + //this.rightEye = new ModelPart(this, 32, 0); + //this.rightEye.addBox(-3.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F); + + modelPartData.addOrReplaceChild(PartNames.LEFT_EYE, CubeListBuilder.create() + .texOffs(32, 4) + .addBox(1.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F), + PartPose.ZERO); + //this.leftEye = new ModelPart(this, 32, 4); + //this.leftEye.addBox(1.25F, 18.0F, -3.5F, 2.0F, 2.0F, 2.0F); + + modelPartData.addOrReplaceChild(PartNames.MOUTH, CubeListBuilder.create() + .texOffs(32, 8) + .addBox(0.0F, 21.0F, -3.5F, 1.0F, 1.0F, 1.0F), + PartPose.ZERO); + //this.mouth = new ModelPart(this, 32, 8); + //this.mouth.addBox(0.0F, 21.0F, -3.5F, 1.0F, 1.0F, 1.0F); + + PartDefinition flowerPart = modelPartData.addOrReplaceChild("flower", CubeListBuilder.create(), PartPose.ZERO); + PartDefinition cropPart = modelPartData.addOrReplaceChild("crop", CubeListBuilder.create(), PartPose.ZERO); + + for (int i = 0; i < 6; i++) { + final PartDefinition parent = i<4?flowerPart:cropPart; + final float rot = MHelper.degreesToRadians( i<4 ? (i * 45F) : ((i-4) * 90F + 45F) ); + + PartDefinition petalRotPart = parent.addOrReplaceChild("petalRot_"+i, + CubeListBuilder.create(), + PartPose.offsetAndRotation(0,0,0,0,rot, 0)); + + + petalRotPart.addOrReplaceChild("petal_"+i, + CubeListBuilder.create() + .texOffs(40, 0) + .addBox(0.0F, 0.0F, 0.0F, 8.0F, 8.0F, 0.0F), + PartPose.offset(-4, 8, 0)); + } + /* this.flower = new ModelPart(this); for (int i = 0; i < 4; i++) { ModelPart petalRot = new ModelPart(this); petalRot.yRot = MHelper.degreesToRadians(i * 45F); @@ -48,6 +101,7 @@ public class EndSlimeEntityModel extends ListModel this.flower.addChild(petalRot); petalRot.addChild(petal); } + this.crop = new ModelPart(this); for (int i = 0; i < 2; i++) { ModelPart petalRot = new ModelPart(this); @@ -60,7 +114,21 @@ public class EndSlimeEntityModel extends ListModel this.crop.addChild(petalRot); petalRot.addChild(petal); } + */ } + + return LayerDefinition.create(modelData, 64, 32); + } + + public EndSlimeEntityModel(ModelPart modelPart) { + super(RenderType::entityCutout); + + innerCube = modelPart.getChild(PartNames.BODY); + rightEye = modelPart.getChild(PartNames.RIGHT_EYE); + leftEye = modelPart.getChild(PartNames.LEFT_EYE); + mouth = modelPart.getChild(PartNames.MOUTH); + flower = modelPart.getChild("flower"); + crop = modelPart.getChild("crop"); } @Override diff --git a/src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java similarity index 96% rename from src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java rename to src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java index 27500043..d9a3fa47 100644 --- a/src/main/java/ru/betterend/entity/model/RendererEntityCubozoa.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java @@ -20,7 +20,7 @@ public class RendererEntityCubozoa extends MobRenderer(this) { @Override public RenderType renderType() { diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java index 3fad8fc1..39fdf210 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java @@ -5,10 +5,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.client.renderer.entity.MobRenderer; -import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.*; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.entity.layers.RenderLayer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -16,15 +13,17 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import ru.betterend.BetterEnd; import ru.betterend.entity.EndSlimeEntity; +import ru.betterend.entity.model.CubozoaEntityModel; import ru.betterend.entity.model.EndSlimeEntityModel; +import ru.betterend.registry.EndEntitiesRenders; public class RendererEntityEndSlime extends MobRenderer> { private static final ResourceLocation TEXTURE[] = new ResourceLocation[4]; private static final RenderType GLOW[] = new RenderType[4]; - public RendererEntityEndSlime(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new EndSlimeEntityModel(false), 0.25F); - this.addLayer(new OverlayFeatureRenderer(this)); + public RendererEntityEndSlime(EntityRendererProvider.Context ctx) { + super(ctx, new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_MODEL)), 0.25f); + this.addLayer(new OverlayFeatureRenderer(this, ctx)); this.addLayer(new EyesLayer>(this) { @Override public RenderType renderType() { @@ -69,11 +68,13 @@ public class RendererEntityEndSlime extends MobRenderer extends RenderLayer> { - private final EndSlimeEntityModel modelOrdinal = new EndSlimeEntityModel(true); - private final EndSlimeEntityModel modelLake = new EndSlimeEntityModel(true); + private final EndSlimeEntityModel modelOrdinal; + private final EndSlimeEntityModel modelLake; - public OverlayFeatureRenderer(RenderLayerParent> featureRendererContext) { + public OverlayFeatureRenderer(RenderLayerParent> featureRendererContext, EntityRendererProvider.Context ctx) { super(featureRendererContext); + modelOrdinal = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); + modelLake = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); } public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity, diff --git a/src/main/java/ru/betterend/interfaces/ISlime.java b/src/main/java/ru/betterend/interfaces/ISlime.java index 7df19bc6..3994ad34 100644 --- a/src/main/java/ru/betterend/interfaces/ISlime.java +++ b/src/main/java/ru/betterend/interfaces/ISlime.java @@ -1,5 +1,8 @@ package ru.betterend.interfaces; +import net.minecraft.world.entity.Entity; + public interface ISlime { public void be_setSlimeSize(int size, boolean heal); + void entityRemove(Entity.RemovalReason removalReason); } diff --git a/src/main/java/ru/betterend/mixin/common/SlimeMixin.java b/src/main/java/ru/betterend/mixin/common/SlimeMixin.java index 5d5ba94f..a6a9509c 100644 --- a/src/main/java/ru/betterend/mixin/common/SlimeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/SlimeMixin.java @@ -1,5 +1,8 @@ package ru.betterend.mixin.common; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -7,7 +10,11 @@ import net.minecraft.world.entity.monster.Slime; import ru.betterend.interfaces.ISlime; @Mixin(Slime.class) -public class SlimeMixin implements ISlime { +public abstract class SlimeMixin extends Entity implements ISlime { + public SlimeMixin(EntityType entityType, Level level) { + super(entityType, level); + } + @Shadow protected void setSize(int size, boolean heal) {} @@ -15,4 +22,9 @@ public class SlimeMixin implements ISlime { public void be_setSlimeSize(int size, boolean heal) { setSize(size, heal); } + + @Override + public void entityRemove(Entity.RemovalReason removalReason){ + super.remove(removalReason); + } } diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index d1e59f53..95746fcb 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -1,17 +1,15 @@ package ru.betterend.registry; -import java.util.function.Function; - import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry; import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry; import net.minecraft.client.model.geom.ModelLayerLocation; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import ru.betterend.BetterEnd; import ru.betterend.entity.model.CubozoaEntityModel; -import ru.betterend.entity.model.RendererEntityCubozoa; +import ru.betterend.entity.model.EndSlimeEntityModel; +import ru.betterend.entity.render.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityDragonfly; import ru.betterend.entity.render.RendererEntityEndFish; import ru.betterend.entity.render.RendererEntityEndSlime; @@ -19,8 +17,10 @@ import ru.betterend.entity.render.RendererEntityShadowWalker; import ru.betterend.entity.render.SilkMothEntityRenderer; public class EndEntitiesRenders { - public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly"); - + public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); + public static final ModelLayerLocation END_SLIME_SHELL_MODEL = registerMain("endslime_shell"); + public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime"); + public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); register(EndEntities.END_SLIME, RendererEntityEndSlime.class); @@ -29,7 +29,9 @@ public class EndEntitiesRenders { register(EndEntities.CUBOZOA, RendererEntityCubozoa.class); register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class); - EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, CubozoaEntityModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(END_SLIME_SHELL_MODEL, EndSlimeEntityModel::getShellOnlyTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData); } private static void register(EntityType type, Class> renderer) { From fd062bf9a9ca88d9dedef5943078172e8682561a Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 09:19:46 +0200 Subject: [PATCH 19/72] Minor fixes --- src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java | 3 ++- .../betterend/blocks/entities/EternalPedestalEntity.java | 7 ++++++- .../ru/betterend/entity/render/RendererEntityCubozoa.java | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java index 5c82d09a..c1157780 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import ru.bclib.blocks.BaseBlock; @@ -26,5 +27,5 @@ public class HydraluxPetalBlock extends BaseBlock { } @Override - public void fallOn(Level world, BlockPos pos, Entity entity, float distance) {} + public void fallOn(Level level, BlockState blockState, BlockPos blockPos, Entity entity, float f) {} } diff --git a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java index 78bf9b6e..0490da3a 100644 --- a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java @@ -27,8 +27,13 @@ public class EternalPedestalEntity extends PedestalBlockEntity { } @Override + public void setLevel(Level world) { + if (hasRitual()) { + linkedRitual.setWorld(world); + } + } + public void setLevelAndPosition(Level world, BlockPos pos) { - super.setLevelAndPosition(world, pos); if (hasRitual()) { linkedRitual.setWorld(world); } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java index d9a3fa47..d3358b8d 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java @@ -1,4 +1,4 @@ -package ru.betterend.entity.model; +package ru.betterend.entity.render; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; From 813880aa19063b7beee6e717da1d13687d7c587f Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 10:09:02 +0200 Subject: [PATCH 20/72] *Dragonfly* Model --- .../entity/model/DragonflyEntityModel.java | 194 ++++++++++++------ .../render/RendererEntityDragonfly.java | 7 +- .../registry/EndEntitiesRenders.java | 5 +- 3 files changed, 144 insertions(+), 62 deletions(-) diff --git a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java index 88162bc2..8885af2f 100644 --- a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java @@ -4,103 +4,179 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.RenderType; import ru.betterend.entity.DragonflyEntity; public class DragonflyEntityModel extends BlockBenchModel { - private final ModelPart model; - private final ModelPart head; - private final ModelPart tail; - private final ModelPart tail_2; - private final ModelPart wing_1; - private final ModelPart wing_2; - private final ModelPart wing_3; - private final ModelPart wing_4; - private final ModelPart legs_1; - private final ModelPart legs_2; + private final ModelPart model; + private final ModelPart head; + private final ModelPart tail; + private final ModelPart tail_2; + private final ModelPart wing_1; + private final ModelPart wing_2; + private final ModelPart wing_3; + private final ModelPart wing_4; + private final ModelPart legs_1; + private final ModelPart legs_2; - public DragonflyEntityModel() { - super(RenderType::entityCutout); + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); - texWidth = 64; - texHeight = 64; - - model = new ModelPart(this); + PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F), + PartPose.offset(2.0F, 21.5F, -4.0F)); + /*model = new ModelPart(this); model.setPos(2.0F, 21.5F, -4.0F); - model.texOffs(0, 0).addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F, 0.0F); + model.texOffs(0, 0).addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F, 0.0F);*/ - head = new ModelPart(this); + bodyPart.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create() + .texOffs(17, 0) + .addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F), + PartPose.offsetAndRotation(-2.0F, -2.0F, 0.0F, + 0.3491F, 0.0F, 0.0F)); + /*head = new ModelPart(this); head.setPos(-2.0F, -2.0F, 0.0F); model.addChild(head); setRotationAngle(head, 0.3491F, 0.0F, 0.0F); - head.texOffs(17, 0).addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F, 0.0F); + head.texOffs(17, 0).addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F, 0.0F);*/ + PartDefinition tailPart = bodyPart.addOrReplaceChild(PartNames.TAIL, CubeListBuilder.create() + .texOffs(26, 0) + .addBox(-1.5F, -1.5F, 0.0F, 3.0F, 3.0F, 7.0F), + PartPose.offset(-2.0F, -2.0F, 9.0F)); + /* tail = new ModelPart(this); tail.setPos(-2.0F, -2.0F, 9.0F); model.addChild(tail); tail.texOffs(26, 0).addBox(-1.5F, -1.5F, 0.0F, 3.0F, 3.0F, 7.0F, 0.0F); + */ + tailPart.addOrReplaceChild(PartNames.TAIL_FIN, CubeListBuilder.create() + .texOffs(36, 0) + .addBox(-1.0F, -1.0F, 0.0F, 2.0F, 2.0F, 10.0F), + PartPose.offset(0.0F, 0.0F, 7.0F)); + + /* tail_2 = new ModelPart(this); tail_2.setPos(0.0F, 0.0F, 7.0F); tail.addChild(tail_2); tail_2.texOffs(36, 0).addBox(-1.0F, -1.0F, 0.0F, 2.0F, 2.0F, 10.0F, 0.0F); + */ - wing_1 = new ModelPart(this); + bodyPart.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() + .texOffs(0, 13) + .addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F), + PartPose.offset(-2.0F, -4.0F, 4.0F)); + + /*wing_1 = new ModelPart(this); wing_1.setPos(-2.0F, -4.0F, 4.0F); model.addChild(wing_1); - wing_1.texOffs(0, 13).addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F); + wing_1.texOffs(0, 13).addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F);*/ - wing_2 = new ModelPart(this); + bodyPart.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() + .mirror() + .texOffs(0, 13) + .addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F), + PartPose.offset(-2.0F, -4.0F, 4.0F)); + /*wing_2 = new ModelPart(this); wing_2.setPos(-2.0F, -4.0F, 4.0F); model.addChild(wing_2); wing_2.mirror = true; - wing_2.texOffs(0, 13).addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F); + wing_2.texOffs(0, 13).addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F);*/ - wing_3 = new ModelPart(this); + bodyPart.addOrReplaceChild(PartNames.LEFT_WING_BASE, CubeListBuilder.create() + .texOffs(4, 17) + .addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F), + PartPose.offset(-2.0F, -4.0F, 8.0F)); + /*wing_3 = new ModelPart(this); wing_3.setPos(-2.0F, -4.0F, 8.0F); model.addChild(wing_3); - wing_3.texOffs(4, 17).addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F); + wing_3.texOffs(4, 17).addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F);*/ - wing_4 = new ModelPart(this); - wing_4.setPos(-2.0F, -4.0F, 8.0F); - model.addChild(wing_4); - wing_4.mirror = true; - wing_4.texOffs(4, 17).addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F); + bodyPart.addOrReplaceChild(PartNames.RIGHT_WING_BASE, CubeListBuilder.create() + .mirror() + .texOffs(4, 17) + .addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F), + PartPose.offset(-2.0F, -4.0F, 8.0F)); + /*wing_4 = new ModelPart(this); + wing_4.setPos(-2.0F, -4.0F, 8.0F); + model.addChild(wing_4); + wing_4.mirror = true; + wing_4.texOffs(4, 17).addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F);*/ - legs_1 = new ModelPart(this); - legs_1.setPos(-1.0F, 0.0F, 1.0F); - model.addChild(legs_1); - setRotationAngle(legs_1, 0.0F, 0.0F, -0.5236F); - legs_1.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F); + bodyPart.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() + .texOffs(50, 1) + .addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F), + PartPose.offsetAndRotation(-1.0F, 0.0F, 1.0F, + 0.0F, 0.0F, -0.5236F)); + /*legs_1 = new ModelPart(this); + legs_1.setPos(-1.0F, 0.0F, 1.0F); + model.addChild(legs_1); + setRotationAngle(legs_1, 0.0F, 0.0F, -0.5236F); + legs_1.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F);*/ - legs_2 = new ModelPart(this); - legs_2.setPos(-3.0F, 0.0F, 1.0F); - model.addChild(legs_2); - setRotationAngle(legs_2, 0.0F, 0.0F, 0.5236F); - legs_2.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F); - } + bodyPart.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create() + .texOffs(50, 1) + .addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F), + PartPose.offsetAndRotation(-3.0F, 0.0F, 1.0F, + 0.0F, 0.0F, 0.5236F)); + /*legs_2 = new ModelPart(this); + legs_2.setPos(-3.0F, 0.0F, 1.0F); + model.addChild(legs_2); + setRotationAngle(legs_2, 0.0F, 0.0F, 0.5236F); + legs_2.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F);*/ - @Override - public void setupAnim(DragonflyEntity entity, float limbAngle, float limbDistance, float animationProgress, - float headYaw, float headPitch) { - float progress = animationProgress * 2F; + /* + texWidth = 64; + texHeight = 64; + */ + return LayerDefinition.create(modelData, 64, 64); + } - wing_1.zRot = 0.3491F + (float) Math.sin(progress) * 0.3491F; - wing_2.zRot = -wing_1.zRot; + public DragonflyEntityModel(ModelPart modelPart) { + super(RenderType::entityCutout); - wing_3.zRot = 0.3491F + (float) Math.cos(progress) * 0.3491F; - wing_4.zRot = -wing_3.zRot; + model = modelPart.getChild(PartNames.BODY); + head = modelPart.getChild(PartNames.HEAD); + tail = modelPart.getChild(PartNames.TAIL); + tail_2 = modelPart.getChild(PartNames.TAIL_FIN); + wing_1 = modelPart.getChild(PartNames.LEFT_WING); + wing_2 = modelPart.getChild(PartNames.RIGHT_WING); + wing_3 = modelPart.getChild(PartNames.LEFT_WING_TIP); + wing_4 = modelPart.getChild(PartNames.RIGHT_WING_BASE); + legs_1 = modelPart.getChild(PartNames.LEFT_LEG); + legs_2 = modelPart.getChild(PartNames.RIGHT_LEG); + } - progress = animationProgress * 0.05F; + @Override + public void setupAnim(DragonflyEntity entity, float limbAngle, float limbDistance, float animationProgress, + float headYaw, float headPitch) { + float progress = animationProgress * 2F; - head.xRot = 0.3491F + (float) Math.sin(progress * 0.7F) * 0.1F; - tail.xRot = (float) Math.cos(progress) * 0.05F - 0.05F; - tail_2.xRot = -tail.xRot * 1.5F; - } + wing_1.zRot = 0.3491F + (float) Math.sin(progress) * 0.3491F; + wing_2.zRot = -wing_1.zRot; - @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, - float green, float blue, float alpha) { - model.render(matrices, vertices, light, overlay); - } + wing_3.zRot = 0.3491F + (float) Math.cos(progress) * 0.3491F; + wing_4.zRot = -wing_3.zRot; + + progress = animationProgress * 0.05F; + + head.xRot = 0.3491F + (float) Math.sin(progress * 0.7F) * 0.1F; + tail.xRot = (float) Math.cos(progress) * 0.05F - 0.05F; + tail_2.xRot = -tail.xRot * 1.5F; + } + + @Override + public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, + float green, float blue, float alpha) { + model.render(matrices, vertices, light, overlay); + } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityDragonfly.java b/src/main/java/ru/betterend/entity/render/RendererEntityDragonfly.java index 37e82160..7d8ac881 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityDragonfly.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityDragonfly.java @@ -2,19 +2,22 @@ package ru.betterend.entity.render; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; import ru.betterend.entity.DragonflyEntity; +import ru.betterend.entity.model.CubozoaEntityModel; import ru.betterend.entity.model.DragonflyEntityModel; +import ru.betterend.registry.EndEntitiesRenders; public class RendererEntityDragonfly extends MobRenderer { private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/dragonfly.png"); private static final RenderType GLOW = RenderType.eyes(BetterEnd.makeID("textures/entity/dragonfly_glow.png")); - public RendererEntityDragonfly(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new DragonflyEntityModel(), 0.5f); + public RendererEntityDragonfly(EntityRendererProvider.Context ctx) { + super(ctx, new DragonflyEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f); this.addLayer(new EyesLayer(this) { @Override public RenderType renderType() { diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 95746fcb..2be580fa 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -8,6 +8,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import ru.betterend.BetterEnd; import ru.betterend.entity.model.CubozoaEntityModel; +import ru.betterend.entity.model.DragonflyEntityModel; import ru.betterend.entity.model.EndSlimeEntityModel; import ru.betterend.entity.render.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityDragonfly; @@ -18,6 +19,7 @@ import ru.betterend.entity.render.SilkMothEntityRenderer; public class EndEntitiesRenders { public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); + public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly"); public static final ModelLayerLocation END_SLIME_SHELL_MODEL = registerMain("endslime_shell"); public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime"); @@ -29,9 +31,10 @@ public class EndEntitiesRenders { register(EndEntities.CUBOZOA, RendererEntityCubozoa.class); register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class); - EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, DragonflyEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_SHELL_MODEL, EndSlimeEntityModel::getShellOnlyTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); } private static void register(EntityType type, Class> renderer) { From b0ecc1152c9f924efc4222ce9bc7faeb91560785 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 10:21:50 +0200 Subject: [PATCH 21/72] *EndFish* Model --- .../entity/model/EndFishEntityModel.java | 86 +++++++++++++++---- .../entity/render/RendererEntityEndFish.java | 7 +- .../registry/EndEntitiesRenders.java | 6 +- 3 files changed, 78 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java b/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java index ebfe8f7b..11e402fc 100644 --- a/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java @@ -4,6 +4,12 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.RenderType; import ru.betterend.entity.EndFishEntity; @@ -15,47 +21,91 @@ public class EndFishEntityModel extends BlockBenchModel { private final ModelPart fin_right; private final ModelPart fin_left; - public EndFishEntityModel() { - super(RenderType::entityCutout); + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); - texWidth = 32; - texHeight = 32; - - model = new ModelPart(this); + PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .texOffs(0, 0) + .addBox(-1.0F, -2.0F, -4.0F, 2.0F, 4.0F, 8.0F), + PartPose.offset(0.0F, 20.0F, 0.0F)); + /*model = new ModelPart(this); model.setPos(0.0F, 20.0F, 0.0F); - model.texOffs(0, 0).addBox(-1.0F, -2.0F, -4.0F, 2.0F, 4.0F, 8.0F, 0.0F); + model.texOffs(0, 0).addBox(-1.0F, -2.0F, -4.0F, 2.0F, 4.0F, 8.0F, 0.0F);*/ - fin_top = new ModelPart(this); - fin_top.setPos(0.0F, -2.0F, -4.0F); + modelPartData.addOrReplaceChild(PartNames.TOP_FIN, CubeListBuilder.create() + .texOffs(0, 6) + .addBox(0.0F, -8.0F, 0.0F, 0.0F, 8.0F, 6.0F), + PartPose.offsetAndRotation(0.0F, -2.0F, -4.0F, + -0.6981F, 0.0F, 0.0F)); + /*fin_top.setPos(0.0F, -2.0F, -4.0F); model.addChild(fin_top); setRotationAngle(fin_top, -0.6981F, 0.0F, 0.0F); - fin_top.texOffs(0, 6).addBox(0.0F, -8.0F, 0.0F, 0.0F, 8.0F, 6.0F, 0.0F); + fin_top.texOffs(0, 6).addBox(0.0F, -8.0F, 0.0F, 0.0F, 8.0F, 6.0F, 0.0F);* + */ - fin_bottom = new ModelPart(this); + modelPartData.addOrReplaceChild(PartNames.BOTTOM_FIN, CubeListBuilder.create() + .texOffs(0, 6) + .addBox(0.0F, 0.0F, 0.0F, 0.0F, 8.0F, 6.0F), + PartPose.offsetAndRotation(0.0F, 2.0F, -4.0F, + 0.6981F, 0.0F, 0.0F)); + /*fin_bottom = new ModelPart(this); fin_bottom.setPos(0.0F, 2.0F, -4.0F); model.addChild(fin_bottom); setRotationAngle(fin_bottom, 0.6981F, 0.0F, 0.0F); - fin_bottom.texOffs(0, 6).addBox(0.0F, 0.0F, 0.0F, 0.0F, 8.0F, 6.0F, 0.0F); + fin_bottom.texOffs(0, 6).addBox(0.0F, 0.0F, 0.0F, 0.0F, 8.0F, 6.0F, 0.0F);*/ - flipper = new ModelPart(this); + modelPartData.addOrReplaceChild(PartNames.TAIL_FIN, CubeListBuilder.create() + .texOffs(0, 15) + .addBox(0.0F, -5.0F, 0.0F, 0.0F, 5.0F, 5.0F), + PartPose.offsetAndRotation(0.0F, 0.0F, 2.0F, + -0.7854F, 0.0F, 0.0F)); + /*flipper = new ModelPart(this); flipper.setPos(0.0F, 0.0F, 2.0F); model.addChild(flipper); setRotationAngle(flipper, -0.7854F, 0.0F, 0.0F); - flipper.texOffs(0, 15).addBox(0.0F, -5.0F, 0.0F, 0.0F, 5.0F, 5.0F, 0.0F); + flipper.texOffs(0, 15).addBox(0.0F, -5.0F, 0.0F, 0.0F, 5.0F, 5.0F, 0.0F);*/ - fin_right = new ModelPart(this); + modelPartData.addOrReplaceChild(PartNames.RIGHT_FIN, CubeListBuilder.create() + .texOffs(0, 25) + .addBox(-3.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F), + PartPose.offsetAndRotation(-1.0F, 0.0F, -1.0F, + 1.5708F, 0.7854F, 0.0F)); + /*fin_right = new ModelPart(this); fin_right.setPos(-1.0F, 0.0F, -1.0F); model.addChild(fin_right); setRotationAngle(fin_right, 1.5708F, 0.7854F, 0.0F); - fin_right.texOffs(0, 25).addBox(-3.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F, 0.0F); + fin_right.texOffs(0, 25).addBox(-3.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F, 0.0F);*/ - fin_left = new ModelPart(this); + modelPartData.addOrReplaceChild(PartNames.LEFT_FIN, CubeListBuilder.create() + .mirror() + .texOffs(0, 25) + .addBox(0.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F), + PartPose.offsetAndRotation(-1.0F, 0.0F, -1.0F, + 1.5708F, -0.7854F, 0.0F)); + /*fin_left = new ModelPart(this); fin_left.setPos(1.0F, 0.0F, -1.0F); model.addChild(fin_left); setRotationAngle(fin_left, 1.5708F, -0.7854F, 0.0F); - fin_left.texOffs(0, 25).addBox(0.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F, 0.0F, true); + fin_left.texOffs(0, 25).addBox(0.7071F, 0.7071F, -1.5F, 3.0F, 0.0F, 3.0F, 0.0F, true);*/ + + /* + texWidth = 32; + texHeight = 32; + */ + return LayerDefinition.create(modelData, 32, 32); } + public EndFishEntityModel(ModelPart modelPart) { + super(RenderType::entityCutout); + + model = modelPart.getChild(PartNames.BODY); + fin_top = modelPart.getChild(PartNames.TOP_FIN); + fin_bottom = modelPart.getChild(PartNames.BOTTOM_FIN); + flipper = modelPart.getChild(PartNames.TAIL_FIN); + fin_right = modelPart.getChild(PartNames.RIGHT_FIN); + fin_left = modelPart.getChild(PartNames.LEFT_FIN);} + @Override public void setupAnim(EndFishEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java index fce70f61..767a3d74 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java @@ -6,20 +6,23 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; import ru.betterend.entity.EndFishEntity; +import ru.betterend.entity.model.DragonflyEntityModel; import ru.betterend.entity.model.EndFishEntityModel; +import ru.betterend.registry.EndEntitiesRenders; public class RendererEntityEndFish extends MobRenderer { private static final ResourceLocation[] TEXTURE = new ResourceLocation[EndFishEntity.VARIANTS]; private static final RenderType[] GLOW = new RenderType[EndFishEntity.VARIANTS]; - public RendererEntityEndFish(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new EndFishEntityModel(), 0.5f); + public RendererEntityEndFish(EntityRendererProvider.Context ctx) { + super(ctx, new EndFishEntityModel(ctx.bakeLayer(EndEntitiesRenders.END_FISH_MODEL)), 0.5f); this.addLayer(new EyesLayer(this) { @Override public RenderType renderType() { diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 2be580fa..45470a48 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -9,6 +9,7 @@ import net.minecraft.world.entity.EntityType; import ru.betterend.BetterEnd; import ru.betterend.entity.model.CubozoaEntityModel; import ru.betterend.entity.model.DragonflyEntityModel; +import ru.betterend.entity.model.EndFishEntityModel; import ru.betterend.entity.model.EndSlimeEntityModel; import ru.betterend.entity.render.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityDragonfly; @@ -18,10 +19,12 @@ import ru.betterend.entity.render.RendererEntityShadowWalker; import ru.betterend.entity.render.SilkMothEntityRenderer; public class EndEntitiesRenders { - public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); + public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly"); public static final ModelLayerLocation END_SLIME_SHELL_MODEL = registerMain("endslime_shell"); public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime"); + public static final ModelLayerLocation END_FISH_MODEL = registerMain("endfish"); + public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); @@ -34,6 +37,7 @@ public class EndEntitiesRenders { EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, DragonflyEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_SHELL_MODEL, EndSlimeEntityModel::getShellOnlyTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(END_FISH_MODEL, EndFishEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); } From fb29dd75f75325f954edade64c84c1a1df3f9fb3 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 10:58:05 +0200 Subject: [PATCH 22/72] *SilkMoth* Model --- .../entity/model/SilkMothEntityModel.java | 126 +++++++++++++++++- .../entity/render/SilkMothEntityRenderer.java | 7 +- .../registry/EndEntitiesRenders.java | 7 +- 3 files changed, 129 insertions(+), 11 deletions(-) diff --git a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java index 5d21fafe..989c3684 100644 --- a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java @@ -4,6 +4,12 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.RenderType; import net.minecraft.util.Mth; import ru.betterend.entity.SilkMothEntity; @@ -25,13 +31,123 @@ public class SilkMothEntityModel extends BlockBenchModel { private final ModelPart wingL_r1; private final ModelPart abdomen_r1; - public SilkMothEntityModel() { + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + + PartDefinition legsL = modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() + .texOffs(0, 0), + PartPose.offsetAndRotation(1.5f, 19.9f, -0.45f, + 0.0f, 0.0f, 0.6981f)); + + legsL.addOrReplaceChild("cube_r1", CubeListBuilder.create() + .addBox(0.0216f, 0.0f, -0.5976f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 13), + PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f, + 0.0f, 0.2182f, 0.3927f)); + + legsL.addOrReplaceChild("cube_r2", CubeListBuilder.create() + .addBox(0.0f, 0.0f, -0.6f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 15), + PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f, + 0.0f, 0.0f, 0.3927f)); + + legsL.addOrReplaceChild("cube_r3", CubeListBuilder.create() + .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 14), + PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f, + 0.0f, -0.2182f, 0.3927f)); + + PartDefinition legsR = modelPartData.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create() + .texOffs(0, 0), + PartPose.offsetAndRotation(-1.5f, 19.9f, -0.55f, + 0.0f, 3.1416f, -0.6545f)); + + legsR.addOrReplaceChild("cube_r4", CubeListBuilder.create() + .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 10), + PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f, + 0.0f, 0.2182f, 0.3927f)); + + legsR.addOrReplaceChild("cube_r5", CubeListBuilder.create() + .addBox(0.0f, 0.0f, -0.4f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 11), + PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f, + 0.0f, 0.0f, 0.3927f)); + + legsR.addOrReplaceChild("cube_r6", CubeListBuilder.create() + .addBox(0.0216f, 0.0f, -0.4024f, 3.0f, 0.0f, 1.0f) + .texOffs(0, 12), + PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f, + 0.0f, -0.2182f, 0.3927f)); + + PartDefinition head_pivot = modelPartData.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create() + .addBox(-1.5f, -1.5f, -2.0f, 3.0f, 3.0f, 3.0f) + .texOffs(15, 10), + PartPose.offset(0.0f, 18.0f, -3.0f)); + + head_pivot.addOrReplaceChild("tendril_r_r1", CubeListBuilder.create() + .mirror() + .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f) + .texOffs(23, 0), + PartPose.offsetAndRotation(1.0f, -1.15f, -1.0f, + 0.0f, 0.0f, 0.3927f)); + + head_pivot.addOrReplaceChild("tendril_r_r2", CubeListBuilder.create() + .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f) + .texOffs(23, 0), + PartPose.offsetAndRotation(-1.0f, -1.15f, -1.0f, + 0.0f, 0.0f, -0.3927f)); + + PartDefinition bb_main = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .addBox(-2.5f, -8.5f, -3.0f, 5.0f, 5.0f, 3.0f) + .texOffs(19, 19), + PartPose.offset(0.0f, 24.0f, 0.0f)); + + bb_main.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() + .mirror() + .addBox(-7.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f) + .texOffs(0, 5), + PartPose.offsetAndRotation(-1.5f, -6.5f, 0.5f, + 0.0f, 0.0f, 0.3927f)); + + bb_main.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() + .addBox(-2.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f) + .texOffs(0, 5), + PartPose.offsetAndRotation(1.5f, -6.5f, 0.5f, + 0.0f, 0.0f, -0.3927f)); + + bb_main.addOrReplaceChild("abdomen_r1", CubeListBuilder.create() + .addBox(-3.0f, -4.0f, -1.0f, 4.0f, 4.0f, 7.0f) + .texOffs(0, 10), + PartPose.offsetAndRotation(1.0f, -3.9f, 0.0f, + -0.3927f, 0.0f, 0.0f)); + + /*texWidth = 64; + texHeight = 64;*/ + return LayerDefinition.create(modelData, 64, 64); + } + + public SilkMothEntityModel(ModelPart modelPart) { super(RenderType::entityCutout); - texWidth = 64; - texHeight = 64; + legsL = modelPart.getChild(PartNames.LEFT_LEG); + cube_r1 = legsL.getChild("cube_r1"); + cube_r2 = legsL.getChild("cube_r2"); + cube_r3 = legsL.getChild("cube_r3"); + legsR = modelPart.getChild(PartNames.RIGHT_LEG); + cube_r4 = legsR.getChild("cube_r4"); + cube_r5 = legsR.getChild("cube_r5"); + cube_r6 = legsR.getChild("cube_r6"); + head_pivot = modelPart.getChild(PartNames.HEAD); + tendril_r_r1 = head_pivot.getChild("tendril_r_r1"); + tendril_r_r2 = head_pivot.getChild("tendril_r_r2"); + bb_main = modelPart.getChild(PartNames.BODY); + wingR_r1 = bb_main.getChild(PartNames.RIGHT_WING); + wingL_r1 = bb_main.getChild(PartNames.LEFT_WING); + abdomen_r1 = bb_main.getChild("abdomen_r1"); - legsL = new ModelPart(this); + /*legsL = new ModelPart(this); legsL.setPos(1.5F, 19.9F, -0.45F); setRotationAngle(legsL, 0.0F, 0.0F, 0.6981F); @@ -111,7 +227,7 @@ public class SilkMothEntityModel extends BlockBenchModel { abdomen_r1.setPos(1.0F, -3.9F, 0.0F); bb_main.addChild(abdomen_r1); setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); - abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F); + abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F);*/ } @Override diff --git a/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java index 7d3a2745..62f27a00 100644 --- a/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java +++ b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java @@ -1,17 +1,20 @@ package ru.betterend.entity.render; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; import ru.betterend.entity.SilkMothEntity; +import ru.betterend.entity.model.CubozoaEntityModel; import ru.betterend.entity.model.SilkMothEntityModel; +import ru.betterend.registry.EndEntitiesRenders; public class SilkMothEntityRenderer extends MobRenderer { private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/silk_moth.png"); - public SilkMothEntityRenderer(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new SilkMothEntityModel(), 0.5f); + public SilkMothEntityRenderer(EntityRendererProvider.Context ctx) { + super(ctx, new SilkMothEntityModel(ctx.bakeLayer(EndEntitiesRenders.SILK_MOTH_MODEL)), 0.5f); } @Override diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 45470a48..e873ce0a 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -7,10 +7,7 @@ import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import ru.betterend.BetterEnd; -import ru.betterend.entity.model.CubozoaEntityModel; -import ru.betterend.entity.model.DragonflyEntityModel; -import ru.betterend.entity.model.EndFishEntityModel; -import ru.betterend.entity.model.EndSlimeEntityModel; +import ru.betterend.entity.model.*; import ru.betterend.entity.render.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityDragonfly; import ru.betterend.entity.render.RendererEntityEndFish; @@ -25,6 +22,7 @@ public class EndEntitiesRenders { public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime"); public static final ModelLayerLocation END_FISH_MODEL = registerMain("endfish"); public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); + public static final ModelLayerLocation SILK_MOTH_MODEL = registerMain("silkmoth"); public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); @@ -39,6 +37,7 @@ public class EndEntitiesRenders { EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_FISH_MODEL, EndFishEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(SILK_MOTH_MODEL, SilkMothEntityModel::getTexturedModelData); } private static void register(EntityType type, Class> renderer) { From df8eb8f04048f3ee5648290a40300c06b104252b Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 10:58:39 +0200 Subject: [PATCH 23/72] Helper to convert old RenderModel calls to new syntax --- .gitignore | 2 + Convert.java | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 Convert.java diff --git a/.gitignore b/.gitignore index 514dd716..f1309d16 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,5 @@ bin/ run/ output/ *.log +Convert.class +ModelPart.class diff --git a/Convert.java b/Convert.java new file mode 100644 index 00000000..23a8aba8 --- /dev/null +++ b/Convert.java @@ -0,0 +1,189 @@ + +class ModelPart { + static java.util.ArrayList parts = new java.util.ArrayList<>(20); + final String name; + ModelPart parent = null; + boolean mirror = false; + + float x=0, y=0, z=0, rx=0, ry=0, rz=0; + int u=0, v=0; + float bx=0,by=0,bz=0,ba=0,bb=0,bc=0; + + + boolean hadBox = false; + ModelPart(Convert c, String name){ + this.name = name; + parts.add(this); + } + + ModelPart setPos(float x, float y, float z){ + this.x=x; + this.y=y; + this.z=z; + return this; + } + + ModelPart setRotationAngle(float x, float y, float z){ + this.rx=x; + this.ry=y; + this.rz=z; + return this; + } + + ModelPart addChild(ModelPart p){ + p.parent = this; + return this; + } + + ModelPart texOffs(int u, int v){ + this.u=u; + this.v=v; + return this; + } + + ModelPart addBox(float x, float y, float z, float a, float b, float c, float _d){ + bx=x; + by=y; + bz=z; + ba=a; + bb=b; + bc=c; + hadBox = true; + return this; + } + ModelPart addBox(float x, float y, float z, float a, float b, float c, float _d, boolean mirror){ + this.mirror = mirror; + bx=x; + by=y; + bz=z; + ba=a; + bb=b; + bc=c; + hadBox = true; + return this; + } + + public String toString(){ + String pName = parent==null?"modelPartData":parent.name; + String s = "PartDefinition " + name + " = "; + s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n"; + if (this.mirror) s+= ".mirror()\n"; + if (this.hadBox) s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f)\n"; + s+= ".texOffs("+u+", "+v+"),\n"; + if (x==0 && y==0 && z==0 && rx==0 && ry==0 && rz==0){ + s+= "PartPose.ZERO"; + } else if (rx==0 && ry==0 && rz==0){ + s+= "PartPose.offset("+x+"f, "+y+"f, "+z+"f)"; + } else { + s+= "PartPose.offsetAndRotation("+x+"f, "+y+"f, "+z+"f, \n"+rx+"f, "+ry+"f, "+rz+"f)"; + } + s +=");"; + + return s; + } + + public static void print(){ + for(ModelPart p : parts){ + System.out.println(p); + System.out.println(); + } + + for(ModelPart p : parts){ + String pName = p.parent==null?"modelPart":p.parent.name; + System.out.println(p.name +" = "+pName+".getChild(\""+p.name+"\");"); + } + } +} +public class Convert { + public static void main(String[] args){ + new Convert().c(); + + ModelPart.print(); + } + void setRotationAngle(ModelPart p, float x, float y, float z){ + p.setRotationAngle(x, y, z); + } + public void c (){ + ModelPart legsL = new ModelPart(this, "legsL"); + legsL.setPos(1.5F, 19.9F, -0.45F); + setRotationAngle(legsL, 0.0F, 0.0F, 0.6981F); + + ModelPart cube_r1 = new ModelPart(this, "cube_r1"); + cube_r1.setPos(0.0F, 0.0F, -1.0F); + legsL.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 0.2182F, 0.3927F); + cube_r1.texOffs(0, 13).addBox(0.0216F, 0.0F, -0.5976F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart cube_r2 = new ModelPart(this, "cube_r2"); + cube_r2.setPos(0.5F, 0.1F, -0.05F); + legsL.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.0F, 0.3927F); + cube_r2.texOffs(0, 15).addBox(0.0F, 0.0F, -0.6F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart cube_r3 = new ModelPart(this, "cube_r3"); + cube_r3.setPos(0.0F, 0.0F, 0.9F); + legsL.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, -0.2182F, 0.3927F); + cube_r3.texOffs(0, 14).addBox(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart legsR = new ModelPart(this,"legsR"); + legsR.setPos(-1.5F, 19.9F, -0.55F); + setRotationAngle(legsR, 0.0F, 3.1416F, -0.6545F); + + ModelPart cube_r4 = new ModelPart(this, "cube_r4"); + cube_r4.setPos(0.0F, 0.0F, -1.0F); + legsR.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, 0.2182F, 0.3927F); + cube_r4.texOffs(0, 10).addBox(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart cube_r5 = new ModelPart(this, "cube_r5"); + cube_r5.setPos(0.5F, 0.1F, -0.05F); + legsR.addChild(cube_r5); + setRotationAngle(cube_r5, 0.0F, 0.0F, 0.3927F); + cube_r5.texOffs(0, 11).addBox(0.0F, 0.0F, -0.4F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart cube_r6 = new ModelPart(this, "cube_r6"); + cube_r6.setPos(0.0F, 0.0F, 0.9F); + legsR.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, -0.2182F, 0.3927F); + cube_r6.texOffs(0, 12).addBox(0.0216F, 0.0F, -0.4024F, 3.0F, 0.0F, 1.0F, 0.0F); + + ModelPart head_pivot = new ModelPart(this, "head_pivot"); + head_pivot.setPos(0.0F, 18.0F, -3.0F); + head_pivot.texOffs(15, 10).addBox(-1.5F, -1.5F, -2.0F, 3.0F, 3.0F, 3.0F, 0.0F); + + ModelPart tendril_r_r1 = new ModelPart(this, "tendril_r_r1"); + tendril_r_r1.setPos(1.0F, -1.15F, -1.0F); + head_pivot.addChild(tendril_r_r1); + setRotationAngle(tendril_r_r1, 0.0F, 0.0F, 0.3927F); + tendril_r_r1.texOffs(23, 0).addBox(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F, true); + + ModelPart tendril_r_r2 = new ModelPart(this, "tendril_r_r2"); + tendril_r_r2.setPos(-1.0F, -1.15F, -1.0F); + head_pivot.addChild(tendril_r_r2); + setRotationAngle(tendril_r_r2, 0.0F, 0.0F, -0.3927F); + tendril_r_r2.texOffs(23, 0).addBox(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F); + + ModelPart bb_main = new ModelPart(this, "bb_main"); + bb_main.setPos(0.0F, 24.0F, 0.0F); + bb_main.texOffs(19, 19).addBox(-2.5F, -8.5F, -3.0F, 5.0F, 5.0F, 3.0F, 0.0F); + + ModelPart wingR_r1 = new ModelPart(this, "wingR_r1"); + wingR_r1.setPos(-1.5F, -6.5F, 0.5F); + bb_main.addChild(wingR_r1); + setRotationAngle(wingR_r1, 0.0F, 0.0F, 0.3927F); + wingR_r1.texOffs(0, 5).addBox(-7.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F, true); + + ModelPart wingL_r1 = new ModelPart(this, "wingL_r1"); + wingL_r1.setPos(1.5F, -6.5F, 0.5F); + bb_main.addChild(wingL_r1); + setRotationAngle(wingL_r1, 0.0F, 0.0F, -0.3927F); + wingL_r1.texOffs(0, 5).addBox(-2.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F); + + ModelPart abdomen_r1 = new ModelPart(this, "abdomen_r1"); + abdomen_r1.setPos(1.0F, -3.9F, 0.0F); + bb_main.addChild(abdomen_r1); + setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); + abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F); + } +} From e03c8433db0b1a593e0f3a67463dd00571ecbc06 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 11:03:04 +0200 Subject: [PATCH 24/72] *ShadowWalker* renderer --- .../entity/render/RendererEntityShadowWalker.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java b/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java index d75db944..5aa547d6 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java @@ -1,7 +1,9 @@ package ru.betterend.entity.render; import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.model.geom.ModelLayers; import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.HumanoidMobRenderer; import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; @@ -11,8 +13,9 @@ public class RendererEntityShadowWalker extends HumanoidMobRenderer> { private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/shadow_walker.png"); - public RendererEntityShadowWalker(EntityRenderDispatcher entityRenderDispatcher) { - super(entityRenderDispatcher, new PlayerModel(0.0F, false), 0.5F); + public RendererEntityShadowWalker(EntityRendererProvider.Context ctx) { + super(ctx, new PlayerModel(ctx.bakeLayer(ModelLayers.PLAYER), false), 0.5F); + //super(entityRenderDispatcher, new PlayerModel(0.0F, false), 0.5F); } @Override From 8531be7b944a8be6f54928c313d191c5dda562c6 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 11:48:31 +0200 Subject: [PATCH 25/72] *ArmoredElytra* Fixes --- .../client/render/ArmoredElytraLayer.java | 9 ++++-- .../item/model/ArmoredElytraModel.java | 31 +++++++++++++++---- .../mixin/client/ArmorStandRendererMixin.java | 19 ++++++------ .../client/HumanoidMobRendererMixin.java | 11 ++++--- .../mixin/client/PlayerRendererMixin.java | 11 ++++--- .../registry/EndEntitiesRenders.java | 6 ++++ 6 files changed, 58 insertions(+), 29 deletions(-) diff --git a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java index 6f729286..f066b38e 100644 --- a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java +++ b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java @@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.model.EntityModel; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; @@ -18,12 +19,14 @@ import net.minecraft.world.entity.player.PlayerModelPart; import net.minecraft.world.item.ItemStack; import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.item.model.ArmoredElytraModel; +import ru.betterend.registry.EndEntitiesRenders; public class ArmoredElytraLayer> extends ElytraLayer { - private final ArmoredElytraModel elytraModel = new ArmoredElytraModel<>(); + private final ArmoredElytraModel elytraModel; - public ArmoredElytraLayer(RenderLayerParent renderLayerParent) { - super(renderLayerParent); + public ArmoredElytraLayer(RenderLayerParent renderLayerParent, EntityModelSet entityModelSet) { + super(renderLayerParent, entityModelSet); + elytraModel = new ArmoredElytraModel<>(entityModelSet.bakeLayer(EndEntitiesRenders.ARMORED_ELYTRA)); } public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { diff --git a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java index d5b5c1a0..e19c8077 100644 --- a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java +++ b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java @@ -4,6 +4,12 @@ import com.google.common.collect.ImmutableList; import net.minecraft.client.model.AgeableListModel; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.phys.Vec3; @@ -12,12 +18,25 @@ public class ArmoredElytraModel extends AgeableListModel private final ModelPart rightWing; private final ModelPart leftWing; - public ArmoredElytraModel() { - this.leftWing = new ModelPart(this, 22, 0); - this.leftWing.addBox(-10.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); - this.rightWing = new ModelPart(this, 22, 0); - this.rightWing.mirror = true; - this.rightWing.addBox(0.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() + .addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f) + .texOffs(22, 0), + PartPose.ZERO); + + modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() + .mirror() + .addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f) + .texOffs(22, 0), + PartPose.ZERO); + + return LayerDefinition.create(modelData, 48, 48); + } + public ArmoredElytraModel(ModelPart modelPart) { + leftWing = modelPart.getChild(PartNames.LEFT_WING); + rightWing = modelPart.getChild(PartNames.RIGHT_WING); } protected Iterable headParts() { diff --git a/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java b/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java index d3e11b1a..61174938 100644 --- a/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java @@ -1,26 +1,25 @@ package ru.betterend.mixin.client; +import net.minecraft.client.model.ArmorStandArmorModel; +import net.minecraft.client.renderer.entity.ArmorStandRenderer; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.world.entity.decoration.ArmorStand; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.client.model.ArmorStandArmorModel; -import net.minecraft.client.renderer.entity.ArmorStandRenderer; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.world.entity.decoration.ArmorStand; import ru.betterend.client.render.ArmoredElytraLayer; @Mixin(ArmorStandRenderer.class) public abstract class ArmorStandRendererMixin extends LivingEntityRenderer { - public ArmorStandRendererMixin(EntityRenderDispatcher entityRenderDispatcher, ArmorStandArmorModel entityModel, float f) { - super(entityRenderDispatcher, entityModel, f); + public ArmorStandRendererMixin(EntityRendererProvider.Context context, ArmorStandArmorModel entityModel, float f) { + super(context, entityModel, f); } @Inject(method = "*", at = @At("TAIL")) - public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, CallbackInfo info) { - addLayer(new ArmoredElytraLayer<>(this)); + public void be_addCustomLayer(EntityRendererProvider.Context context, CallbackInfo ci) { + addLayer(new ArmoredElytraLayer<>(this, context.getModelSet())); } } diff --git a/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java b/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java index cc034cd5..47079dd2 100644 --- a/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.client; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -15,12 +16,12 @@ import ru.betterend.client.render.ArmoredElytraLayer; @Mixin(HumanoidMobRenderer.class) public abstract class HumanoidMobRendererMixin> extends MobRenderer { - public HumanoidMobRendererMixin(EntityRenderDispatcher entityRenderDispatcher, M entityModel, float f) { - super(entityRenderDispatcher, entityModel, f); + public HumanoidMobRendererMixin(EntityRendererProvider.Context context, M entityModel, float f) { + super(context, entityModel, f); } - @Inject(method = "*", at = @At("TAIL")) - public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, M humanoidModel, float f, float g, float h, float i, CallbackInfo info) { - addLayer(new ArmoredElytraLayer<>(this)); + @Inject(method = "(Lnet/minecraft/client/renderer/entity/EntityRendererProvider$Context;Lnet/minecraft/client/model/HumanoidModel;FFFF)V", at = @At("TAIL")) + public void be_addCustomLayer(EntityRendererProvider.Context context, M humanoidModel, float f, float g, float h, float i, CallbackInfo ci) { + addLayer(new ArmoredElytraLayer<>(this, context.getModelSet())); } } diff --git a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java index d435dd52..93c2fdb0 100644 --- a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.client; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -15,12 +16,12 @@ import ru.betterend.client.render.ArmoredElytraLayer; @Mixin(PlayerRenderer.class) public abstract class PlayerRendererMixin extends LivingEntityRenderer> { - public PlayerRendererMixin(EntityRenderDispatcher entityRenderDispatcher, PlayerModel entityModel, float f) { - super(entityRenderDispatcher, entityModel, f); + public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel entityModel, float f) { + super(context, entityModel, f); } - @Inject(method = "(Lnet/minecraft/client/renderer/entity/EntityRenderDispatcher;Z)V", at = @At("TAIL")) - public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, boolean bl, CallbackInfo info) { - addLayer(new ArmoredElytraLayer<>(this)); + @Inject(method = "*", at = @At("TAIL")) + public void be_addCustomLayer(EntityRendererProvider.Context context, boolean bl, CallbackInfo ci) { + addLayer(new ArmoredElytraLayer<>(this, context.getModelSet())); } } diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index e873ce0a..96b35fe2 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -14,6 +14,7 @@ import ru.betterend.entity.render.RendererEntityEndFish; import ru.betterend.entity.render.RendererEntityEndSlime; import ru.betterend.entity.render.RendererEntityShadowWalker; import ru.betterend.entity.render.SilkMothEntityRenderer; +import ru.betterend.item.model.ArmoredElytraModel; public class EndEntitiesRenders { @@ -24,6 +25,9 @@ public class EndEntitiesRenders { public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); public static final ModelLayerLocation SILK_MOTH_MODEL = registerMain("silkmoth"); + //Not sure if this should go to another registry + public static final ModelLayerLocation ARMORED_ELYTRA = registerMain("armored_elytra"); + public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); register(EndEntities.END_SLIME, RendererEntityEndSlime.class); @@ -38,6 +42,8 @@ public class EndEntitiesRenders { EntityModelLayerRegistry.registerModelLayer(END_FISH_MODEL, EndFishEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(SILK_MOTH_MODEL, SilkMothEntityModel::getTexturedModelData); + + EntityModelLayerRegistry.registerModelLayer(ARMORED_ELYTRA, ArmoredElytraModel::getTexturedModelData); } private static void register(EntityType type, Class> renderer) { From 036d594012eb15bdd61e65d78ff4b0db3dfa130f Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 12:13:09 +0200 Subject: [PATCH 26/72] updated `isFeatureChunk` and `generatePieces` Signatures --- .../mixin/common/EndCityFeatureMixin.java | 9 ++++---- .../features/EternalPortalStructure.java | 23 +++++++++++-------- .../features/FeatureBaseStructure.java | 21 +++++++++-------- .../features/GiantIceStarStructure.java | 15 +++++++----- .../features/MegaLakeSmallStructure.java | 17 ++++++++------ .../features/MegaLakeStructure.java | 17 ++++++++------ .../features/MountainStructure.java | 17 ++++++++------ .../features/PaintedMountainStructure.java | 17 ++++++++------ .../features/SDFStructureFeature.java | 17 ++++++++------ 9 files changed, 88 insertions(+), 65 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index e91f8949..5a054c59 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.common; +import net.minecraft.world.level.LevelHeightAccessor; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -18,15 +19,15 @@ import ru.betterend.world.generator.GeneratorOptions; @Mixin(EndCityFeature.class) public class EndCityFeatureMixin { @Inject(method = "isFeatureChunk", at = @At("HEAD"), cancellable = true) - private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, int i, int j, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, CallbackInfoReturnable info) { + private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); if (chance == 0) { - info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); + info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); info.cancel(); } else if (chunkRandom.nextInt(chance) == 0){ - info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); + info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); info.cancel(); } else { @@ -37,7 +38,7 @@ public class EndCityFeatureMixin { } @Shadow - private static int getYPositionForFeature(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { + private static int getYPositionForFeature(ChunkPos pos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { return 0; } } diff --git a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java index f67a71d4..d137ea66 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -4,6 +4,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.chunk.ChunkGenerator; @@ -26,16 +27,16 @@ public class EternalPortalStructure extends FeatureBaseStructure { private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig) { + protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { long x = (long) chunkPos.x * (long) chunkPos.x; long z = (long) chunkPos.z * (long) chunkPos.z; if (x + z < 1024L) { return false; } - if (chunkGenerator.getBaseHeight((chunkX << 4) | 8, (chunkZ << 4) | 8, Heightmap.Types.WORLD_SURFACE_WG) < 10) { + if (chunkGenerator.getBaseHeight(pos.getBlockX(8), pos.getBlockX(8), Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor) < 10) { return false; } - return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, chunkX, chunkZ, biome, chunkPos, featureConfig); + return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, pos, biome, chunkPos, featureConfig, levelHeightAccessor); } @Override @@ -44,19 +45,21 @@ public class EternalPortalStructure extends FeatureBaseStructure { } public static class PortalStructureStart extends StructureStart { - public PortalStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public PortalStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { + super(feature, pos, references, seed); } + @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX( MHelper.randRange(4, 12, random)); + int z =chunkPos.getBlockZ( MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 4) { this.pieces.add(new NBTPiece(STRUCTURE_ID, STRUCTURE, new BlockPos(x, y - 4, z), random.nextInt(5), true, random)); } - this.calculateBoundingBox(); + //bbox is calculated lazy on get + //this.calculateBoundingBox(); } } } diff --git a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java index 219ec6f5..64690626 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -3,6 +3,7 @@ package ru.betterend.world.structures.features; import java.util.Random; import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.block.Blocks; @@ -22,12 +23,12 @@ public abstract class FeatureBaseStructure extends StructureFeature= 20; + protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { + return getGenerationHeight(pos, chunkGenerator, levelHeightAccessor) >= 20; } - private static int getGenerationHeight(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { - Random random = new Random((long) (chunkX + chunkZ * 10387313)); + private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { + Random random = new Random((long) (chunkPos.x + chunkPos.z * 10387313)); Rotation blockRotation = Rotation.getRandom(random); int i = 5; int j = 5; @@ -40,12 +41,12 @@ public abstract class FeatureBaseStructure extends StructureFeature { - public StarStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public StarStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { + super(feature, pos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ( MHelper.randRange(4, 12, random)); BlockPos start = new BlockPos(x, MHelper.randRange(32, 128, random), z); VoxelPiece piece = new VoxelPiece((world) -> { ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); }, random.nextInt()); this.pieces.add(piece); - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java index d4397767..c9e96d74 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; @@ -20,22 +22,23 @@ public class MegaLakeSmallStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX( MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 5) { float radius = MHelper.randRange(20, 40, random); float depth = MHelper.randRange(5, 10, random); LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); this.pieces.add(piece); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } } diff --git a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java index 2d554d4c..d536fe46 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; @@ -20,22 +22,23 @@ public class MegaLakeStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 5) { float radius = MHelper.randRange(32, 64, random); float depth = MHelper.randRange(7, 15, random); LakePiece piece = new LakePiece(new BlockPos(x, y, z), radius, depth, random, biome); this.pieces.add(piece); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } } diff --git a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java index a968c7d1..5be93f26 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; @@ -20,22 +22,23 @@ public class MountainStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z =chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 5) { float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.8F, 1.2F, random); CrystalMountainPiece piece = new CrystalMountainPiece(new BlockPos(x, y, z), radius, height, random, biome); this.pieces.add(piece); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } } diff --git a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java index cbb6735a..d78bd5ca 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -2,6 +2,8 @@ package ru.betterend.world.structures.features; import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -25,15 +27,15 @@ public class PaintedMountainStructure extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 50) { float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); @@ -44,7 +46,8 @@ public class PaintedMountainStructure extends FeatureBaseStructure { } this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises )); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } diff --git a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java index 40e28a3c..cc33b475 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -4,6 +4,8 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.RegistryAccess; +import net.minecraft.world.level.ChunkPos; +import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; @@ -26,21 +28,22 @@ public abstract class SDFStructureFeature extends FeatureBaseStructure { } public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { - super(feature, chunkX, chunkZ, box, references, seed); + public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { + super(feature, chunkPos, references, seed); } @Override - public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager manager, int chunkX, int chunkZ, Biome biome, NoneFeatureConfiguration config) { - int x = (chunkX << 4) | MHelper.randRange(4, 12, random); - int z = (chunkZ << 4) | MHelper.randRange(4, 12, random); - int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG); + public void generatePieces(RegistryAccess registryManager, ChunkGenerator chunkGenerator, StructureManager structureManager, ChunkPos chunkPos, Biome biome, NoneFeatureConfiguration featureConfiguration, LevelHeightAccessor levelHeightAccessor) { + int x = chunkPos.getBlockX(MHelper.randRange(4, 12, random)); + int z = chunkPos.getBlockZ(MHelper.randRange(4, 12, random)); + int y = chunkGenerator.getBaseHeight(x, z, Types.WORLD_SURFACE_WG, levelHeightAccessor); if (y > 5) { BlockPos start = new BlockPos(x, y, z); VoxelPiece piece = new VoxelPiece((world) -> { ((SDFStructureFeature) this.getFeature()).getSDF(start, this.random).fillRecursive(world, start); }, random.nextInt()); this.pieces.add(piece); } - this.calculateBoundingBox(); + + //this.calculateBoundingBox(); } } } From 32f9bf288ee79f3a2d46ca9316ce58d2810af244 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 12:33:49 +0200 Subject: [PATCH 27/72] `StructurePiece` constructor and `addAdditionalSaveData` Signature --- .../world/structures/piece/BasePiece.java | 5 +++-- .../world/structures/piece/CavePiece.java | 17 +++++++++-------- .../world/structures/piece/LakePiece.java | 18 ++++++++++-------- .../world/structures/piece/MountainPiece.java | 5 +++-- .../world/structures/piece/NBTPiece.java | 5 +++-- .../structures/piece/PaintedMountainPiece.java | 5 +++-- .../world/structures/piece/VoxelPiece.java | 5 +++-- 7 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index b5ce64f8..957de957 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -2,11 +2,12 @@ package ru.betterend.world.structures.piece; import net.minecraft.nbt.CompoundTag; import net.minecraft.world.level.levelgen.feature.StructurePieceType; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructurePiece; public abstract class BasePiece extends StructurePiece { - protected BasePiece(StructurePieceType type, int i) { - super(type, i); + protected BasePiece(StructurePieceType type, int i, BoundingBox boundingBox) { + super(type, i, boundingBox); } protected BasePiece(StructurePieceType type, CompoundTag tag) { diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index a964e0e7..258b3ab4 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -25,7 +26,7 @@ public class CavePiece extends BasePiece { private float radius; public CavePiece(BlockPos center, float radius, int id) { - super(EndStructures.CAVE_PIECE, id); + super(EndStructures.CAVE_PIECE, id, null); this.center = center; this.radius = radius; this.noise = new OpenSimplexNoise(MHelper.getSeed(534, center.getX(), center.getZ())); @@ -39,12 +40,12 @@ public class CavePiece extends BasePiece { @Override public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { - int x1 = MHelper.max(this.boundingBox.x0, blockBox.x0); - int z1 = MHelper.max(this.boundingBox.z0, blockBox.z0); - int x2 = MHelper.min(this.boundingBox.x1, blockBox.x1); - int z2 = MHelper.min(this.boundingBox.z1, blockBox.z1); - int y1 = this.boundingBox.y0; - int y2 = this.boundingBox.y1; + int x1 = MHelper.max(this.boundingBox.minX(), blockBox.minX()); + int z1 = MHelper.max(this.boundingBox.minZ(), blockBox.minZ()); + int x2 = MHelper.min(this.boundingBox.maxX(), blockBox.maxX()); + int z2 = MHelper.min(this.boundingBox.maxZ(), blockBox.maxZ()); + int y1 = this.boundingBox.minY(); + int y2 = this.boundingBox.maxY(); double hr = radius * 0.75; double nr = radius * 0.25; @@ -83,7 +84,7 @@ public class CavePiece extends BasePiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); } diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index b304d42e..5a2e10cb 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -8,9 +8,11 @@ import com.google.common.collect.Maps; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.SectionPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -46,7 +48,7 @@ public class LakePiece extends BasePiece { private ResourceLocation biomeID; public LakePiece(BlockPos center, float radius, float depth, Random random, Biome biome) { - super(EndStructures.LAKE_PIECE, random.nextInt()); + super(EndStructures.LAKE_PIECE, random.nextInt(), null); this.center = center; this.radius = radius; this.depth = depth; @@ -63,7 +65,7 @@ public class LakePiece extends BasePiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("depth", depth); @@ -84,10 +86,10 @@ public class LakePiece extends BasePiece { @Override public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { - int minY = this.boundingBox.y0; - int maxY = this.boundingBox.y1; - int sx = chunkPos.x << 4; - int sz = chunkPos.z << 4; + int minY = this.boundingBox.minY(); + int maxY = this.boundingBox.maxY(); + int sx = SectionPos.sectionToBlockCoord(chunkPos.x); + int sz = SectionPos.sectionToBlockCoord(chunkPos.z); MutableBlockPos mut = new MutableBlockPos(); ChunkAccess chunk = world.getChunk(chunkPos.x, chunkPos.z); for (int x = 0; x < 16; x++) { @@ -144,8 +146,8 @@ public class LakePiece extends BasePiece { } private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mut, Random random, int sx, int sz) { - int minY = this.boundingBox.y0; - int maxY = this.boundingBox.y1; + int minY = this.boundingBox.minY(); + int maxY = this.boundingBox.maxY(); for (int x = 0; x < 16; x++) { mut.setX(x); for (int z = 0; z < 16; z++) { diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index bc2ef668..2521d869 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; @@ -34,7 +35,7 @@ public abstract class MountainPiece extends BasePiece { protected int seed2; public MountainPiece(StructurePieceType type, BlockPos center, float radius, float height, Random random, Biome biome) { - super(type, random.nextInt()); + super(type, random.nextInt(), null); this.center = center; this.radius = radius; this.height = height; @@ -53,7 +54,7 @@ public abstract class MountainPiece extends BasePiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("height", height); diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index bc5388f3..996336bd 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -30,7 +31,7 @@ public class NBTPiece extends BasePiece { private boolean cover; public NBTPiece(ResourceLocation structureID, StructureTemplate structure, BlockPos pos, int erosion, boolean cover, Random random) { - super(EndStructures.NBT_PIECE, random.nextInt()); + super(EndStructures.NBT_PIECE, random.nextInt(), null); this.structureID = structureID; this.structure = structure; this.rotation = Rotation.getRandom(random); @@ -47,7 +48,7 @@ public class NBTPiece extends BasePiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { tag.putString("structureID", structureID.toString()); tag.putInt("rotation", rotation.ordinal()); tag.putInt("mirror", mirror.ordinal()); diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index cbbaa91d..f3029f74 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.NbtUtils; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -33,8 +34,8 @@ public class PaintedMountainPiece extends MountainPiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { - super.addAdditionalSaveData(tag); + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + super.addAdditionalSaveData(serverLevel, tag); ListTag slise = new ListTag(); for (BlockState state: slises) { slise.add(NbtUtils.writeBlockState(state)); diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 08a4a100..67c0e2f7 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -5,6 +5,7 @@ import java.util.function.Consumer; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -18,7 +19,7 @@ public class VoxelPiece extends BasePiece { private StructureWorld world; public VoxelPiece(Consumer function, int id) { - super(EndStructures.VOXEL_PIECE, id); + super(EndStructures.VOXEL_PIECE, id, null); world = new StructureWorld(); function.accept(world); this.boundingBox = world.getBounds(); @@ -30,7 +31,7 @@ public class VoxelPiece extends BasePiece { } @Override - protected void addAdditionalSaveData(CompoundTag tag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag compoundTag) { tag.put("world", world.toBNT()); } From 855593193278a2b6de39b9355e19471de2efd5b4 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 12:34:12 +0200 Subject: [PATCH 28/72] Another round of minor changes --- Convert.java | 101 ++++-------------- .../betterend/blocks/MengerSpongeBlock.java | 4 +- .../blocks/entities/PedestalBlockEntity.java | 4 - .../mixin/common/AnvilMenuMixin.java | 2 +- .../mixin/common/ServerPlayerMixin.java | 10 +- .../ru/betterend/noise/OpenSimplexNoise.java | 2 +- 6 files changed, 29 insertions(+), 94 deletions(-) diff --git a/Convert.java b/Convert.java index 23a8aba8..15ff66c6 100644 --- a/Convert.java +++ b/Convert.java @@ -12,7 +12,14 @@ class ModelPart { boolean hadBox = false; ModelPart(Convert c, String name){ + this(c, 0, 0, name); + + } + + ModelPart(Convert c, int u, int v, String name){ this.name = name; + this.u = u; + this.v = v; parts.add(this); } @@ -83,10 +90,18 @@ class ModelPart { } public static void print(){ + System.out.println("public static LayerDefinition getTexturedModelData() {"); + System.out.println(" MeshDefinition modelData = new MeshDefinition();"); + System.out.println(" PartDefinition modelPartData = modelData.getRoot();"); for(ModelPart p : parts){ System.out.println(p); System.out.println(); } + System.out.println("return LayerDefinition.create(modelData, 48, 48);"); + System.out.println("}"); + + System.out.println(); + System.out.println(); for(ModelPart p : parts){ String pName = p.parent==null?"modelPart":p.parent.name; @@ -104,86 +119,10 @@ public class Convert { p.setRotationAngle(x, y, z); } public void c (){ - ModelPart legsL = new ModelPart(this, "legsL"); - legsL.setPos(1.5F, 19.9F, -0.45F); - setRotationAngle(legsL, 0.0F, 0.0F, 0.6981F); - - ModelPart cube_r1 = new ModelPart(this, "cube_r1"); - cube_r1.setPos(0.0F, 0.0F, -1.0F); - legsL.addChild(cube_r1); - setRotationAngle(cube_r1, 0.0F, 0.2182F, 0.3927F); - cube_r1.texOffs(0, 13).addBox(0.0216F, 0.0F, -0.5976F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart cube_r2 = new ModelPart(this, "cube_r2"); - cube_r2.setPos(0.5F, 0.1F, -0.05F); - legsL.addChild(cube_r2); - setRotationAngle(cube_r2, 0.0F, 0.0F, 0.3927F); - cube_r2.texOffs(0, 15).addBox(0.0F, 0.0F, -0.6F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart cube_r3 = new ModelPart(this, "cube_r3"); - cube_r3.setPos(0.0F, 0.0F, 0.9F); - legsL.addChild(cube_r3); - setRotationAngle(cube_r3, 0.0F, -0.2182F, 0.3927F); - cube_r3.texOffs(0, 14).addBox(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart legsR = new ModelPart(this,"legsR"); - legsR.setPos(-1.5F, 19.9F, -0.55F); - setRotationAngle(legsR, 0.0F, 3.1416F, -0.6545F); - - ModelPart cube_r4 = new ModelPart(this, "cube_r4"); - cube_r4.setPos(0.0F, 0.0F, -1.0F); - legsR.addChild(cube_r4); - setRotationAngle(cube_r4, 0.0F, 0.2182F, 0.3927F); - cube_r4.texOffs(0, 10).addBox(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart cube_r5 = new ModelPart(this, "cube_r5"); - cube_r5.setPos(0.5F, 0.1F, -0.05F); - legsR.addChild(cube_r5); - setRotationAngle(cube_r5, 0.0F, 0.0F, 0.3927F); - cube_r5.texOffs(0, 11).addBox(0.0F, 0.0F, -0.4F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart cube_r6 = new ModelPart(this, "cube_r6"); - cube_r6.setPos(0.0F, 0.0F, 0.9F); - legsR.addChild(cube_r6); - setRotationAngle(cube_r6, 0.0F, -0.2182F, 0.3927F); - cube_r6.texOffs(0, 12).addBox(0.0216F, 0.0F, -0.4024F, 3.0F, 0.0F, 1.0F, 0.0F); - - ModelPart head_pivot = new ModelPart(this, "head_pivot"); - head_pivot.setPos(0.0F, 18.0F, -3.0F); - head_pivot.texOffs(15, 10).addBox(-1.5F, -1.5F, -2.0F, 3.0F, 3.0F, 3.0F, 0.0F); - - ModelPart tendril_r_r1 = new ModelPart(this, "tendril_r_r1"); - tendril_r_r1.setPos(1.0F, -1.15F, -1.0F); - head_pivot.addChild(tendril_r_r1); - setRotationAngle(tendril_r_r1, 0.0F, 0.0F, 0.3927F); - tendril_r_r1.texOffs(23, 0).addBox(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F, true); - - ModelPart tendril_r_r2 = new ModelPart(this, "tendril_r_r2"); - tendril_r_r2.setPos(-1.0F, -1.15F, -1.0F); - head_pivot.addChild(tendril_r_r2); - setRotationAngle(tendril_r_r2, 0.0F, 0.0F, -0.3927F); - tendril_r_r2.texOffs(23, 0).addBox(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F); - - ModelPart bb_main = new ModelPart(this, "bb_main"); - bb_main.setPos(0.0F, 24.0F, 0.0F); - bb_main.texOffs(19, 19).addBox(-2.5F, -8.5F, -3.0F, 5.0F, 5.0F, 3.0F, 0.0F); - - ModelPart wingR_r1 = new ModelPart(this, "wingR_r1"); - wingR_r1.setPos(-1.5F, -6.5F, 0.5F); - bb_main.addChild(wingR_r1); - setRotationAngle(wingR_r1, 0.0F, 0.0F, 0.3927F); - wingR_r1.texOffs(0, 5).addBox(-7.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F, true); - - ModelPart wingL_r1 = new ModelPart(this, "wingL_r1"); - wingL_r1.setPos(1.5F, -6.5F, 0.5F); - bb_main.addChild(wingL_r1); - setRotationAngle(wingL_r1, 0.0F, 0.0F, -0.3927F); - wingL_r1.texOffs(0, 5).addBox(-2.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F); - - ModelPart abdomen_r1 = new ModelPart(this, "abdomen_r1"); - abdomen_r1.setPos(1.0F, -3.9F, 0.0F); - bb_main.addChild(abdomen_r1); - setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); - abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F); + ModelPart leftWing = new ModelPart(this, 22, 0, "leftWing"); + leftWing.addBox(-10.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); + ModelPart rightWing = new ModelPart(this, 22, 0, "rightWing"); + rightWing.mirror = true; + rightWing.addBox(0.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); } } diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java index d644fcaf..6890f22a 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java @@ -61,7 +61,7 @@ public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped FluidState fluidState = world.getFluidState(blockPos2); Material material = blockState.getMaterial(); if (fluidState.is(FluidTags.WATER)) { - if (blockState.getBlock() instanceof BucketPickup && ((BucketPickup) blockState.getBlock()).takeLiquid(world, blockPos2, blockState) != Fluids.EMPTY) { + if (blockState.getBlock() instanceof BucketPickup && !((BucketPickup) blockState.getBlock()).pickupBlock(world, blockPos2, blockState).isEmpty()) { ++i; if (j < 6) { queue.add(new Tuple<>(blockPos2, j + 1)); @@ -73,7 +73,7 @@ public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped queue.add(new Tuple<>(blockPos2, j + 1)); } } else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { - BlockEntity blockEntity = blockState.getBlock().isEntityBlock() ? world.getBlockEntity(blockPos2) : null; + BlockEntity blockEntity = blockState.hasBlockEntity() ? world.getBlockEntity(blockPos2) : null; dropResources(blockState, world, blockPos2, blockEntity); world.setBlock(blockPos2, Blocks.AIR.defaultBlockState(), 3); ++i; diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index c41a16bd..c7668f2d 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -28,10 +28,6 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block super(blockEntityType, blockPos, blockState); } - public PedestalBlockEntity(BlockEntityType type) { - super(type); - } - public int getAge() { return age; } diff --git a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java index 41683dec..4d2c61b6 100644 --- a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java +++ b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java @@ -72,7 +72,7 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc slotsChanged(inputSlots); access.execute((world, blockPos) -> { BlockState anvilState = world.getBlockState(blockPos); - if (!player.abilities.instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { + if (!player.getAbilities().instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { BlockState landingState = EndAnvilBlock.applyDamage(anvilState); if (landingState == null) { world.removeBlock(blockPos, false); diff --git a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java index 1f85de89..dad6df0d 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java @@ -69,7 +69,7 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt @Inject(method = "findDimensionEntryPoint", at = @At("HEAD"), cancellable = true) protected void be_getTeleportTarget(ServerLevel destination, CallbackInfoReturnable info) { if (be_canTeleport()) { - info.setReturnValue(new PortalInfo(new Vec3(exitPos.getX() + 0.5, exitPos.getY(), exitPos.getZ() + 0.5), getDeltaMovement(), yRot, xRot)); + info.setReturnValue(new PortalInfo(new Vec3(exitPos.getX() + 0.5, exitPos.getY(), exitPos.getZ() + 0.5), getDeltaMovement(), getYRot(), getXRot())); } } @@ -85,21 +85,21 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt connection.send(new ClientboundChangeDifficultyPacket(worldProperties.getDifficulty(), worldProperties.isDifficultyLocked())); PlayerList playerManager = server.getPlayerList(); playerManager.sendPlayerPermissionLevel(player); - serverWorld.removePlayerImmediately(player); - removed = false; + serverWorld.removePlayerImmediately(player, RemovalReason.CHANGED_DIMENSION); + unsetRemoved(); PortalInfo teleportTarget = findDimensionEntryPoint(destination); if (teleportTarget != null) { serverWorld.getProfiler().push("moving"); serverWorld.getProfiler().pop(); serverWorld.getProfiler().push("placing"); - setLevel(destination); + this.level = destination; destination.addDuringPortalTeleport(player); setRot(teleportTarget.yRot, teleportTarget.xRot); moveTo(teleportTarget.pos.x, teleportTarget.pos.y, teleportTarget.pos.z); serverWorld.getProfiler().pop(); triggerDimensionChangeTriggers(serverWorld); gameMode.setLevel(destination); - connection.send(new ClientboundPlayerAbilitiesPacket(abilities)); + connection.send(new ClientboundPlayerAbilitiesPacket(getAbilities())); playerManager.sendLevelInfo(player, destination); playerManager.sendAllPlayerInfo(player); diff --git a/src/main/java/ru/betterend/noise/OpenSimplexNoise.java b/src/main/java/ru/betterend/noise/OpenSimplexNoise.java index 3389bfbc..bf4b1680 100644 --- a/src/main/java/ru/betterend/noise/OpenSimplexNoise.java +++ b/src/main/java/ru/betterend/noise/OpenSimplexNoise.java @@ -16,7 +16,7 @@ package ru.betterend.noise; * will be the same when ported to other languages. */ -public class OpenSimplexNoise { +public final class OpenSimplexNoise { private static final double STRETCH_CONSTANT_2D = -0.211324865405187; // (1/Math.sqrt(2+1)-1)/2; private static final double SQUISH_CONSTANT_2D = 0.366025403784439; // (Math.sqrt(2+1)-1)/2; private static final double STRETCH_CONSTANT_3D = -1.0 / 6; // (1/Math.sqrt(3+1)-1)/3; From f6cbb159175360b3420e04516e4234e151a4bd73 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 12:50:22 +0200 Subject: [PATCH 29/72] Fixed `LivingEntityMixin` --- .../java/ru/betterend/mixin/common/LivingEntityMixin.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index b4e430d6..67aec1fc 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -99,7 +99,7 @@ public abstract class LivingEntityMixin extends Entity { this.lastAttacker = source.getEntity(); } - @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(FDD)V")) + @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) private float be_increaseKnockback(float value, double x, double z) { if (lastAttacker != null && lastAttacker instanceof LivingEntity) { LivingEntity attacker = (LivingEntity) lastAttacker; @@ -144,9 +144,9 @@ public abstract class LivingEntityMixin extends Entity { Vec3 lookAngle = getLookAngle(); double d = 0.08D; - float rotX = xRot * 0.017453292F; + float rotX = getXRot() * 0.017453292F; double k = Math.sqrt(lookAngle.x * lookAngle.x + lookAngle.z * lookAngle.z); - double l = Math.sqrt(getHorizontalDistanceSqr(moveDelta)); + double l = moveDelta.horizontalDistance(); double lookLen = lookAngle.length(); float n = Mth.cos(rotX); n = (float) (n * n * Math.min(1.0D, lookLen / 0.4D)); @@ -172,7 +172,7 @@ public abstract class LivingEntityMixin extends Entity { move(MoverType.SELF, moveDelta); if (!level.isClientSide) { if (horizontalCollision) { - coef = Math.sqrt(getHorizontalDistanceSqr(moveDelta)); + coef = moveDelta.horizontalDistance(); double r = l - coef; float dmg = (float) (r * 10.0D - 3.0D); if (dmg > 0.0F) { From 4bf09362be8c4f7844905e689c4b5e58785bb99b Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 14:47:23 +0200 Subject: [PATCH 30/72] Fixed `PlayerListMixin` --- .../mixin/common/PlayerListMixin.java | 148 ++++++++++-------- 1 file changed, 80 insertions(+), 68 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java index 408fb3fa..97a9f1b2 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java @@ -1,9 +1,6 @@ package ru.betterend.mixin.common; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import org.apache.logging.log4j.Logger; import org.jetbrains.annotations.Nullable; @@ -84,141 +81,153 @@ public class PlayerListMixin { private Map playersByUUID; @Inject(method = "placeNewPlayer", at = @At(value = "HEAD"), cancellable = true) - public void be_placeNewPlayer(Connection connection, ServerPlayer player, CallbackInfo info) { + public void be_placeNewPlayer(Connection connection, ServerPlayer serverPlayer, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd()) { - GameProfile gameProfile = player.getGameProfile(); + GameProfile gameProfile = serverPlayer.getGameProfile(); GameProfileCache userCache = this.server.getProfileCache(); GameProfile gameProfile2 = userCache.get(gameProfile.getId()); String string = gameProfile2 == null ? gameProfile.getName() : gameProfile2.getName(); userCache.add(gameProfile); - CompoundTag compoundTag = this.load(player); + CompoundTag compoundTag = this.load(serverPlayer); ResourceKey var23; if (compoundTag != null) { DataResult> var10000 = DimensionType.parseLegacy(new Dynamic(NbtOps.INSTANCE, compoundTag.get("Dimension"))); Logger var10001 = LOGGER; - var10001.getClass(); + Objects.requireNonNull(var10001); var23 = (ResourceKey) var10000.resultOrPartial(var10001::error).orElse(Level.END); - } - else { + } else { var23 = Level.END; } ResourceKey registryKey = var23; - ServerLevel serverWorld = this.server.getLevel(registryKey); - ServerLevel serverWorld3; - if (serverWorld == null) { + ServerLevel serverLevel = this.server.getLevel(registryKey); + ServerLevel serverLevel3; + if (serverLevel == null) { LOGGER.warn("Unknown respawn dimension {}, defaulting to overworld", registryKey); - serverWorld3 = this.server.overworld(); - } - else { - serverWorld3 = serverWorld; + serverLevel3 = this.server.overworld(); + } else { + serverLevel3 = serverLevel; } - player.setLevel(serverWorld3); - player.gameMode.setLevel((ServerLevel) player.level); + serverPlayer.setLevel(serverLevel3); + //serverPlayer.gameMode.setLevel((ServerLevel) serverPlayer.level); String string2 = "local"; if (connection.getRemoteAddress() != null) { string2 = connection.getRemoteAddress().toString(); } - LOGGER.info("{}[{}] logged in with entity id {} at ({}, {}, {})", player.getName().getString(), string2, player.getId(), player.getX(), player.getY(), player.getZ()); - LevelData worldProperties = serverWorld3.getLevelData(); - this.updatePlayerGameMode(player, (ServerPlayer) null, serverWorld3); - ServerGamePacketListenerImpl serverPlayNetworkHandler = new ServerGamePacketListenerImpl(this.server, connection, player); - GameRules gameRules = serverWorld3.getGameRules(); + LOGGER.info("{}[{}] logged in with entity id {} at ({}, {}, {})", serverPlayer.getName().getString(), string2, + serverPlayer.getId(), serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ()); + LevelData worldProperties = serverLevel3.getLevelData(); + serverPlayer.loadGameTypes(compoundTag); + //this.updatePlayerGameMode(serverPlayer, (ServerPlayer) null, serverLevel3); + ServerGamePacketListenerImpl serverPlayNetworkHandler = new ServerGamePacketListenerImpl(this.server, + connection, serverPlayer); + GameRules gameRules = serverLevel3.getGameRules(); boolean bl = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); boolean bl2 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); - serverPlayNetworkHandler.send(new ClientboundLoginPacket(player.getId(), player.gameMode.getGameModeForPlayer(), player.gameMode.getPreviousGameModeForPlayer(), BiomeManager.obfuscateSeed(serverWorld3.getSeed()), - worldProperties.isHardcore(), this.server.levelKeys(), this.registryHolder, serverWorld3.dimensionType(), serverWorld3.dimension(), this.getPlayerCount(), this.viewDistance, bl2, !bl, - serverWorld3.isDebug(), serverWorld3.isFlat())); - serverPlayNetworkHandler.send(new ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.BRAND, (new FriendlyByteBuf(Unpooled.buffer())).writeUtf(this.getServer().getServerModName()))); - serverPlayNetworkHandler.send(new ClientboundChangeDifficultyPacket(worldProperties.getDifficulty(), worldProperties.isDifficultyLocked())); - serverPlayNetworkHandler.send(new ClientboundPlayerAbilitiesPacket(player.abilities)); - serverPlayNetworkHandler.send(new ClientboundSetCarriedItemPacket(player.inventory.selected)); - serverPlayNetworkHandler.send(new ClientboundUpdateRecipesPacket(this.server.getRecipeManager().getRecipes())); - serverPlayNetworkHandler.send(new ClientboundUpdateTagsPacket(this.server.getTags())); - this.sendPlayerPermissionLevel(player); - player.getStats().markAllDirty(); - player.getRecipeBook().sendInitialRecipeBook(player); - this.updateEntireScoreboard(serverWorld3.getScoreboard(), player); + serverPlayNetworkHandler.send(new ClientboundLoginPacket(serverPlayer.getId(), + serverPlayer.gameMode.getGameModeForPlayer(), serverPlayer.gameMode.getPreviousGameModeForPlayer(), + BiomeManager.obfuscateSeed(serverLevel3.getSeed()), worldProperties.isHardcore(), + this.server.levelKeys(), this.registryHolder, serverLevel3.dimensionType(), serverLevel3.dimension(), + this.getMaxPlayers(), this.viewDistance, bl2, !bl, serverLevel3.isDebug(), serverLevel3.isFlat())); + serverPlayNetworkHandler.send(new ClientboundCustomPayloadPacket(ClientboundCustomPayloadPacket.BRAND, + (new FriendlyByteBuf(Unpooled.buffer())).writeUtf(this.getServer().getServerModName()))); + serverPlayNetworkHandler + .send(new ClientboundChangeDifficultyPacket(worldProperties.getDifficulty(), worldProperties.isDifficultyLocked())); + serverPlayNetworkHandler.send(new ClientboundPlayerAbilitiesPacket(serverPlayer.getAbilities())); + serverPlayNetworkHandler.send(new ClientboundSetCarriedItemPacket(serverPlayer.getInventory().selected)); + serverPlayNetworkHandler + .send(new ClientboundUpdateRecipesPacket(this.server.getRecipeManager().getRecipes())); + serverPlayNetworkHandler + .send(new ClientboundUpdateTagsPacket(this.server.getTags().serializeToNetwork(this.registryHolder))); + this.sendPlayerPermissionLevel(serverPlayer); + serverPlayer.getStats().markAllDirty(); + serverPlayer.getRecipeBook().sendInitialRecipeBook(serverPlayer); + this.updateEntireScoreboard(serverLevel3.getScoreboard(), serverPlayer); this.server.invalidateStatus(); TranslatableComponent mutableText2; - if (player.getGameProfile().getName().equalsIgnoreCase(string)) { - mutableText2 = new TranslatableComponent("multiplayer.player.joined", new Object[] { player.getDisplayName() }); - } - else { - mutableText2 = new TranslatableComponent("multiplayer.player.joined.renamed", new Object[] { player.getDisplayName(), string }); + if (serverPlayer.getGameProfile().getName().equalsIgnoreCase(string)) { + mutableText2 = new TranslatableComponent("multiplayer.player.joined", + new Object[] { serverPlayer.getDisplayName() }); + } else { + mutableText2 = new TranslatableComponent("multiplayer.player.joined.renamed", + new Object[] { serverPlayer.getDisplayName(), string }); } this.broadcastMessage(mutableText2.withStyle(ChatFormatting.YELLOW), ChatType.SYSTEM, Util.NIL_UUID); - serverPlayNetworkHandler.teleport(player.getX(), player.getY(), player.getZ(), player.yRot, player.xRot); - this.players.add(player); - this.playersByUUID.put(player.getUUID(), player); - this.broadcastAll(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, new ServerPlayer[] { player })); + serverPlayNetworkHandler.teleport(serverPlayer.getX(), serverPlayer.getY(), serverPlayer.getZ(), + serverPlayer.getYRot(), serverPlayer.getXRot()); + this.players.add(serverPlayer); + this.playersByUUID.put(serverPlayer.getUUID(), serverPlayer); + this.broadcastAll(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, + new ServerPlayer[] { serverPlayer })); for (int i = 0; i < this.players.size(); ++i) { - player.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, new ServerPlayer[] { (ServerPlayer) this.players.get(i) })); + serverPlayer.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, + new ServerPlayer[] { (ServerPlayer) this.players.get(i) })); } - serverWorld3.addNewPlayer(player); - this.server.getCustomBossEvents().onPlayerConnect(player); - this.sendLevelInfo(player, serverWorld3); + serverLevel3.addNewPlayer(serverPlayer); + this.server.getCustomBossEvents().onPlayerConnect(serverPlayer); + this.sendLevelInfo(serverPlayer, serverLevel3); if (!this.server.getResourcePack().isEmpty()) { - player.sendTexturePack(this.server.getResourcePack(), this.server.getResourcePackHash()); + serverPlayer.sendTexturePack(this.server.getResourcePack(), this.server.getResourcePackHash(), + this.server.isResourcePackRequired(), this.server.getResourcePackPrompt()); } - Iterator var24 = player.getActiveEffects().iterator(); + Iterator var24 = serverPlayer.getActiveEffects().iterator(); while (var24.hasNext()) { MobEffectInstance statusEffectInstance = (MobEffectInstance) var24.next(); - serverPlayNetworkHandler.send(new ClientboundUpdateMobEffectPacket(player.getId(), statusEffectInstance)); + serverPlayNetworkHandler + .send(new ClientboundUpdateMobEffectPacket(serverPlayer.getId(), statusEffectInstance)); } if (compoundTag != null && compoundTag.contains("RootVehicle", 10)) { CompoundTag compoundTag2 = compoundTag.getCompound("RootVehicle"); - Entity entity = EntityType.loadEntityRecursive(compoundTag2.getCompound("Entity"), serverWorld3, (vehicle) -> { - return !serverWorld3.addWithUUID(vehicle) ? null : vehicle; - }); + Entity entity = EntityType.loadEntityRecursive(compoundTag2.getCompound("Entity"), serverLevel3, + (vehicle) -> { + return !serverLevel3.addWithUUID(vehicle) ? null : vehicle; + }); if (entity != null) { UUID uUID2; if (compoundTag2.hasUUID("Attach")) { uUID2 = compoundTag2.getUUID("Attach"); - } - else { + } else { uUID2 = null; } Iterator var21; Entity entity3; if (entity.getUUID().equals(uUID2)) { - player.startRiding(entity, true); - } - else { + serverPlayer.startRiding(entity, true); + } else { var21 = entity.getIndirectPassengers().iterator(); while (var21.hasNext()) { entity3 = (Entity) var21.next(); if (entity3.getUUID().equals(uUID2)) { - player.startRiding(entity3, true); + serverPlayer.startRiding(entity3, true); break; } } } - if (!player.isPassenger()) { + if (!serverPlayer.isPassenger()) { LOGGER.warn("Couldn't reattach entity to player"); - serverWorld3.despawn(entity); + entity.discard(); var21 = entity.getIndirectPassengers().iterator(); while (var21.hasNext()) { entity3 = (Entity) var21.next(); - serverWorld3.despawn(entity3); + entity3.discard(); } } } } - player.initMenu(); + serverPlayer.initInventoryMenu(); info.cancel(); } } @@ -228,8 +237,8 @@ public class PlayerListMixin { return null; } - @Shadow - private void updatePlayerGameMode(ServerPlayer player, @Nullable ServerPlayer oldPlayer, ServerLevel world) {} + // @Shadow + // private void updatePlayerGameMode(ServerPlayer player, @Nullable ServerPlayer oldPlayer, ServerLevel world) {} @Shadow public void sendPlayerPermissionLevel(ServerPlayer player) {} @@ -239,6 +248,9 @@ public class PlayerListMixin { return 0; } + @Shadow + public int getMaxPlayers() { return 0; } + @Shadow public MinecraftServer getServer() { return null; From a82f30b95db457b984b9f09f481e62b12e0425fb Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 15:10:10 +0200 Subject: [PATCH 31/72] Fixed 'place'-Methods --- .../byg/features/OldBulbisTreeFeature.java | 11 +++++++---- .../mixin/common/SpikeFeatureMixin.java | 10 ++++++---- .../world/features/BiomeIslandFeature.java | 6 ++++-- .../world/features/CavePumpkinFeature.java | 7 +++++-- .../world/features/CrashedShipFeature.java | 13 ++++++++----- .../features/FullHeightScatterFeature.java | 7 +++++-- .../features/InvertedScatterFeature.java | 7 +++++-- .../world/features/NeonCactusFeature.java | 6 +++++- .../world/features/ScatterFeature.java | 7 +++++-- .../world/features/SilkMothNestFeature.java | 7 +++++-- .../world/features/WallScatterFeature.java | 6 +++++- .../world/features/bushes/BushFeature.java | 11 +++++++---- .../features/bushes/BushWithOuterFeature.java | 11 +++++++---- .../bushes/LargeAmaranitaFeature.java | 9 ++++++--- .../world/features/bushes/Lumecorn.java | 9 ++++++--- .../features/bushes/TenaneaBushFeature.java | 9 ++++++--- .../world/structures/piece/NBTPiece.java | 19 +++++++++++-------- 17 files changed, 103 insertions(+), 52 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java index 41830663..265c46fc 100644 --- a/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.AABB; @@ -36,11 +37,13 @@ public class OldBulbisTreeFeature extends DefaultFeature { private static final List SIDE; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; - if (!world.getBlockState(pos.below(4)).getBlock().is(TagAPI.GEN_TERRAIN)) + if (!world.getBlockState(pos.below(4)).is(TagAPI.GEN_TERRAIN)) return false; BlockState stem = Integrations.BYG.getDefaultState("bulbis_stem"); diff --git a/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java index 58b3001e..67bdf428 100644 --- a/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java @@ -2,6 +2,8 @@ package ru.betterend.mixin.common; import java.util.Random; +import net.minecraft.core.Vec3i; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -34,7 +36,7 @@ import ru.betterend.world.generator.GeneratorOptions; @Mixin(SpikeFeature.class) public class SpikeFeatureMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void be_place(WorldGenLevel structureWorldAccess, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, SpikeConfiguration endSpikeFeatureConfig, CallbackInfoReturnable info) { + private void be_place(FeaturePlaceContext featurePlaceContext, CallbackInfoReturnable info) { if (!GeneratorOptions.hasPillars()) { info.setReturnValue(false); } @@ -70,7 +72,7 @@ public class SpikeFeatureMixin { radius--; StructureTemplate base = StructureHelper.readStructure(BetterEnd.makeID("pillars/pillar_base_" + radius)); StructureTemplate top = StructureHelper.readStructure(BetterEnd.makeID("pillars/pillar_top_" + radius + (spike.isGuarded() ? "_cage" : ""))); - BlockPos side = base.getSize(); + Vec3i side = base.getSize(); BlockPos pos1 = new BlockPos(x - (side.getX() >> 1), minY - 3, z - (side.getZ() >> 1)); minY = pos1.getY() + side.getY(); side = top.getSize(); @@ -78,8 +80,8 @@ public class SpikeFeatureMixin { maxY = pos2.getY(); StructurePlaceSettings data = new StructurePlaceSettings(); - base.placeInWorldChunk(world, pos1, data, random); - top.placeInWorldChunk(world, pos2, data, random); + base.placeInWorld(world, pos1, pos1, data, random, 2); + top.placeInWorld(world, pos2, pos2, data, random, 2); int r2 = radius * radius + 1; MutableBlockPos mut = new MutableBlockPos(); diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index b58474a3..91e5ccd5 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConfiguration; import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration; @@ -29,8 +30,9 @@ public class BiomeIslandFeature extends DefaultFeature { private static BlockState underBlock = Blocks.DIRT.defaultBlockState(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); SurfaceBuilderConfiguration surfaceConfig = biome.getGenerationSettings().getSurfaceBuilderConfig(); BlockState topMaterial = surfaceConfig.getTopMaterial(); diff --git a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java index 839f6120..c0fb60d3 100644 --- a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java +++ b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java @@ -5,6 +5,7 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -14,8 +15,10 @@ import ru.betterend.registry.EndBlocks; public class CavePumpkinFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.above()).is(TagAPI.GEN_TERRAIN) || !world.isEmptyBlock(pos) || !world.isEmptyBlock(pos.below())) { return false; diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index 4be8dfdd..a0f92fad 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -11,6 +11,7 @@ import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.templatesystem.BlockIgnoreProcessor; @@ -75,8 +76,10 @@ public class CrashedShipFeature extends NBTStructureFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); center = new BlockPos(((center.getX() >> 4) << 4) | 8, 128, ((center.getZ() >> 4) << 4) | 8); center = getGround(world, center); BoundingBox bounds = makeBox(center); @@ -88,7 +91,7 @@ public class CrashedShipFeature extends NBTStructureFeature { StructureTemplate structure = getStructure(world, center, random); Rotation rotation = getRotation(world, center, random); Mirror mirror = getMirror(world, center, random); - BlockPos offset = StructureTemplate.transform(structure.getSize(), mirror, rotation, BlockPos.ZERO); + BlockPos offset = StructureTemplate.transform(new BlockPos(structure.getSize()), mirror, rotation, BlockPos.ZERO); center = center.offset(0, getYOffset(structure, world, center, random) + 0.5, 0); StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation).setMirror(mirror); center = center.offset(-offset.getX() * 0.5, 0, -offset.getZ() * 0.5); @@ -97,10 +100,10 @@ public class CrashedShipFeature extends NBTStructureFeature { bounds = StructureHelper.intersectBoxes(bounds, structB); addStructureData(placementData); - structure.placeInWorldChunk(world, center, placementData.setBoundingBox(bounds), random); + structure.placeInWorld(world, center, center, placementData.setBoundingBox(bounds), random, 2); StructureHelper.erodeIntense(world, bounds, random); - BlockFixer.fixBlocks(world, new BlockPos(bounds.x0, bounds.y0, bounds.z0), new BlockPos(bounds.x1, bounds.y1, bounds.z1)); + BlockFixer.fixBlocks(world, new BlockPos(bounds.minX(), bounds.minY(), bounds.minZ()), new BlockPos(bounds.maxX(), bounds.maxY(), bounds.maxZ())); return true; } diff --git a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java index 9912e3be..7e47884d 100644 --- a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java @@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -26,8 +27,10 @@ public abstract class FullHeightScatterFeature extends DefaultFeature { public abstract void generate(WorldGenLevel world, Random random, BlockPos blockPos); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); for (int y = maxY; y > minY; y--) { diff --git a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java index c0807972..404a4755 100644 --- a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java @@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -26,8 +27,10 @@ public abstract class InvertedScatterFeature extends DefaultFeature { public abstract void generate(WorldGenLevel world, Random random, BlockPos blockPos); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); for (int y = maxY; y > minY; y--) { diff --git a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java index 523e4dac..6a31d307 100644 --- a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java +++ b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.NeonCactusPlantBlock; @@ -13,7 +14,10 @@ import ru.betterend.registry.EndBlocks; public class NeonCactusFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); BlockState ground = world.getBlockState(pos.below()); if (!ground.is(EndBlocks.ENDSTONE_DUST) && !ground.is(EndBlocks.END_MOSS)) { return false; diff --git a/src/main/java/ru/betterend/world/features/ScatterFeature.java b/src/main/java/ru/betterend/world/features/ScatterFeature.java index 620be106..d65c6845 100644 --- a/src/main/java/ru/betterend/world/features/ScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/ScatterFeature.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -56,8 +57,10 @@ public abstract class ScatterFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); center = getCenterGround(world, center); if (!canSpawn(world, center)) { diff --git a/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java b/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java index 25ca6aed..dbadb296 100644 --- a/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java +++ b/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java @@ -11,6 +11,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; @@ -34,8 +35,10 @@ public class SilkMothNestFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); POS.set(center); diff --git a/src/main/java/ru/betterend/world/features/WallScatterFeature.java b/src/main/java/ru/betterend/world/features/WallScatterFeature.java index d9dee786..3bd6e23c 100644 --- a/src/main/java/ru/betterend/world/features/WallScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/WallScatterFeature.java @@ -8,6 +8,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -26,7 +27,10 @@ public abstract class WallScatterFeature extends DefaultFeature { public abstract void generate(WorldGenLevel world, Random random, BlockPos pos, Direction dir); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos center = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); if (maxY < 10 || maxY < minY) { diff --git a/src/main/java/ru/betterend/world/features/bushes/BushFeature.java b/src/main/java/ru/betterend/world/features/bushes/BushFeature.java index d3a78ecc..7ac27e3f 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushFeature.java @@ -10,6 +10,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -35,10 +36,12 @@ public class BushFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND) - && !world.getBlockState(pos.above()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND) + && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); diff --git a/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java b/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java index 67daa795..09e87425 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java @@ -11,6 +11,7 @@ import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -39,10 +40,12 @@ public class BushWithOuterFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND) - && !world.getBlockState(pos.above()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND) + && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); diff --git a/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java b/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java index a3c8018a..6ae29c7d 100644 --- a/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java @@ -8,6 +8,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.blocks.BlockProperties; @@ -19,9 +20,11 @@ import ru.betterend.registry.EndBlocks; public class LargeAmaranitaFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; MutableBlockPos mut = new MutableBlockPos().set(pos); diff --git a/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java b/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java index ec9b0682..b0d2e81b 100644 --- a/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java +++ b/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java @@ -8,6 +8,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -19,9 +20,11 @@ import ru.betterend.registry.EndBlocks; public class Lumecorn extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; int height = MHelper.randRange(4, 7, random); diff --git a/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java b/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java index 21e7d95e..eba26562 100644 --- a/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -39,9 +40,11 @@ public class TenaneaBushFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index 996336bd..a4cd0e32 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -3,6 +3,7 @@ package ru.betterend.world.structures.piece; import java.util.Random; import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.resources.ResourceLocation; @@ -70,16 +71,18 @@ public class NBTPiece extends BasePiece { @Override public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { - BoundingBox bounds = new BoundingBox(blockBox); - bounds.y1 = this.boundingBox.y1; - bounds.y0 = this.boundingBox.y0; + BoundingBox bounds = BoundingBox.fromCorners( + new Vec3i(blockBox.minX(), this.boundingBox.minY(), blockBox.minZ()), + new Vec3i(blockBox.maxX(), this.boundingBox.maxX(), blockBox.maxZ()) + ); StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation).setMirror(mirror).setBoundingBox(bounds); - structure.placeInWorldChunk(world, pos, placementData, random); + structure.placeInWorld(world, pos, pos, placementData, random, 2); if (erosion > 0) { - bounds.x1 = MHelper.min(bounds.x1, boundingBox.x1); - bounds.x0 = MHelper.max(bounds.x0, boundingBox.x0); - bounds.z1 = MHelper.min(bounds.z1, boundingBox.z1); - bounds.z0 = MHelper.max(bounds.z0, boundingBox.z0); + int x1 = MHelper.min(bounds.maxX(), boundingBox.maxX()); + int x0 = MHelper.max(bounds.minX(), boundingBox.minX()); + int z1 = MHelper.min(bounds.maxZ(), boundingBox.maxZ()); + int z0 = MHelper.max(bounds.minZ(), boundingBox.minZ()); + bounds = BoundingBox.fromCorners(new Vec3i(x0, bounds.minY(), z0), new Vec3i(x1, bounds.maxY(), z1)); StructureHelper.erode(world, bounds, erosion, random); } if (cover) { From 05f59b48568e4525fcf27aa49a854e62c389c071 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 15:24:14 +0200 Subject: [PATCH 32/72] Fixed `place`-Methods (Pt. II) --- .../integration/byg/biomes/NightshadeRedwoods.java | 2 +- .../byg/features/BigEtherTreeFeature.java | 8 ++++++-- .../features/terrain/BigAuroraCrystalFeature.java | 7 +++++-- .../world/features/terrain/DesertLakeFeature.java | 11 +++++++---- .../world/features/terrain/EndLakeFeature.java | 11 +++++++---- .../world/features/terrain/FallenPillarFeature.java | 6 +++++- .../world/features/terrain/FloatingSpireFeature.java | 10 +++++++--- .../world/features/terrain/GeyserFeature.java | 11 +++++++---- .../world/features/terrain/IceStarFeature.java | 7 +++++-- .../features/terrain/ObsidianBoulderFeature.java | 7 +++++-- .../terrain/ObsidianPillarBasementFeature.java | 12 +++++++----- .../world/features/terrain/OreLayerFeature.java | 7 +++++-- .../world/features/terrain/SingleBlockFeature.java | 6 +++++- .../features/terrain/SmaragdantCrystalFeature.java | 7 +++++-- .../world/features/terrain/SpireFeature.java | 10 +++++++--- .../world/features/terrain/StalactiteFeature.java | 7 +++++-- .../world/features/terrain/SulphurHillFeature.java | 7 +++++-- .../world/features/terrain/SulphuricCaveFeature.java | 7 +++++-- 18 files changed, 99 insertions(+), 44 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java index 61e48d18..1dea5e1f 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -54,7 +54,7 @@ public class NightshadeRedwoods extends EndBiome { }); for (MobCategory group: MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group); + List list = biome.getMobSettings().getMobs(group).unwrap(); list.forEach((entry) -> { def.addMobSpawn(entry); }); diff --git a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java index 4883e4a5..4bf26f6f 100644 --- a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,8 +22,11 @@ import ru.betterend.integration.Integrations; public class BigEtherTreeFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlockState log = Integrations.BYG.getDefaultState("ether_log"); diff --git a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java index 5ccdefe2..5587ea78 100644 --- a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java @@ -7,6 +7,7 @@ import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -20,8 +21,10 @@ import ru.betterend.registry.EndBlocks; public class BigAuroraCrystalFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int maxY = pos.getY() + BlocksHelper.upRay(world, pos, 16); int minY = pos.getY() - BlocksHelper.downRay(world, pos, 16); diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 7724bae3..3ffbf476 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -25,7 +26,10 @@ public class DesertLakeFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos blockPos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(8.0, 15.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); @@ -163,7 +167,7 @@ public class DesertLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -205,7 +209,6 @@ public class DesertLakeFeature extends DefaultFeature { || state.is(TagAPI.GEN_TERRAIN) || state.is(EndBlocks.ENDSTONE_DUST) || state.getMaterial().equals(Material.PLANT) - || state.getMaterial().equals(Material.WATER_PLANT) - || state.getMaterial().equals(Material.CORAL); + || state.getMaterial().equals(Material.WATER_PLANT); } } diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 55075fcb..48734de6 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -25,7 +26,10 @@ public class EndLakeFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos blockPos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(10.0, 20.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); @@ -163,7 +167,7 @@ public class EndLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -199,7 +203,6 @@ public class EndLakeFeature extends DefaultFeature { || state.is(TagAPI.GEN_TERRAIN) || state.is(EndBlocks.ENDSTONE_DUST) || state.getMaterial().equals(Material.PLANT) - || state.getMaterial().equals(Material.WATER_PLANT) - || state.getMaterial().equals(Material.CORAL); + || state.getMaterial().equals(Material.WATER_PLANT); } } diff --git a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java index f0b9e545..8a1a518a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -24,7 +25,10 @@ import ru.betterend.registry.EndBlocks; public class FallenPillarFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index af955ffe..63540189 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.BiomeAPI; import ru.bclib.sdf.SDF; @@ -22,8 +23,11 @@ import ru.betterend.registry.EndFeatures; public class FloatingSpireFeature extends SpireFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); int minY = getYOnSurface(world, pos.getX(), pos.getZ()); int y = minY > 57 ? MHelper.floor(MHelper.randRange(minY, minY * 2, random) * 0.5F + 32) : MHelper.randRange(64, 192, random); @@ -64,7 +68,7 @@ public class FloatingSpireFeature extends SpireFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(world, chunkGenerator, random, bpos, null); + EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java index 61da80ad..ad7fbb3e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -47,9 +48,11 @@ public class GeyserFeature extends DefaultFeature { private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - pos = getPosOnSurfaceWG(world, pos); + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final WorldGenLevel world = featureConfig.level(); + final BlockPos pos = getPosOnSurfaceWG(world, featureConfig.origin()); + final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); if (pos.getY() < 10) { return false; @@ -241,7 +244,7 @@ public class GeyserFeature extends DefaultFeature { } } - EndFeatures.SULPHURIC_LAKE.getFeature().place(world, chunkGenerator, random, pos, null); + EndFeatures.SULPHURIC_LAKE.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, pos, null)); double distance = radius1 * 1.7; BlockPos start = pos.offset(-distance, -halfHeight - 15 - distance, -distance); diff --git a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java index c76424ff..34a4f0f7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java @@ -10,6 +10,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; @@ -34,8 +35,10 @@ public class IceStarFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java index 840f53f1..624f3ac1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,8 +22,10 @@ import ru.betterend.registry.EndBlocks; public class ObsidianBoulderFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java index 3106db14..1551b04d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java @@ -1,14 +1,11 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -24,9 +21,14 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.Random; + public class ObsidianPillarBasementFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java index 0bbb70ea..15348622 100644 --- a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java @@ -7,6 +7,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFCoordModify; @@ -35,8 +36,10 @@ public class OreLayerFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); float radius = this.radius * 0.5F; int r = MHelper.floor(radius + 1); int posX = MHelper.randRange(Math.max(r - 16, 0), Math.min(31 - r, 15), random) + pos.getX(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java index 8fceba8d..87cc3f4b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -21,7 +22,10 @@ public class SingleBlockFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java index 447138b1..56749973 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java @@ -8,6 +8,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -17,8 +18,10 @@ import ru.betterend.registry.EndBlocks; public class SmaragdantCrystalFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index bf14a674..16d3d359 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.BiomeAPI; @@ -32,8 +33,11 @@ public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); + ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 10 || !world.getBlockState(pos.below(3)).is(TagAPI.GEN_TERRAIN) || !world.getBlockState(pos.below(6)).is(TagAPI.GEN_TERRAIN)) { @@ -68,7 +72,7 @@ public class SpireFeature extends DefaultFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(world, chunkGenerator, random, bpos, null); + EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java index 06e5bcfb..5c6f1a01 100644 --- a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java @@ -10,6 +10,7 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.blocks.StalactiteBlock; @@ -28,8 +29,10 @@ public class StalactiteFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); if (!isGround(world.getBlockState(ceiling ? pos.above() : pos.below()).getBlock())) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java index eefaf3e7..59c362ef 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java @@ -9,6 +9,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; @@ -19,8 +20,10 @@ import ru.betterend.registry.EndBlocks; public class SulphurHillFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 57 || pos.getY() > 70) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index a314095b..cbdd8e7c 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -32,8 +33,10 @@ public class SulphuricCaveFeature extends DefaultFeature { private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + WorldGenLevel world = featureConfig.level(); int radius = MHelper.randRange(10, 30, random); int top = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); From 20859ae133897b3ac10b8653c6e52eee0a6cb6f8 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 16:02:41 +0200 Subject: [PATCH 33/72] Updated `OldBulbisGardens` --- .../integration/byg/biomes/OldBulbisGardens.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java index 27bcd5a0..acea5a96 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -16,6 +16,8 @@ import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.placement.ConfiguredDecorator; import ru.bclib.BCLib; import ru.bclib.world.biomes.BCLBiomeDef; import ru.betterend.BetterEnd; @@ -24,6 +26,14 @@ import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; +class FeaturesAccesor extends Features{ + static ConfiguredDecorator shadowHEIGHTMAP_SQUARE; + + static { + shadowHEIGHTMAP_SQUARE = Decorators.HEIGHTMAP_SQUARE; + } +} + public class OldBulbisGardens extends EndBiome { public OldBulbisGardens() { super(makeDef()); @@ -54,7 +64,7 @@ public class OldBulbisGardens extends EndBiome { } for (MobCategory group: MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group); + List list = biome.getMobSettings().getMobs(group).unwrap(); list.forEach((entry) -> { def.addMobSpawn(entry); }); @@ -70,7 +80,7 @@ public class OldBulbisGardens extends EndBiome { getter = vegetal.get(i); ConfiguredFeature feature = getter.get(); ResourceLocation id = BetterEnd.makeID("obg_feature_" + i); - feature = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.decorated(Features.Decorators.HEIGHTMAP_SQUARE).countRandom(1)); + feature = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.decorated(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1)); def.addFeature(Decoration.VEGETAL_DECORATION, feature); } // Grasses and other features From fdd61262c558279248db584cf95b768005a62a49 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 16:03:04 +0200 Subject: [PATCH 34/72] TODOs and `WorldRenderMixin` Update --- .../mixin/client/WorldRendererMixin.java | 58 ++++++++++++------- .../betterend/registry/EndModelProviders.java | 1 + 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java index b24d3517..953d7053 100644 --- a/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java @@ -2,6 +2,7 @@ package ru.betterend.mixin.client; import java.util.Random; +import com.mojang.math.Matrix4f; import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -92,7 +93,7 @@ public class WorldRendererMixin { } @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) - private void be_renderBetterEndSky(PoseStack matrices, float tickDelta, CallbackInfo info) { + private void be_renderBetterEndSky(PoseStack matrices, Matrix4f matrix4f, float tickDelta, Runnable runnable, CallbackInfo info) { if (ClientOptions.isCustomSky() && minecraft.level.effects().skyType() == DimensionSpecialEffects.SkyType.END) { time = (ticks % 360000) * 0.000017453292F; time2 = time * 2; @@ -108,8 +109,9 @@ public class WorldRendererMixin { RenderSystem.depthMask(false); } else { - RenderSystem.enableAlphaTest(); - RenderSystem.alphaFunc(516, 0.0F); + //TODO: Removed in 1.17 + //RenderSystem.enableAlphaTest(); + //RenderSystem.alphaFunc(516, 0.0F); RenderSystem.enableBlend(); } @@ -120,23 +122,27 @@ public class WorldRendererMixin { if (blindA > 0) { matrices.pushPose(); matrices.mulPose(new Quaternion(0, time, 0, false)); - textureManager.bind(HORIZON); + RenderSystem.setShaderTexture(0, HORIZON); + //textureManager.bind(HORIZON); be_renderBuffer(matrices, horizon, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, 0.7F * blindA); matrices.popPose(); matrices.pushPose(); matrices.mulPose(new Quaternion(0, -time, 0, false)); - textureManager.bind(NEBULA_1); + //textureManager.bind(NEBULA_1); + RenderSystem.setShaderTexture(0, NEBULA_1); be_renderBuffer(matrices, nebulas1, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); matrices.popPose(); matrices.pushPose(); matrices.mulPose(new Quaternion(0, time2, 0, false)); - textureManager.bind(NEBULA_2); + //textureManager.bind(NEBULA_2); + RenderSystem.setShaderTexture(0, NEBULA_2); be_renderBuffer(matrices, nebulas2, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); matrices.popPose(); - - textureManager.bind(STARS); + + //textureManager.bind(STARS); + RenderSystem.setShaderTexture(0, STARS); matrices.pushPose(); matrices.mulPose(axis3.rotation(time)); @@ -152,7 +158,8 @@ public class WorldRendererMixin { float a = (BackgroundInfo.fogDensity - 1F); if (a > 0) { if (a > 1) a = 1; - textureManager.bind(FOG); + RenderSystem.setShaderTexture(0, FOG); + //textureManager.bind(FOG); be_renderBuffer(matrices, fog, DefaultVertexFormat.POSITION_TEX, BackgroundInfo.fogColorRed, BackgroundInfo.fogColorGreen, BackgroundInfo.fogColorBlue, a); } @@ -178,10 +185,12 @@ public class WorldRendererMixin { } private void be_renderBuffer(PoseStack matrices, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) { - RenderSystem.color4f(r, g, b, a); + RenderSystem.setShaderColor(r, g, b, a); buffer.bind(); - format.setupBufferState(0L); - buffer.draw(matrices.last().pose(), 7); + //format.setupBufferState(0L); + //buffer.draw(matrices.last().pose(), 7); + format.setupBufferState(); + buffer.draw(); VertexBuffer.unbind(); format.clearBufferState(); } @@ -203,7 +212,10 @@ public class WorldRendererMixin { buffer.close(); } - buffer = new VertexBuffer(DefaultVertexFormat.POSITION); + //TODO: Test if this is working correct + //Format is set in the DrawState + //buffer = new VertexBuffer(DefaultVertexFormat.POSITION); + buffer = new VertexBuffer(); be_makeStars(bufferBuilder, minSize, maxSize, count, seed); bufferBuilder.end(); buffer.upload(bufferBuilder); @@ -216,7 +228,8 @@ public class WorldRendererMixin { buffer.close(); } - buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + buffer = new VertexBuffer(); be_makeUVStars(bufferBuilder, minSize, maxSize, count, seed); bufferBuilder.end(); buffer.upload(bufferBuilder); @@ -229,7 +242,8 @@ public class WorldRendererMixin { buffer.close(); } - buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + buffer = new VertexBuffer(); be_makeFarFog(bufferBuilder, minSize, maxSize, count, seed); bufferBuilder.end(); buffer.upload(bufferBuilder); @@ -242,7 +256,8 @@ public class WorldRendererMixin { buffer.close(); } - buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + buffer = new VertexBuffer(); be_makeCylinder(bufferBuilder, 16, 50, 100); bufferBuilder.end(); buffer.upload(bufferBuilder); @@ -255,7 +270,8 @@ public class WorldRendererMixin { buffer.close(); } - buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + buffer = new VertexBuffer(); be_makeCylinder(bufferBuilder, 16, 50, 70); bufferBuilder.end(); buffer.upload(bufferBuilder); @@ -265,7 +281,7 @@ public class WorldRendererMixin { private void be_makeStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { Random random = new Random(seed); - buffer.begin(7, DefaultVertexFormat.POSITION); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION); for (int i = 0; i < count; ++i) { double posX = random.nextDouble() * 2.0 - 1.0; @@ -308,7 +324,7 @@ public class WorldRendererMixin { private void be_makeUVStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { Random random = new Random(seed); - buffer.begin(7, DefaultVertexFormat.POSITION_TEX); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); for (int i = 0; i < count; ++i) { double posX = random.nextDouble() * 2.0 - 1.0; @@ -356,7 +372,7 @@ public class WorldRendererMixin { private void be_makeFarFog(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { Random random = new Random(seed); - buffer.begin(7, DefaultVertexFormat.POSITION_TEX); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); for (int i = 0; i < count; ++i) { double posX = random.nextDouble() * 2.0 - 1.0; @@ -406,7 +422,7 @@ public class WorldRendererMixin { } private void be_makeCylinder(BufferBuilder buffer, int segments, double height, double radius) { - buffer.begin(7, DefaultVertexFormat.POSITION_TEX); + buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); for (int i = 0; i < segments; i ++) { double a1 = (double) i * Math.PI * 2.0 / (double) segments; double a2 = (double) (i + 1) * Math.PI * 2.0 / (double) segments; diff --git a/src/main/java/ru/betterend/registry/EndModelProviders.java b/src/main/java/ru/betterend/registry/EndModelProviders.java index c9d2d3e5..f0a4e35b 100644 --- a/src/main/java/ru/betterend/registry/EndModelProviders.java +++ b/src/main/java/ru/betterend/registry/EndModelProviders.java @@ -10,6 +10,7 @@ public class EndModelProviders { public final static CrystaliteArmorProvider CRYSTALITE_PROVIDER = new CrystaliteArmorProvider(); public final static void register() { + //TODO: Needs Fix in 1.17 throw new RuntimeException("Needs Fix for 1.17"); //ArmorRenderingRegistry.registerModel(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); //ArmorRenderingRegistry.registerTexture(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); From 10a9a817252a83c32d42b93fde92ae834f00d286 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 17:11:48 +0200 Subject: [PATCH 35/72] Various smaller updates --- Convert.java | 27 ++++-- .../client/render/PedestalItemRenderer.java | 2 +- .../byg/features/BigEtherTreeFeature.java | 6 +- .../NightshadeRedwoodTreeFeature.java | 9 +- .../byg/features/OldBulbisTreeFeature.java | 6 +- .../java/ru/betterend/item/ArmoredElytra.java | 2 +- .../ru/betterend/item/CrystaliteElytra.java | 2 +- .../item/model/CrystaliteArmorProvider.java | 4 +- .../item/model/CrystaliteChestplateModel.java | 89 ++++++++++++++----- .../mixin/common/ChorusPlantFeatureMixin.java | 20 +++-- .../mixin/common/EndPodiumFeatureMixin.java | 36 ++++---- .../betterend/mixin/common/EntityMixin.java | 19 ++-- .../registry/EndEntitiesRenders.java | 5 ++ .../world/features/BiomeIslandFeature.java | 4 +- .../world/features/CavePumpkinFeature.java | 6 +- .../world/features/CrashedShipFeature.java | 4 +- .../features/FullHeightScatterFeature.java | 6 +- .../features/InvertedScatterFeature.java | 6 +- .../world/features/NeonCactusFeature.java | 6 +- .../world/features/ScatterFeature.java | 4 +- .../world/features/SilkMothNestFeature.java | 6 +- .../world/features/WallScatterFeature.java | 6 +- .../world/features/bushes/BushFeature.java | 6 +- .../features/bushes/BushWithOuterFeature.java | 6 +- .../bushes/LargeAmaranitaFeature.java | 6 +- .../world/features/bushes/Lumecorn.java | 6 +- .../features/bushes/TenaneaBushFeature.java | 6 +- .../terrain/BigAuroraCrystalFeature.java | 4 +- .../features/terrain/DesertLakeFeature.java | 4 +- .../features/terrain/EndLakeFeature.java | 6 +- .../features/terrain/FallenPillarFeature.java | 4 +- .../terrain/FloatingSpireFeature.java | 6 +- .../features/terrain/IceStarFeature.java | 4 +- .../terrain/ObsidianBoulderFeature.java | 4 +- .../ObsidianPillarBasementFeature.java | 4 +- .../features/terrain/OreLayerFeature.java | 6 +- .../features/terrain/SingleBlockFeature.java | 6 +- .../terrain/SmaragdantCrystalFeature.java | 6 +- .../world/features/terrain/SpireFeature.java | 6 +- .../features/terrain/StalactiteFeature.java | 6 +- .../features/terrain/SulphurHillFeature.java | 4 +- .../terrain/SulphuricCaveFeature.java | 4 +- .../terrain/SulphuricLakeFeature.java | 15 ++-- .../features/terrain/SurfaceVentFeature.java | 12 +-- .../caves/CaveChunkPopulatorFeature.java | 10 ++- .../terrain/caves/EndCaveFeature.java | 20 +++-- .../terrain/caves/TunelCaveFeature.java | 22 ++--- .../features/trees/DragonTreeFeature.java | 9 +- .../trees/GiganticAmaranitaFeature.java | 9 +- .../features/trees/HelixTreeFeature.java | 9 +- .../features/trees/JellyshroomFeature.java | 9 +- .../features/trees/LacugroveFeature.java | 7 +- .../world/features/trees/LucerniaFeature.java | 26 +++--- .../trees/MossyGlowshroomFeature.java | 27 +++--- .../trees/PythadendronTreeFeature.java | 16 ++-- .../world/features/trees/TenaneaFeature.java | 25 +++--- .../features/trees/UmbrellaTreeFeature.java | 28 +++--- .../world/structures/piece/CavePiece.java | 2 +- .../piece/CrystalMountainPiece.java | 5 +- .../world/structures/piece/LakePiece.java | 2 +- .../world/structures/piece/MountainPiece.java | 6 +- .../world/structures/piece/NBTPiece.java | 2 +- .../piece/PaintedMountainPiece.java | 4 +- .../world/structures/piece/VoxelPiece.java | 4 +- 64 files changed, 372 insertions(+), 276 deletions(-) diff --git a/Convert.java b/Convert.java index 15ff66c6..58b4420c 100644 --- a/Convert.java +++ b/Convert.java @@ -119,10 +119,27 @@ public class Convert { p.setRotationAngle(x, y, z); } public void c (){ - ModelPart leftWing = new ModelPart(this, 22, 0, "leftWing"); - leftWing.addBox(-10.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); - ModelPart rightWing = new ModelPart(this, 22, 0, "rightWing"); - rightWing.mirror = true; - rightWing.addBox(0.0F, 0.0F, 0.0F, 10.0F, 20.0F, 2.0F, 1.0F); + boolean thinArms = true; + float scale = 0; + ModelPart body = new ModelPart(this, 16, 16, "body"); + body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F); + body.setPos(0.0F, 0.0F, 0.0F); + if (thinArms) { + ModelPart leftShoulder = new ModelPart(this, 41, 32, "leftShoulder"); + leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); + leftShoulder.setPos(5.0F, 2.5F, 0.0F); + leftShoulder.mirror = true; + ModelPart rightShoulder = new ModelPart(this, 41, 16, "rightShoulder"); + rightShoulder.addBox(-2.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); + rightShoulder.setPos(-5.0F, 2.5F, 10.0F); + } else { + ModelPart leftShoulder = new ModelPart(this, 40, 32, "leftShoulder"); + leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); + leftShoulder.setPos(5.0F, 2.0F, 0.0F); + leftShoulder.mirror = true; + ModelPart rightShoulder = new ModelPart(this, 40, 16, "rightShoulder"); + rightShoulder.addBox(-3.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); + rightShoulder.setPos(-5.0F, 2.0F, 10.0F); + } } } diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index 1002bb3d..94c4e175 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -27,7 +27,7 @@ import ru.betterend.registry.EndItems; public class PedestalItemRenderer implements BlockEntityRenderer { public PedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) { - super(dispatcher); + super(); } @Override diff --git a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java index 4bf26f6f..83ccf491 100644 --- a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java @@ -23,9 +23,9 @@ import ru.betterend.integration.Integrations; public class BigEtherTreeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java index 43cd3689..2ae7f845 100644 --- a/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java @@ -15,6 +15,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -35,9 +36,11 @@ public class NightshadeRedwoodTreeFeature extends DefaultFeature { private static final List BRANCH; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlockState log = Integrations.BYG.getDefaultState("nightshade_log"); diff --git a/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java index 265c46fc..1d4c7999 100644 --- a/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java @@ -38,9 +38,9 @@ public class OldBulbisTreeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; if (!world.getBlockState(pos.below(4)).is(TagAPI.GEN_TERRAIN)) diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index b1953792..1e163318 100644 --- a/src/main/java/ru/betterend/item/ArmoredElytra.java +++ b/src/main/java/ru/betterend/item/ArmoredElytra.java @@ -71,6 +71,6 @@ public class ArmoredElytra extends BaseArmorItem implements MultiModelItem, Fall @Environment(EnvType.CLIENT) public void registerModelPredicate() { FabricModelPredicateProviderRegistry.register(this, new ResourceLocation("broken"), - (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); + (itemStack, clientLevel, livingEntity, id) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); } } diff --git a/src/main/java/ru/betterend/item/CrystaliteElytra.java b/src/main/java/ru/betterend/item/CrystaliteElytra.java index 489eaf3f..a8995c5a 100644 --- a/src/main/java/ru/betterend/item/CrystaliteElytra.java +++ b/src/main/java/ru/betterend/item/CrystaliteElytra.java @@ -63,6 +63,6 @@ public class CrystaliteElytra extends CrystaliteArmor implements MultiModelItem, @Override public void registerModelPredicate() { FabricModelPredicateProviderRegistry.register(this, new ResourceLocation("broken"), - (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); + (itemStack, clientLevel, livingEntity, i) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index 1bba7c04..01442190 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -22,8 +22,8 @@ public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider private final static ResourceLocation FIRST_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_1.png"); private final static ResourceLocation SECOND_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_2.png"); private final static CrystaliteHelmetModel HELMET_MODEL = new CrystaliteHelmetModel(1.0F); - private final static CrystaliteChestplateModel CHEST_MODEL = new CrystaliteChestplateModel(1.0F, false); - private final static CrystaliteChestplateModel CHEST_MODEL_SLIM = new CrystaliteChestplateModel(1.0F, true); + private final static CrystaliteChestplateModel CHEST_MODEL = CrystaliteChestplateModel.regularModel(null); + private final static CrystaliteChestplateModel CHEST_MODEL_SLIM = CrystaliteChestplateModel.thinModel(null); private final static CrystaliteLeggingsModel LEGGINGS_MODEL = new CrystaliteLeggingsModel(1.0F); private final static CrystaliteBootsModel BOOTS_MODEL = new CrystaliteBootsModel(1.0F); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index 1942f9d6..dc4b673b 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -6,40 +6,85 @@ import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; +import ru.betterend.registry.EndEntitiesRenders; public class CrystaliteChestplateModel extends HumanoidModel { public ModelPart leftShoulder; public ModelPart rightShoulder; private final boolean thinArms; - - public CrystaliteChestplateModel(float scale, boolean thinArms) { - super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); - this.thinArms = thinArms; - this.body = new ModelPart(this, 16, 16); - this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F); - this.body.setPos(0.0F, 0.0F, 0.0F); + + public static LayerDefinition getRegularTexturedModelData(){ + return getTexturedModelData(1.0f, false); + } + + public static LayerDefinition getThinTexturedModelData(){ + return getTexturedModelData(1.0f, true); + } + + private static LayerDefinition getTexturedModelData(float scale, boolean thinArms) { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + CubeDeformation deformation = new CubeDeformation(scale + 0.25F); + PartDefinition body = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation) + .texOffs(16, 16), + PartPose.ZERO); + if (thinArms) { - this.leftShoulder = new ModelPart(this, 41, 32); - this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); - this.leftShoulder.setPos(5.0F, 2.5F, 0.0F); - this.leftShoulder.mirror = true; - this.rightShoulder = new ModelPart(this, 41, 16); - this.rightShoulder.addBox(-2.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); - this.rightShoulder.setPos(-5.0F, 2.5F, 10.0F); + deformation = new CubeDeformation(scale + 0.45F); + PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() + .mirror() + .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(40, 32), + PartPose.offset(5.0f, 2.0f, 0.0f)); + + PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() + .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(40, 16), + PartPose.offset(-5.0f, 2.0f, 10.0f)); } else { - this.leftShoulder = new ModelPart(this, 40, 32); - this.leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); - this.leftShoulder.setPos(5.0F, 2.0F, 0.0F); - this.leftShoulder.mirror = true; - this.rightShoulder = new ModelPart(this, 40, 16); - this.rightShoulder.addBox(-3.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); - this.rightShoulder.setPos(-5.0F, 2.0F, 10.0F); + deformation = new CubeDeformation(scale + 0.45F); + PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() + .mirror() + .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(40, 32), + PartPose.offset(5.0f, 2.0f, 0.0f)); + + PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() + .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(40, 16), + PartPose.offset(-5.0f, 2.0f, 10.0f)); } + return LayerDefinition.create(modelData, 64, 48); + } + + final ModelPart localBody; + + public static CrystaliteChestplateModel regularModel(EntityModelSet entityModelSet){ + if (entityModelSet==null) throw new RuntimeException("Need to get a ModelSet"); + return new CrystaliteChestplateModel(entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE), false); + } + + public static CrystaliteChestplateModel thinModel(EntityModelSet entityModelSet){ + if (entityModelSet==null) throw new RuntimeException("Need to get a ModelSet"); + return new CrystaliteChestplateModel(entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE_THIN), true); + } + + protected CrystaliteChestplateModel(ModelPart modelPart, boolean thinArms) { + super(modelPart, RenderType::entityTranslucent); + this.thinArms = thinArms; + localBody = modelPart.getChild(PartNames.BODY); + leftShoulder = modelPart.getChild("leftShoulder"); + rightShoulder = modelPart.getChild("rightShoulder"); } @Override @@ -56,7 +101,7 @@ public class CrystaliteChestplateModel extends HumanoidModel { @Override protected Iterable bodyParts() { - return Lists.newArrayList(body, leftShoulder, rightShoulder); + return Lists.newArrayList(localBody, leftShoulder, rightShoulder); } @Override diff --git a/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java index 044538ce..61974050 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java @@ -1,31 +1,33 @@ package ru.betterend.mixin.common; -import java.util.Random; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.ChorusFlowerBlock; import net.minecraft.world.level.block.PipeBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.ChorusPlantFeature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.blocks.VanillaBlockProperties; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Random; + @Mixin(ChorusPlantFeature.class) public class ChorusPlantFeatureMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void be_place(WorldGenLevel structureWorldAccess, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration defaultFeatureConfig, CallbackInfoReturnable info) { + private void be_place(FeaturePlaceContext featureConfig, CallbackInfoReturnable info) { + final Random random = featureConfig.random(); + final BlockPos blockPos = featureConfig.origin(); + final WorldGenLevel structureWorldAccess = featureConfig.level(); if (structureWorldAccess.isEmptyBlock(blockPos) && structureWorldAccess.getBlockState(blockPos.below()).is(EndBlocks.CHORUS_NYLIUM)) { ChorusFlowerBlock.generatePlant(structureWorldAccess, blockPos, random, MHelper.randRange(8, 16, random)); BlockState bottom = structureWorldAccess.getBlockState(blockPos); diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 20c73a27..33bcf523 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,7 +1,16 @@ package ru.betterend.mixin.common; -import java.util.Random; - +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.chunk.ChunkStatus; +import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.feature.EndPodiumFeature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -9,22 +18,13 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.NbtUtils; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.chunk.ChunkStatus; -import net.minecraft.world.level.levelgen.Heightmap.Types; -import net.minecraft.world.level.levelgen.feature.EndPodiumFeature; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; -import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.api.WorldDataAPI; import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Random; + @Mixin(EndPodiumFeature.class) public class EndPodiumFeatureMixin { @Final @@ -32,17 +32,19 @@ public class EndPodiumFeatureMixin { private boolean active; @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void be_place(WorldGenLevel world, ChunkGenerator generator, Random random, BlockPos blockPos, NoneFeatureConfiguration config, CallbackInfoReturnable info) { + private void be_place(FeaturePlaceContext featurePlaceContext, CallbackInfoReturnable info) { if (!GeneratorOptions.hasPortal()) { info.setReturnValue(false); info.cancel(); } else if (GeneratorOptions.replacePortal()) { - blockPos = be_updatePos(blockPos, world); + Random random = featurePlaceContext.random(); + WorldGenLevel world = featurePlaceContext.level(); + BlockPos blockPos = be_updatePos(featurePlaceContext.origin(), world); StructureTemplate structure = StructureHelper.readStructure(BetterEnd.makeID(active ? "portal/end_portal_active" : "portal/end_portal_inactive")); - BlockPos size = structure.getSize(); + Vec3i size = structure.getSize(); blockPos = blockPos.offset(-(size.getX() >> 1), -1, -(size.getZ() >> 1)); - structure.placeInWorldChunk(world, blockPos, new StructurePlaceSettings(), random); + structure.placeInWorld(world, blockPos, blockPos, new StructurePlaceSettings(), random, 2); info.setReturnValue(true); info.cancel(); } diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index 4f9372b8..6504ed98 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -22,8 +22,7 @@ public abstract class EntityMixin implements TeleportingEntity { public float yRot; @Shadow public float xRot; - @Shadow - public boolean removed; + @Shadow public Level level; @@ -40,11 +39,16 @@ public abstract class EntityMixin implements TeleportingEntity { @Shadow protected abstract PortalInfo findDimensionEntryPoint(ServerLevel destination); + @Shadow + protected abstract void removeAfterChangingDimensions(); + + @Shadow public abstract boolean isRemoved(); + private BlockPos exitPos; @Inject(method = "changeDimension", at = @At("HEAD"), cancellable = true) public void be_changeDimension(ServerLevel destination, CallbackInfoReturnable info) { - if (!removed && be_canTeleport() && level instanceof ServerLevel) { + if (!isRemoved() && be_canTeleport() && level instanceof ServerLevel) { unRide(); level.getProfiler().push("changeDimension"); level.getProfiler().push("reposition"); @@ -54,11 +58,14 @@ public abstract class EntityMixin implements TeleportingEntity { Entity entity = getType().create(destination); if (entity != null) { entity.restoreFrom(Entity.class.cast(this)); - entity.moveTo(teleportTarget.pos.x, teleportTarget.pos.y, teleportTarget.pos.z, teleportTarget.yRot, entity.xRot); + entity.moveTo(teleportTarget.pos.x, teleportTarget.pos.y, teleportTarget.pos.z, teleportTarget.yRot, entity.getXRot()); entity.setDeltaMovement(teleportTarget.speed); - destination.addFromAnotherDimension(entity); + //TODO: check if this works as intended in 1.17 + + destination.addDuringTeleport(entity); } - removed = true; + + this.removeAfterChangingDimensions(); level.getProfiler().pop(); ((ServerLevel) level).resetEmptyTime(); destination.resetEmptyTime(); diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 96b35fe2..e2920b67 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -15,6 +15,7 @@ import ru.betterend.entity.render.RendererEntityEndSlime; import ru.betterend.entity.render.RendererEntityShadowWalker; import ru.betterend.entity.render.SilkMothEntityRenderer; import ru.betterend.item.model.ArmoredElytraModel; +import ru.betterend.item.model.CrystaliteChestplateModel; public class EndEntitiesRenders { @@ -27,6 +28,8 @@ public class EndEntitiesRenders { //Not sure if this should go to another registry public static final ModelLayerLocation ARMORED_ELYTRA = registerMain("armored_elytra"); + public static final ModelLayerLocation CRYSTALITE_CHESTPLATE = registerMain("crystalite_chestplate"); + public static final ModelLayerLocation CRYSTALITE_CHESTPLATE_THIN = registerMain("crystalite_chestplate_thin"); public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); @@ -44,6 +47,8 @@ public class EndEntitiesRenders { EntityModelLayerRegistry.registerModelLayer(SILK_MOTH_MODEL, SilkMothEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(ARMORED_ELYTRA, ArmoredElytraModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_CHESTPLATE, CrystaliteChestplateModel::getRegularTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_CHESTPLATE_THIN, CrystaliteChestplateModel::getThinTexturedModelData); } private static void register(EntityType type, Class> renderer) { diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 91e5ccd5..d8e9f498 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -31,8 +31,8 @@ public class BiomeIslandFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); Biome biome = world.getBiome(pos); SurfaceBuilderConfiguration surfaceConfig = biome.getGenerationSettings().getSurfaceBuilderConfig(); BlockState topMaterial = surfaceConfig.getTopMaterial(); diff --git a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java index c0fb60d3..945f427d 100644 --- a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java +++ b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java @@ -16,9 +16,9 @@ import ru.betterend.registry.EndBlocks; public class CavePumpkinFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.above()).is(TagAPI.GEN_TERRAIN) || !world.isEmptyBlock(pos) || !world.isEmptyBlock(pos.below())) { return false; diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index a0f92fad..097db624 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -77,9 +77,9 @@ public class CrashedShipFeature extends NBTStructureFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); center = new BlockPos(((center.getX() >> 4) << 4) | 8, 128, ((center.getZ() >> 4) << 4) | 8); center = getGround(world, center); BoundingBox bounds = makeBox(center); diff --git a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java index 7e47884d..9f506a10 100644 --- a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java @@ -28,9 +28,9 @@ public abstract class FullHeightScatterFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos center = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); for (int y = maxY; y > minY; y--) { diff --git a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java index 404a4755..93362b72 100644 --- a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java @@ -28,9 +28,9 @@ public abstract class InvertedScatterFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos center = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); for (int y = maxY; y > minY; y--) { diff --git a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java index 6a31d307..ef31a912 100644 --- a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java +++ b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java @@ -15,9 +15,9 @@ import ru.betterend.registry.EndBlocks; public class NeonCactusFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); BlockState ground = world.getBlockState(pos.below()); if (!ground.is(EndBlocks.ENDSTONE_DUST) && !ground.is(EndBlocks.END_MOSS)) { return false; diff --git a/src/main/java/ru/betterend/world/features/ScatterFeature.java b/src/main/java/ru/betterend/world/features/ScatterFeature.java index d65c6845..4ff0a207 100644 --- a/src/main/java/ru/betterend/world/features/ScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/ScatterFeature.java @@ -58,9 +58,9 @@ public abstract class ScatterFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); center = getCenterGround(world, center); if (!canSpawn(world, center)) { diff --git a/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java b/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java index dbadb296..a0e551c2 100644 --- a/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java +++ b/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java @@ -36,9 +36,9 @@ public class SilkMothNestFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos center = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); POS.set(center); diff --git a/src/main/java/ru/betterend/world/features/WallScatterFeature.java b/src/main/java/ru/betterend/world/features/WallScatterFeature.java index 3bd6e23c..c73fb652 100644 --- a/src/main/java/ru/betterend/world/features/WallScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/WallScatterFeature.java @@ -28,9 +28,9 @@ public abstract class WallScatterFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos center = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); int maxY = world.getHeight(Heightmap.Types.WORLD_SURFACE, center.getX(), center.getZ()); int minY = BlocksHelper.upRay(world, new BlockPos(center.getX(), 0, center.getZ()), maxY); if (maxY < 10 || maxY < minY) { diff --git a/src/main/java/ru/betterend/world/features/bushes/BushFeature.java b/src/main/java/ru/betterend/world/features/bushes/BushFeature.java index 7ac27e3f..92611c31 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushFeature.java @@ -37,9 +37,9 @@ public class BushFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND) && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java b/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java index 09e87425..e50fdee5 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java @@ -41,9 +41,9 @@ public class BushWithOuterFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND) && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java b/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java index 6ae29c7d..1d75c1d8 100644 --- a/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java @@ -21,9 +21,9 @@ import ru.betterend.registry.EndBlocks; public class LargeAmaranitaFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java b/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java index b0d2e81b..e513327f 100644 --- a/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java +++ b/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java @@ -21,9 +21,9 @@ import ru.betterend.registry.EndBlocks; public class Lumecorn extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java b/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java index eba26562..5487d04e 100644 --- a/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java @@ -41,9 +41,9 @@ public class TenaneaBushFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java index 5587ea78..8e9ed62a 100644 --- a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java @@ -22,9 +22,9 @@ import ru.betterend.registry.EndBlocks; public class BigAuroraCrystalFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); int maxY = pos.getY() + BlocksHelper.upRay(world, pos, 16); int minY = pos.getY() - BlocksHelper.downRay(world, pos, 16); diff --git a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java index 3ffbf476..b843d16d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -27,9 +27,9 @@ public class DesertLakeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos blockPos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(8.0, 15.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 48734de6..54c1b903 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -27,9 +27,9 @@ public class EndLakeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos blockPos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos blockPos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(10.0, 20.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); int dist = MHelper.floor(radius); diff --git a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java index 8a1a518a..8e387bfe 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java @@ -26,9 +26,9 @@ import ru.betterend.registry.EndBlocks; public class FallenPillarFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java index 63540189..00bae11b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -24,10 +24,10 @@ import ru.betterend.registry.EndFeatures; public class FloatingSpireFeature extends SpireFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); - ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); + final WorldGenLevel world = featureConfig.level(); + final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); int minY = getYOnSurface(world, pos.getX(), pos.getZ()); int y = minY > 57 ? MHelper.floor(MHelper.randRange(minY, minY * 2, random) * 0.5F + 32) : MHelper.randRange(64, 192, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java index 34a4f0f7..565b862e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java @@ -36,9 +36,9 @@ public class IceStarFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java index 624f3ac1..0616e35e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java @@ -23,9 +23,9 @@ import ru.betterend.registry.EndBlocks; public class ObsidianBoulderFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java index 1551b04d..2c4db528 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java @@ -26,9 +26,9 @@ import java.util.Random; public class ObsidianPillarBasementFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(5)).is(TagAPI.GEN_TERRAIN)) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java index 15348622..b045ce0e 100644 --- a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java @@ -37,9 +37,9 @@ public class OreLayerFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); float radius = this.radius * 0.5F; int r = MHelper.floor(radius + 1); int posX = MHelper.randRange(Math.max(r - 16, 0), Math.min(31 - r, 15), random) + pos.getX(); diff --git a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java index 87cc3f4b..b652985d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java @@ -23,9 +23,9 @@ public class SingleBlockFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java index 56749973..f63d9c19 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java @@ -19,9 +19,9 @@ import ru.betterend.registry.EndBlocks; public class SmaragdantCrystalFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.GEN_TERRAIN)) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java index 16d3d359..4b92b35d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -34,10 +34,10 @@ public class SpireFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); - ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); + final WorldGenLevel world = featureConfig.level(); + final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 10 || !world.getBlockState(pos.below(3)).is(TagAPI.GEN_TERRAIN) || !world.getBlockState(pos.below(6)).is(TagAPI.GEN_TERRAIN)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java index 5c6f1a01..bf018b8b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java @@ -30,9 +30,9 @@ public class StalactiteFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!isGround(world.getBlockState(ceiling ? pos.above() : pos.below()).getBlock())) { return false; } diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java index 59c362ef..d81440eb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java @@ -21,9 +21,9 @@ import ru.betterend.registry.EndBlocks; public class SulphurHillFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 57 || pos.getY() > 70) { return false; diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java index cbdd8e7c..365c89c8 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -34,9 +34,9 @@ public class SulphuricCaveFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { - Random random = featureConfig.random(); + final Random random = featureConfig.random(); BlockPos pos = featureConfig.origin(); - WorldGenLevel world = featureConfig.level(); + final WorldGenLevel world = featureConfig.level(); int radius = MHelper.randRange(10, 30, random); int top = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); diff --git a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java index 07d49e00..7e3ba1b0 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,17 +1,13 @@ package ru.betterend.world.features.terrain; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Fluids; import ru.bclib.api.TagAPI; @@ -23,13 +19,18 @@ import ru.betterend.blocks.SulphurCrystalBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.Random; +import java.util.Set; + public class SulphuricLakeFeature extends DefaultFeature { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + BlockPos blockPos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); blockPos = getPosOnSurfaceWG(world, blockPos); if (blockPos.getY() < 57) { diff --git a/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java b/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java index 61bdc174..e3b98484 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java @@ -1,12 +1,10 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -15,10 +13,14 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.HydrothermalVentBlock; import ru.betterend.registry.EndBlocks; +import java.util.Random; + public class SurfaceVentFeature extends DefaultFeature { @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); pos = getPosOnSurface(world, new BlockPos(pos.getX() + random.nextInt(16), pos.getY(), pos.getZ() + random.nextInt(16))); if (!world.getBlockState(pos.below(3)).is(TagAPI.GEN_TERRAIN)) { diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index 00d5f28a..55c9c377 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -29,7 +30,10 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); Set floorPositions = Sets.newHashSet(); Set ceilPositions = Sets.newHashSet(); int sx = (pos.getX() >> 4) << 4; @@ -111,7 +115,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(world, null, random, pos.above(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } } }); @@ -127,7 +131,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(world, null, random, pos.below(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 61abf3ce..9d2bc596 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -1,12 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.List; -import java.util.Random; -import java.util.Set; - import com.google.common.collect.Lists; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -15,9 +10,9 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; @@ -30,6 +25,10 @@ import ru.betterend.registry.EndBiomes; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.List; +import java.util.Random; +import java.util.Set; + public abstract class EndCaveFeature extends DefaultFeature { protected static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); protected static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); @@ -37,7 +36,10 @@ public abstract class EndCaveFeature extends DefaultFeature { private static final Vec3i[] SPHERE; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (pos.getX() * pos.getX() + pos.getZ() * pos.getZ() <= 2500) { return false; } @@ -94,7 +96,7 @@ public abstract class EndCaveFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(world, null, random, pos.above(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } } }); @@ -110,7 +112,7 @@ public abstract class EndCaveFeature extends DefaultFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(world, null, random, pos.below(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 24cbea5a..42ee724b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -1,13 +1,7 @@ package ru.betterend.world.features.terrain.caves; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - import com.google.common.collect.Maps; import com.google.common.collect.Sets; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -17,9 +11,9 @@ import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkAccess; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; @@ -29,6 +23,11 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.world.biome.cave.EndCaveBiome; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + public class TunelCaveFeature extends EndCaveFeature { private Set generate(WorldGenLevel world, BlockPos center, Random random) { int cx = center.getX() >> 4; @@ -107,7 +106,10 @@ public class TunelCaveFeature extends EndCaveFeature { } @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (pos.getX() * pos.getX() + pos.getZ() * pos.getZ() <= 2500) { return false; } @@ -189,7 +191,7 @@ public class TunelCaveFeature extends EndCaveFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(world, null, random, pos.above(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } } }); @@ -206,7 +208,7 @@ public class TunelCaveFeature extends EndCaveFeature { if (density > 0 && random.nextFloat() <= density) { Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(world, null, random, pos.below(), null); + feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } } }); diff --git a/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java index b03576fe..d41dab55 100644 --- a/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -42,9 +43,11 @@ public class DragonTreeFeature extends DefaultFeature { private static final List ROOT; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(10, 25, random); diff --git a/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java b/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java index 849cb05e..33853a15 100644 --- a/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java @@ -15,6 +15,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -33,9 +34,11 @@ public class GiganticAmaranitaFeature extends DefaultFeature { private static final Function POST; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(5, 10, random); diff --git a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java index 038ae0fc..90b07868 100644 --- a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java @@ -13,6 +13,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.phys.AABB; import ru.bclib.api.TagAPI; @@ -34,9 +35,11 @@ public class HelixTreeFeature extends DefaultFeature { private static final Function POST; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlocksHelper.setWithoutUpdate(world, pos, AIR); diff --git a/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java index 3680e707..8bcd9e6e 100644 --- a/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java @@ -12,6 +12,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -33,9 +34,11 @@ public class JellyshroomFeature extends DefaultFeature { private static final List ROOT; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlockState bark = EndBlocks.JELLYSHROOM.bark.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java index 9485d5ce..4f916282 100644 --- a/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java @@ -13,6 +13,7 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -35,8 +36,10 @@ public class LacugroveFeature extends DefaultFeature { private static final Function POST; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; diff --git a/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java b/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java index b8a8ffc6..b01e66ee 100644 --- a/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java @@ -1,30 +1,21 @@ package ru.betterend.world.features.trees; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - import com.google.common.collect.Lists; import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.sdf.SDF; -import ru.bclib.sdf.operator.SDFDisplacement; -import ru.bclib.sdf.operator.SDFScale; -import ru.bclib.sdf.operator.SDFScale3D; -import ru.bclib.sdf.operator.SDFSubtraction; -import ru.bclib.sdf.operator.SDFTranslate; +import ru.bclib.sdf.operator.*; import ru.bclib.sdf.primitive.SDFSphere; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -34,6 +25,10 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + public class LucerniaFeature extends DefaultFeature { private static final Direction[] DIRECTIONS = Direction.values(); private static final Function REPLACE; @@ -42,9 +37,12 @@ public class LucerniaFeature extends DefaultFeature { private static final List ROOT; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + final NoneFeatureConfiguration config = featureConfig.config(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(12, 20, random); diff --git a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java index fd076dbc..abea454d 100644 --- a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java @@ -1,29 +1,16 @@ package ru.betterend.world.features.trees; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; import ru.bclib.sdf.SDF; -import ru.bclib.sdf.operator.SDFBinary; -import ru.bclib.sdf.operator.SDFCoordModify; -import ru.bclib.sdf.operator.SDFFlatWave; -import ru.bclib.sdf.operator.SDFScale; -import ru.bclib.sdf.operator.SDFScale3D; -import ru.bclib.sdf.operator.SDFSmoothUnion; -import ru.bclib.sdf.operator.SDFSubtraction; -import ru.bclib.sdf.operator.SDFTranslate; -import ru.bclib.sdf.operator.SDFUnion; +import ru.bclib.sdf.operator.*; import ru.bclib.sdf.primitive.SDFCappedCone; import ru.bclib.sdf.primitive.SDFPrimitive; import ru.bclib.sdf.primitive.SDFSphere; @@ -36,6 +23,10 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + public class MossyGlowshroomFeature extends DefaultFeature { private static final Function REPLACE; private static final Vector3f CENTER = new Vector3f(); @@ -49,8 +40,10 @@ public class MossyGlowshroomFeature extends DefaultFeature { private static final SDFPrimitive ROOTS; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, - NoneFeatureConfiguration featureConfig) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos blockPos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); BlockState down = world.getBlockState(blockPos.below()); if (!down.is(EndBlocks.END_MYCELIUM) && !down.is(EndBlocks.END_MOSS)) return false; diff --git a/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java index 178bc53c..a3b24fda 100644 --- a/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java @@ -1,18 +1,13 @@ package ru.betterend.world.features.trees; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -30,13 +25,20 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + public class PythadendronTreeFeature extends DefaultFeature { private static final Function REPLACE; private static final Function IGNORE; private static final Function POST; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); if (world.getBlockState(pos.below()).getBlock() != EndBlocks.CHORUS_NYLIUM) { return false; } diff --git a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java index 7f9c7ecb..9a1016a0 100644 --- a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java @@ -1,30 +1,21 @@ package ru.betterend.world.features.trees; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - import com.google.common.collect.Lists; import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.sdf.SDF; -import ru.bclib.sdf.operator.SDFDisplacement; -import ru.bclib.sdf.operator.SDFScale; -import ru.bclib.sdf.operator.SDFScale3D; -import ru.bclib.sdf.operator.SDFSubtraction; -import ru.bclib.sdf.operator.SDFTranslate; +import ru.bclib.sdf.operator.*; import ru.bclib.sdf.primitive.SDFSphere; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -34,6 +25,10 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + public class TenaneaFeature extends DefaultFeature { private static final Direction[] DIRECTIONS = Direction.values(); private static final Function REPLACE; @@ -41,9 +36,11 @@ public class TenaneaFeature extends DefaultFeature { private static final List SPLINE; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(7, 10, random); diff --git a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java index f2f7366e..db947168 100644 --- a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java @@ -1,30 +1,19 @@ package ru.betterend.world.features.trees; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - import com.google.common.collect.Lists; import com.mojang.math.Vector3f; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; import ru.bclib.sdf.SDF; -import ru.bclib.sdf.operator.SDFFlatWave; -import ru.bclib.sdf.operator.SDFScale; -import ru.bclib.sdf.operator.SDFScale3D; -import ru.bclib.sdf.operator.SDFSmoothUnion; -import ru.bclib.sdf.operator.SDFSubtraction; -import ru.bclib.sdf.operator.SDFTranslate; -import ru.bclib.sdf.operator.SDFUnion; +import ru.bclib.sdf.operator.*; import ru.bclib.sdf.primitive.SDFSphere; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; @@ -34,15 +23,22 @@ import ru.betterend.blocks.UmbrellaTreeClusterBlock; import ru.betterend.blocks.UmbrellaTreeMembraneBlock; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + public class UmbrellaTreeFeature extends DefaultFeature { private static final Function REPLACE; private static final List SPLINE; private static final List ROOT; @Override - public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, - NoneFeatureConfiguration config) { - if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) + public boolean place(FeaturePlaceContext featureConfig) { + final Random random = featureConfig.random(); + final BlockPos pos = featureConfig.origin(); + final WorldGenLevel world = featureConfig.level(); + final NoneFeatureConfiguration config = featureConfig.config(); + if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; BlockState wood = EndBlocks.UMBRELLA_TREE.bark.defaultBlockState(); diff --git a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java index 258b3ab4..86b9220b 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -33,7 +33,7 @@ public class CavePiece extends BasePiece { makeBoundingBox(); } - public CavePiece(StructureManager manager, CompoundTag tag) { + public CavePiece(ServerLevel serverLevel, CompoundTag tag) { super(EndStructures.CAVE_PIECE, tag); makeBoundingBox(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java index e7a77628..9fb60aab 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -5,6 +5,7 @@ import java.util.Random; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.nbt.CompoundTag; +import net.minecraft.server.level.ServerLevel; import net.minecraft.util.Mth; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; @@ -32,8 +33,8 @@ public class CrystalMountainPiece extends MountainPiece { top = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } - public CrystalMountainPiece(StructureManager manager, CompoundTag tag) { - super(EndStructures.MOUNTAIN_PIECE, manager, tag); + public CrystalMountainPiece(ServerLevel serverLevel, CompoundTag tag) { + super(EndStructures.MOUNTAIN_PIECE, serverLevel, tag); } @Override diff --git a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java index 5a2e10cb..e4a17575 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -59,7 +59,7 @@ public class LakePiece extends BasePiece { makeBoundingBox(); } - public LakePiece(StructureManager manager, CompoundTag tag) { + public LakePiece(ServerLevel serverLevel, CompoundTag tag) { super(EndStructures.LAKE_PIECE, tag); makeBoundingBox(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java index 2521d869..791d9ff3 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -48,7 +48,7 @@ public abstract class MountainPiece extends BasePiece { makeBoundingBox(); } - public MountainPiece(StructurePieceType type, StructureManager manager, CompoundTag tag) { + public MountainPiece(StructurePieceType type, ServerLevel serverLevel, CompoundTag tag) { super(type, tag); makeBoundingBox(); } @@ -130,9 +130,11 @@ public abstract class MountainPiece extends BasePiece { private void makeBoundingBox() { int minX = MHelper.floor(center.getX() - radius); + int minY = MHelper.floor(center.getY() - radius); int minZ = MHelper.floor(center.getZ() - radius); int maxX = MHelper.floor(center.getX() + radius + 1); + int maxY = MHelper.floor(center.getY() + radius + 1); int maxZ = MHelper.floor(center.getZ() + radius + 1); - this.boundingBox = new BoundingBox(minX, minZ, maxX, maxZ); + this.boundingBox = new BoundingBox(minX, minY, minZ, maxX, maxY, maxZ); } } diff --git a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java index a4cd0e32..31710bfa 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -43,7 +43,7 @@ public class NBTPiece extends BasePiece { makeBoundingBox(); } - public NBTPiece(StructureManager manager, CompoundTag tag) { + public NBTPiece(ServerLevel serverLevel, CompoundTag tag) { super(EndStructures.NBT_PIECE, tag); makeBoundingBox(); } diff --git a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java index f3029f74..c10e9740 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -29,8 +29,8 @@ public class PaintedMountainPiece extends MountainPiece { this.slises = slises; } - public PaintedMountainPiece(StructureManager manager, CompoundTag tag) { - super(EndStructures.PAINTED_MOUNTAIN_PIECE, manager, tag); + public PaintedMountainPiece(ServerLevel serverLevel, CompoundTag tag) { + super(EndStructures.PAINTED_MOUNTAIN_PIECE, serverLevel, tag); } @Override diff --git a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java index 67c0e2f7..5209c40e 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -25,13 +25,13 @@ public class VoxelPiece extends BasePiece { this.boundingBox = world.getBounds(); } - public VoxelPiece(StructureManager manager, CompoundTag tag) { + public VoxelPiece(ServerLevel level, CompoundTag tag) { super(EndStructures.VOXEL_PIECE, tag); this.boundingBox = world.getBounds(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag compoundTag) { + protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { tag.put("world", world.toBNT()); } From 371d491e5f7df141214590ac08559fd4ccf07c03 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 17:32:02 +0200 Subject: [PATCH 36/72] Updated Armor Models --- Convert.java | 41 ++++++++-------- .../item/model/CrystaliteBootsModel.java | 34 +++++++++---- .../item/model/CrystaliteHelmetModel.java | 26 +++++++--- .../item/model/CrystaliteLeggingsModel.java | 48 ++++++++++++++----- 4 files changed, 102 insertions(+), 47 deletions(-) diff --git a/Convert.java b/Convert.java index 58b4420c..8c72c762 100644 --- a/Convert.java +++ b/Convert.java @@ -8,6 +8,7 @@ class ModelPart { float x=0, y=0, z=0, rx=0, ry=0, rz=0; int u=0, v=0; float bx=0,by=0,bz=0,ba=0,bb=0,bc=0; + float scale = 1; boolean hadBox = false; @@ -55,6 +56,7 @@ class ModelPart { ba=a; bb=b; bc=c; + scale = _d; hadBox = true; return this; } @@ -71,11 +73,20 @@ class ModelPart { } public String toString(){ + String s = ""; String pName = parent==null?"modelPartData":parent.name; - String s = "PartDefinition " + name + " = "; + if (scale!=1){ + s += "CubeDeformation deformation_"+name+" = new CubeDeformation("+scale+"f);\n"; + } + s += "PartDefinition " + name + " = "; s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n"; if (this.mirror) s+= ".mirror()\n"; - if (this.hadBox) s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f)\n"; + if (this.hadBox) { + if (scale!=1) + s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f, deformation_"+name+")\n"; + else + s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f)\n"; + } s+= ".texOffs("+u+", "+v+"),\n"; if (x==0 && y==0 && z==0 && rx==0 && ry==0 && rz==0){ s+= "PartPose.ZERO"; @@ -119,27 +130,15 @@ public class Convert { p.setRotationAngle(x, y, z); } public void c (){ - boolean thinArms = true; float scale = 0; ModelPart body = new ModelPart(this, 16, 16, "body"); - body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale + 0.25F); + body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); body.setPos(0.0F, 0.0F, 0.0F); - if (thinArms) { - ModelPart leftShoulder = new ModelPart(this, 41, 32, "leftShoulder"); - leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); - leftShoulder.setPos(5.0F, 2.5F, 0.0F); - leftShoulder.mirror = true; - ModelPart rightShoulder = new ModelPart(this, 41, 16, "rightShoulder"); - rightShoulder.addBox(-2.0F, -2.5F, -2.0F, 3.0F, 12.0F, 4.0F, scale + 0.35F); - rightShoulder.setPos(-5.0F, 2.5F, 10.0F); - } else { - ModelPart leftShoulder = new ModelPart(this, 40, 32, "leftShoulder"); - leftShoulder.addBox(-1.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); - leftShoulder.setPos(5.0F, 2.0F, 0.0F); - leftShoulder.mirror = true; - ModelPart rightShoulder = new ModelPart(this, 40, 16, "rightShoulder"); - rightShoulder.addBox(-3.0F, -2.5F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.45F); - rightShoulder.setPos(-5.0F, 2.0F, 10.0F); - } + ModelPart leftLeg = new ModelPart(this, 0, 32, "leftLeg"); + leftLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); + leftLeg.setPos(1.9F, 12.0F, 0.0F); + ModelPart rightLeg = new ModelPart(this, 0, 16, "rightLeg"); + rightLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); + rightLeg.setPos(-1.9F, 12.0F, 0.0F); } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java index d1a37fde..bdf20f12 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java @@ -6,6 +6,8 @@ import com.google.common.collect.Lists; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; @@ -13,15 +15,31 @@ public class CrystaliteBootsModel extends HumanoidModel { public ModelPart leftBoot; public ModelPart rightBoot; + + public static LayerDefinition getTexturedModelData() { + final float scale = 1.0f; + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + CubeDeformation deformation = new CubeDeformation(scale + 0.25f); + + modelPartData.addOrReplaceChild("leftBoot", CubeListBuilder.create() + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(0, 32), + PartPose.offset(1.9f, 12.0f, 0.0f)); + + modelPartData.addOrReplaceChild("rightBoot", CubeListBuilder.create() + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(0, 16), + PartPose.offset(-1.9f, 12.0f, 0.0f)); + + return LayerDefinition.create(modelData, 64, 48); + } - public CrystaliteBootsModel(float scale) { - super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); - this.leftBoot = new ModelPart(this, 0, 32); - this.leftBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); - this.leftBoot.setPos(1.9F, 12.0F, 0.0F); - this.rightBoot = new ModelPart(this, 0, 16); - this.rightBoot.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale + 0.25F); - this.rightBoot.setPos(-1.9F, 12.0F, 0.0F); + public CrystaliteBootsModel(ModelPart modelPart) { + super(modelPart, RenderType::entityTranslucent); + + leftBoot = modelPart.getChild("leftBoot"); + rightBoot = modelPart.getChild("rightBoot"); } @Override diff --git a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java index 3513c2f4..f84b4eba 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java @@ -8,17 +8,31 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; @Environment(EnvType.CLIENT) public class CrystaliteHelmetModel extends HumanoidModel { + final ModelPart myHat; + public static LayerDefinition getTexturedModelData() { + final float scale = 1.0f; + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + CubeDeformation deformation_hat = new CubeDeformation(scale + 0.5f); + PartDefinition hat = modelPartData.addOrReplaceChild(PartNames.HAT, CubeListBuilder.create() + .addBox(-4.0f, -8.0f, -4.0f, 8.0f, 8.0f, 8.0f, deformation_hat) + .texOffs(0, 0), + PartPose.ZERO); - public CrystaliteHelmetModel(float scale) { - super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); - this.hat = new ModelPart(this, 0, 0); - this.hat.addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, scale + 0.5F); - this.hat.setPos(0.0F, 0.0F, 0.0F); + return LayerDefinition.create(modelData, 64, 48); + } + public CrystaliteHelmetModel(ModelPart modelPart) { + super(modelPart, RenderType::entityTranslucent); + + myHat = modelPart.getChild(PartNames.HAT); } @Override @@ -28,6 +42,6 @@ public class CrystaliteHelmetModel extends HumanoidModel { @Override protected Iterable bodyParts() { - return Lists.newArrayList(hat); + return Lists.newArrayList(myHat); } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java index 54772ebd..6641834c 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java @@ -6,22 +6,46 @@ import com.google.common.collect.Lists; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartNames; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; public class CrystaliteLeggingsModel extends HumanoidModel { + public static LayerDefinition getTexturedModelData() { + float scale = 1.0f; + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + CubeDeformation deformation = new CubeDeformation(scale); + modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() + .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation) + .texOffs(16, 16), + PartPose.ZERO); - public CrystaliteLeggingsModel(float scale) { - super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); - this.body = new ModelPart(this, 16, 16); - this.body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); - this.body.setPos(0.0F, 0.0F, 0.0F); - this.leftLeg = new ModelPart(this, 0, 32); - this.leftLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); - this.leftLeg.setPos(1.9F, 12.0F, 0.0F); - this.rightLeg = new ModelPart(this, 0, 16); - this.rightLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); - this.rightLeg.setPos(-1.9F, 12.0F, 0.0F); + modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(0, 32), + PartPose.offset(1.9f, 12.0f, 0.0f)); + + modelPartData.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create() + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) + .texOffs(0, 16), + PartPose.offset(-1.9f, 12.0f, 0.0f)); + + return LayerDefinition.create(modelData, 64, 48); + } + + final ModelPart myBody; + final ModelPart myLeftLeg; + final ModelPart myRightLeg; + + public CrystaliteLeggingsModel(ModelPart modelPart) { + super(modelPart, RenderType::entityTranslucent); + + myBody = modelPart.getChild(PartNames.BODY); + myLeftLeg = modelPart.getChild(PartNames.LEFT_LEG); + myRightLeg = modelPart.getChild(PartNames.RIGHT_LEG); } @Override @@ -31,6 +55,6 @@ public class CrystaliteLeggingsModel extends HumanoidModel { @Override protected Iterable bodyParts() { - return Lists.newArrayList(body, rightLeg, leftLeg); + return Lists.newArrayList(myBody, myRightLeg, myLeftLeg); } } From aca43764ad7dbff8e3c2e2db6ea512dfa60fdcf1 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 17:57:53 +0200 Subject: [PATCH 37/72] Updated `PedestalItemRenderer` --- .../java/ru/betterend/client/render/PedestalItemRenderer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index 94c4e175..6320eab7 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -10,6 +10,8 @@ import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.block.model.ItemTransforms; import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.resources.model.BakedModel; import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; @@ -26,7 +28,7 @@ import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) public class PedestalItemRenderer implements BlockEntityRenderer { - public PedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) { + public PedestalItemRenderer(BlockEntityRendererProvider.Context ctx) { super(); } From 78bf62bdca846b5f7c344022e410589ff34809e4 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 17:58:09 +0200 Subject: [PATCH 38/72] Biome Features Updated --- .../java/ru/betterend/item/EndBucketItem.java | 3 ++- .../mixin/common/ShuffelingListMixin.java | 26 +++++++++++++++++++ .../util/ShuffelingListExtended.java | 11 ++++++++ .../world/biome/cave/EndCaveBiome.java | 17 ++++++------ .../features/terrain/EndLakeFeature.java | 7 +++-- .../caves/CaveChunkPopulatorFeature.java | 4 +-- .../terrain/caves/EndCaveFeature.java | 4 +-- .../terrain/caves/TunelCaveFeature.java | 4 +-- 8 files changed, 57 insertions(+), 19 deletions(-) create mode 100644 src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java create mode 100644 src/main/java/ru/betterend/util/ShuffelingListExtended.java diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index bccc0c06..3886a75e 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -1,5 +1,6 @@ package ru.betterend.item; +import net.minecraft.sounds.SoundEvents; import net.minecraft.world.entity.EntityType; import net.minecraft.world.item.MobBucketItem; import net.minecraft.world.level.material.Fluids; @@ -8,6 +9,6 @@ import ru.betterend.registry.EndItems; public class EndBucketItem extends MobBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { - super(type, Fluids.WATER, EndItems.makeEndItemSettings().stacksTo(1)); + super(type, Fluids.WATER, SoundEvents.BUCKET_EMPTY, EndItems.makeEndItemSettings().stacksTo(1)); } } diff --git a/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java new file mode 100644 index 00000000..f1823dbc --- /dev/null +++ b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java @@ -0,0 +1,26 @@ +package ru.betterend.mixin.common; + +import net.minecraft.world.entity.ai.behavior.ShufflingList; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import ru.betterend.util.ShuffelingListExtended; + +import java.util.List; +import java.util.Random; +import java.util.stream.Stream; + +@Mixin(ShufflingList.class) +public abstract class ShuffelingListMixin implements ShuffelingListExtended { + @Shadow @Final protected List> entries; + + public boolean isEmpty() { + return this.entries.isEmpty(); + } + + @Shadow public abstract ShufflingList shuffle(); + + public U getOne() { + return this.shuffle().stream().findFirst().orElseThrow(RuntimeException::new); + } +} diff --git a/src/main/java/ru/betterend/util/ShuffelingListExtended.java b/src/main/java/ru/betterend/util/ShuffelingListExtended.java new file mode 100644 index 00000000..2e265ff3 --- /dev/null +++ b/src/main/java/ru/betterend/util/ShuffelingListExtended.java @@ -0,0 +1,11 @@ +package ru.betterend.util; + +import net.minecraft.world.entity.ai.behavior.ShufflingList; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Random; + +public interface ShuffelingListExtended { + public boolean isEmpty(); + public U getOne(); +} diff --git a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java index 79af7269..9f19ed15 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EndCaveBiome.java @@ -1,7 +1,5 @@ package ru.betterend.world.biome.cave; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.world.entity.ai.behavior.ShufflingList; import net.minecraft.world.level.biome.Biome.BiomeCategory; @@ -12,12 +10,15 @@ import ru.bclib.world.biomes.BCLBiomeDef; import ru.bclib.world.features.BCLFeature; import ru.betterend.BetterEnd; import ru.betterend.registry.EndSounds; +import ru.betterend.util.ShuffelingListExtended; import ru.betterend.world.biome.EndBiome; import ru.betterend.world.features.terrain.caves.CaveChunkPopulatorFeature; +import java.util.Random; + public class EndCaveBiome extends EndBiome { - private ShufflingList> floorFeatures = new ShufflingList>(); - private ShufflingList> ceilFeatures = new ShufflingList>(); + final private ShufflingList> floorFeatures = new ShufflingList<>(); + final private ShufflingList> ceilFeatures = new ShufflingList<>(); public EndCaveBiome(BCLBiomeDef definition) { super(makeDef(definition)); @@ -42,12 +43,12 @@ public class EndCaveBiome extends EndBiome { ceilFeatures.add(feature, weight); } - public Feature getFloorFeature(Random random) { - return floorFeatures.isEmpty() ? null : floorFeatures.getOne(random); + public Feature getFloorFeature() { + return ((ShuffelingListExtended>)floorFeatures).isEmpty() ? null : ((ShuffelingListExtended>)floorFeatures).getOne(); } - public Feature getCeilFeature(Random random) { - return ceilFeatures.isEmpty() ? null : ceilFeatures.getOne(random); + public Feature getCeilFeature() { + return ((ShuffelingListExtended>)ceilFeatures).isEmpty() ? null : ((ShuffelingListExtended>)ceilFeatures).getOne(); } public float getFloorDensity() { diff --git a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java index 54c1b903..3a0e2c25 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,13 +1,10 @@ package ru.betterend.world.features.terrain; -import java.util.Random; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; @@ -20,6 +17,8 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; +import java.util.Random; + public class EndLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); @@ -28,7 +27,7 @@ public class EndLakeFeature extends DefaultFeature { @Override public boolean place(FeaturePlaceContext featureConfig) { final Random random = featureConfig.random(); - final BlockPos blockPos = featureConfig.origin(); + BlockPos blockPos = featureConfig.origin(); final WorldGenLevel world = featureConfig.level(); double radius = MHelper.randRange(10.0, 20.0, random); double depth = radius * 0.5 * MHelper.randRange(0.8, 1.2, random); diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java index 55c9c377..da5274a6 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/CaveChunkPopulatorFeature.java @@ -113,7 +113,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { floorPositions.forEach((pos) -> { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -129,7 +129,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java index 9d2bc596..6c6509e1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/EndCaveFeature.java @@ -94,7 +94,7 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -110,7 +110,7 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } diff --git a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java index 42ee724b..c5acfec3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/caves/TunelCaveFeature.java @@ -189,7 +189,7 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(random); + Feature feature = biome.getFloorFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); } @@ -206,7 +206,7 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(random); + Feature feature = biome.getCeilFeature(); if (feature != null) { feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); } From 3fbacddf3cc6613b1a1f7fbea167e74e0f81406c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 18:54:22 +0200 Subject: [PATCH 39/72] Smaller UI updates --- .../client/gui/EndStoneSmelterScreen.java | 15 +++++++++------ .../client/gui/EndStoneSmelterScreenHandler.java | 5 +++++ .../client/gui/slot/SmelterOutputSlot.java | 3 +-- .../ru/betterend/item/tool/EndHammerItem.java | 4 +++- .../world/surface/SulphuricSurfaceBuilder.java | 10 +++++----- 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java index c030ed9f..a7f66c33 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java @@ -32,13 +32,14 @@ public class EndStoneSmelterScreen extends AbstractContainerScreen { - recipeBook.initVisuals(narrow); + leftPos = recipeBook.updateScreenPosition(width, imageWidth); + addRenderableWidget(new ImageButton(leftPos + 20, height / 2 - 49, 20, 18, 0, 0, 19, RECIPE_BUTTON_TEXTURE, (buttonWidget) -> { + recipeBook.initVisuals(); recipeBook.toggleVisibility(); - leftPos = recipeBook.updateScreenPosition(narrow, width, imageWidth); + leftPos = recipeBook.updateScreenPosition( width, imageWidth); ((ImageButton) buttonWidget).setPosition(leftPos + 20, height / 2 - 49); })); titleLabelX = (imageWidth - font.width(title)) / 2; @@ -109,8 +110,10 @@ public class EndStoneSmelterScreen extends AbstractContainerScreen { return RecipeBookType.BLAST_FURNACE; } + @Override + public boolean shouldMoveToInventory(int i) { + return i != this.getResultSlotIndex(); + } + @Override public boolean stillValid(Player player) { return inventory.stillValid(player); diff --git a/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java b/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java index 212eb179..3b4d0edc 100644 --- a/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java +++ b/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java @@ -28,10 +28,9 @@ public class SmelterOutputSlot extends Slot { return super.remove(amount); } - public ItemStack onTake(Player player, ItemStack stack) { + public void onTake(Player player, ItemStack stack) { this.checkTakeAchievements(stack); super.onTake(player, stack); - return stack; } protected void onQuickCraft(ItemStack stack, int amount) { diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index 0cef9ded..93e21ace 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -14,6 +14,7 @@ import net.fabricmc.fabric.api.tool.attribute.v1.DynamicAttributeTool; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.BlockTags; import net.minecraft.tags.Tag; import net.minecraft.util.Mth; import net.minecraft.world.entity.EquipmentSlot; @@ -40,7 +41,8 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, I private final Multimap attributeModifiers; public EndHammerItem(Tier material, float attackDamage, float attackSpeed, double knockback, Properties settings) { - super(attackDamage, attackSpeed, material, Sets.newHashSet(), settings); + //we override all methods that access BlockTags.MINEABLE_WITH_PICKAXE in the superclass, so this should not matter + super(attackDamage, attackSpeed, material, BlockTags.MINEABLE_WITH_PICKAXE, settings); Builder builder = ImmutableMultimap.builder(); builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", attackDamage + material.getAttackDamageBonus(), AttributeModifier.Operation.ADDITION)); diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java index 90841b95..59c2742e 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java @@ -19,19 +19,19 @@ public class SulphuricSurfaceBuilder extends SurfaceBuilder Date: Thu, 24 Jun 2021 19:21:26 +0200 Subject: [PATCH 40/72] Rendering fixes --- Convert.java | 32 ++++++++---- .../gui/EndStoneSmelterRecipeBookScreen.java | 3 +- .../client/render/EndCrystalRenderer.java | 29 +++++++++-- .../client/render/EternalCrystalRenderer.java | 49 ++++++++++++++++--- .../client/render/PedestalItemRenderer.java | 3 +- .../entity/model/CubozoaEntityModel.java | 1 - 6 files changed, 94 insertions(+), 23 deletions(-) diff --git a/Convert.java b/Convert.java index 8c72c762..3e7e914b 100644 --- a/Convert.java +++ b/Convert.java @@ -9,6 +9,8 @@ class ModelPart { int u=0, v=0; float bx=0,by=0,bz=0,ba=0,bb=0,bc=0; float scale = 1; + static int wd = 64; + static int hg = 32; boolean hadBox = false; @@ -24,6 +26,15 @@ class ModelPart { parts.add(this); } + ModelPart(int wd, int hg, int u, int v, String name){ + this.name = name; + this.u = u; + this.v = v; + ModelPart.wd = wd; + ModelPart.hg = hg; + parts.add(this); + } + ModelPart setPos(float x, float y, float z){ this.x=x; this.y=y; @@ -48,6 +59,9 @@ class ModelPart { this.v=v; return this; } + ModelPart addBox(float x, float y, float z, float a, float b, float c){ + return addBox(x, y, z, a, b, c, 1); + } ModelPart addBox(float x, float y, float z, float a, float b, float c, float _d){ bx=x; @@ -108,7 +122,7 @@ class ModelPart { System.out.println(p); System.out.println(); } - System.out.println("return LayerDefinition.create(modelData, 48, 48);"); + System.out.println("return LayerDefinition.create(modelData, "+wd+", "+hg+");"); System.out.println("}"); System.out.println(); @@ -131,14 +145,12 @@ public class Convert { } public void c (){ float scale = 0; - ModelPart body = new ModelPart(this, 16, 16, "body"); - body.addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, scale); - body.setPos(0.0F, 0.0F, 0.0F); - ModelPart leftLeg = new ModelPart(this, 0, 32, "leftLeg"); - leftLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); - leftLeg.setPos(1.9F, 12.0F, 0.0F); - ModelPart rightLeg = new ModelPart(this, 0, 16, "rightLeg"); - rightLeg.addBox(-2.0F, 0.0F, -2.0F, 4.0F, 12.0F, 4.0F, scale); - rightLeg.setPos(-1.9F, 12.0F, 0.0F); + ModelPart[] SHARDS = new ModelPart[4]; + SHARDS[0] = new ModelPart(16, 16, 2, 4, "SHARDS[0]").addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F); + SHARDS[1] = new ModelPart(16, 16, 2, 4, "SHARDS[1]").addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F); + SHARDS[2] = new ModelPart(16, 16, 2, 4, "SHARDS[2]").addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F); + SHARDS[3] = new ModelPart(16, 16, 2, 4, "SHARDS[3]").addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F); + ModelPart CORE = new ModelPart(16, 16, 0, 0, "CORE"); + CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F); } } diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java index 1ed760f5..7e1fe5a2 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java @@ -79,7 +79,8 @@ public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent int slotX = this.fuelSlot.x + x; int slotY = this.fuelSlot.y + y; GuiComponent.fill(matrices, slotX, slotY, slotX + 16, slotY + 16, 822018048); - this.minecraft.getItemRenderer().renderAndDecorateItem(minecraft.player, this.getFuel().getDefaultInstance(), slotX, slotY); + //TODO: test k=0 + this.minecraft.getItemRenderer().renderAndDecorateItem(minecraft.player, this.getFuel().getDefaultInstance(), slotX, slotY,0); RenderSystem.depthFunc(516); GuiComponent.fill(matrices, slotX, slotY, slotX + 16, slotY + 16, 822083583); RenderSystem.depthFunc(515); diff --git a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java index c75dfc93..7686b156 100644 --- a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java @@ -6,6 +6,11 @@ import com.mojang.math.Quaternion; import com.mojang.math.Vector3f; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -41,14 +46,30 @@ public class EndCrystalRenderer { CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY); matrices.popPose(); } + + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + modelPartData.addOrReplaceChild("FRAME", CubeListBuilder.create() + .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f) + .texOffs(0, 0), + PartPose.ZERO); + + modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() + .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f) + .texOffs(32, 0), + PartPose.ZERO); + + return LayerDefinition.create(modelData, 64, 32); + } static { END_CRYSTAL = RenderType.entityCutoutNoCull(CRYSTAL_TEXTURE); RenderType.entitySmoothCutout(CRYSTAL_BEAM_TEXTURE); SINE_45_DEGREES = (float) Math.sin(0.7853981633974483D); - FRAME = new ModelPart(64, 32, 0, 0); - FRAME.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F); - CORE = new ModelPart(64, 32, 32, 0); - CORE.addBox(-4.0F, -4.0F, -4.0F, 8.0F, 8.0F, 8.0F); + + ModelPart root = getTexturedModelData().bakeRoot(); + FRAME = root.getChild("FRAME"); + CORE = root.getChild("CORE"); } } diff --git a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java index f9100d9d..452ac2f5 100644 --- a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java @@ -5,6 +5,11 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Vector3f; import net.minecraft.client.model.geom.ModelPart; +import net.minecraft.client.model.geom.PartPose; +import net.minecraft.client.model.geom.builders.CubeListBuilder; +import net.minecraft.client.model.geom.builders.LayerDefinition; +import net.minecraft.client.model.geom.builders.MeshDefinition; +import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -56,15 +61,47 @@ public class EternalCrystalRenderer { return ColorUtil.toFloatArray(ColorUtil.color(r, g, b)); } + + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); + modelPartData.addOrReplaceChild("SHARDS_0", CubeListBuilder.create() + .addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f) + .texOffs(2, 4), + PartPose.ZERO); + + modelPartData.addOrReplaceChild("SHARDS_1", CubeListBuilder.create() + .addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f) + .texOffs(2, 4), + PartPose.ZERO); + + modelPartData.addOrReplaceChild("SHARDS_2", CubeListBuilder.create() + .addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f) + .texOffs(2, 4), + PartPose.ZERO); + + modelPartData.addOrReplaceChild("SHARDS_3", CubeListBuilder.create() + .addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f) + .texOffs(2, 4), + PartPose.ZERO); + + modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() + .addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f) + .texOffs(0, 0), + PartPose.ZERO); + + return LayerDefinition.create(modelData, 16, 16); + } static { RENDER_LAYER = RenderType.beaconBeam(BetterEnd.makeID("textures/entity/eternal_crystal.png"), true); SHARDS = new ModelPart[4]; - SHARDS[0] = new ModelPart(16, 16, 2, 4).addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F); - SHARDS[1] = new ModelPart(16, 16, 2, 4).addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F); - SHARDS[2] = new ModelPart(16, 16, 2, 4).addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F); - SHARDS[3] = new ModelPart(16, 16, 2, 4).addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F); - CORE = new ModelPart(16, 16, 0, 0); - CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F); + + ModelPart root = getTexturedModelData().bakeRoot(); + SHARDS[0] = root.getChild("SHARDS_0"); + SHARDS[1] = root.getChild("SHARDS_1"); + SHARDS[2] = root.getChild("SHARDS_2"); + SHARDS[3] = root.getChild("SHARDS_3"); + CORE = root.getChild("CORE"); } } diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index 6320eab7..b5164f1b 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -46,7 +46,8 @@ public class PedestalItemRenderer implements Bloc matrices.pushPose(); Minecraft minecraft = Minecraft.getInstance(); - BakedModel model = minecraft.getItemRenderer().getModel(activeItem, world, null); + //TODO: check i=0 + BakedModel model = minecraft.getItemRenderer().getModel(activeItem, world, null, 0); Vector3f translate = model.getTransforms().ground.translation; PedestalBlock pedestal = (PedestalBlock) state.getBlock(); matrices.translate(translate.x(), translate.y(), translate.z()); diff --git a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java index b01a5b9c..d0651499 100644 --- a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java @@ -106,7 +106,6 @@ public class CubozoaEntityModel extends BlockBenchModel { public CubozoaEntityModel(ModelPart modelPart) { super(RenderType::entityTranslucent); - tentacle = new ModelPart[TENTACLE_COUNT]; tentacle_center = new ModelPart[TENTACLE_COUNT]; From 539a574cca48fc849940d4d5e511966fa30dd9b2 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 19:30:53 +0200 Subject: [PATCH 41/72] Using `FabricBlockEntityTypeBuilder` --- .../ru/betterend/registry/EndBlockEntities.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndBlockEntities.java b/src/main/java/ru/betterend/registry/EndBlockEntities.java index 93535912..7157ebc0 100644 --- a/src/main/java/ru/betterend/registry/EndBlockEntities.java +++ b/src/main/java/ru/betterend/registry/EndBlockEntities.java @@ -1,5 +1,6 @@ package ru.betterend.registry; +import net.fabricmc.fabric.api.object.builder.v1.block.entity.FabricBlockEntityTypeBuilder; import net.minecraft.core.Registry; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntity; @@ -15,18 +16,20 @@ import ru.betterend.blocks.entities.PedestalBlockEntity; public class EndBlockEntities { public final static BlockEntityType END_STONE_SMELTER = registerBlockEntity(EndStoneSmelter.ID, - BlockEntityType.Builder.of(EndStoneSmelterBlockEntity::new, EndBlocks.END_STONE_SMELTER)); + FabricBlockEntityTypeBuilder.create(EndStoneSmelterBlockEntity::new, EndBlocks.END_STONE_SMELTER)); public final static BlockEntityType PEDESTAL = registerBlockEntity("pedestal", - BlockEntityType.Builder.of(PedestalBlockEntity::new, getPedestals())); + FabricBlockEntityTypeBuilder.create(PedestalBlockEntity::new, getPedestals())); public final static BlockEntityType ETERNAL_PEDESTAL = registerBlockEntity("eternal_pedestal", - BlockEntityType.Builder.of(EternalPedestalEntity::new, EndBlocks.ETERNAL_PEDESTAL)); + FabricBlockEntityTypeBuilder.create(EternalPedestalEntity::new, EndBlocks.ETERNAL_PEDESTAL)); public final static BlockEntityType INFUSION_PEDESTAL = registerBlockEntity("infusion_pedestal", - BlockEntityType.Builder.of(InfusionPedestalEntity::new, EndBlocks.INFUSION_PEDESTAL)); + FabricBlockEntityTypeBuilder.create(InfusionPedestalEntity::new, EndBlocks.INFUSION_PEDESTAL)); public final static BlockEntityType HYDROTHERMAL_VENT = registerBlockEntity("hydrother_malvent", - BlockEntityType.Builder.of(BlockEntityHydrothermalVent::new, EndBlocks.HYDROTHERMAL_VENT)); + FabricBlockEntityTypeBuilder.create(BlockEntityHydrothermalVent::new, EndBlocks.HYDROTHERMAL_VENT)); - public static BlockEntityType registerBlockEntity(String id, BlockEntityType.Builder builder) { + public static BlockEntityType registerBlockEntity(String id, FabricBlockEntityTypeBuilder builder) { return Registry.register(Registry.BLOCK_ENTITY_TYPE, BetterEnd.makeID(id), builder.build(null)); + + //return Registry.register(Registry.BLOCK_ENTITY_TYPE, BetterEnd.makeID(id), builder.build(null)); } public static void register() {} From 2d130fac96bb122300d579b2cf28a522c4475eb3 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 19:40:38 +0200 Subject: [PATCH 42/72] Make sure `CrystaliteArmorProvider` compiles --- .../item/model/CrystaliteArmorProvider.java | 15 ++++++++------- .../item/model/CrystaliteBootsModel.java | 6 ++++++ .../item/model/CrystaliteChestplateModel.java | 10 ++++------ .../item/model/CrystaliteHelmetModel.java | 8 ++++++++ .../item/model/CrystaliteLeggingsModel.java | 6 ++++++ .../betterend/registry/EndEntitiesRenders.java | 16 ++++++++-------- 6 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index 01442190..1e5b603b 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -19,15 +19,16 @@ import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider*/ { + //TODO: find new registry private final static ResourceLocation FIRST_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_1.png"); private final static ResourceLocation SECOND_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_2.png"); - private final static CrystaliteHelmetModel HELMET_MODEL = new CrystaliteHelmetModel(1.0F); - private final static CrystaliteChestplateModel CHEST_MODEL = CrystaliteChestplateModel.regularModel(null); - private final static CrystaliteChestplateModel CHEST_MODEL_SLIM = CrystaliteChestplateModel.thinModel(null); - private final static CrystaliteLeggingsModel LEGGINGS_MODEL = new CrystaliteLeggingsModel(1.0F); - private final static CrystaliteBootsModel BOOTS_MODEL = new CrystaliteBootsModel(1.0F); + private final static CrystaliteHelmetModel HELMET_MODEL = CrystaliteHelmetModel.createModel(null); + private final static CrystaliteChestplateModel CHEST_MODEL = CrystaliteChestplateModel.createRegularModel(null); + private final static CrystaliteChestplateModel CHEST_MODEL_SLIM = CrystaliteChestplateModel.createThinModel(null); + private final static CrystaliteLeggingsModel LEGGINGS_MODEL = CrystaliteLeggingsModel.createModel(null); + private final static CrystaliteBootsModel BOOTS_MODEL = CrystaliteBootsModel.createModel(null); - @Override + //@Override public @NotNull ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { if (!isStackValid(stack)) return defaultTexture; @@ -35,7 +36,7 @@ public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider return FIRST_LAYER; } - @Override + //@Override public @NotNull HumanoidModel getArmorModel(LivingEntity entity, ItemStack stack, EquipmentSlot slot, HumanoidModel defaultModel) { if (!isStackValid(stack)) return defaultModel; diff --git a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java index bdf20f12..7a9b90ff 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java @@ -5,11 +5,13 @@ import java.util.Collections; import com.google.common.collect.Lists; import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; +import ru.betterend.registry.EndEntitiesRenders; public class CrystaliteBootsModel extends HumanoidModel { @@ -34,6 +36,10 @@ public class CrystaliteBootsModel extends HumanoidModel { return LayerDefinition.create(modelData, 64, 48); } + + public static CrystaliteBootsModel createModel(EntityModelSet entityModelSet){ + return new CrystaliteBootsModel(entityModelSet==null?getTexturedModelData().bakeRoot():entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_BOOTS)); + } public CrystaliteBootsModel(ModelPart modelPart) { super(modelPart, RenderType::entityTranslucent); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index dc4b673b..51b705fe 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -69,14 +69,12 @@ public class CrystaliteChestplateModel extends HumanoidModel { final ModelPart localBody; - public static CrystaliteChestplateModel regularModel(EntityModelSet entityModelSet){ - if (entityModelSet==null) throw new RuntimeException("Need to get a ModelSet"); - return new CrystaliteChestplateModel(entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE), false); + public static CrystaliteChestplateModel createRegularModel(EntityModelSet entityModelSet){ + return new CrystaliteChestplateModel(entityModelSet==null?getRegularTexturedModelData().bakeRoot():entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE), false); } - public static CrystaliteChestplateModel thinModel(EntityModelSet entityModelSet){ - if (entityModelSet==null) throw new RuntimeException("Need to get a ModelSet"); - return new CrystaliteChestplateModel(entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE_THIN), true); + public static CrystaliteChestplateModel createThinModel(EntityModelSet entityModelSet){ + return new CrystaliteChestplateModel(entityModelSet==null?getThinTexturedModelData().bakeRoot():entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE_THIN), true); } protected CrystaliteChestplateModel(ModelPart modelPart, boolean thinArms) { diff --git a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java index f84b4eba..489d75e5 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java @@ -7,12 +7,14 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.PartNames; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; +import ru.betterend.registry.EndEntitiesRenders; @Environment(EnvType.CLIENT) public class CrystaliteHelmetModel extends HumanoidModel { @@ -29,6 +31,12 @@ public class CrystaliteHelmetModel extends HumanoidModel { return LayerDefinition.create(modelData, 64, 48); } + + public static CrystaliteHelmetModel createModel(EntityModelSet entityModelSet){ + return new CrystaliteHelmetModel(entityModelSet==null?getTexturedModelData().bakeRoot():entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_HELMET)); + } + + public CrystaliteHelmetModel(ModelPart modelPart) { super(modelPart, RenderType::entityTranslucent); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java index 6641834c..b8a7ecbc 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java @@ -5,12 +5,14 @@ import java.util.Collections; import com.google.common.collect.Lists; import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.PartNames; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; +import ru.betterend.registry.EndEntitiesRenders; public class CrystaliteLeggingsModel extends HumanoidModel { public static LayerDefinition getTexturedModelData() { @@ -40,6 +42,10 @@ public class CrystaliteLeggingsModel extends HumanoidModel { final ModelPart myLeftLeg; final ModelPart myRightLeg; + public static CrystaliteLeggingsModel createModel(EntityModelSet entityModelSet){ + return new CrystaliteLeggingsModel(entityModelSet==null?getTexturedModelData().bakeRoot():entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_LEGGINGS)); + } + public CrystaliteLeggingsModel(ModelPart modelPart) { super(modelPart, RenderType::entityTranslucent); diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index e2920b67..c91df925 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -8,14 +8,8 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.EntityType; import ru.betterend.BetterEnd; import ru.betterend.entity.model.*; -import ru.betterend.entity.render.RendererEntityCubozoa; -import ru.betterend.entity.render.RendererEntityDragonfly; -import ru.betterend.entity.render.RendererEntityEndFish; -import ru.betterend.entity.render.RendererEntityEndSlime; -import ru.betterend.entity.render.RendererEntityShadowWalker; -import ru.betterend.entity.render.SilkMothEntityRenderer; -import ru.betterend.item.model.ArmoredElytraModel; -import ru.betterend.item.model.CrystaliteChestplateModel; +import ru.betterend.entity.render.*; +import ru.betterend.item.model.*; public class EndEntitiesRenders { @@ -30,6 +24,9 @@ public class EndEntitiesRenders { public static final ModelLayerLocation ARMORED_ELYTRA = registerMain("armored_elytra"); public static final ModelLayerLocation CRYSTALITE_CHESTPLATE = registerMain("crystalite_chestplate"); public static final ModelLayerLocation CRYSTALITE_CHESTPLATE_THIN = registerMain("crystalite_chestplate_thin"); + public static final ModelLayerLocation CRYSTALITE_HELMET = registerMain("crystalite_helmet"); + public static final ModelLayerLocation CRYSTALITE_LEGGINGS = registerMain("crystalite_leggings"); + public static final ModelLayerLocation CRYSTALITE_BOOTS = registerMain("crystalite_boots"); public static void register() { register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class); @@ -49,6 +46,9 @@ public class EndEntitiesRenders { EntityModelLayerRegistry.registerModelLayer(ARMORED_ELYTRA, ArmoredElytraModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_CHESTPLATE, CrystaliteChestplateModel::getRegularTexturedModelData); EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_CHESTPLATE_THIN, CrystaliteChestplateModel::getThinTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_HELMET, CrystaliteHelmetModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_LEGGINGS, CrystaliteLeggingsModel::getTexturedModelData); + EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_BOOTS, CrystaliteBootsModel::getTexturedModelData); } private static void register(EntityType type, Class> renderer) { From 63b524af628c44d75a94ce411e5a89712e92e1cf Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 21:14:20 +0200 Subject: [PATCH 43/72] rei for 1.17 --- build.gradle | 7 +++---- gradle.properties | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 2227b888..852dd540 100644 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,7 @@ version = project.mod_version group = project.maven_group repositories { - maven { url "https://maven.dblsaiko.net/" } - maven { url "https://server.bbkr.space:8081/artifactory/libs-release/" } + maven { url "https://maven.dblsaiko.net/" } maven { url "https://maven.fabricmc.net/" } maven { url 'https://maven.blamejared.com' } maven { url "https://maven.shedaniel.me/" } @@ -36,8 +35,8 @@ dependencies { //useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}" useApi "com.github.paulevsGitch:BCLib:${project.bclib_version}" - useOptional "me.shedaniel:RoughlyEnoughItems:${project.rei_version}" - useOptional "me.shedaniel:RoughlyEnoughItems-api:${project.rei_version}" + useOptional "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" + useOptional "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" //useOptional "grondag:canvas-mc116:${project.canvas_version}" } diff --git a/gradle.properties b/gradle.properties index 31e7b8e7..303d7ccc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,4 +18,4 @@ patchouli_version = 50-FABRIC fabric_version = 0.36.0+1.17 canvas_version = 1.0.+ bclib_version = 0.1.43 -rei_version = 5.8.+ \ No newline at end of file +rei_version = 6.0.258-alpha \ No newline at end of file From aa1b0d87bbd6bc06543eae3b177eca97ea5f0a24 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 22:36:27 +0200 Subject: [PATCH 44/72] Some fixes for **rei** 6.x --- .../integration/rei/REIAlloyingCategory.java | 59 +++++++------- .../integration/rei/REIAlloyingDisplay.java | 81 +++++++++---------- .../rei/REIAlloyingFuelCategory.java | 59 +++++++------- .../rei/REIAlloyingFuelDisplay.java | 38 ++++----- 4 files changed, 113 insertions(+), 124 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 507cfc15..ea8adbb0 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,43 +1,42 @@ package ru.betterend.integration.rei; +import com.google.common.collect.Lists; +import com.mojang.blaze3d.vertex.PoseStack; +import it.unimi.dsi.fastutil.ints.IntList; +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.gui.DisplayRenderer; +import me.shedaniel.rei.api.client.gui.SimpleDisplayRenderer; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; +import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; +import net.minecraft.client.gui.GuiComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import org.jetbrains.annotations.NotNull; +import ru.betterend.recipe.builders.AlloyingRecipe; +import ru.betterend.registry.EndBlocks; + import java.text.DecimalFormat; import java.util.List; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; - -import it.unimi.dsi.fastutil.ints.IntList; -import me.shedaniel.math.Point; -import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; -import net.minecraft.client.gui.GuiComponent; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.resources.ResourceLocation; -import ru.betterend.recipe.builders.AlloyingRecipe; -import ru.betterend.registry.EndBlocks; -import ru.betterend.util.LangUtil; - -public class REIAlloyingCategory implements TransferRecipeCategory { +public class REIAlloyingCategory implements TransferDisplayCategory { @Override - public @NotNull ResourceLocation getIdentifier() { + public @NotNull CategoryIdentifier getCategoryIdentifier() { return AlloyingRecipe.ID; } @Override - public @NotNull String getCategoryName() { - return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getDescriptionId()); + public @NotNull Component getTitle() { + return new TranslatableComponent(EndBlocks.END_STONE_SMELTER.getDescriptionId()); } @Override - public @NotNull EntryStack getLogo() { + public @NotNull EntryStack getIcon() { return REIPlugin.END_STONE_SMELTER; } @@ -53,14 +52,14 @@ public class REIAlloyingCategory implements TransferRecipeCategory> inputEntries = display.getInputEntries(); + List inputEntries = display.getInputEntries(); widgets.add(Widgets.createSlot(new Point(startPoint.x - 20, startPoint.y + 1)).entries(inputEntries.get(0)).markInput()); if (inputEntries.size() > 1) { widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(inputEntries.get(1)).markInput()); } else { widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(Lists.newArrayList()).markInput()); } - widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); return widgets; } @@ -78,8 +77,8 @@ public class REIAlloyingCategory implements TransferRecipeCategory fuel; private Recipe recipe; - private List> input; - private List output; private float xp; private double smeltTime; + + public REIAlloyingDisplay(AlloyingRecipe recipe) { + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) + ); this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getIngredients()); - this.output = Collections.singletonList(EntryStack.create(recipe.getResultItem())); this.xp = recipe.getExperience(); this.smeltTime = recipe.getSmeltTime(); } public REIAlloyingDisplay(BlastingRecipe recipe) { + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) + ); this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getIngredients()); - this.output = Collections.singletonList(EntryStack.create(recipe.getResultItem())); this.xp = recipe.getExperience(); this.smeltTime = recipe.getCookingTime(); } @@ -51,29 +56,19 @@ public class REIAlloyingDisplay implements TransferRecipeDisplay { } @Override - public @NotNull Optional getRecipeLocation() { + public @NotNull Optional getDisplayLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } - - @Override - public @NotNull List> getInputEntries() { - return this.input; - } - - @Override - public @NotNull List> getResultingEntries() { - return Collections.singletonList(output); - } @Override - public @NotNull ResourceLocation getRecipeCategory() { + public CategoryIdentifier getCategoryIdentifier() { return AlloyingRecipe.ID; } - @Override - public @NotNull List> getRequiredEntries() { - return this.input; - } + // @Override + // public @NotNull List> getRequiredEntries() { + // return this.input; + // } public float getXp() { return this.xp; @@ -97,14 +92,14 @@ public class REIAlloyingDisplay implements TransferRecipeDisplay { return 1; } - @Override - public List> getOrganisedInputEntries(ContainerInfo containerInfo, AbstractContainerMenu container) { - return this.input; - } + // @Override + // public List> getOrganisedInputEntries(ContainerInfo containerInfo, AbstractContainerMenu container) { + // return this.input; + // } static { fuel = EndStoneSmelterBlockEntity.availableFuels().keySet().stream() - .map(Item::getDefaultInstance).map(EntryStack::create) + .map(Item::getDefaultInstance).map(EntryStacks::of) .map(e -> e.setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, stack -> Collections.singletonList(new TranslatableComponent("category.rei.smelting.fuel") .withStyle(ChatFormatting.YELLOW)))).collect(Collectors.toList()); } diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java index 8b7a552a..930d3e3e 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java @@ -1,40 +1,39 @@ package ru.betterend.integration.rei; +import com.google.common.collect.Lists; +import com.mojang.blaze3d.vertex.PoseStack; +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.client.gui.DisplayRenderer; +import me.shedaniel.rei.api.client.gui.widgets.Slot; +import me.shedaniel.rei.api.client.gui.widgets.Tooltip; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; +import me.shedaniel.rei.api.client.registry.display.DisplayCategory; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.item.Items; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import java.text.DecimalFormat; import java.util.List; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.google.common.collect.Lists; -import com.mojang.blaze3d.vertex.PoseStack; - -import me.shedaniel.math.Point; -import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.RecipeCategory; -import me.shedaniel.rei.api.widgets.Slot; -import me.shedaniel.rei.api.widgets.Tooltip; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.language.I18n; -import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.Items; - -public class REIAlloyingFuelCategory implements RecipeCategory { +public class REIAlloyingFuelCategory implements DisplayCategory { private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##"); @Override - public @NotNull ResourceLocation getIdentifier() { + public @NotNull CategoryIdentifier getCategoryIdentifier() { return REIPlugin.ALLOYING_FUEL; } @Override - public @NotNull String getCategoryName() { - return I18n.get("category.rei.fuel"); + public @NotNull Component getTitle() { + return new TranslatableComponent("category.rei.fuel"); } @Override @@ -43,12 +42,12 @@ public class REIAlloyingFuelCategory implements RecipeCategory setupDisplay(REIAlloyingFuelDisplay recipeDisplay, Rectangle bounds) { + public List setupDisplay(REIAlloyingFuelDisplay recipeDisplay, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 17); String burnTime = DECIMAL_FORMAT.format(recipeDisplay.getFuelTime()); List widgets = Lists.newArrayList(); @@ -61,10 +60,10 @@ public class REIAlloyingFuelCategory implements RecipeCategory fuel, CompoundTag tag) { + this(fuel, tag.getInt("fuelTime")); + } + + public REIAlloyingFuelDisplay(List fuel, int fuelTime) { + super(fuel, Collections.emptyList()); this.fuelTime = fuelTime; } + /*public REIAlloyingFuelDisplay(EntryStack fuel, int fuelTime) { + this.fuel = fuel; + this.fuelTime = fuelTime; + }*/ @Override - public @NotNull List> getInputEntries() { - return Collections.singletonList(Collections.singletonList(fuel)); - } - - @Override - public @NotNull List> getResultingEntries() { - return Collections.emptyList(); - } - - @Override - public @NotNull ResourceLocation getRecipeCategory() { + public CategoryIdentifier getCategoryIdentifier() { return REIPlugin.ALLOYING_FUEL; } From 49386dc7e137733e1a94eb3457d8f1afa4c684b1 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 23:02:29 +0200 Subject: [PATCH 45/72] Continued work on **rei** --- .../integration/rei/REIAlloyingCategory.java | 7 +- .../integration/rei/REIAlloyingDisplay.java | 4 +- .../integration/rei/REIAnvilCategory.java | 59 +++++++--------- .../integration/rei/REIAnvilDisplay.java | 62 +++++++---------- .../integration/rei/REIInfusionCategory.java | 55 +++++++-------- .../integration/rei/REIInfusionDisplay.java | 67 +++++++------------ .../betterend/integration/rei/REIPlugin.java | 31 +++++---- 7 files changed, 120 insertions(+), 165 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index ea8adbb0..1d915bc9 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -27,7 +27,7 @@ public class REIAlloyingCategory implements TransferDisplayCategory recipe; private float xp; private double smeltTime; - - public REIAlloyingDisplay(AlloyingRecipe recipe) { super( @@ -62,7 +60,7 @@ public class REIAlloyingDisplay extends BasicDisplay implements SimpleGridMenuDi @Override public CategoryIdentifier getCategoryIdentifier() { - return AlloyingRecipe.ID; + return REIPlugin.ALLOYING; } // @Override diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index fddf1a83..3e11b3dd 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,49 +1,47 @@ package ru.betterend.integration.rei; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; - import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; +import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; import net.minecraft.client.gui.GuiComponent; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BlockItem; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; -import ru.betterend.util.LangUtil; -public class REIAnvilCategory implements TransferRecipeCategory { +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +public class REIAnvilCategory implements TransferDisplayCategory { @Override - public @NotNull ResourceLocation getIdentifier() { + public @NotNull CategoryIdentifier getCategoryIdentifier() { return REIPlugin.SMITHING; } @Override - public @NotNull String getCategoryName() { - return LangUtil.translate(Blocks.ANVIL.getDescriptionId()); + public @NotNull Component getTitle() { + return new TranslatableComponent(Blocks.ANVIL.getDescriptionId()); } - + @Override - public @NotNull EntryStack getLogo() { + public @NotNull EntryStack getIcon() { return REIPlugin.ANVILS[0]; } + @Override public @NotNull List setupDisplay(REIAnvilDisplay display, Rectangle bounds) { @@ -53,23 +51,23 @@ public class REIAnvilCategory implements TransferRecipeCategory int x = startPoint.x + 10; int y = startPoint.y; widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 5))); - List> inputEntries = display.getInputEntries(); - List materials = inputEntries.get(1); + List inputEntries = display.getInputEntries(); + EntryIngredient materials = inputEntries.get(1); int anvilLevel = display.getAnvilLevel(); - List anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { - Block block = ((BlockItem) anvil.getItem()).getBlock(); + Collection> anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { + Block block = ((BlockItem) anvil.getValue()).getBlock(); if (block instanceof EndAnvilBlock) { return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; } return anvilLevel == 1; }).collect(Collectors.toList()); - materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount())); + //materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount())); widgets.add(Widgets.createArrow(new Point(x + 24, y + 4))); widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 7, bounds.y + bounds.height - 15), new TranslatableComponent("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); widgets.add(Widgets.createSlot(new Point(x - 20, y + 4)).entries(materials).markInput()); widgets.add(Widgets.createSlot(new Point(x + 1, y + 4)).entries(inputEntries.get(0)).markInput()); - widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getOutputEntries().get(0)).disableBackground().markOutput()); widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils)); return widgets; @@ -88,11 +86,6 @@ public class REIAnvilCategory implements TransferRecipeCategory matrices.popPose(); } - @Override - public @NotNull RecipeEntry getSimpleRenderer(REIAnvilDisplay recipe) { - return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries()); - } - @Override public int getDisplayHeight() { return 60; diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java index 3ca2f929..2c039d47 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java @@ -1,29 +1,27 @@ package ru.betterend.integration.rei; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import org.jetbrains.annotations.NotNull; - -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeDisplay; -import me.shedaniel.rei.server.ContainerInfo; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; +import me.shedaniel.rei.api.common.display.basic.BasicDisplay; +import me.shedaniel.rei.api.common.util.EntryIngredients; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.crafting.Recipe; +import org.jetbrains.annotations.NotNull; import ru.betterend.recipe.builders.AnvilRecipe; -public class REIAnvilDisplay implements TransferRecipeDisplay { +import java.util.Collections; +import java.util.Optional; + +public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDisplay { private final AnvilRecipe recipe; - private final List> input; - private final List output; public REIAnvilDisplay(AnvilRecipe recipe) { + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) + ); this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getIngredients()); - this.output = Collections.singletonList(EntryStack.create(recipe.getResultItem())); } public int getDamage() { @@ -37,31 +35,21 @@ public class REIAnvilDisplay implements TransferRecipeDisplay { public int getAnvilLevel() { return recipe.getAnvilLevel(); } - + @Override - public @NotNull Optional getRecipeLocation() { + public @NotNull Optional getDisplayLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } @Override - public @NotNull List> getInputEntries() { - return this.input; - } - - @Override - public @NotNull List> getResultingEntries() { - return Collections.singletonList(output); - } - - @Override - public @NotNull ResourceLocation getRecipeCategory() { + public CategoryIdentifier getCategoryIdentifier() { return REIPlugin.SMITHING; } - @Override - public @NotNull List> getRequiredEntries() { - return input; - } + // @Override + // public @NotNull List> getRequiredEntries() { + // return input; + // } @Override public int getWidth() { @@ -73,9 +61,9 @@ public class REIAnvilDisplay implements TransferRecipeDisplay { return 1; } - @Override - public List> getOrganisedInputEntries(ContainerInfo containerInfo, - AbstractContainerMenu container) { - return input; - } + // @Override + // public List> getOrganisedInputEntries(ContainerInfo containerInfo, + // AbstractContainerMenu container) { + // return input; + // } } diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 5acb5b12..152a83b4 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,59 +1,55 @@ package ru.betterend.integration.rei; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; - import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; +import me.shedaniel.rei.api.client.gui.DisplayRenderer; +import me.shedaniel.rei.api.client.gui.SimpleDisplayRenderer; +import me.shedaniel.rei.api.client.gui.widgets.Widget; +import me.shedaniel.rei.api.client.gui.widgets.Widgets; +import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryIngredient; +import me.shedaniel.rei.api.common.entry.EntryStack; +import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; -import ru.betterend.util.LangUtil; -public class REIInfusionCategory implements TransferRecipeCategory { +import java.util.List; + +public class REIInfusionCategory implements TransferDisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); @Override - public @NotNull ResourceLocation getIdentifier() { - return InfusionRecipe.ID; + public @NotNull CategoryIdentifier getCategoryIdentifier() { + return REIPlugin.INFUSION; } @Override - public @NotNull String getCategoryName() { - return LangUtil.translate(EndBlocks.INFUSION_PEDESTAL.getDescriptionId()); + public @NotNull Component getTitle() { + return new TranslatableComponent(EndBlocks.INFUSION_PEDESTAL.getDescriptionId()); } @Override - public @NotNull EntryStack getLogo() { + public @NotNull EntryStack getIcon() { return REIPlugin.INFUSION_RITUAL; } - - @Override - public @NotNull RecipeEntry getSimpleRenderer(REIInfusionDisplay recipe) { - return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries()); - } + @Override public @NotNull List setupDisplay(REIInfusionDisplay display, Rectangle bounds) { Point centerPoint = new Point(bounds.getCenterX() - 34, bounds.getCenterY() - 2); List widgets = Lists.newArrayList(); widgets.add(Widgets.createRecipeBase(bounds)); - List> inputEntries = display.getInputEntries(); - List> outputEntries = display.getResultingEntries(); + List inputEntries = display.getInputEntries(); + List outputEntries = display.getOutputEntries(); widgets.add(Widgets.createTexturedWidget(BACKGROUND, bounds.x, bounds.y, 0, 0, 150, 104, 150, 104)); widgets.add(Widgets.createSlot(centerPoint).entries(inputEntries.get(0)).disableBackground().markInput()); widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y - 28)).entries(inputEntries.get(1)).disableBackground().markInput()); @@ -69,13 +65,14 @@ public class REIInfusionCategory implements TransferRecipeCategory widgets, Rectangle bounds, - REIInfusionDisplay display, IntList redSlots) {} @Override public int getDisplayHeight() { return 104; } + + @Override + public void renderRedSlots(PoseStack matrices, List widgets, Rectangle bounds, REIInfusionDisplay display, IntList redSlots) { + + } } diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java b/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java index d8411bc9..860f386f 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java @@ -1,38 +1,29 @@ package ru.betterend.integration.rei; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.Lists; - -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeDisplay; -import me.shedaniel.rei.server.ContainerInfo; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.display.SimpleGridMenuDisplay; +import me.shedaniel.rei.api.common.display.basic.BasicDisplay; +import me.shedaniel.rei.api.common.util.EntryIngredients; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.crafting.Recipe; -import ru.betterend.recipe.builders.AlloyingRecipe; +import org.jetbrains.annotations.NotNull; import ru.betterend.recipe.builders.InfusionRecipe; -public class REIInfusionDisplay implements TransferRecipeDisplay { +import java.util.Collections; +import java.util.Optional; + +public class REIInfusionDisplay extends BasicDisplay implements SimpleGridMenuDisplay { private final InfusionRecipe recipe; - private final List> input; - private final List output; private final int time; public REIInfusionDisplay(InfusionRecipe recipe) { + super( + EntryIngredients.ofIngredients(recipe.getIngredients()), + Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) + ); this.recipe = recipe; - this.input = Lists.newArrayList(); - this.output = Collections.singletonList(EntryStack.create(recipe.getResultItem())); this.time = recipe.getInfusionTime(); - - recipe.getIngredients().forEach(ingredient -> { - input.add(EntryStack.ofIngredient(ingredient)); - }); } public int getInfusionTime() { @@ -40,29 +31,19 @@ public class REIInfusionDisplay implements TransferRecipeDisplay { } @Override - public @NotNull Optional getRecipeLocation() { + public @NotNull Optional getDisplayLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } @Override - public @NotNull List> getInputEntries() { - return this.input; + public CategoryIdentifier getCategoryIdentifier() { + return REIPlugin.INFUSION; } - @Override - public @NotNull List> getResultingEntries() { - return Collections.singletonList(output); - } - - @Override - public @NotNull ResourceLocation getRecipeCategory() { - return AlloyingRecipe.ID; - } - - @Override - public @NotNull List> getRequiredEntries() { - return this.input; - } + // @Override + // public @NotNull List> getRequiredEntries() { + // return this.input; + // } @Override public int getWidth() { @@ -74,8 +55,8 @@ public class REIInfusionDisplay implements TransferRecipeDisplay { return 0; } - @Override - public List> getOrganisedInputEntries(ContainerInfo containerInfo, AbstractContainerMenu container) { - return this.input; - } + // @Override + // public List> getOrganisedInputEntries(ContainerInfo containerInfo, AbstractContainerMenu container) { + // return this.input; + //} } diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index e05fd55d..c3779269 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,13 +1,11 @@ package ru.betterend.integration.rei; -import java.util.List; -import java.util.stream.Collectors; - import com.google.common.collect.Lists; - -import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeHelper; -import me.shedaniel.rei.api.plugins.REIPluginV0; +import me.shedaniel.rei.api.client.plugins.REIClientPlugin; +import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; +import me.shedaniel.rei.api.common.entry.EntryStack; import me.shedaniel.rei.plugin.DefaultPlugin; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -23,14 +21,18 @@ import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; +import java.util.List; +import java.util.stream.Collectors; + +//https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java @Environment(EnvType.CLIENT) -public class REIPlugin implements REIPluginV0 { +public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); - public final static ResourceLocation ALLOYING_FUEL = BetterEnd.makeID("alloying_fuel"); - public final static ResourceLocation ALLOYING = AlloyingRecipe.ID; - public final static ResourceLocation SMITHING = AnvilRecipe.ID; - public final static ResourceLocation INFUSION = InfusionRecipe.ID; + public final static CategoryIdentifier ALLOYING_FUEL = CategoryIdentifier.of(BetterEnd.MOD_ID, "alloying_fuel"); + public final static CategoryIdentifier ALLOYING = AlloyingRecipe.ID; + public final static CategoryIdentifier SMITHING = CategoryIdentifier.of(BetterEnd.MOD_ID, AnvilRecipe.ID.getPath()); + public final static CategoryIdentifier INFUSION = InfusionRecipe.ID; public final static EntryStack END_STONE_SMELTER = EntryStack.create(EndBlocks.END_STONE_SMELTER); public final static EntryStack INFUSION_RITUAL = EntryStack.create(EndBlocks.INFUSION_PEDESTAL); @@ -69,12 +71,13 @@ public class REIPlugin implements REIPluginV0 { } @Override - public void registerPluginCategories(RecipeHelper recipeHelper) { - recipeHelper.registerCategories( + public void registerCategories(CategoryRegistry registry) { + registry.add( new REIAlloyingFuelCategory(), new REIAlloyingCategory(), new REIInfusionCategory(), - new REIAnvilCategory()); + new REIAnvilCategory() + ); } static { From 072e8b47dbddfaff6944b42880926af35c4ed5ef Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 23:27:34 +0200 Subject: [PATCH 46/72] Make sure REI does compile (deactivated some code for the moment!) --- .../integration/rei/REIAnvilCategory.java | 2 +- .../integration/rei/REIContainer.java | 7 +-- .../integration/rei/REIInfusionCategory.java | 3 - .../betterend/integration/rei/REIPlugin.java | 60 ++++++++++--------- 4 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 3e11b3dd..479ef998 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -54,7 +54,7 @@ public class REIAnvilCategory implements TransferDisplayCategory inputEntries = display.getInputEntries(); EntryIngredient materials = inputEntries.get(1); int anvilLevel = display.getAnvilLevel(); - Collection> anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { + List anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { Block block = ((BlockItem) anvil.getValue()).getBlock(); if (block instanceof EndAnvilBlock) { return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; diff --git a/src/main/java/ru/betterend/integration/rei/REIContainer.java b/src/main/java/ru/betterend/integration/rei/REIContainer.java index 9d6a0118..47bfa4e8 100644 --- a/src/main/java/ru/betterend/integration/rei/REIContainer.java +++ b/src/main/java/ru/betterend/integration/rei/REIContainer.java @@ -1,14 +1,9 @@ package ru.betterend.integration.rei; -import me.shedaniel.rei.plugin.containers.CraftingContainerInfoWrapper; -import me.shedaniel.rei.server.ContainerInfoHandler; -import ru.betterend.client.gui.EndStoneSmelterScreenHandler; -import ru.betterend.recipe.builders.AlloyingRecipe; - public class REIContainer implements Runnable { @Override public void run() { - ContainerInfoHandler.registerContainerInfo(AlloyingRecipe.ID, CraftingContainerInfoWrapper.create(EndStoneSmelterScreenHandler.class)); + //ContainerInfoHandler.registerContainerInfo(AlloyingRecipe.ID, CraftingContainerInfoWrapper.create(EndStoneSmelterScreenHandler.class)); } } diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 152a83b4..eeb77143 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -5,8 +5,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.client.gui.DisplayRenderer; -import me.shedaniel.rei.api.client.gui.SimpleDisplayRenderer; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; @@ -18,7 +16,6 @@ import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; -import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; import java.util.List; diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index c3779269..3400310a 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,17 +1,17 @@ package ru.betterend.integration.rei; import com.google.common.collect.Lists; -import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryStack; -import me.shedaniel.rei.plugin.DefaultPlugin; +import me.shedaniel.rei.api.common.util.EntryIngredients; +import me.shedaniel.rei.api.common.util.EntryStacks; +import me.shedaniel.rei.impl.ClientInternals; +import me.shedaniel.rei.plugin.common.DefaultPlugin; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.impl.content.registry.FuelRegistryImpl; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.crafting.BlastingRecipe; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseFurnaceBlock; import ru.betterend.BetterEnd; @@ -22,6 +22,7 @@ import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; import java.util.List; +import java.util.function.Supplier; import java.util.stream.Collectors; //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java @@ -34,17 +35,21 @@ public class REIPlugin implements REIClientPlugin { public final static CategoryIdentifier SMITHING = CategoryIdentifier.of(BetterEnd.MOD_ID, AnvilRecipe.ID.getPath()); public final static CategoryIdentifier INFUSION = InfusionRecipe.ID; - public final static EntryStack END_STONE_SMELTER = EntryStack.create(EndBlocks.END_STONE_SMELTER); - public final static EntryStack INFUSION_RITUAL = EntryStack.create(EndBlocks.INFUSION_PEDESTAL); + public final static EntryStack END_STONE_SMELTER = EntryStacks.of(EndBlocks.END_STONE_SMELTER); + public final static EntryStack INFUSION_RITUAL = EntryStacks.of(EndBlocks.INFUSION_PEDESTAL); public final static EntryStack[] FURNACES; public final static EntryStack[] ANVILS; - @Override - public ResourceLocation getPluginIdentifier() { - return PLUGIN_ID; - } + //@Override + //public ResourceLocation getPluginIdentifier() { + // return PLUGIN_ID; + //} + + //public REIPlugin() { + // ClientInternals.attachInstance((Supplier) () -> this, PLUGIN_ID); + //} - @Override + /*@Override public void registerRecipeDisplays(RecipeHelper recipeHelper) { recipeHelper.registerRecipes(ALLOYING, AlloyingRecipe.class, REIAlloyingDisplay::new); recipeHelper.registerRecipes(ALLOYING, BlastingRecipe.class, REIAlloyingDisplay::new); @@ -52,23 +57,10 @@ public class REIPlugin implements REIClientPlugin { recipeHelper.registerRecipes(INFUSION, InfusionRecipe.class, REIInfusionDisplay::new); FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { if (time >= 2000) { - recipeHelper.registerDisplay(new REIAlloyingFuelDisplay(EntryStack.create(item), time)); + recipeHelper.registerDisplay(new REIAlloyingFuelDisplay(EntryStack.of(item), time)); } }); - } - - @Override - public void registerOthers(RecipeHelper recipeHelper) { - recipeHelper.registerWorkingStations(ALLOYING_FUEL, END_STONE_SMELTER); - recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER); - recipeHelper.registerWorkingStations(INFUSION, INFUSION_RITUAL); - recipeHelper.registerWorkingStations(SMITHING, ANVILS); - recipeHelper.removeAutoCraftButton(ALLOYING_FUEL); - recipeHelper.removeAutoCraftButton(SMITHING); - - recipeHelper.registerWorkingStations(DefaultPlugin.SMELTING, FURNACES); - recipeHelper.registerWorkingStations(DefaultPlugin.FUEL, FURNACES); - } + }*/ @Override public void registerCategories(CategoryRegistry registry) { @@ -78,14 +70,24 @@ public class REIPlugin implements REIClientPlugin { new REIInfusionCategory(), new REIAnvilCategory() ); + + registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER); + registry.addWorkstations(ALLOYING, END_STONE_SMELTER); + registry.addWorkstations(INFUSION, INFUSION_RITUAL); + registry.addWorkstations(SMITHING, ANVILS); + registry.removePlusButton(ALLOYING_FUEL); + registry.removePlusButton(SMITHING); + + registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES); + registry.addWorkstations(DefaultPlugin.FUEL, FURNACES); } static { - List anvils = Lists.newArrayList(EntryStack.ofItems(EndBlocks.getModBlocks().stream() + List anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() .filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList()))); - anvils.add(0, EntryStack.create(Blocks.ANVIL)); + anvils.add(0, EntryStacks.of(Blocks.ANVIL)); ANVILS = anvils.toArray(new EntryStack[0]); - FURNACES = Lists.newArrayList(EntryStack.ofItems(EndBlocks.getModBlocks().stream() + FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() .filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))) .toArray(new EntryStack[0]); } From e104752c6df31355bdbb06beb3139e9e879132ac Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Thu, 24 Jun 2021 23:27:49 +0200 Subject: [PATCH 47/72] Fixed argument mixin --- .../java/ru/betterend/mixin/common/LivingEntityMixin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index 67aec1fc..56382ae2 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -99,8 +99,8 @@ public abstract class LivingEntityMixin extends Entity { this.lastAttacker = source.getEntity(); } - @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) - private float be_increaseKnockback(float value, double x, double z) { + @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V"), index=0) + private double be_increaseKnockback(double value, double x, double z) { if (lastAttacker != null && lastAttacker instanceof LivingEntity) { LivingEntity attacker = (LivingEntity) lastAttacker; value += this.be_getKnockback(attacker.getMainHandItem().getItem()); From e25ab5698d1bbe3677ccc545fb21ae7755e096a8 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Fri, 25 Jun 2021 00:00:09 +0200 Subject: [PATCH 48/72] Mixin Fixes --- .../client/ClientPlayNetworkHandlerMixin.java | 2 ++ .../mixin/client/ContextGsonAccessor.java | 14 ------------- .../client/HumanoidMobRendererMixin.java | 10 ++++----- .../mixin/client/PlayerRendererMixin.java | 10 ++++----- .../mixin/common/AnvilMenuMixin.java | 5 +++-- .../mixin/common/ChorusPlantBlockMixin.java | 2 +- .../common/ChunkBiomeContainerMixin.java | 11 +++++----- .../betterend/mixin/common/EntityMixin.java | 4 ++-- .../mixin/common/MinecraftServerMixin.java | 18 ++++++++-------- .../common/NoiseBasedChunkGeneratorMixin.java | 4 ++-- .../mixin/common/PlayerListMixin.java | 9 +++----- .../mixin/common/ServerPlayerMixin.java | 2 +- .../mixin/common/ShuffelingListMixin.java | 2 -- .../mixin/common/SpikeFeatureMixin.java | 21 ++++++++----------- 14 files changed, 45 insertions(+), 69 deletions(-) delete mode 100644 src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java diff --git a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java index 6acaf8e9..8e7b7e23 100644 --- a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -1,5 +1,6 @@ package ru.betterend.mixin.client; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -18,6 +19,7 @@ import ru.bclib.client.gui.BlockSignEditScreen; @Mixin(ClientPacketListener.class) public class ClientPlayNetworkHandlerMixin { + @Final @Shadow private Minecraft minecraft; diff --git a/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java b/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java deleted file mode 100644 index 484b3a65..00000000 --- a/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.betterend.mixin.client; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import com.google.gson.Gson; - -import net.minecraft.client.renderer.block.model.BlockModelDefinition; - -@Mixin(BlockModelDefinition.Context.class) -public interface ContextGsonAccessor { - @Accessor - Gson getGson(); -} diff --git a/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java b/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java index 47079dd2..f922d7b7 100644 --- a/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java @@ -1,16 +1,14 @@ package ru.betterend.mixin.client; +import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.HumanoidMobRenderer; +import net.minecraft.client.renderer.entity.MobRenderer; +import net.minecraft.world.entity.Mob; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.HumanoidMobRenderer; -import net.minecraft.client.renderer.entity.MobRenderer; -import net.minecraft.world.entity.Mob; import ru.betterend.client.render.ArmoredElytraLayer; @Mixin(HumanoidMobRenderer.class) diff --git a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java index 93c2fdb0..8c92033c 100644 --- a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java @@ -1,16 +1,14 @@ package ru.betterend.mixin.client; +import net.minecraft.client.model.PlayerModel; +import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.LivingEntityRenderer; +import net.minecraft.client.renderer.entity.player.PlayerRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.client.model.PlayerModel; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.entity.EntityRenderDispatcher; -import net.minecraft.client.renderer.entity.LivingEntityRenderer; -import net.minecraft.client.renderer.entity.player.PlayerRenderer; import ru.betterend.client.render.ArmoredElytraLayer; @Mixin(PlayerRenderer.class) diff --git a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java index 4d2c61b6..92615cdf 100644 --- a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java +++ b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java @@ -65,7 +65,7 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc } @Inject(method = "onTake", at = @At("HEAD"), cancellable = true) - protected void be_onTakeOutput(Player player, ItemStack stack, CallbackInfoReturnable info) { + protected void be_onTakeOutput(Player player, ItemStack stack, CallbackInfo info) { if (be_currentRecipe != null) { inputSlots.getItem(0).shrink(be_currentRecipe.getInputCount()); stack = be_currentRecipe.craft(inputSlots, player); @@ -85,7 +85,8 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc world.levelEvent(1030, blockPos, 0); } }); - info.setReturnValue(stack); + //TODO: no more return, does this still work? + //info.setReturnValue(stack); } } diff --git a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java index 43427483..eaa91743 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java @@ -46,7 +46,7 @@ public abstract class ChorusPlantBlockMixin extends Block { } } - @Inject(method = "getStateForPlacement", at = @At("RETURN"), cancellable = true) + @Inject(method = "getStateForPlacement(Lnet/minecraft/world/item/context/BlockPlaceContext;)Lnet/minecraft/world/level/block/state/BlockState;", at = @At("RETURN"), cancellable = true) private void be_getStateForPlacement(BlockPlaceContext ctx, CallbackInfoReturnable info) { BlockPos pos = ctx.getClickedPos(); Level world = ctx.getLevel(); diff --git a/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java b/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java index 4ff99959..2a10659e 100644 --- a/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java @@ -27,11 +27,7 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { @Final @Shadow - public static int HORIZONTAL_MASK; - - @Final - @Shadow - public static int VERTICAL_MASK; + private static int HORIZONTAL_MASK; @Override public void be_setBiome(Biome biome, BlockPos pos) { @@ -78,9 +74,12 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { biomes[index] = biome; } + @Shadow @Final private int quartMinY; + @Shadow @Final private int quartHeight; + private int be_getArrayIndex(int biomeX, int biomeY, int biomeZ) { int i = biomeX & HORIZONTAL_MASK; - int j = Mth.clamp(biomeY, 0, VERTICAL_MASK); + int j = Mth.clamp(biomeY - this.quartMinY, 0, this.quartHeight); int k = biomeZ & HORIZONTAL_MASK; return j << WIDTH_BITS + WIDTH_BITS | k << WIDTH_BITS | i; } diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index 6504ed98..52a4f80a 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -19,9 +19,9 @@ import ru.betterend.interfaces.TeleportingEntity; @Mixin(Entity.class) public abstract class EntityMixin implements TeleportingEntity { @Shadow - public float yRot; + private float yRot; @Shadow - public float xRot; + private float xRot; @Shadow public Level level; diff --git a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java index 1c3d5f0a..e6cf8cfd 100644 --- a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java @@ -22,7 +22,7 @@ import net.minecraft.world.level.storage.WorldData; import ru.betterend.world.generator.GeneratorOptions; @Mixin(MinecraftServer.class) -public class MinecraftServerMixin { +public abstract class MinecraftServerMixin { @Shadow private ServerResources resources; @@ -35,7 +35,7 @@ public class MinecraftServerMixin { protected WorldData worldData; @Inject(method = "overworld", at = @At(value = "HEAD"), cancellable = true) - private final void be_overworld(CallbackInfoReturnable info) { + private void be_overworld(CallbackInfoReturnable info) { if (GeneratorOptions.swapOverworldToEnd()) { ServerLevel world = levels.get(Level.END); if (world == null) { @@ -47,7 +47,7 @@ public class MinecraftServerMixin { } @Inject(method = "createLevels", at = @At(value = "TAIL")) - private final void be_createLevels(ChunkProgressListener worldGenerationProgressListener, CallbackInfo info) { + private void be_createLevels(ChunkProgressListener worldGenerationProgressListener, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd()) { ServerLevel world = levels.get(Level.END); if (world == null) { @@ -57,20 +57,20 @@ public class MinecraftServerMixin { ServerLevelData serverWorldProperties = worldData.overworldData(); net.minecraft.world.level.levelgen.WorldGenSettings generatorOptions = worldData.worldGenSettings(); boolean bl = generatorOptions.isDebug(); - setInitialSpawn(world, serverWorldProperties, generatorOptions.generateBonusChest(), bl, true); + setInitialSpawn(world, serverWorldProperties, generatorOptions.generateBonusChest(), bl); } } - + + @Shadow private static void setInitialSpawn(ServerLevel serverLevel, ServerLevelData serverLevelData, boolean bl, boolean bl2) {}; + @Inject(method = "setInitialSpawn", at = @At(value = "HEAD"), cancellable = true) - private static void be_setInitialSpawn(ServerLevel world, ServerLevelData serverWorldProperties, boolean bonusChest, boolean debugWorld, boolean bl, CallbackInfo info) { + private static void be_setInitialSpawn(ServerLevel world, ServerLevelData serverWorldProperties, boolean bonusChest, boolean debugWorld, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd() && world.dimension() == Level.OVERWORLD) { info.cancel(); } } - @Shadow - private static void setInitialSpawn(ServerLevel world, ServerLevelData serverWorldProperties, boolean bonusChest, boolean debugWorld, boolean bl) {} - + @Shadow public PlayerList getPlayerList() { return null; diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index 8d59913e..c39fa3e3 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -32,8 +32,8 @@ public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { TerrainGenerator.initNoise(seed); } - @Inject(method = "fillNoiseColumn([DII)V", at = @At("HEAD"), cancellable = true, allow = 2) - private void be_fillNoiseColumn(double[] buffer, int x, int z, CallbackInfo info) { + @Inject(method = "fillNoiseColumn([DIIII)V", at = @At("HEAD"), cancellable = true, allow = 2) + private void be_fillNoiseColumn(double[] buffer, int x, int z, int k, int l, CallbackInfo info) { if (GeneratorOptions.useNewGenerator() && settings.get().stable(NoiseGeneratorSettings.END)) { TerrainGenerator.fillTerrainDensity(buffer, x, z, getBiomeSource()); info.cancel(); diff --git a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java index 97a9f1b2..8eeb51d3 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java @@ -163,9 +163,9 @@ public class PlayerListMixin { this.broadcastAll(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, new ServerPlayer[] { serverPlayer })); - for (int i = 0; i < this.players.size(); ++i) { + for (ServerPlayer player : this.players) { serverPlayer.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, - new ServerPlayer[] { (ServerPlayer) this.players.get(i) })); + new ServerPlayer[]{(ServerPlayer) player})); } serverLevel3.addNewPlayer(serverPlayer); @@ -176,10 +176,7 @@ public class PlayerListMixin { this.server.isResourcePackRequired(), this.server.getResourcePackPrompt()); } - Iterator var24 = serverPlayer.getActiveEffects().iterator(); - - while (var24.hasNext()) { - MobEffectInstance statusEffectInstance = (MobEffectInstance) var24.next(); + for (MobEffectInstance statusEffectInstance : serverPlayer.getActiveEffects()) { serverPlayNetworkHandler .send(new ClientboundUpdateMobEffectPacket(serverPlayer.getId(), statusEffectInstance)); } diff --git a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java index dad6df0d..eb7a99d1 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java @@ -132,7 +132,7 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt } @Shadow - abstract ServerLevel getLevel(); + public abstract ServerLevel getLevel(); @Shadow abstract void triggerDimensionChangeTriggers(ServerLevel origin); diff --git a/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java index f1823dbc..3f709fba 100644 --- a/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java @@ -7,8 +7,6 @@ import org.spongepowered.asm.mixin.Shadow; import ru.betterend.util.ShuffelingListExtended; import java.util.List; -import java.util.Random; -import java.util.stream.Stream; @Mixin(ShufflingList.class) public abstract class ShuffelingListMixin implements ShuffelingListExtended { diff --git a/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java index 67bdf428..3a4c5e48 100644 --- a/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java @@ -1,38 +1,35 @@ package ru.betterend.mixin.common; -import java.util.Random; - -import net.minecraft.core.Vec3i; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; +import net.minecraft.core.Vec3i; import net.minecraft.nbt.CompoundTag; import net.minecraft.util.Mth; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.boss.enderdragon.EndCrystal; import net.minecraft.world.level.ServerLevelAccessor; -import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.IronBarsBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.SpikeFeature; import net.minecraft.world.level.levelgen.feature.configurations.SpikeConfiguration; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.WorldDataAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.StructureHelper; import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; +import java.util.Random; + @Mixin(SpikeFeature.class) public class SpikeFeatureMixin { @Inject(method = "place", at = @At("HEAD"), cancellable = true) From 42b436e4082c8569257116225fc5ab8033d40e0b Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Fri, 25 Jun 2021 00:00:30 +0200 Subject: [PATCH 49/72] Type changes --- src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java | 3 ++- src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java index 98e79b2c..0f962887 100644 --- a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java @@ -3,6 +3,7 @@ package ru.betterend.recipe.builders; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.NonNullList; @@ -32,7 +33,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { public final static String GROUP = "alloying"; public final static RecipeType TYPE = BCLRecipeManager.registerType(BetterEnd.MOD_ID, GROUP); public final static Serializer SERIALIZER = BCLRecipeManager.registerSerializer(BetterEnd.MOD_ID, GROUP, new Serializer()); - public final static ResourceLocation ID = BetterEnd.makeID(GROUP); + public final static CategoryIdentifier ID = CategoryIdentifier.of(BetterEnd.MOD_ID, GROUP); protected final RecipeType type; protected final ResourceLocation id; diff --git a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java index b05b2f37..1773c10d 100644 --- a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java @@ -4,6 +4,7 @@ import java.util.Arrays; import com.google.gson.JsonObject; +import me.shedaniel.rei.api.common.category.CategoryIdentifier; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.NonNullList; @@ -29,7 +30,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { public final static String GROUP = "infusion"; public final static RecipeType TYPE = BCLRecipeManager.registerType(BetterEnd.MOD_ID, GROUP); public final static Serializer SERIALIZER = BCLRecipeManager.registerSerializer(BetterEnd.MOD_ID, GROUP, new Serializer()); - public final static ResourceLocation ID = BetterEnd.makeID(GROUP); + public final static CategoryIdentifier ID = CategoryIdentifier.of(BetterEnd.MOD_ID, GROUP); private final ResourceLocation id; private final Ingredient[] catalysts; From daefcc4dbfa7957245e92388eae89ec6f540aae2 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Sun, 27 Jun 2021 17:30:15 +0300 Subject: [PATCH 50/72] Fix #216 and #217 --- build.gradle | 6 +++++- gradle.properties | 2 +- src/main/java/ru/betterend/blocks/EndStoneSmelter.java | 4 ++-- .../blocks/entities/EndStoneSmelterBlockEntity.java | 6 +++--- src/main/resources/fabric.mod.json | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/build.gradle b/build.gradle index 83414897..4411ad02 100644 --- a/build.gradle +++ b/build.gradle @@ -70,12 +70,16 @@ def useApi(String dep) { processResources { inputs.property "version", project.version - duplicatesStrategy = 'WARN' + duplicatesStrategy = 'EXCLUDE' from(sourceSets.main.resources.srcDirs) { include "fabric.mod.json" expand "version": project.version } + + from(sourceSets.main.resources.srcDirs) { + exclude "fabric.mod.json" + } } // ensure that the encoding is set to UTF-8, no matter what the system default is diff --git a/gradle.properties b/gradle.properties index 7c15972e..5f798ac2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,5 +17,5 @@ archives_base_name = better-end patchouli_version = 50-FABRIC fabric_version = 0.32.9+1.16 canvas_version = 1.0.+ -bclib_version = 0.1.42 +bclib_version = 0.1.44 rei_version = 5.8.10 \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index 46e17878..2cf18798 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -52,7 +52,7 @@ public class EndStoneSmelter extends BaseBlockWithEntity { .resistance(100F) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); - this.registerDefaultState(this.stateDefinition.any() + registerDefaultState(this.stateDefinition.any() .setValue(FACING, Direction.NORTH) .setValue(LIT, false)); } @@ -75,7 +75,7 @@ public class EndStoneSmelter extends BaseBlockWithEntity { @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + return defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index 49516b35..27c54ef4 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -246,7 +246,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme if (recipe == null) { recipe = level.getRecipeManager().getRecipeFor(RecipeType.BLASTING, this, level).orElse(null); } - boolean accepted = this.canAcceptRecipeOutput(recipe); + boolean accepted = canAcceptRecipeOutput(recipe); if (!burning && accepted) { burnTime = getFuelTime(fuel); fuelTime = burnTime; @@ -265,7 +265,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme } if (burning && accepted) { - this.smeltTime++; + smeltTime++; if (smeltTime == smeltTimeTotal) { smeltTime = 0; smeltTimeTotal = getSmeltTime(); @@ -276,7 +276,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme smeltTime = 0; } } - + burning = isBurning(); if (initialBurning != burning) { level.setBlock(worldPosition, level.getBlockState(worldPosition).setValue(EndStoneSmelter.LIT, burning), 3); setChanged(); diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 90a89ea6..6e5c72a4 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -46,7 +46,7 @@ "fabricloader": ">=0.11.0", "fabric": ">=0.32.0", "minecraft": ">=1.16.4", - "bclib": ">=0.1.42" + "bclib": ">=0.1.44" }, "suggests": { "byg": ">=1.1.3", From 90f865d1afba4cc8a98a1007b7570caf077f887a Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 12:14:56 +0200 Subject: [PATCH 51/72] Fixed model Bugs --- .../entity/model/CubozoaEntityModel.java | 4 +-- .../entity/model/DragonflyEntityModel.java | 18 +++++------ .../entity/model/EndSlimeEntityModel.java | 30 ++++++++++++++----- .../{REIPlugin.java => REIPluginClient.java} | 5 +++- 4 files changed, 38 insertions(+), 19 deletions(-) rename src/main/java/ru/betterend/integration/rei/{REIPlugin.java => REIPluginClient.java} (92%) diff --git a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java index d0651499..191f2554 100644 --- a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java @@ -111,8 +111,8 @@ public class CubozoaEntityModel extends BlockBenchModel { model = modelPart.getChild(PartNames.BODY); for (int i=1; i<=TENTACLE_COUNT; i++){ - tentacle_center[i] = model.getChild("tentacle_center_"+i); - tentacle[i] = tentacle_center[i].getChild("tentacle_"+i); + tentacle_center[i-1] = model.getChild("tentacle_center_"+i); + tentacle[i-1] = tentacle_center[i-1].getChild("tentacle_"+i); } } diff --git a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java index 8885af2f..aaf1bc9f 100644 --- a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java @@ -145,15 +145,15 @@ public class DragonflyEntityModel extends BlockBenchModel { super(RenderType::entityCutout); model = modelPart.getChild(PartNames.BODY); - head = modelPart.getChild(PartNames.HEAD); - tail = modelPart.getChild(PartNames.TAIL); - tail_2 = modelPart.getChild(PartNames.TAIL_FIN); - wing_1 = modelPart.getChild(PartNames.LEFT_WING); - wing_2 = modelPart.getChild(PartNames.RIGHT_WING); - wing_3 = modelPart.getChild(PartNames.LEFT_WING_TIP); - wing_4 = modelPart.getChild(PartNames.RIGHT_WING_BASE); - legs_1 = modelPart.getChild(PartNames.LEFT_LEG); - legs_2 = modelPart.getChild(PartNames.RIGHT_LEG); + head = model.getChild(PartNames.HEAD); + tail = model.getChild(PartNames.TAIL); + tail_2 = tail.getChild(PartNames.TAIL_FIN); + wing_1 = model.getChild(PartNames.LEFT_WING); + wing_2 = model.getChild(PartNames.RIGHT_WING); + wing_3 = model.getChild(PartNames.LEFT_WING_BASE); + wing_4 = model.getChild(PartNames.RIGHT_WING_BASE); + legs_1 = model.getChild(PartNames.LEFT_LEG); + legs_2 = model.getChild(PartNames.RIGHT_LEG); } @Override diff --git a/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java index 2abf6c55..54609256 100644 --- a/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java @@ -120,15 +120,23 @@ public class EndSlimeEntityModel extends ListModel return LayerDefinition.create(modelData, 64, 32); } - public EndSlimeEntityModel(ModelPart modelPart) { + public EndSlimeEntityModel(ModelPart modelPart, boolean onlyShell) { super(RenderType::entityCutout); innerCube = modelPart.getChild(PartNames.BODY); - rightEye = modelPart.getChild(PartNames.RIGHT_EYE); - leftEye = modelPart.getChild(PartNames.LEFT_EYE); - mouth = modelPart.getChild(PartNames.MOUTH); - flower = modelPart.getChild("flower"); - crop = modelPart.getChild("crop"); + if (!onlyShell) { + rightEye = modelPart.getChild(PartNames.RIGHT_EYE); + leftEye = modelPart.getChild(PartNames.LEFT_EYE); + mouth = modelPart.getChild(PartNames.MOUTH); + flower = modelPart.getChild("flower"); + crop = modelPart.getChild("crop"); + } else { + rightEye = null; + leftEye = null; + mouth = null; + flower = null; + crop = null; + } } @Override @@ -144,8 +152,16 @@ public class EndSlimeEntityModel extends ListModel crop.render(matrices, vertices, light, overlay); } + private boolean isOnlyShell(){ + return rightEye==null; + } + @Override public Iterable parts() { - return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth); + if (isOnlyShell()) { + return ImmutableList.of(this.innerCube); + } else { + return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth); + } } } diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPluginClient.java similarity index 92% rename from src/main/java/ru/betterend/integration/rei/REIPlugin.java rename to src/main/java/ru/betterend/integration/rei/REIPluginClient.java index 3400310a..287f5016 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPluginClient.java @@ -5,6 +5,7 @@ import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.plugins.REIServerPlugin; import me.shedaniel.rei.api.common.util.EntryIngredients; import me.shedaniel.rei.api.common.util.EntryStacks; import me.shedaniel.rei.impl.ClientInternals; @@ -20,6 +21,7 @@ import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; +import org.jetbrains.annotations.ApiStatus; import java.util.List; import java.util.function.Supplier; @@ -27,7 +29,8 @@ import java.util.stream.Collectors; //https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java @Environment(EnvType.CLIENT) -public class REIPlugin implements REIClientPlugin { +@ApiStatus.Internal +public class REIPlugin implements me.shedaniel.rei.api.client.plugins.REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); public final static CategoryIdentifier ALLOYING_FUEL = CategoryIdentifier.of(BetterEnd.MOD_ID, "alloying_fuel"); From fb645f8f583936f9ef83a8498120f5138a7ee195 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 12:15:48 +0200 Subject: [PATCH 52/72] Fixed some class names --- src/main/java/ru/betterend/registry/EndEntities.java | 5 +++-- src/main/java/ru/betterend/registry/EndFeatures.java | 5 ++++- src/main/java/ru/betterend/registry/EndItems.java | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/ru/betterend/registry/EndEntities.java b/src/main/java/ru/betterend/registry/EndEntities.java index 0dedbfac..35138b6c 100644 --- a/src/main/java/ru/betterend/registry/EndEntities.java +++ b/src/main/java/ru/betterend/registry/EndEntities.java @@ -9,6 +9,7 @@ import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType.EntityFactory; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder; import ru.bclib.util.ColorUtil; @@ -47,8 +48,8 @@ public class EndEntities { } return type; } - - private static EntityType register(String name, MobCategory group, float width, float height, EntityFactory entity, Builder attributes, boolean fixedSize, int eggColor, int dotsColor) { + + private static EntityType register(String name, MobCategory group, float width, float height, EntityFactory entity, Builder attributes, boolean fixedSize, int eggColor, int dotsColor) { ResourceLocation id = BetterEnd.makeID(name); EntityType type = FabricEntityTypeBuilder.create(group, entity).dimensions(fixedSize ? EntityDimensions.fixed(width, height) : EntityDimensions.scalable(width, height)).build(); if (Configs.ENTITY_CONFIG.getBooleanRoot(id.getPath(), true)) { diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 0983d21f..73168e37 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -19,6 +19,7 @@ import net.minecraft.world.level.levelgen.placement.FeatureDecorator; import ru.bclib.api.BiomeAPI; import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiomeDef; +import ru.bclib.world.features.BCLDecorators; import ru.bclib.world.features.BCLFeature; import ru.bclib.world.features.DefaultFeature; import ru.betterend.BetterEnd; @@ -239,7 +240,9 @@ public class EndFeatures { public static final DefaultFeature END_STONE_STALACTITE_CAVEMOSS = new StalactiteFeature(true, EndBlocks.END_STONE_STALACTITE_CAVEMOSS, Blocks.END_STONE, EndBlocks.CAVE_MOSS); public static final DefaultFeature END_STONE_STALAGMITE_CAVEMOSS = new StalactiteFeature(false, EndBlocks.END_STONE_STALACTITE_CAVEMOSS, EndBlocks.CAVE_MOSS); public static final DefaultFeature CAVE_PUMPKIN = new CavePumpkinFeature(); - + + + private static BCLFeature redisterVegetation(String name, Feature feature, int density) { return BCLFeature.makeVegetationFeature(BetterEnd.makeID(name), feature, density); } diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index f37b456a..e302d163 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -2,6 +2,7 @@ package ru.betterend.registry; import java.util.List; +import net.minecraft.world.entity.Mob; import org.jetbrains.annotations.NotNull; import net.fabricmc.fabric.api.item.v1.FabricItemSettings; @@ -175,7 +176,7 @@ public class EndItems extends ItemsRegistry { return getItemRegistry().registerTool(name, item); } - public static Item registerEndEgg(String name, EntityType type, int background, int dots) { + public static Item registerEndEgg(String name, EntityType type, int background, int dots) { return getItemRegistry().registerEgg(name, type, background, dots); } From 3d6f0adc5651a07ca3fd6ab2fda92ef51d280992 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 12:20:31 +0200 Subject: [PATCH 53/72] Added Patchouli back --- build.gradle | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 852dd540..1d3129bc 100644 --- a/build.gradle +++ b/build.gradle @@ -32,7 +32,7 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - //useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}" + useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" useApi "com.github.paulevsGitch:BCLib:${project.bclib_version}" useOptional "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" diff --git a/gradle.properties b/gradle.properties index 303d7ccc..942e0feb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,7 +14,7 @@ archives_base_name = better-end # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api -patchouli_version = 50-FABRIC +patchouli_version = 55-FABRIC-SNAPSHOT fabric_version = 0.36.0+1.17 canvas_version = 1.0.+ bclib_version = 0.1.43 From 770f12ee200c8c9fd40ac85f1f8148a7022ddb5c Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 17:35:10 +0200 Subject: [PATCH 54/72] Fixed UV-Coordinate rendering --- Convert.java | 48 ++++-- .../client/render/EndCrystalRenderer.java | 8 +- .../client/render/EternalCrystalRenderer.java | 20 +-- .../entity/model/CubozoaEntityModel.java | 2 +- .../entity/model/EndSlimeEntityModel.java | 7 +- .../entity/model/SilkMothEntityModel.java | 138 +++++++++--------- .../entity/render/RendererEntityEndSlime.java | 6 +- .../item/model/ArmoredElytraModel.java | 8 +- .../item/model/CrystaliteBootsModel.java | 21 ++- .../item/model/CrystaliteChestplateModel.java | 32 ++-- .../item/model/CrystaliteHelmetModel.java | 17 ++- .../item/model/CrystaliteLeggingsModel.java | 24 ++- 12 files changed, 204 insertions(+), 127 deletions(-) diff --git a/Convert.java b/Convert.java index 3e7e914b..3de64d73 100644 --- a/Convert.java +++ b/Convert.java @@ -94,14 +94,18 @@ class ModelPart { } s += "PartDefinition " + name + " = "; s += pName+".addOrReplaceChild(\""+name+"\", CubeListBuilder.create()\n"; - if (this.mirror) s+= ".mirror()\n"; + if (this.mirror) s+= ".mirror()\n"; + s+= ".texOffs("+u+", "+v+")"; if (this.hadBox) { + s+= "\n"; if (scale!=1) - s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f, deformation_"+name+")\n"; + s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f, deformation_"+name+"),\n"; else - s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f)\n"; + s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f),\n"; + } else { + s+= ",\n"; } - s+= ".texOffs("+u+", "+v+"),\n"; + if (x==0 && y==0 && z==0 && rx==0 && ry==0 && rz==0){ s+= "PartPose.ZERO"; } else if (rx==0 && ry==0 && rz==0){ @@ -144,13 +148,33 @@ public class Convert { p.setRotationAngle(x, y, z); } public void c (){ - float scale = 0; - ModelPart[] SHARDS = new ModelPart[4]; - SHARDS[0] = new ModelPart(16, 16, 2, 4, "SHARDS[0]").addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F); - SHARDS[1] = new ModelPart(16, 16, 2, 4, "SHARDS[1]").addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F); - SHARDS[2] = new ModelPart(16, 16, 2, 4, "SHARDS[2]").addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F); - SHARDS[3] = new ModelPart(16, 16, 2, 4, "SHARDS[3]").addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F); - ModelPart CORE = new ModelPart(16, 16, 0, 0, "CORE"); - CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F); + float scale = 1; + ModelPart partC = new ModelPart(64, 64, 0, 19, "partC"); + partC.addBox(1.0F, 0.0F, 1.0F, 14.0F, 9.0F, 14.0F, 0.0F); + ModelPart partA = new ModelPart(64, 64, 0, 0,"partA"); + partA.addBox(1.0F, 0.0F, 0.0F, 14.0F, 5.0F, 14.0F, 0.0F); + partA.y = 9.0F; + partA.z = 1.0F; + ModelPart partB = new ModelPart(64, 64, 0, 0, "partB"); + partB.addBox(7.0F, -1.0F, 15.0F, 2.0F, 4.0F, 1.0F, 0.0F); + partB.y = 8.0F; + ModelPart partRightC = new ModelPart(64, 64, 0, 19, "partRightC"); + partRightC.addBox(1.0F, 0.0F, 1.0F, 15.0F, 9.0F, 14.0F, 0.0F); + ModelPart partRightA = new ModelPart(64, 64, 0, 0, "partRightA"); + partRightA.addBox(1.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F); + partRightA.y = 9.0F; + partRightA.z = 1.0F; + ModelPart partRightB = new ModelPart(64, 64, 0, 0, "partRightB"); + partRightB.addBox(15.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F); + partRightB.y = 8.0F; + ModelPart partLeftC = new ModelPart(64, 64, 0, 19, "partLeftC"); + partLeftC.addBox(0.0F, 0.0F, 1.0F, 15.0F, 9.0F, 14.0F, 0.0F); + ModelPart partLeftA = new ModelPart(64, 64, 0, 0, "partLeftA"); + partLeftA.addBox(0.0F, 0.0F, 0.0F, 15.0F, 5.0F, 14.0F, 0.0F); + partLeftA.y = 9.0F; + partLeftA.z = 1.0F; + ModelPart partLeftB = new ModelPart(64, 64, 0, 0, "partLeftB"); + partLeftB.addBox(0.0F, -1.0F, 15.0F, 1.0F, 4.0F, 1.0F, 0.0F); + partLeftB.y = 8.0F; } } diff --git a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java index 7686b156..abd37797 100644 --- a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java @@ -51,13 +51,13 @@ public class EndCrystalRenderer { MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); modelPartData.addOrReplaceChild("FRAME", CubeListBuilder.create() - .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f) - .texOffs(0, 0), + .texOffs(0, 0) + .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f), PartPose.ZERO); modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() - .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f) - .texOffs(32, 0), + .texOffs(32, 0) + .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f), PartPose.ZERO); return LayerDefinition.create(modelData, 64, 32); diff --git a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java index 452ac2f5..7baa3672 100644 --- a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java @@ -66,28 +66,28 @@ public class EternalCrystalRenderer { MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); modelPartData.addOrReplaceChild("SHARDS_0", CubeListBuilder.create() - .addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f) - .texOffs(2, 4), + .texOffs(2, 4) + .addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f), PartPose.ZERO); modelPartData.addOrReplaceChild("SHARDS_1", CubeListBuilder.create() - .addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f) - .texOffs(2, 4), + .texOffs(2, 4) + .addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f), PartPose.ZERO); modelPartData.addOrReplaceChild("SHARDS_2", CubeListBuilder.create() - .addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f) - .texOffs(2, 4), + .texOffs(2, 4) + .addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f), PartPose.ZERO); modelPartData.addOrReplaceChild("SHARDS_3", CubeListBuilder.create() - .addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f) - .texOffs(2, 4), + .texOffs(2, 4) + .addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f), PartPose.ZERO); modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() - .addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f) - .texOffs(0, 0), + .texOffs(0, 0) + .addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f), PartPose.ZERO); return LayerDefinition.create(modelData, 16, 16); diff --git a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java index 191f2554..86bda8c0 100644 --- a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java @@ -122,7 +122,7 @@ public class CubozoaEntityModel extends BlockBenchModel { scaleY = sin * 0.1F + 0.9F; scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F; - for (int i=1; i<=TENTACLE_COUNT; i++){ + for (int i=0; i extends ListModel { private final ModelPart innerCube; @@ -120,9 +123,11 @@ public class EndSlimeEntityModel extends ListModel return LayerDefinition.create(modelData, 64, 32); } - public EndSlimeEntityModel(ModelPart modelPart, boolean onlyShell) { + public EndSlimeEntityModel(EntityModelSet modelSet, boolean onlyShell){ super(RenderType::entityCutout); + ModelPart modelPart = modelSet.bakeLayer(onlyShell ? EndEntitiesRenders.END_SLIME_SHELL_MODEL : EndEntitiesRenders.END_SLIME_MODEL); + innerCube = modelPart.getChild(PartNames.BODY); if (!onlyShell) { rightEye = modelPart.getChild(PartNames.RIGHT_EYE); diff --git a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java index 989c3684..f50ef2c2 100644 --- a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java @@ -15,25 +15,25 @@ import net.minecraft.util.Mth; import ru.betterend.entity.SilkMothEntity; public class SilkMothEntityModel extends BlockBenchModel { - private final ModelPart legsL; - private final ModelPart cube_r1; - private final ModelPart cube_r2; - private final ModelPart cube_r3; - private final ModelPart legsR; - private final ModelPart cube_r4; - private final ModelPart cube_r5; - private final ModelPart cube_r6; - private final ModelPart head_pivot; - private final ModelPart tendril_r_r1; - private final ModelPart tendril_r_r2; - private final ModelPart bb_main; - private final ModelPart wingR_r1; - private final ModelPart wingL_r1; - private final ModelPart abdomen_r1; + private final ModelPart legsL; + private final ModelPart cube_r1; + private final ModelPart cube_r2; + private final ModelPart cube_r3; + private final ModelPart legsR; + private final ModelPart cube_r4; + private final ModelPart cube_r5; + private final ModelPart cube_r6; + private final ModelPart head_pivot; + private final ModelPart tendril_r_r1; + private final ModelPart tendril_r_r2; + private final ModelPart bb_main; + private final ModelPart wingR_r1; + private final ModelPart wingL_r1; + private final ModelPart abdomen_r1; - public static LayerDefinition getTexturedModelData() { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); + public static LayerDefinition getTexturedModelData() { + MeshDefinition modelData = new MeshDefinition(); + PartDefinition modelPartData = modelData.getRoot(); PartDefinition legsL = modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() .texOffs(0, 0), @@ -41,20 +41,20 @@ public class SilkMothEntityModel extends BlockBenchModel { 0.0f, 0.0f, 0.6981f)); legsL.addOrReplaceChild("cube_r1", CubeListBuilder.create() - .addBox(0.0216f, 0.0f, -0.5976f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 13), + .texOffs(0, 13) + .addBox(0.0216f, 0.0f, -0.5976f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f, 0.0f, 0.2182f, 0.3927f)); legsL.addOrReplaceChild("cube_r2", CubeListBuilder.create() - .addBox(0.0f, 0.0f, -0.6f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 15), + .texOffs(0, 15) + .addBox(0.0f, 0.0f, -0.6f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f, 0.0f, 0.0f, 0.3927f)); legsL.addOrReplaceChild("cube_r3", CubeListBuilder.create() - .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 14), + .texOffs(0, 14) + .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f, 0.0f, -0.2182f, 0.3927f)); @@ -64,72 +64,72 @@ public class SilkMothEntityModel extends BlockBenchModel { 0.0f, 3.1416f, -0.6545f)); legsR.addOrReplaceChild("cube_r4", CubeListBuilder.create() - .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 10), + .texOffs(0, 10) + .addBox(0.0f, 0.0f, -0.5f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.0f, 0.0f, -1.0f, 0.0f, 0.2182f, 0.3927f)); legsR.addOrReplaceChild("cube_r5", CubeListBuilder.create() - .addBox(0.0f, 0.0f, -0.4f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 11), + .texOffs(0, 11) + .addBox(0.0f, 0.0f, -0.4f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.5f, 0.1f, -0.05f, 0.0f, 0.0f, 0.3927f)); legsR.addOrReplaceChild("cube_r6", CubeListBuilder.create() - .addBox(0.0216f, 0.0f, -0.4024f, 3.0f, 0.0f, 1.0f) - .texOffs(0, 12), + .texOffs(0, 12) + .addBox(0.0216f, 0.0f, -0.4024f, 3.0f, 0.0f, 1.0f), PartPose.offsetAndRotation(0.0f, 0.0f, 0.9f, 0.0f, -0.2182f, 0.3927f)); PartDefinition head_pivot = modelPartData.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create() - .addBox(-1.5f, -1.5f, -2.0f, 3.0f, 3.0f, 3.0f) - .texOffs(15, 10), + .texOffs(15, 10) + .addBox(-1.5f, -1.5f, -2.0f, 3.0f, 3.0f, 3.0f), PartPose.offset(0.0f, 18.0f, -3.0f)); head_pivot.addOrReplaceChild("tendril_r_r1", CubeListBuilder.create() .mirror() - .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f) - .texOffs(23, 0), + .texOffs(23, 0) + .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f), PartPose.offsetAndRotation(1.0f, -1.15f, -1.0f, 0.0f, 0.0f, 0.3927f)); head_pivot.addOrReplaceChild("tendril_r_r2", CubeListBuilder.create() - .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f) - .texOffs(23, 0), + .texOffs(23, 0) + .addBox(-1.5f, -5.0f, 0.0f, 3.0f, 5.0f, 0.0f), PartPose.offsetAndRotation(-1.0f, -1.15f, -1.0f, 0.0f, 0.0f, -0.3927f)); PartDefinition bb_main = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() - .addBox(-2.5f, -8.5f, -3.0f, 5.0f, 5.0f, 3.0f) - .texOffs(19, 19), + .texOffs(19, 19) + .addBox(-2.5f, -8.5f, -3.0f, 5.0f, 5.0f, 3.0f), PartPose.offset(0.0f, 24.0f, 0.0f)); bb_main.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() .mirror() - .addBox(-7.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f) - .texOffs(0, 5), + .texOffs(0, 5) + .addBox(-7.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f), PartPose.offsetAndRotation(-1.5f, -6.5f, 0.5f, 0.0f, 0.0f, 0.3927f)); bb_main.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() - .addBox(-2.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f) - .texOffs(0, 5), + .texOffs(0, 5) + .addBox(-2.0f, 0.0f, -3.0f, 9.0f, 0.0f, 5.0f), PartPose.offsetAndRotation(1.5f, -6.5f, 0.5f, 0.0f, 0.0f, -0.3927f)); bb_main.addOrReplaceChild("abdomen_r1", CubeListBuilder.create() - .addBox(-3.0f, -4.0f, -1.0f, 4.0f, 4.0f, 7.0f) - .texOffs(0, 10), + .texOffs(0, 10) + .addBox(-3.0f, -4.0f, -1.0f, 4.0f, 4.0f, 7.0f), PartPose.offsetAndRotation(1.0f, -3.9f, 0.0f, -0.3927f, 0.0f, 0.0f)); /*texWidth = 64; texHeight = 64;*/ - return LayerDefinition.create(modelData, 64, 64); - } + return LayerDefinition.create(modelData, 64, 64); + } - public SilkMothEntityModel(ModelPart modelPart) { - super(RenderType::entityCutout); + public SilkMothEntityModel(ModelPart modelPart) { + super(RenderType::entityCutout); legsL = modelPart.getChild(PartNames.LEFT_LEG); cube_r1 = legsL.getChild("cube_r1"); @@ -228,27 +228,27 @@ public class SilkMothEntityModel extends BlockBenchModel { bb_main.addChild(abdomen_r1); setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); abdomen_r1.texOffs(0, 10).addBox(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F);*/ - } + } - @Override - public void setupAnim(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress, - float headYaw, float headPitch) { - wingR_r1.zRot = Mth.sin(animationProgress * 2F) * 0.4F + 0.3927F; - wingL_r1.zRot = -wingR_r1.zRot; - head_pivot.xRot = Mth.sin(animationProgress * 0.03F) * 0.1F; - tendril_r_r1.zRot = Mth.sin(animationProgress * 0.07F) * 0.2F + 0.3927F; - tendril_r_r2.zRot = -tendril_r_r1.zRot; - abdomen_r1.xRot = Mth.sin(animationProgress * 0.05F) * 0.1F - 0.3927F; - legsR.zRot = Mth.sin(animationProgress * 0.07F) * 0.1F - 0.6545F; - legsL.zRot = -legsR.zRot; - } + @Override + public void setupAnim(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress, + float headYaw, float headPitch) { + wingR_r1.zRot = Mth.sin(animationProgress * 2F) * 0.4F + 0.3927F; + wingL_r1.zRot = -wingR_r1.zRot; + head_pivot.xRot = Mth.sin(animationProgress * 0.03F) * 0.1F; + tendril_r_r1.zRot = Mth.sin(animationProgress * 0.07F) * 0.2F + 0.3927F; + tendril_r_r2.zRot = -tendril_r_r1.zRot; + abdomen_r1.xRot = Mth.sin(animationProgress * 0.05F) * 0.1F - 0.3927F; + legsR.zRot = Mth.sin(animationProgress * 0.07F) * 0.1F - 0.6545F; + legsL.zRot = -legsR.zRot; + } - @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, - float green, float blue, float alpha) { - bb_main.render(matrices, vertices, light, overlay); - head_pivot.render(matrices, vertices, light, overlay); - legsL.render(matrices, vertices, light, overlay); - legsR.render(matrices, vertices, light, overlay); - } + @Override + public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, + float green, float blue, float alpha) { + bb_main.render(matrices, vertices, light, overlay); + head_pivot.render(matrices, vertices, light, overlay); + legsL.render(matrices, vertices, light, overlay); + legsR.render(matrices, vertices, light, overlay); + } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java index 39fdf210..67813e04 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndSlime.java @@ -22,7 +22,7 @@ public class RendererEntityEndSlime extends MobRenderer(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_MODEL)), 0.25f); + super(ctx, new EndSlimeEntityModel<>(ctx.getModelSet(), false), 0.25f); this.addLayer(new OverlayFeatureRenderer(this, ctx)); this.addLayer(new EyesLayer>(this) { @Override @@ -73,8 +73,8 @@ public class RendererEntityEndSlime extends MobRenderer> featureRendererContext, EntityRendererProvider.Context ctx) { super(featureRendererContext); - modelOrdinal = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); - modelLake = new EndSlimeEntityModel<>(ctx.bakeLayer(EndEntitiesRenders.END_SLIME_SHELL_MODEL)); + modelOrdinal = new EndSlimeEntityModel<>(ctx.getModelSet(), true); + modelLake = new EndSlimeEntityModel<>(ctx.getModelSet(), true); } public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity, diff --git a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java index e19c8077..c853908f 100644 --- a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java +++ b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java @@ -22,14 +22,14 @@ public class ArmoredElytraModel extends AgeableListModel MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() - .addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f) - .texOffs(22, 0), + .texOffs(22, 0) + .addBox(-10.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f), PartPose.ZERO); modelPartData.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create() .mirror() - .addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f) - .texOffs(22, 0), + .texOffs(22, 0) + .addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f), PartPose.ZERO); return LayerDefinition.create(modelData, 48, 48); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java index 7a9b90ff..525d2ced 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java @@ -22,16 +22,27 @@ public class CrystaliteBootsModel extends HumanoidModel { final float scale = 1.0f; MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); - CubeDeformation deformation = new CubeDeformation(scale + 0.25f); + // TODO: see if we need to subclass HumanoidModel + // Humanoid model tries to retrieve all parts in it's constructor, + // so we need to add empty Nodes + modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + + CubeDeformation deformation = new CubeDeformation(scale + 0.25f); modelPartData.addOrReplaceChild("leftBoot", CubeListBuilder.create() - .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(0, 32), + .texOffs(0, 32) + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(1.9f, 12.0f, 0.0f)); modelPartData.addOrReplaceChild("rightBoot", CubeListBuilder.create() - .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(0, 16), + .texOffs(0, 16) + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(-1.9f, 12.0f, 0.0f)); return LayerDefinition.create(modelData, 64, 48); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index 51b705fe..058ec7d1 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -33,35 +33,47 @@ public class CrystaliteChestplateModel extends HumanoidModel { private static LayerDefinition getTexturedModelData(float scale, boolean thinArms) { MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); + + // TODO: see if we need to subclass HumanoidModel + // Humanoid model tries to retrieve all parts in it's constructor, + // so we need to add empty Nodes + modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + // modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + CubeDeformation deformation = new CubeDeformation(scale + 0.25F); PartDefinition body = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() - .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation) - .texOffs(16, 16), + .texOffs(16, 16) + .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation), PartPose.ZERO); if (thinArms) { deformation = new CubeDeformation(scale + 0.45F); PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() .mirror() - .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(40, 32), + .texOffs(40, 32) + .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(5.0f, 2.0f, 0.0f)); PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() - .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(40, 16), + .texOffs(40, 16) + .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(-5.0f, 2.0f, 10.0f)); } else { deformation = new CubeDeformation(scale + 0.45F); PartDefinition leftShoulder = modelPartData.addOrReplaceChild("leftShoulder", CubeListBuilder.create() .mirror() - .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(40, 32), + .texOffs(40, 32) + .addBox(-1.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(5.0f, 2.0f, 0.0f)); PartDefinition rightShoulder = modelPartData.addOrReplaceChild("rightShoulder", CubeListBuilder.create() - .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(40, 16), + .texOffs(40, 16) + .addBox(-3.0f, -2.5f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(-5.0f, 2.0f, 10.0f)); } return LayerDefinition.create(modelData, 64, 48); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java index 489d75e5..0c5518d0 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java @@ -15,6 +15,7 @@ import net.minecraft.client.model.geom.builders.*; import net.minecraft.client.renderer.RenderType; import net.minecraft.world.entity.LivingEntity; import ru.betterend.registry.EndEntitiesRenders; +import shadow.fabric.impl.client.rendering.ArmorProviderExtensions; @Environment(EnvType.CLIENT) public class CrystaliteHelmetModel extends HumanoidModel { @@ -23,10 +24,22 @@ public class CrystaliteHelmetModel extends HumanoidModel { final float scale = 1.0f; MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); + + // TODO: see if we need to subclass HumanoidModel + // Humanoid model tries to retrieve all parts in it's constructor, + // so we need to add empty Nodes + modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + //modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + CubeDeformation deformation_hat = new CubeDeformation(scale + 0.5f); PartDefinition hat = modelPartData.addOrReplaceChild(PartNames.HAT, CubeListBuilder.create() - .addBox(-4.0f, -8.0f, -4.0f, 8.0f, 8.0f, 8.0f, deformation_hat) - .texOffs(0, 0), + .texOffs(0, 0) + .addBox(-4.0f, -8.0f, -4.0f, 8.0f, 8.0f, 8.0f, deformation_hat), PartPose.ZERO); return LayerDefinition.create(modelData, 64, 48); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java index b8a7ecbc..0d7c6a32 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java @@ -19,20 +19,32 @@ public class CrystaliteLeggingsModel extends HumanoidModel { float scale = 1.0f; MeshDefinition modelData = new MeshDefinition(); PartDefinition modelPartData = modelData.getRoot(); + + // TODO: see if we need to subclass HumanoidModel + // Humanoid model tries to retrieve all parts in it's constructor, + // so we need to add empty Nodes + modelPartData.addOrReplaceChild("head", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("hat", CubeListBuilder.create(), PartPose.ZERO); + // modelPartData.addOrReplaceChild("body", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("right_arm", CubeListBuilder.create(), PartPose.ZERO); + modelPartData.addOrReplaceChild("left_arm", CubeListBuilder.create(), PartPose.ZERO); + // modelPartData.addOrReplaceChild("right_leg", CubeListBuilder.create(), PartPose.ZERO); + // modelPartData.addOrReplaceChild("left_leg", CubeListBuilder.create(), PartPose.ZERO); + CubeDeformation deformation = new CubeDeformation(scale); modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create() - .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation) - .texOffs(16, 16), + .texOffs(16, 16) + .addBox(-4.0f, 0.0f, -2.0f, 8.0f, 12.0f, 4.0f, deformation), PartPose.ZERO); modelPartData.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create() - .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(0, 32), + .texOffs(0, 32) + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(1.9f, 12.0f, 0.0f)); modelPartData.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create() - .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation) - .texOffs(0, 16), + .texOffs(0, 16) + .addBox(-2.0f, 0.0f, -2.0f, 4.0f, 12.0f, 4.0f, deformation), PartPose.offset(-1.9f, 12.0f, 0.0f)); return LayerDefinition.create(modelData, 64, 48); From 2aa6243f405ba50ebd1d83759cb9a8b7fc9e242e Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 22:12:19 +0200 Subject: [PATCH 55/72] Fixed runtime crashes --- .../java/ru/betterend/blocks/BubbleCoralBlock.java | 4 ++-- .../java/ru/betterend/blocks/EndStoneSmelter.java | 3 ++- .../ru/betterend/blocks/basis/PedestalBlock.java | 3 ++- src/main/resources/betterend.mixins.client.json | 14 +++++++------- src/main/resources/betterend.mixins.common.json | 7 ++++--- 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java b/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java index 22bbaa67..6963455a 100644 --- a/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java +++ b/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java @@ -1,7 +1,5 @@ package ru.betterend.blocks; -import java.util.Random; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -19,6 +17,8 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.EndUnderwaterPlantBlock; +import java.util.Random; + public class BubbleCoralBlock extends EndUnderwaterPlantBlock { private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 14, 16); diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index 1a25bf56..e7281b88 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -148,8 +148,9 @@ public class EndStoneSmelter extends BaseBlockWithEntity { } + @Override @Nullable - public BlockEntityTicker getTicker(Level level, BlockEntityType blockEntityType) { + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { return level.isClientSide() ? null : createTickerHelper(blockEntityType, EndBlockEntities.END_STONE_SMELTER, EndStoneSmelterBlockEntity::tick); } } diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 433ff1e8..81407855 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -432,8 +432,9 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { }; } + @Override @Nullable - public BlockEntityTicker getTicker(Level level, BlockEntityType blockEntityType) { + public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { return level.isClientSide() ? null : createTickerHelper(blockEntityType, EndBlockEntities.PEDESTAL, PedestalBlockEntity::tick); } diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index 084bbab4..6fd0fc05 100644 --- a/src/main/resources/betterend.mixins.client.json +++ b/src/main/resources/betterend.mixins.client.json @@ -2,23 +2,23 @@ "required": true, "minVersion": "0.8", "package": "ru.betterend.mixin.client", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_16", "client": [ "AbstractSoundInstanceAccessor", "ClientPlayNetworkHandlerMixin", - "HumanoidMobRendererMixin", - "ArmorStandRendererMixin", + "HumanoidMobRendererMixin", + "ArmorStandRendererMixin", "ClientRecipeBookMixin", "MinecraftClientMixin", - "PlayerRendererMixin", + "PlayerRendererMixin", "WorldRendererMixin", "MusicTrackerMixin", "AnvilScreenMixin", "BiomeColorsMixin", "ModelLoaderMixin", - "LocalPlayerMixin", - "CapeLayerMixin", - "ItemStackMixin" + "LocalPlayerMixin", + "CapeLayerMixin", + "ItemStackMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/betterend.mixins.common.json b/src/main/resources/betterend.mixins.common.json index e4d533ea..901e1855 100644 --- a/src/main/resources/betterend.mixins.common.json +++ b/src/main/resources/betterend.mixins.common.json @@ -2,7 +2,7 @@ "required": true, "minVersion": "0.8", "package": "ru.betterend.mixin.common", - "compatibilityLevel": "JAVA_8", + "compatibilityLevel": "JAVA_16", "mixins": [ "BiomeGenerationSettingsAccessor", "NoiseBasedChunkGeneratorMixin", @@ -22,7 +22,7 @@ "CraftingMenuMixin", "LivingEntityMixin", "ServerPlayerMixin", - "SpikeFeatureMixin", + "SpikeFeatureMixin", "ServerLevelMixin", "PlayerListMixin", "AnvilMenuMixin", @@ -31,7 +31,8 @@ "MonsterMixin", "EntityMixin", "PlayerMixin", - "SlimeMixin" + "SlimeMixin", + "ShuffelingListMixin" ], "injectors": { "defaultRequire": 1 From ea62902ee8c236361c0c5647329203d9b8b0ba16 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Mon, 28 Jun 2021 22:39:37 +0200 Subject: [PATCH 56/72] Fixed `EndPodiumFeatureMixin` --- .../ru/betterend/mixin/common/EndPodiumFeatureMixin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index 33bcf523..a10f460b 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -51,8 +51,10 @@ public class EndPodiumFeatureMixin { } @ModifyVariable(method = "place", ordinal = 0, at = @At("HEAD")) - private BlockPos be_setPosOnGround(BlockPos blockPos, WorldGenLevel world) { - return be_updatePos(blockPos, world); + private FeaturePlaceContext be_setPosOnGround(FeaturePlaceContext featurePlaceContext) { + WorldGenLevel world = featurePlaceContext.level(); + BlockPos pos = be_updatePos(featurePlaceContext.origin(), world); + return new FeaturePlaceContext(world, featurePlaceContext.chunkGenerator(), featurePlaceContext.random(), pos, featurePlaceContext.config()); } private BlockPos be_updatePos(BlockPos blockPos, WorldGenLevel world) { From 13e169c4588d0d1bc57fb05d2865ed16204e0a63 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 29 Jun 2021 21:14:28 +0300 Subject: [PATCH 57/72] Possible avoid #214 --- build.gradle | 3 +++ .../ru/betterend/mixin/common/LivingEntityMixin.java | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 4411ad02..ce8b3995 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,7 @@ def useOptional(String dep) { exclude group: "net.fabricmc.fabric-api" exclude group: "net.fabricmc" if (!dep.contains("me.shedaniel")) { + exclude group: "me.shedaniel.cloth" exclude group: "me.shedaniel" } } @@ -53,6 +54,7 @@ def useOptional(String dep) { exclude group: "net.fabricmc.fabric-api" exclude group: "net.fabricmc" if (!dep.contains("me.shedaniel")) { + exclude group: "me.shedaniel.cloth" exclude group: "me.shedaniel" } } @@ -63,6 +65,7 @@ def useApi(String dep) { exclude group: "net.fabricmc.fabric-api" exclude group: "net.fabricmc" if (!dep.contains("me.shedaniel")) { + exclude group: "me.shedaniel.cloth" exclude group: "me.shedaniel" } } diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index b4e430d6..93c28174 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -32,6 +32,7 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; +import ru.betterend.BetterEnd; import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.interfaces.MobEffectApplier; import ru.betterend.item.CrystaliteArmor; @@ -89,8 +90,12 @@ public abstract class LivingEntityMixin extends Entity { @Inject(method = "canBeAffected", at = @At("HEAD"), cancellable = true) public void be_canBeAffected(MobEffectInstance mobEffectInstance, CallbackInfoReturnable info) { - if (mobEffectInstance.getEffect() == MobEffects.BLINDNESS && getAttributes().getValue(EndAttributes.BLINDNESS_RESISTANCE) > 0.0) { - info.setReturnValue(false); + try { + if (mobEffectInstance.getEffect() == MobEffects.BLINDNESS && getAttributes().getValue(EndAttributes.BLINDNESS_RESISTANCE) > 0.0) { + info.setReturnValue(false); + } + } catch (Exception ex) { + BetterEnd.LOGGER.warning("Blindness resistance attribute haven't registered."); } } From e7c85c8148e2bffc348abf42c84697fb7550de27 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Tue, 29 Jun 2021 20:23:19 +0200 Subject: [PATCH 58/72] Partially working REI --- .../integration/rei/REIAlloyingCategory.java | 8 +-- .../integration/rei/REIAlloyingDisplay.java | 22 +++---- .../rei/REIAlloyingFuelDisplay.java | 8 +-- .../integration/rei/REIAnvilCategory.java | 12 ++-- .../integration/rei/REIBlastingDisplay.java | 10 +++ .../integration/rei/REIContainer.java | 3 + .../integration/rei/REIInfusionCategory.java | 5 +- .../{REIPluginClient.java => REIPlugin.java} | 66 ++++++++++++------- src/main/resources/fabric.mod.json | 7 +- 9 files changed, 85 insertions(+), 56 deletions(-) create mode 100644 src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java rename src/main/java/ru/betterend/integration/rei/{REIPluginClient.java => REIPlugin.java} (55%) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 1d915bc9..2a777fe2 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -5,19 +5,18 @@ import com.mojang.blaze3d.vertex.PoseStack; import it.unimi.dsi.fastutil.ints.IntList; import me.shedaniel.math.Point; import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.client.gui.DisplayRenderer; -import me.shedaniel.rei.api.client.gui.SimpleDisplayRenderer; import me.shedaniel.rei.api.client.gui.widgets.Widget; import me.shedaniel.rei.api.client.gui.widgets.Widgets; import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.NotNull; -import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlocks; import java.text.DecimalFormat; @@ -37,7 +36,8 @@ public class REIAlloyingCategory implements TransferDisplayCategory recipe; private float xp; private double smeltTime; + + public REIAlloyingDisplay(AlloyingRecipe recipe) { + this(recipe, recipe.getExperience(), recipe.getSmeltTime()); + } + protected REIAlloyingDisplay(Recipe recipe, float xp, double smeltTime) { super( EntryIngredients.ofIngredients(recipe.getIngredients()), Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) ); this.recipe = recipe; - this.xp = recipe.getExperience(); - this.smeltTime = recipe.getSmeltTime(); + this.xp = xp; + this.smeltTime = smeltTime; } - - public REIAlloyingDisplay(BlastingRecipe recipe) { - super( - EntryIngredients.ofIngredients(recipe.getIngredients()), - Collections.singletonList(EntryIngredients.of(recipe.getResultItem())) - ); - this.recipe = recipe; - this.xp = recipe.getExperience(); - this.smeltTime = recipe.getCookingTime(); - } - + + public static List getFuel() { return fuel; } diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelDisplay.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelDisplay.java index c177c5fa..7e9d64e1 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelDisplay.java @@ -8,7 +8,7 @@ import net.minecraft.nbt.CompoundTag; import java.util.Collections; import java.util.List; -public class REIAlloyingFuelDisplay extends BasicDisplay { +public abstract class REIAlloyingFuelDisplay extends BasicDisplay { private final int fuelTime; public REIAlloyingFuelDisplay(List fuel, CompoundTag tag) { @@ -24,10 +24,10 @@ public class REIAlloyingFuelDisplay extends BasicDisplay { this.fuelTime = fuelTime; }*/ - @Override + /*@Override public CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.ALLOYING_FUEL; - } + return REIPluginClient.ALLOYING_FUEL; + }*/ public int getFuelTime() { return fuelTime; diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 479ef998..694376cc 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -11,17 +11,18 @@ import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import org.jetbrains.annotations.NotNull; import ru.betterend.blocks.basis.EndAnvilBlock; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -39,11 +40,12 @@ public class REIAnvilCategory implements TransferDisplayCategory setupDisplay(REIAnvilDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); List widgets = Lists.newArrayList(); @@ -54,7 +56,7 @@ public class REIAnvilCategory implements TransferDisplayCategory inputEntries = display.getInputEntries(); EntryIngredient materials = inputEntries.get(1); int anvilLevel = display.getAnvilLevel(); - List anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { + List anvils = Arrays.stream(REIPluginClient.ANVILS).filter(anvil -> { Block block = ((BlockItem) anvil.getValue()).getBlock(); if (block instanceof EndAnvilBlock) { return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; @@ -71,7 +73,7 @@ public class REIAnvilCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAnvilDisplay display, diff --git a/src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java b/src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java new file mode 100644 index 00000000..3dc0fc5d --- /dev/null +++ b/src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java @@ -0,0 +1,10 @@ +package ru.betterend.integration.rei; + +import net.minecraft.world.item.crafting.BlastingRecipe; +import ru.betterend.recipe.builders.AlloyingRecipe; + +public class REIBlastingDisplay extends REIAlloyingDisplay{ + public REIBlastingDisplay(BlastingRecipe recipe) { + super(recipe, recipe.getExperience(), recipe.getCookingTime()); + } +} diff --git a/src/main/java/ru/betterend/integration/rei/REIContainer.java b/src/main/java/ru/betterend/integration/rei/REIContainer.java index 47bfa4e8..3b9c7299 100644 --- a/src/main/java/ru/betterend/integration/rei/REIContainer.java +++ b/src/main/java/ru/betterend/integration/rei/REIContainer.java @@ -1,5 +1,8 @@ package ru.betterend.integration.rei; +import ru.betterend.client.gui.EndStoneSmelterScreenHandler; +import ru.betterend.recipe.builders.AlloyingRecipe; + public class REIContainer implements Runnable { @Override diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index eeb77143..92c4ed5f 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -11,9 +11,11 @@ import me.shedaniel.rei.api.client.registry.display.TransferDisplayCategory; import me.shedaniel.rei.api.common.category.CategoryIdentifier; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.api.common.entry.EntryStack; +import me.shedaniel.rei.api.common.util.EntryStacks; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; import org.jetbrains.annotations.NotNull; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; @@ -36,7 +38,8 @@ public class REIInfusionCategory implements TransferDisplayCategory) () -> this, PLUGIN_ID); - //} /*@Override public void registerRecipeDisplays(RecipeHelper recipeHelper) { @@ -64,6 +68,14 @@ public class REIPlugin implements me.shedaniel.rei.api.client.plugins.REIClientP } }); }*/ + + @Override + public void registerDisplays(DisplayRegistry registry) { + registry.registerRecipeFiller(AlloyingRecipe.class, AlloyingRecipe.TYPE, REIAlloyingDisplay::new); + registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, REIBlastingDisplay::new); + registry.registerRecipeFiller(AnvilRecipe.class, AnvilRecipe.TYPE, REIAnvilDisplay::new); + registry.registerRecipeFiller(InfusionRecipe.class, InfusionRecipe.TYPE, REIInfusionDisplay::new); + } @Override public void registerCategories(CategoryRegistry registry) { @@ -74,24 +86,30 @@ public class REIPlugin implements me.shedaniel.rei.api.client.plugins.REIClientP new REIAnvilCategory() ); - registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER); - registry.addWorkstations(ALLOYING, END_STONE_SMELTER); - registry.addWorkstations(INFUSION, INFUSION_RITUAL); - registry.addWorkstations(SMITHING, ANVILS); + //registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER); + //registry.addWorkstations(ALLOYING, END_STONE_SMELTER); + //registry.addWorkstations(INFUSION, INFUSION_RITUAL); + //registry.addWorkstations(SMITHING, ANVILS); registry.removePlusButton(ALLOYING_FUEL); registry.removePlusButton(SMITHING); - registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES); - registry.addWorkstations(DefaultPlugin.FUEL, FURNACES); - } + //registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES); + //registry.addWorkstations(DefaultPlugin.FUEL, FURNACES); + } + static EntryType BLOCK = EntryType.deferred(new ResourceLocation("block")); static { - List anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() + //initialize static state + EndPortals.loadPortals(); + System.out.println(EndBlocks.END_STONE_SMELTER + " - " + EndBlocks.END_STONE_SMELTER.asItem()); + //END_STONE_SMELTER = EntryStacks.of(EndBlocks.END_STONE_SMELTER.asItem()); + /*List anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() .filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList()))); anvils.add(0, EntryStacks.of(Blocks.ANVIL)); - ANVILS = anvils.toArray(new EntryStack[0]); - FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() + ANVILS = anvils.toArray(new EntryStack[0]);*/ + + /*FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() .filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))) - .toArray(new EntryStack[0]); + .toArray(new EntryStack[0]);*/ } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 90a89ea6..4ca4089f 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -31,11 +31,8 @@ "ru.betterend.client.BetterEndClient" ], "rei_plugins": [ - "ru.betterend.integration.rei.REIPlugin" - ], - "rei_containers": [ - "ru.betterend.integration.rei.REIContainer" - ] + "ru.betterend.integration.rei.REIPlugin" + ] }, "mixins": [ "betterend.mixins.common.json", From c5fb15604296a28e6d1e8d80c86f42b70a74ef19 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Tue, 29 Jun 2021 21:32:55 +0200 Subject: [PATCH 59/72] Fixes for REI --- .../integration/rei/REIAlloyingCategory.java | 7 +- .../rei/REIAlloyingFuelDisplay.java | 8 +- .../integration/rei/REIAnvilCategory.java | 14 ++- .../integration/rei/REIInfusionCategory.java | 8 +- .../betterend/integration/rei/REIPlugin.java | 91 +++++++++---------- 5 files changed, 67 insertions(+), 61 deletions(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 2a777fe2..0b11a5f8 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -23,6 +23,10 @@ import java.text.DecimalFormat; import java.util.List; public class REIAlloyingCategory implements TransferDisplayCategory { + private final EntryStack ICON; + REIAlloyingCategory(EntryStack icon){ + ICON = icon; + } @Override public @NotNull CategoryIdentifier getCategoryIdentifier() { @@ -36,8 +40,7 @@ public class REIAlloyingCategory implements TransferDisplayCategory fuel, CompoundTag tag) { @@ -24,10 +24,10 @@ public abstract class REIAlloyingFuelDisplay extends BasicDisplay { this.fuelTime = fuelTime; }*/ - /*@Override + @Override public CategoryIdentifier getCategoryIdentifier() { - return REIPluginClient.ALLOYING_FUEL; - }*/ + return REIPlugin.ALLOYING_FUEL; + } public int getFuelTime() { return fuelTime; diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 694376cc..7875148f 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -27,6 +27,11 @@ import java.util.List; import java.util.stream.Collectors; public class REIAnvilCategory implements TransferDisplayCategory { + private final EntryStack[] ANVILS; + + REIAnvilCategory(EntryStack[] anvils){ + ANVILS = anvils; + } @Override public @NotNull CategoryIdentifier getCategoryIdentifier() { @@ -40,12 +45,11 @@ public class REIAnvilCategory implements TransferDisplayCategory setupDisplay(REIAnvilDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); List widgets = Lists.newArrayList(); @@ -56,7 +60,7 @@ public class REIAnvilCategory implements TransferDisplayCategory inputEntries = display.getInputEntries(); EntryIngredient materials = inputEntries.get(1); int anvilLevel = display.getAnvilLevel(); - List anvils = Arrays.stream(REIPluginClient.ANVILS).filter(anvil -> { + List anvils = Arrays.stream(ANVILS).filter(anvil -> { Block block = ((BlockItem) anvil.getValue()).getBlock(); if (block instanceof EndAnvilBlock) { return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; @@ -73,7 +77,7 @@ public class REIAnvilCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAnvilDisplay display, diff --git a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java index 92c4ed5f..1ab786a7 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -25,6 +25,11 @@ import java.util.List; public class REIInfusionCategory implements TransferDisplayCategory { private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); + private final EntryStack ICON; + + REIInfusionCategory(EntryStack icon){ + ICON = icon; + } @Override public @NotNull CategoryIdentifier getCategoryIdentifier() { @@ -38,8 +43,7 @@ public class REIInfusionCategory implements TransferDisplayCategory { - if (time >= 2000) { - recipeHelper.registerDisplay(new REIAlloyingFuelDisplay(EntryStack.of(item), time)); - } - }); - }*/ + void init(){ + //we need to initialize those variables after the static initialization + //otherwise the registry does not know the BlockItems + if (END_STONE_SMELTER!=null) { + return; + } + + END_STONE_SMELTER = EntryStacks.of(EndBlocks.END_STONE_SMELTER); + INFUSION_RITUAL = EntryStacks.of(EndBlocks.INFUSION_PEDESTAL); + + List anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() + .filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList()))); + anvils.add(0, EntryStacks.of(Blocks.ANVIL)); + ANVILS = anvils.toArray(new EntryStack[0]); + + FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() + .filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))) + .toArray(new EntryStack[0]); + } @Override public void registerDisplays(DisplayRegistry registry) { @@ -75,41 +77,34 @@ public final static int VAL = 13; registry.registerRecipeFiller(BlastingRecipe.class, RecipeType.BLASTING, REIBlastingDisplay::new); registry.registerRecipeFiller(AnvilRecipe.class, AnvilRecipe.TYPE, REIAnvilDisplay::new); registry.registerRecipeFiller(InfusionRecipe.class, InfusionRecipe.TYPE, REIInfusionDisplay::new); + + FuelRegistryImpl.INSTANCE.getFuelTimes().forEach((item, time) -> { + if (time >= 2000) { + final List list = Arrays.asList(EntryIngredients.of(item)); + registry.add(new REIAlloyingFuelDisplay(list, time)); + } + }); } @Override public void registerCategories(CategoryRegistry registry) { + init(); + registry.add( new REIAlloyingFuelCategory(), - new REIAlloyingCategory(), - new REIInfusionCategory(), - new REIAnvilCategory() + new REIAlloyingCategory(END_STONE_SMELTER), + new REIInfusionCategory(INFUSION_RITUAL), + new REIAnvilCategory(ANVILS) ); - //registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER); - //registry.addWorkstations(ALLOYING, END_STONE_SMELTER); - //registry.addWorkstations(INFUSION, INFUSION_RITUAL); - //registry.addWorkstations(SMITHING, ANVILS); + registry.addWorkstations(ALLOYING_FUEL, END_STONE_SMELTER); + registry.addWorkstations(ALLOYING, END_STONE_SMELTER); + registry.addWorkstations(INFUSION, INFUSION_RITUAL); + registry.addWorkstations(SMITHING, ANVILS); registry.removePlusButton(ALLOYING_FUEL); registry.removePlusButton(SMITHING); - //registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES); - //registry.addWorkstations(DefaultPlugin.FUEL, FURNACES); - - } - static EntryType BLOCK = EntryType.deferred(new ResourceLocation("block")); - static { - //initialize static state - EndPortals.loadPortals(); - System.out.println(EndBlocks.END_STONE_SMELTER + " - " + EndBlocks.END_STONE_SMELTER.asItem()); - //END_STONE_SMELTER = EntryStacks.of(EndBlocks.END_STONE_SMELTER.asItem()); - /*List anvils = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() - .filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList()))); - anvils.add(0, EntryStacks.of(Blocks.ANVIL)); - ANVILS = anvils.toArray(new EntryStack[0]);*/ - - /*FURNACES = Lists.newArrayList(EntryIngredients.ofItems(EndBlocks.getModBlocks().stream() - .filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))) - .toArray(new EntryStack[0]);*/ + registry.addWorkstations(DefaultPlugin.SMELTING, FURNACES); + registry.addWorkstations(DefaultPlugin.FUEL, FURNACES); } } From b6c4e73481f237c7198565f7644b79837fc0e88e Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Tue, 29 Jun 2021 22:02:30 +0200 Subject: [PATCH 60/72] Fixed crash for anvil items on REI --- .../ru/betterend/integration/rei/REIAnvilCategory.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 7875148f..92456f5a 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -16,6 +16,7 @@ import net.minecraft.client.gui.GuiComponent; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; @@ -61,7 +62,11 @@ public class REIAnvilCategory implements TransferDisplayCategory { - Block block = ((BlockItem) anvil.getValue()).getBlock(); + Object value = anvil.getValue(); + if (value instanceof ItemStack){ + value = ((ItemStack) value).getItem(); + } + Block block = ((BlockItem) value).getBlock(); if (block instanceof EndAnvilBlock) { return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; } From ab6d015c98ff4c716ace065e23f2e638527566b9 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Tue, 29 Jun 2021 23:05:36 +0200 Subject: [PATCH 61/72] Fixed Tick for `InfusionPedestal` --- .../ru/betterend/blocks/basis/PedestalBlock.java | 7 ++++++- .../blocks/entities/InfusionPedestalEntity.java | 11 +++++------ .../blocks/entities/PedestalBlockEntity.java | 14 +++++--------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 81407855..8d79e82f 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -435,7 +435,12 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { @Override @Nullable public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { - return level.isClientSide() ? null : createTickerHelper(blockEntityType, EndBlockEntities.PEDESTAL, PedestalBlockEntity::tick); + if (level.isClientSide) return null; + + BlockEntityTicker ticker = createTickerHelper(blockEntityType, EndBlockEntities.PEDESTAL, PedestalBlockEntity::tick); + if (ticker!=null) return ticker; + + return createTickerHelper(blockEntityType, EndBlockEntities.INFUSION_PEDESTAL, InfusionPedestalEntity::tick); } @Nullable diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index b13054dc..924c2af7 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -44,13 +44,12 @@ public class InfusionPedestalEntity extends PedestalBlockEntity { public boolean hasRitual() { return linkedRitual != null; } - - @Override - protected void tick(Level tickLevel, BlockPos tickPos, BlockState tickState){ - if (hasRitual()) { - linkedRitual.tick(); + + public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, InfusionPedestalEntity blockEntity) { + if (blockEntity.hasRitual()) { + blockEntity.linkedRitual.tick(); } - super.tick(tickLevel, tickPos, tickState); + PedestalBlockEntity.tick(tickLevel, tickPos, tickState, blockEntity); } @Override diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index c7668f2d..27dd586e 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -132,16 +132,12 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block } } - protected void tick(Level tickLevel, BlockPos tickPos, BlockState tickState){ - if (!this.isEmpty()) { - this.age++; - if (this.age > this.maxAge) { - this.age = 0; + public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { + if (!blockEntity.isEmpty()) { + blockEntity.age++; + if (blockEntity.age > blockEntity.maxAge) { + blockEntity.age = 0; } } } - - public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { - blockEntity.tick(tickLevel, tickPos, tickState); - } } From 2ba7ed4ec8fc87631ed655a0959913f11ddbffa8 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Tue, 29 Jun 2021 23:33:32 +0200 Subject: [PATCH 62/72] Fixed crash for unplacable Anvil --- src/main/java/ru/betterend/item/EndAnvilItem.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ru/betterend/item/EndAnvilItem.java b/src/main/java/ru/betterend/item/EndAnvilItem.java index c1b1625c..0b178487 100644 --- a/src/main/java/ru/betterend/item/EndAnvilItem.java +++ b/src/main/java/ru/betterend/item/EndAnvilItem.java @@ -27,7 +27,9 @@ public class EndAnvilItem extends BaseAnvilItem { BlockState blockState = super.getPlacementState(blockPlaceContext); ItemStack stack = blockPlaceContext.getItemInHand(); int durability = stack.getOrCreateTag().getInt(DURABILITY); - blockState = blockState.setValue(((EndAnvilBlock) blockState.getBlock()).getDurability(), durability); + if (blockState!=null) { + blockState = blockState.setValue(((EndAnvilBlock) blockState.getBlock()).getDurability(), durability); + } return blockState; } From 9a28623230284778ea996929c1c834ffc61d7678 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 30 Jun 2021 12:23:27 +0200 Subject: [PATCH 63/72] Fabric 1.17 does not contain the `ArmorRenderingRegistry`. Temporarily added the missing files to a shadow-namespace to allw testing of the CrystaliteArmor. --- .../item/model/CrystaliteArmorProvider.java | 7 +- .../betterend/registry/EndModelProviders.java | 7 +- .../rendering/v1/ArmorRenderingRegistry.java | 168 ++++++++++++++++++ .../rendering/ArmorProviderExtensions.java | 37 ++++ .../rendering/ArmorRenderingRegistryImpl.java | 82 +++++++++ .../rendering/MixinArmorFeatureRenderer.java | 107 +++++++++++ .../mixin/client/rendering/MixinItem.java | 57 ++++++ .../resources/betterend.mixins.shadow.json | 13 ++ src/main/resources/fabric.mod.json | 3 +- 9 files changed, 474 insertions(+), 7 deletions(-) create mode 100644 src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java create mode 100644 src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java create mode 100644 src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java create mode 100644 src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java create mode 100644 src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java create mode 100644 src/main/resources/betterend.mixins.shadow.json diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index 1e5b603b..d1da3318 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -1,5 +1,7 @@ package ru.betterend.item.model; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.world.item.ArmorMaterial; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -16,9 +18,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import ru.betterend.item.CrystaliteArmor; import ru.betterend.registry.EndItems; +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; @Environment(EnvType.CLIENT) -public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider*/ { +public class CrystaliteArmorProvider implements ArmorRenderingRegistry.ModelProvider, ArmorRenderingRegistry.TextureProvider { //TODO: find new registry private final static ResourceLocation FIRST_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_1.png"); private final static ResourceLocation SECOND_LAYER = new ResourceLocation("textures/models/armor/crystalite_layer_2.png"); @@ -27,7 +30,7 @@ public class CrystaliteArmorProvider /*implements ModelProvider, TextureProvider private final static CrystaliteChestplateModel CHEST_MODEL_SLIM = CrystaliteChestplateModel.createThinModel(null); private final static CrystaliteLeggingsModel LEGGINGS_MODEL = CrystaliteLeggingsModel.createModel(null); private final static CrystaliteBootsModel BOOTS_MODEL = CrystaliteBootsModel.createModel(null); - + //@Override public @NotNull ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { diff --git a/src/main/java/ru/betterend/registry/EndModelProviders.java b/src/main/java/ru/betterend/registry/EndModelProviders.java index f0a4e35b..0bcb41ce 100644 --- a/src/main/java/ru/betterend/registry/EndModelProviders.java +++ b/src/main/java/ru/betterend/registry/EndModelProviders.java @@ -3,6 +3,7 @@ package ru.betterend.registry; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import ru.betterend.item.model.CrystaliteArmorProvider; +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; @Environment(EnvType.CLIENT) public class EndModelProviders { @@ -10,9 +11,7 @@ public class EndModelProviders { public final static CrystaliteArmorProvider CRYSTALITE_PROVIDER = new CrystaliteArmorProvider(); public final static void register() { - //TODO: Needs Fix in 1.17 - throw new RuntimeException("Needs Fix for 1.17"); - //ArmorRenderingRegistry.registerModel(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); - //ArmorRenderingRegistry.registerTexture(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); + ArmorRenderingRegistry.registerModel(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); + ArmorRenderingRegistry.registerTexture(CRYSTALITE_PROVIDER, CRYSTALITE_PROVIDER.getRenderedItems()); } } diff --git a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java new file mode 100644 index 00000000..068baebc --- /dev/null +++ b/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* + This file is a refactor from fabric-api, based on the work of shedaniel. + */ + + +package shadow.fabric.api.client.rendering.v1; + +import java.util.Arrays; + +import shadow.fabric.impl.client.rendering.ArmorRenderingRegistryImpl; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +/** + * A class for registering custom armor models and textures for {@link Item}, to be provided by a {@link ModelProvider} or {@link TextureProvider}. + * + *

This can be used to replace existing vanilla armor models and textures conditionally, however each {@link Item} + * instance can only allow one {@link ModelProvider} or {@link TextureProvider} respectively, causing potential conflicts + * with other mods if you replace the model or texture for vanilla items. Consider using a separate item instead.

+ * + *

A custom model would probably also require a custom texture to go along it, the model will use the vanilla texture if it is undefined.

+ * + *

Since armor textures identifier in vanilla is hardcoded to be in the {@code minecraft} namespace, this registry can also be + * used to use a custom namespace if desired.

+ */ +@Environment(EnvType.CLIENT) +public final class ArmorRenderingRegistry { + private ArmorRenderingRegistry() { + } + + /** + * Registers a provider for custom armor models for an item. + * + * @param provider the provider for the model + * @param items the items to be registered for + */ + public static void registerModel(@Nullable ModelProvider provider, Item... items) { + registerModel(provider, Arrays.asList(items)); + } + + /** + * Registers a provider for custom armor models for an item. + * + * @param provider the provider for the model + * @param items the items to be registered for + */ + public static void registerModel(@Nullable ModelProvider provider, Iterable items) { + ArmorRenderingRegistryImpl.registerModel(provider, items); + } + + /** + * Registers a provider for custom texture models for an item. + * + * @param provider the provider for the texture + * @param items the items to be registered for + */ + public static void registerTexture(@Nullable TextureProvider provider, Item... items) { + registerTexture(provider, Arrays.asList(items)); + } + + /** + * Registers a provider for custom texture models for an item. + * + * @param provider the provider for the texture + * @param items the items to be registered for + */ + public static void registerTexture(@Nullable TextureProvider provider, Iterable items) { + ArmorRenderingRegistryImpl.registerTexture(provider, items); + } + + /** + * Register simple armor items to use the vanilla armor file name under the mods namespace. + * + * @param identifier The namespace + path to use for the armor texture location. + * @param items the items to be registered + */ + public static void registerSimpleTexture(ResourceLocation identifier, Item... items) { + registerTexture((entity, stack, slot, secondLayer, suffix, defaultTexture) -> { + return new ResourceLocation(identifier.getNamespace(), "textures/models/armor/" + identifier.getPath() + "_layer_" + (secondLayer ? 2 : 1) + (suffix == null ? "" : "_" + suffix) + ".png"); + }, items); + } + + /** + * Gets the model of the armor piece. + * + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param defaultModel The default model that vanilla provides + * @return The model of the armor piece. + */ + @NotNull + public static HumanoidModel getArmorModel(LivingEntity entity, ItemStack stack, EquipmentSlot slot, HumanoidModel defaultModel) { + return ArmorRenderingRegistryImpl.getArmorModel(entity, stack, slot, defaultModel); + } + + /** + * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. + * + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param secondLayer True if using the second texture layer + * @param suffix The texture suffix, used in vanilla by {@link net.minecraft.world.item.DyeableArmorItem} + * @param defaultTexture The default vanilla texture identifier + * @return the custom armor texture identifier, return null to use the vanilla ones. Defaulted to the item's registry id. + */ + @NotNull + public static ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { + return ArmorRenderingRegistryImpl.getArmorTexture(entity, stack, slot, secondLayer, suffix, defaultTexture); + } + + @FunctionalInterface + @Environment(EnvType.CLIENT) + public interface ModelProvider { + /** + * Gets the model of the armor piece. + * + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param defaultModel The default vanilla armor model + * @return The model of the armor piece. Should never be null. + */ + @NotNull + HumanoidModel getArmorModel(LivingEntity entity, ItemStack stack, EquipmentSlot slot, HumanoidModel defaultModel); + } + + @FunctionalInterface + @Environment(EnvType.CLIENT) + public interface TextureProvider { + /** + * Gets the armor texture {@link net.minecraft.resources.ResourceLocation}. + * + * @param entity The entity equipping the armor + * @param stack The item stack of the armor + * @param slot The slot which the armor is in + * @param defaultTexture The default vanilla texture identifier + * @return the custom armor texture identifier. Should never be null. + */ + @NotNull + ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture); + } +} diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java new file mode 100644 index 00000000..2f076f8a --- /dev/null +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* + This file is a refactor from fabric-api, based on the work of shedaniel. + */ + + +package shadow.fabric.impl.client.rendering; + +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; +import org.jetbrains.annotations.Nullable; + +public interface ArmorProviderExtensions { + @Nullable + ArmorRenderingRegistry.ModelProvider fabric_getArmorModelProvider(); + + @Nullable + ArmorRenderingRegistry.TextureProvider fabric_getArmorTextureProvider(); + + void fabric_setArmorModelProvider(@Nullable ArmorRenderingRegistry.ModelProvider provider); + + void fabric_setArmorTextureProvider(@Nullable ArmorRenderingRegistry.TextureProvider provider); +} diff --git a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java new file mode 100644 index 00000000..35ae8c14 --- /dev/null +++ b/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* + This file is a refactor from fabric-api, based on the work of shedaniel. + */ + + +package shadow.fabric.impl.client.rendering; + +import java.util.Objects; + +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; +import org.jetbrains.annotations.Nullable; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; + +public final class ArmorRenderingRegistryImpl { + private ArmorRenderingRegistryImpl() { + } + + public static void registerModel(ArmorRenderingRegistry.ModelProvider provider, Iterable items) { + Objects.requireNonNull(items); + + for (Item item : items) { + Objects.requireNonNull(item); + + ((ArmorProviderExtensions) item).fabric_setArmorModelProvider(provider); + } + } + + public static void registerTexture(ArmorRenderingRegistry.TextureProvider provider, Iterable items) { + Objects.requireNonNull(items); + + for (Item item : items) { + Objects.requireNonNull(item); + + ((ArmorProviderExtensions) item).fabric_setArmorTextureProvider(provider); + } + } + + public static HumanoidModel getArmorModel(LivingEntity entity, ItemStack stack, EquipmentSlot slot, HumanoidModel defaultModel) { + if (!stack.isEmpty()) { + ArmorRenderingRegistry.ModelProvider provider = ((ArmorProviderExtensions) stack.getItem()).fabric_getArmorModelProvider(); + + if (provider != null) { + return provider.getArmorModel(entity, stack, slot, defaultModel); + } + } + + return defaultModel; + } + + public static ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { + if (!stack.isEmpty()) { + ArmorRenderingRegistry.TextureProvider provider = ((ArmorProviderExtensions) stack.getItem()).fabric_getArmorTextureProvider(); + + if (provider != null) { + return provider.getArmorTexture(entity, stack, slot, secondLayer, suffix, defaultTexture); + } + } + + return defaultTexture; + } +} diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java new file mode 100644 index 00000000..5b678eee --- /dev/null +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* + This file is a refactor from fabric-api, based on the work of shedaniel. + */ + + +package shadow.fabric.mixin.client.rendering; + +import com.mojang.blaze3d.vertex.PoseStack; +import java.util.Map; +import java.util.Objects; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.RenderLayerParent; +import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer; +import net.minecraft.client.renderer.entity.layers.RenderLayer; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ItemStack; + +@Mixin(HumanoidArmorLayer.class) +@Environment(EnvType.CLIENT) +public abstract class MixinArmorFeatureRenderer extends RenderLayer { + @Shadow + @Final + private static Map ARMOR_LOCATION_CACHE; + + public MixinArmorFeatureRenderer(RenderLayerParent context) { + super(context); + + } + + @Unique + private LivingEntity storedEntity; + @Unique + private EquipmentSlot storedSlot; + + @Inject(method = "render", at = @At("HEAD")) + private void storeEntity(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, LivingEntity livingEntity, float f, float g, float h, float j, float k, float l, CallbackInfo ci) { + // We store the living entity wearing the armor before we render + this.storedEntity = livingEntity; + } + + @Inject(method = "renderArmorPiece", at = @At("HEAD")) + private void storeSlot(PoseStack matrices, MultiBufferSource vertexConsumers, LivingEntity livingEntity, EquipmentSlot slot, int i, HumanoidModel bipedEntityModel, CallbackInfo ci) { + // We store the current armor slot that is rendering before we render each armor piece + this.storedSlot = slot; + } + + @Inject(method = "render", at = @At("RETURN")) + private void removeStored(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, LivingEntity livingEntity, float f, float g, float h, float j, float k, float l, CallbackInfo ci) { + // We remove the stored data after we render + this.storedEntity = null; + this.storedSlot = null; + } + + @Inject(method = "getArmorModel", at = @At("RETURN"), cancellable = true) + private void selectArmorModel(EquipmentSlot slot, CallbackInfoReturnable> cir) { + ItemStack stack = storedEntity.getItemBySlot(slot); + + HumanoidModel defaultModel = cir.getReturnValue(); + HumanoidModel model = ArmorRenderingRegistry.getArmorModel(storedEntity, stack, slot, defaultModel); + + if (model != defaultModel) { + cir.setReturnValue(model); + } + } + + @Inject(method = "getArmorLocation", at = @At(value = "INVOKE", target = "Ljava/util/Map;computeIfAbsent(Ljava/lang/Object;Ljava/util/function/Function;)Ljava/lang/Object;"), cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD) + private void getArmorTexture(ArmorItem armorItem, boolean secondLayer, /* @Nullable */ String suffix, CallbackInfoReturnable cir, String vanillaIdentifier) { + String texture = ArmorRenderingRegistry.getArmorTexture(storedEntity, storedEntity.getItemBySlot(storedSlot), storedSlot, secondLayer, suffix, new ResourceLocation(vanillaIdentifier)).toString(); + + if (!Objects.equals(texture, vanillaIdentifier)) { + cir.setReturnValue(ARMOR_LOCATION_CACHE.computeIfAbsent(texture, ResourceLocation::new)); + } + } +} diff --git a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java new file mode 100644 index 00000000..aa5c6bab --- /dev/null +++ b/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* + This file is a refactor from fabric-api, based on the work of shedaniel. + */ + +package shadow.fabric.mixin.client.rendering; + + +import net.minecraft.world.item.Item; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; +import shadow.fabric.impl.client.rendering.ArmorProviderExtensions; + + +@Mixin(Item.class) +public class MixinItem implements ArmorProviderExtensions { + @Unique + private ArmorRenderingRegistry.ModelProvider armorModelProvider; + @Unique + private ArmorRenderingRegistry.TextureProvider armorTextureProvider; + + @Override + public ArmorRenderingRegistry.ModelProvider fabric_getArmorModelProvider() { + return armorModelProvider; + } + + @Override + public ArmorRenderingRegistry.TextureProvider fabric_getArmorTextureProvider() { + return armorTextureProvider; + } + + @Override + public void fabric_setArmorModelProvider(ArmorRenderingRegistry.ModelProvider provider) { + armorModelProvider = provider; + } + + @Override + public void fabric_setArmorTextureProvider(ArmorRenderingRegistry.TextureProvider provider) { + armorTextureProvider = provider; + } +} \ No newline at end of file diff --git a/src/main/resources/betterend.mixins.shadow.json b/src/main/resources/betterend.mixins.shadow.json new file mode 100644 index 00000000..08955be4 --- /dev/null +++ b/src/main/resources/betterend.mixins.shadow.json @@ -0,0 +1,13 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "shadow.fabric.mixin.client.rendering", + "compatibilityLevel": "JAVA_16", + "client": [ + "MixinArmorFeatureRenderer", + "MixinItem" + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 4ca4089f..adb47c1c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -36,7 +36,8 @@ }, "mixins": [ "betterend.mixins.common.json", - "betterend.mixins.client.json" + "betterend.mixins.client.json", + "betterend.mixins.shadow.json" ], "depends": { From 3386f1c6b0fb75debedc4049f50cac7b84600cb7 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 30 Jun 2021 12:25:01 +0200 Subject: [PATCH 64/72] Latest REI Version --- gradle.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 942e0feb..cc05f040 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,5 +17,4 @@ archives_base_name = better-end patchouli_version = 55-FABRIC-SNAPSHOT fabric_version = 0.36.0+1.17 canvas_version = 1.0.+ -bclib_version = 0.1.43 -rei_version = 6.0.258-alpha \ No newline at end of file +rei_version = 6.0.260-alpha \ No newline at end of file From 2b71f7782a8794d3b12219cf73c4d40606ff6a14 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 30 Jun 2021 13:24:01 +0200 Subject: [PATCH 65/72] Updated EndSky-Rendering --- .../mixin/client/WorldRendererMixin.java | 33 +++++++++---------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java index 953d7053..b419cbab 100644 --- a/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java @@ -2,7 +2,9 @@ package ru.betterend.mixin.client; import java.util.Random; +import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.math.Matrix4f; +import net.minecraft.client.renderer.GameRenderer; import org.lwjgl.opengl.GL11; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -113,6 +115,7 @@ public class WorldRendererMixin { //RenderSystem.enableAlphaTest(); //RenderSystem.alphaFunc(516, 0.0F); RenderSystem.enableBlend(); + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); } float blindA = 1F - BackgroundInfo.blindness; @@ -123,35 +126,31 @@ public class WorldRendererMixin { matrices.pushPose(); matrices.mulPose(new Quaternion(0, time, 0, false)); RenderSystem.setShaderTexture(0, HORIZON); - //textureManager.bind(HORIZON); - be_renderBuffer(matrices, horizon, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, 0.7F * blindA); + be_renderBuffer(matrices, matrix4f, horizon, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, 0.7F * blindA); matrices.popPose(); matrices.pushPose(); matrices.mulPose(new Quaternion(0, -time, 0, false)); - //textureManager.bind(NEBULA_1); RenderSystem.setShaderTexture(0, NEBULA_1); - be_renderBuffer(matrices, nebulas1, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); + be_renderBuffer(matrices, matrix4f, nebulas1, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); matrices.popPose(); matrices.pushPose(); matrices.mulPose(new Quaternion(0, time2, 0, false)); - //textureManager.bind(NEBULA_2); RenderSystem.setShaderTexture(0, NEBULA_2); - be_renderBuffer(matrices, nebulas2, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); + be_renderBuffer(matrices, matrix4f, nebulas2, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); matrices.popPose(); - //textureManager.bind(STARS); RenderSystem.setShaderTexture(0, STARS); matrices.pushPose(); matrices.mulPose(axis3.rotation(time)); - be_renderBuffer(matrices, stars3, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind06); + be_renderBuffer(matrices, matrix4f ,stars3, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind06); matrices.popPose(); matrices.pushPose(); matrices.mulPose(axis4.rotation(time2)); - be_renderBuffer(matrices, stars4, DefaultVertexFormat.POSITION_TEX, 1F, 1F, 1F, blind06); + be_renderBuffer(matrices, matrix4f, stars4, DefaultVertexFormat.POSITION_TEX, 1F, 1F, 1F, blind06); matrices.popPose(); } @@ -159,8 +158,7 @@ public class WorldRendererMixin { if (a > 0) { if (a > 1) a = 1; RenderSystem.setShaderTexture(0, FOG); - //textureManager.bind(FOG); - be_renderBuffer(matrices, fog, DefaultVertexFormat.POSITION_TEX, BackgroundInfo.fogColorRed, BackgroundInfo.fogColorGreen, BackgroundInfo.fogColorBlue, a); + be_renderBuffer(matrices, matrix4f, fog, DefaultVertexFormat.POSITION_TEX, BackgroundInfo.fogColorRed, BackgroundInfo.fogColorGreen, BackgroundInfo.fogColorBlue, a); } RenderSystem.disableTexture(); @@ -168,29 +166,30 @@ public class WorldRendererMixin { if (blindA > 0) { matrices.pushPose(); matrices.mulPose(axis1.rotation(time3)); - be_renderBuffer(matrices, stars1, DefaultVertexFormat.POSITION, 1, 1, 1, blind06); + be_renderBuffer(matrices, matrix4f, stars1, DefaultVertexFormat.POSITION, 1, 1, 1, blind06); matrices.popPose(); matrices.pushPose(); matrices.mulPose(axis2.rotation(time2)); - be_renderBuffer(matrices, stars2, DefaultVertexFormat.POSITION, 0.95F, 0.64F, 0.93F, blind06); + be_renderBuffer(matrices, matrix4f, stars2, DefaultVertexFormat.POSITION, 0.95F, 0.64F, 0.93F, blind06); matrices.popPose(); } RenderSystem.enableTexture(); RenderSystem.depthMask(true); + RenderSystem.defaultBlendFunc(); + RenderSystem.disableBlend(); info.cancel(); } } - private void be_renderBuffer(PoseStack matrices, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) { + private void be_renderBuffer(PoseStack matrices, Matrix4f matrix4f, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) { RenderSystem.setShaderColor(r, g, b, a); buffer.bind(); - //format.setupBufferState(0L); - //buffer.draw(matrices.last().pose(), 7); format.setupBufferState(); - buffer.draw(); + buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionTexShader()); + VertexBuffer.unbind(); format.clearBufferState(); } From 3f225c59a172447f327245fa80e591c59342c5a9 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Jun 2021 16:20:16 +0300 Subject: [PATCH 66/72] Possibility to add NBT data for Infusion recipes output (#215) --- build.gradle | 26 +++++++++---------- gradle.properties | 8 +++--- .../mixin/common/LivingEntityMixin.java | 2 +- .../particle/InfusionParticleType.java | 13 +++++----- .../recipe/builders/InfusionRecipe.java | 14 ++++++++++ 5 files changed, 38 insertions(+), 25 deletions(-) diff --git a/build.gradle b/build.gradle index ce8b3995..9a618e8b 100644 --- a/build.gradle +++ b/build.gradle @@ -43,30 +43,30 @@ dependencies { def useOptional(String dep) { dependencies.modRuntime (dep) { - exclude group: "net.fabricmc.fabric-api" - exclude group: "net.fabricmc" + exclude group: 'net.fabricmc.fabric-api' + exclude group: 'net.fabricmc' if (!dep.contains("me.shedaniel")) { - exclude group: "me.shedaniel.cloth" - exclude group: "me.shedaniel" + exclude group: 'me.shedaniel.cloth' + exclude group: 'me.shedaniel' } } dependencies.modCompileOnly (dep) { - exclude group: "net.fabricmc.fabric-api" - exclude group: "net.fabricmc" + exclude group: 'net.fabricmc.fabric-api' + exclude group: 'net.fabricmc' if (!dep.contains("me.shedaniel")) { - exclude group: "me.shedaniel.cloth" - exclude group: "me.shedaniel" + exclude group: 'me.shedaniel.cloth' + exclude group: 'me.shedaniel' } } } def useApi(String dep) { dependencies.modApi (dep) { - exclude group: "net.fabricmc.fabric-api" - exclude group: "net.fabricmc" + exclude group: 'net.fabricmc.fabric-api' + exclude group: 'net.fabricmc' if (!dep.contains("me.shedaniel")) { - exclude group: "me.shedaniel.cloth" - exclude group: "me.shedaniel" + exclude group: 'me.shedaniel.cloth' + exclude group: 'me.shedaniel' } } } @@ -162,4 +162,4 @@ task release(dependsOn: [remapJar, sourcesJar, javadocJar]) { // // uncomment to publish to the local maven // // mavenLocal() // } -//} +//} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 5f798ac2..a0581cf9 100644 --- a/gradle.properties +++ b/gradle.properties @@ -14,8 +14,8 @@ archives_base_name = better-end # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api -patchouli_version = 50-FABRIC -fabric_version = 0.32.9+1.16 -canvas_version = 1.0.+ +patchouli_version = 53-FABRIC +fabric_version = 0.36.0+1.16 bclib_version = 0.1.44 -rei_version = 5.8.10 \ No newline at end of file +rei_version = 5.12.248 +canvas_version = 1.0.+ \ No newline at end of file diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index 93c28174..565976a8 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -95,7 +95,7 @@ public abstract class LivingEntityMixin extends Entity { info.setReturnValue(false); } } catch (Exception ex) { - BetterEnd.LOGGER.warning("Blindness resistance attribute haven't registered."); + BetterEnd.LOGGER.warning("Blindness resistance attribute haven't been registered."); } } diff --git a/src/main/java/ru/betterend/particle/InfusionParticleType.java b/src/main/java/ru/betterend/particle/InfusionParticleType.java index 672f3ab9..bda8fe13 100644 --- a/src/main/java/ru/betterend/particle/InfusionParticleType.java +++ b/src/main/java/ru/betterend/particle/InfusionParticleType.java @@ -17,11 +17,10 @@ import ru.bclib.util.ColorUtil; import ru.betterend.registry.EndParticles; public class InfusionParticleType extends ParticleType implements ParticleOptions { - public static final Codec CODEC = ItemStack.CODEC.xmap(itemStack -> { - return new InfusionParticleType(EndParticles.INFUSION, itemStack); - }, infusionParticleType -> { - return infusionParticleType.itemStack; - }); + public static final Codec CODEC = ItemStack.CODEC.xmap( + itemStack -> new InfusionParticleType(EndParticles.INFUSION, itemStack), + infusionParticleType -> infusionParticleType.itemStack); + public static final ParticleOptions.Deserializer PARAMETERS_FACTORY = new ParticleOptions.Deserializer() { public InfusionParticleType fromCommand(ParticleType particleType, StringReader stringReader) throws CommandSyntaxException { stringReader.expect(' '); @@ -35,8 +34,8 @@ public class InfusionParticleType extends ParticleType imp } }; - private ParticleType type; - private ItemStack itemStack; + private final ParticleType type; + private final ItemStack itemStack; public InfusionParticleType(ParticleType particleType, ItemStack stack) { super(true, PARAMETERS_FACTORY); diff --git a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java index b05b2f37..f1186d59 100644 --- a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java @@ -4,11 +4,15 @@ import java.util.Arrays; import com.google.gson.JsonObject; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.util.NbtType; import net.minecraft.core.NonNullList; +import net.minecraft.nbt.*; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagLoader; import net.minecraft.util.GsonHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; @@ -17,6 +21,7 @@ import net.minecraft.world.item.crafting.RecipeSerializer; import net.minecraft.world.item.crafting.RecipeType; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; +import net.minecraft.world.level.storage.loot.GsonAdapterFactory; import ru.bclib.recipes.BCLRecipeManager; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; @@ -209,6 +214,15 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { if (recipe.output == null) { throw new IllegalStateException("Output item does not exists!"); } + if (result.has("nbt")) { + try { + String nbtData = GsonHelper.getAsString(result, "nbt"); + CompoundTag nbt = TagParser.parseTag(nbtData); + recipe.output.setTag(nbt); + } catch (CommandSyntaxException ex) { + BetterEnd.LOGGER.warning("Error parse nbt data for output.", ex); + } + } recipe.group = GsonHelper.getAsString(json, "group", GROUP); recipe.time = GsonHelper.getAsInt(json, "time", 1); From e28dcf1ee4032fcc58b1ec03ba5c14e66a269825 Mon Sep 17 00:00:00 2001 From: Aleksey Date: Wed, 30 Jun 2021 16:23:32 +0300 Subject: [PATCH 67/72] Possibility to add NBT data for Anvil recipes output --- .../ru/betterend/recipe/builders/AnvilRecipe.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java b/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java index 2a9ed475..0bee9b39 100644 --- a/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java @@ -4,9 +4,12 @@ import java.util.Objects; import com.google.gson.JsonObject; +import com.mojang.brigadier.exceptions.CommandSyntaxException; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.NonNullList; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.Tag; @@ -276,6 +279,15 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { if (output == null) { throw new IllegalStateException("Output item does not exists!"); } + if (result.has("nbt")) { + try { + String nbtData = GsonHelper.getAsString(result, "nbt"); + CompoundTag nbt = TagParser.parseTag(nbtData); + output.setTag(nbt); + } catch (CommandSyntaxException ex) { + BetterEnd.LOGGER.warning("Error parse nbt data for output.", ex); + } + } int inputCount = GsonHelper.getAsInt(json, "inputCount", 1); int toolLevel = GsonHelper.getAsInt(json, "toolLevel", 1); int anvilLevel = GsonHelper.getAsInt(json, "anvilLevel", 1); From 8c1f9567a518ac3a80b0de2db8a51623db9bb73f Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sun, 4 Jul 2021 18:53:00 +0200 Subject: [PATCH 68/72] Automatic tool configuration for Blocks --- .../ru/betterend/blocks/AeterniumBlock.java | 4 +++- .../betterend/blocks/AmaranitaStemBlock.java | 4 ++-- .../java/ru/betterend/blocks/AmberBlock.java | 4 ++-- .../blocks/AncientEmeraldIceBlock.java | 3 +-- .../ru/betterend/blocks/BrimstoneBlock.java | 3 +-- .../ru/betterend/blocks/CavePumpkinBlock.java | 4 ++-- .../ru/betterend/blocks/ChandelierBlock.java | 11 +++++++++-- .../ru/betterend/blocks/CharcoalBlock.java | 4 ++-- .../betterend/blocks/DenseEmeraldIceBlock.java | 4 ++-- .../ru/betterend/blocks/EmeraldIceBlock.java | 4 ++-- .../ru/betterend/blocks/EndLotusStemBlock.java | 3 +-- .../ru/betterend/blocks/EndPortalBlock.java | 4 ++-- .../ru/betterend/blocks/EndStoneSmelter.java | 18 +++++++++++++----- .../java/ru/betterend/blocks/EnderBlock.java | 2 ++ .../ru/betterend/blocks/EndstoneDustBlock.java | 4 ++-- .../betterend/blocks/JellyshroomCapBlock.java | 4 ++-- .../ru/betterend/blocks/MengerSpongeBlock.java | 5 ++--- .../betterend/blocks/MengerSpongeWetBlock.java | 3 +-- .../ru/betterend/blocks/MissingTileBlock.java | 4 ++-- .../betterend/blocks/MossyDragonBoneBlock.java | 4 ++-- .../ru/betterend/blocks/MossyObsidian.java | 4 ++-- .../ru/betterend/blocks/NeonCactusBlock.java | 4 ++-- .../betterend/blocks/NeonCactusPlantBlock.java | 3 +-- .../betterend/blocks/RespawnObeliskBlock.java | 3 +-- .../blocks/UmbrellaTreeClusterBlock.java | 3 +-- .../blocks/UmbrellaTreeClusterEmptyBlock.java | 3 +-- .../blocks/UmbrellaTreeMembraneBlock.java | 4 ++-- .../blocks/basis/EndLanternBlock.java | 4 ++-- .../betterend/blocks/basis/PedestalBlock.java | 15 +++++++-------- .../blocks/basis/StoneLanternBlock.java | 4 ++-- .../blocks/complex/ColoredMaterial.java | 2 +- .../complex/CrystalSubblocksMaterial.java | 3 ++- .../blocks/complex/MetalMaterial.java | 11 ++++++----- .../blocks/complex/StoneMaterial.java | 3 ++- .../blocks/complex/WoodenMaterial.java | 3 ++- 35 files changed, 89 insertions(+), 76 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/AeterniumBlock.java b/src/main/java/ru/betterend/blocks/AeterniumBlock.java index d176689d..f6369d15 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumBlock.java +++ b/src/main/java/ru/betterend/blocks/AeterniumBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.SoundType; @@ -17,7 +18,8 @@ public class AeterniumBlock extends BaseBlock { super(FabricBlockSettings.of(Material.METAL, MaterialColor.COLOR_GRAY) .hardness(65F) .resistance(1200F) - .requiresCorrectToolForDrops() + .breakByTool(FabricToolTags.PICKAXES) + .requiresCorrectToolForDrops() .sound(SoundType.NETHERITE_BLOCK)); } diff --git a/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java b/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java index 47885625..cfb07510 100644 --- a/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java +++ b/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java @@ -1,12 +1,12 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; import ru.bclib.blocks.BaseRotatedPillarBlock; +import ru.bclib.util.BlocksHelper; public class AmaranitaStemBlock extends BaseRotatedPillarBlock { public AmaranitaStemBlock() { - super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(MaterialColor.COLOR_LIGHT_GREEN)); + super(BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS).materialColor(MaterialColor.COLOR_LIGHT_GREEN)); } } diff --git a/src/main/java/ru/betterend/blocks/AmberBlock.java b/src/main/java/ru/betterend/blocks/AmberBlock.java index feedaea8..a26ea970 100644 --- a/src/main/java/ru/betterend/blocks/AmberBlock.java +++ b/src/main/java/ru/betterend/blocks/AmberBlock.java @@ -1,12 +1,12 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; import ru.bclib.blocks.BaseBlock; +import ru.bclib.util.BlocksHelper; public class AmberBlock extends BaseBlock { public AmberBlock() { - super(FabricBlockSettings.copyOf(Blocks.DIAMOND_BLOCK).materialColor(MaterialColor.COLOR_YELLOW)); + super(BlocksHelper.copySettingsOf(Blocks.DIAMOND_BLOCK).materialColor(MaterialColor.COLOR_YELLOW)); } } diff --git a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java index 2c73a6d1..c1a62a76 100644 --- a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -23,7 +22,7 @@ import ru.betterend.registry.EndParticles; public class AncientEmeraldIceBlock extends BaseBlock { public AncientEmeraldIceBlock() { - super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).randomTicks()); + super(BlocksHelper.copySettingsOf(Blocks.BLUE_ICE).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java index e26d2ce1..2e816be9 100644 --- a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java +++ b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java @@ -4,7 +4,6 @@ import java.util.Random; import org.jetbrains.annotations.Nullable; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -29,7 +28,7 @@ public class BrimstoneBlock extends BaseBlock { public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE; public BrimstoneBlock() { - super(FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(MaterialColor.COLOR_BROWN).randomTicks()); + super(BlocksHelper.copySettingsOf(Blocks.END_STONE).materialColor(MaterialColor.COLOR_BROWN).randomTicks()); registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false)); } diff --git a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java index f61aa0cb..a4c6c4af 100644 --- a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java +++ b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java @@ -3,7 +3,6 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; @@ -20,6 +19,7 @@ import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { @@ -28,7 +28,7 @@ public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { private static final VoxelShape SHAPE_BIG; public CavePumpkinBlock() { - super(FabricBlockSettings.copyOf(Blocks.PUMPKIN).luminance((state) -> state.getValue(SMALL) ? 10 : 15)); + super(BlocksHelper.copySettingsOf(Blocks.PUMPKIN).luminance((state) -> state.getValue(SMALL) ? 10 : 15)); registerDefaultState(defaultBlockState().setValue(SMALL, false)); } diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 622eeb5e..2b218dc7 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -10,7 +10,7 @@ import com.google.common.collect.Maps; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; @@ -28,13 +28,20 @@ import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.betterend.client.models.Patterns; public class ChandelierBlock extends BaseAttachedBlock implements IRenderTyped, BlockModelProvider { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public ChandelierBlock(Block source) { - super(FabricBlockSettings.copyOf(source).luminance(15).noCollission().noOcclusion().requiresCorrectToolForDrops()); + super(BlocksHelper.copySettingsOf(source) + .breakByTool(FabricToolTags.PICKAXES) + .luminance(15) + .noCollission() + .noOcclusion() + .requiresCorrectToolForDrops() + ); } @Override diff --git a/src/main/java/ru/betterend/blocks/CharcoalBlock.java b/src/main/java/ru/betterend/blocks/CharcoalBlock.java index d9fa10a8..9e9df4c4 100644 --- a/src/main/java/ru/betterend/blocks/CharcoalBlock.java +++ b/src/main/java/ru/betterend/blocks/CharcoalBlock.java @@ -1,13 +1,13 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseBlock; +import ru.bclib.util.BlocksHelper; public class CharcoalBlock extends BaseBlock { public CharcoalBlock() { - super(FabricBlockSettings.copyOf(Blocks.COAL_BLOCK)); + super(BlocksHelper.copySettingsOf(Blocks.COAL_BLOCK)); FuelRegistry.INSTANCE.add(this, 16000); } } diff --git a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java index ece46509..3c20c640 100644 --- a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java @@ -3,7 +3,6 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -14,10 +13,11 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseBlock; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; public class DenseEmeraldIceBlock extends BaseBlock implements IRenderTyped { public DenseEmeraldIceBlock() { - super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE)); + super(BlocksHelper.copySettingsOf(Blocks.PACKED_ICE)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index e4ebe572..ab078c7f 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -8,7 +8,6 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -29,10 +28,11 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTyped, BlockModelProvider { public EmeraldIceBlock() { - super(FabricBlockSettings.copyOf(Blocks.ICE)); + super(BlocksHelper.copySettingsOf(Blocks.ICE)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 0c27ece2..260fa4e2 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -4,7 +4,6 @@ import java.util.Map; import com.google.common.collect.Maps; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -40,7 +39,7 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo private static final Map SHAPES = Maps.newEnumMap(Axis.class); public EndLotusStemBlock() { - super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS)); + super(BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS)); this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(SHAPE, TripleShape.MIDDLE).setValue(LEAF, false).setValue(FACING, Direction.UP)); } diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index a419608e..ab12343f 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -6,7 +6,6 @@ import java.util.Random; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; @@ -35,6 +34,7 @@ import net.minecraft.world.level.dimension.DimensionType; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IColorProvider; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.betterend.interfaces.TeleportingEntity; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndPortals; @@ -44,7 +44,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I public static final IntegerProperty PORTAL = EndBlockProperties.PORTAL; public EndPortalBlock() { - super(FabricBlockSettings.copyOf(Blocks.NETHER_PORTAL).resistance(Blocks.BEDROCK.getExplosionResistance()).luminance(15)); + super(BlocksHelper.copySettingsOf(Blocks.NETHER_PORTAL).resistance(Blocks.BEDROCK.getExplosionResistance()).luminance(15)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index e7281b88..d921ef0e 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -1,9 +1,15 @@ package ru.betterend.blocks; +import java.util.List; +import java.util.Random; + import com.google.common.collect.Lists; +import org.jetbrains.annotations.Nullable; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -16,7 +22,12 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Mirror; +import net.minecraft.world.level.block.RenderShape; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -30,14 +41,10 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockWithEntity; import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; import ru.betterend.registry.EndBlockEntities; -import java.util.List; -import java.util.Random; - public class EndStoneSmelter extends BaseBlockWithEntity { public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty LIT = BlockStateProperties.LIT; @@ -47,6 +54,7 @@ public class EndStoneSmelter extends BaseBlockWithEntity { super(FabricBlockSettings.of(Material.STONE, MaterialColor.COLOR_GRAY) .hardness(4F) .resistance(100F) + .breakByTool(FabricToolTags.PICKAXES) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); this.registerDefaultState(this.stateDefinition.any() diff --git a/src/main/java/ru/betterend/blocks/EnderBlock.java b/src/main/java/ru/betterend/blocks/EnderBlock.java index 31469430..65994654 100644 --- a/src/main/java/ru/betterend/blocks/EnderBlock.java +++ b/src/main/java/ru/betterend/blocks/EnderBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; +import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.SoundType; @@ -17,6 +18,7 @@ public class EnderBlock extends BaseBlock { super(FabricBlockSettings.of(Material.STONE, MaterialColor.WARPED_WART_BLOCK) .hardness(5F) .resistance(6F) + .breakByTool(FabricToolTags.PICKAXES) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); } diff --git a/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java index 28ca0d6e..72c70d69 100644 --- a/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java +++ b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java @@ -5,7 +5,6 @@ import java.util.List; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -14,6 +13,7 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FallingBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.ColorUtil; public class EndstoneDustBlock extends FallingBlock { @@ -21,7 +21,7 @@ public class EndstoneDustBlock extends FallingBlock { private static final int COLOR = ColorUtil.color(226, 239, 168); public EndstoneDustBlock() { - super(FabricBlockSettings.copyOf(Blocks.SAND) + super(BlocksHelper.copySettingsOf(Blocks.SAND) .breakByTool(FabricToolTags.SHOVELS) .materialColor(Blocks.END_STONE.defaultMaterialColor())); } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 681e3578..7f1a7d9a 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -9,7 +9,6 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; @@ -30,6 +29,7 @@ import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IColorProvider; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.ColorUtil; import ru.bclib.util.MHelper; import ru.betterend.client.models.Patterns; @@ -43,7 +43,7 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTyped, Blo private final int coloritem; public JellyshroomCapBlock(int r1, int g1, int b1, int r2, int g2, int b2) { - super(FabricBlockSettings.copyOf(Blocks.SLIME_BLOCK)); + super(BlocksHelper.copySettingsOf(Blocks.SLIME_BLOCK)); colorStart = new Vec3i(r1, g1, b1); colorEnd = new Vec3i(r2, g2, b2); coloritem = ColorUtil.color((r1 + r2) >> 1, (g1 + g2) >> 1, (b1 + b2) >> 1); diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java index 6890f22a..798d28ba 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java @@ -4,7 +4,6 @@ import java.util.Queue; import com.google.common.collect.Lists; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.tags.FluidTags; @@ -17,17 +16,17 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeBlock() { - super(FabricBlockSettings.copyOf(Blocks.SPONGE).noOcclusion()); + super(BlocksHelper.copySettingsOf(Blocks.SPONGE).noOcclusion()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java index 0908d9f3..82c58413 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java @@ -4,7 +4,6 @@ import java.util.Random; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -28,7 +27,7 @@ import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MengerSpongeWetBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeWetBlock() { - super(FabricBlockSettings.copyOf(Blocks.WET_SPONGE).noOcclusion()); + super(BlocksHelper.copySettingsOf(Blocks.WET_SPONGE).noOcclusion()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MissingTileBlock.java b/src/main/java/ru/betterend/blocks/MissingTileBlock.java index 7a516557..2bc243f6 100644 --- a/src/main/java/ru/betterend/blocks/MissingTileBlock.java +++ b/src/main/java/ru/betterend/blocks/MissingTileBlock.java @@ -1,11 +1,11 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseBlock; +import ru.bclib.util.BlocksHelper; public class MissingTileBlock extends BaseBlock { public MissingTileBlock() { - super(FabricBlockSettings.copyOf(Blocks.END_STONE)); + super(BlocksHelper.copySettingsOf(Blocks.END_STONE)); } } diff --git a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java index b7d3e7e1..ff885715 100644 --- a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -19,12 +18,13 @@ import net.minecraft.world.level.lighting.LayerLightEngine; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseRotatedPillarBlock; +import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MossyDragonBoneBlock extends BaseRotatedPillarBlock { public MossyDragonBoneBlock() { - super(FabricBlockSettings.copyOf(Blocks.BONE_BLOCK).hardness(0.5F).randomTicks()); + super(BlocksHelper.copySettingsOf(Blocks.BONE_BLOCK).hardness(0.5F).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MossyObsidian.java b/src/main/java/ru/betterend/blocks/MossyObsidian.java index d3423fdf..d17588f5 100644 --- a/src/main/java/ru/betterend/blocks/MossyObsidian.java +++ b/src/main/java/ru/betterend/blocks/MossyObsidian.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.List; import java.util.Random; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -19,10 +18,11 @@ import net.minecraft.world.level.lighting.LayerLightEngine; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseBlock; +import ru.bclib.util.BlocksHelper; public class MossyObsidian extends BaseBlock { public MossyObsidian() { - super(FabricBlockSettings.copyOf(Blocks.OBSIDIAN).hardness(3).randomTicks()); + super(BlocksHelper.copySettingsOf(Blocks.OBSIDIAN).hardness(3).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java index 2d1d9acd..bc6fb3ef 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java @@ -1,11 +1,11 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseRotatedPillarBlock; +import ru.bclib.util.BlocksHelper; public class NeonCactusBlock extends BaseRotatedPillarBlock { public NeonCactusBlock() { - super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15)); + super(BlocksHelper.copySettingsOf(Blocks.CACTUS).luminance(15)); } } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index 568ea567..666e9308 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -7,7 +7,6 @@ import java.util.Random; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -64,7 +63,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate private static final int MAX_LENGTH = 12; public NeonCactusPlantBlock() { - super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15).randomTicks()); + super(BlocksHelper.copySettingsOf(Blocks.CACTUS).luminance(15).randomTicks()); registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, Direction.UP).setValue(SHAPE, TripleShape.TOP)); } diff --git a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java index 48b5e923..2d274a1a 100644 --- a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java +++ b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java @@ -6,7 +6,6 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; @@ -54,7 +53,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; public RespawnObeliskBlock() { - super(FabricBlockSettings.copyOf(Blocks.END_STONE).luminance((state) -> { + super(BlocksHelper.copySettingsOf(Blocks.END_STONE).luminance((state) -> { return (state.getValue(SHAPE) == TripleShape.BOTTOM) ? 0 : 15; })); } diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java index a8d3dcb0..c4d0a1c1 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java @@ -1,6 +1,5 @@ package ru.betterend.blocks; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -27,7 +26,7 @@ public class UmbrellaTreeClusterBlock extends BaseBlock { public static final BooleanProperty NATURAL = BlockProperties.NATURAL; public UmbrellaTreeClusterBlock() { - super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) + super(BlocksHelper.copySettingsOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .luminance(15)); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java index d6569aa3..f176f4aa 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java @@ -2,7 +2,6 @@ package ru.betterend.blocks; import java.util.Random; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Block; @@ -19,7 +18,7 @@ public class UmbrellaTreeClusterEmptyBlock extends BaseBlock { public static final BooleanProperty NATURAL = EndBlockProperties.NATURAL; public UmbrellaTreeClusterEmptyBlock() { - super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) + super(BlocksHelper.copySettingsOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .randomTicks()); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index b267bf84..7d6b4713 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -7,7 +7,6 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -25,6 +24,7 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; @@ -34,7 +34,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); public UmbrellaTreeMembraneBlock() { - super(FabricBlockSettings.copyOf(Blocks.SLIME_BLOCK)); + super(BlocksHelper.copySettingsOf(Blocks.SLIME_BLOCK)); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index f4ada8b3..cc801110 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -4,7 +4,6 @@ import java.util.Map; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -27,6 +26,7 @@ import net.minecraft.world.level.material.Fluids; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; +import ru.bclib.util.BlocksHelper; @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { @@ -34,7 +34,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public EndLanternBlock(Block source) { - this(FabricBlockSettings.copyOf(source).luminance(15).noOcclusion()); + this(BlocksHelper.copySettingsOf(source).luminance(15).noOcclusion()); } public EndLanternBlock(Properties settings) { diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 8d79e82f..80355ff3 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -6,15 +6,9 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; +import com.google.common.collect.Lists; import org.jetbrains.annotations.Nullable; -import com.google.common.collect.Lists; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; @@ -34,6 +28,8 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -44,9 +40,12 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; +import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.EndBlockProperties; import ru.betterend.blocks.EndBlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; @@ -98,7 +97,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { protected float height = 1.0F; public PedestalBlock(Block parent) { - super(FabricBlockSettings.copyOf(parent).luminance(state -> state.getValue(HAS_LIGHT) ? 12 : 0)); + super(BlocksHelper.copySettingsOf(parent).luminance(state -> state.getValue(HAS_LIGHT) ? 12 : 0)); this.registerDefaultState(stateDefinition.any().setValue(STATE, PedestalState.DEFAULT).setValue(HAS_ITEM, false).setValue(HAS_LIGHT, false)); this.parent = parent; } diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index b8f2b7c9..6aea47ec 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -6,7 +6,6 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; @@ -19,6 +18,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.bclib.client.models.ModelsHelper; import ru.bclib.interfaces.IColorProvider; +import ru.bclib.util.BlocksHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; @@ -27,7 +27,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider private static final VoxelShape SHAPE_FLOOR = Block.box(3, 0, 3, 13, 15, 13); public StoneLanternBlock(Block source) { - super(FabricBlockSettings.copyOf(source).luminance(15)); + super(BlocksHelper.copySettingsOf(source).luminance(15)); } @Override diff --git a/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java index 9ae68e51..5b4ac1ea 100644 --- a/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java @@ -31,7 +31,7 @@ public class ColoredMaterial { String id = Registry.BLOCK.getKey(source).getPath(); colors.forEach((color, name) -> { String blockName = id + "_" + name; - Block block = constructor.apply(FabricBlockSettings.copyOf(source).materialColor(MaterialColor.COLOR_BLACK)); + Block block = constructor.apply(BlocksHelper.copySettingsOf(source).materialColor(MaterialColor.COLOR_BLACK)); EndBlocks.registerBlock(blockName, block); if (craftEight) { GridRecipe.make(BetterEnd.MOD_ID, blockName, block).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(8).setShape("###", "#D#", "###").addMaterial('#', source).addMaterial('D', dyes.get(color)).build(); diff --git a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java index 1e82ff4c..4fdf1cae 100644 --- a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java @@ -10,6 +10,7 @@ import ru.bclib.blocks.BaseSlabBlock; import ru.bclib.blocks.BaseStairsBlock; import ru.bclib.blocks.BaseWallBlock; import ru.bclib.recipes.GridRecipe; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPedestal; @@ -31,7 +32,7 @@ public class CrystalSubblocksMaterial { public final Block brick_wall; public CrystalSubblocksMaterial(String name, Block source) { - FabricBlockSettings material = FabricBlockSettings.copyOf(source); + FabricBlockSettings material = BlocksHelper.copySettingsOf(source); polished = EndBlocks.registerBlock(name + "_polished", new BaseBlock(material)); tiles = EndBlocks.registerBlock(name + "_tiles", new BaseBlock(material)); pillar = EndBlocks.registerBlock(name + "_pillar", new BaseRotatedPillarBlock(material)); diff --git a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java index 4f5577bd..75ca826e 100644 --- a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java @@ -31,6 +31,7 @@ import ru.bclib.items.tool.BaseSwordItem; import ru.bclib.recipes.FurnaceRecipe; import ru.bclib.recipes.GridRecipe; import ru.bclib.recipes.SmithingTableRecipe; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.BulbVineLanternBlock; @@ -90,26 +91,26 @@ public class MetalMaterial { public final Item boots; public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, true, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, true, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, true, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, true, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, false, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, false, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, false, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, false, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); } private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings).hardness(1).resistance(1).luminance(15).sound(SoundType.LANTERN); final int level = material.getLevel(); - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseBlock(FabricBlockSettings.copyOf(Blocks.END_STONE))) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseBlock(BlocksHelper.copySettingsOf(Blocks.END_STONE))) : null; block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index 125c391e..43050297 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -16,6 +16,7 @@ import ru.bclib.blocks.BaseStoneButtonBlock; import ru.bclib.blocks.BaseWallBlock; import ru.bclib.blocks.StonePressurePlateBlock; import ru.bclib.recipes.GridRecipe; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPedestal; @@ -46,7 +47,7 @@ public class StoneMaterial { public final Block furnace; public StoneMaterial(String name, MaterialColor color) { - FabricBlockSettings material = FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color); + FabricBlockSettings material = BlocksHelper.copySettingsOf(Blocks.END_STONE).materialColor(color); stone = EndBlocks.registerBlock(name, new BaseBlock(material)); polished = EndBlocks.registerBlock(name + "_polished", new BaseBlock(material)); diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index 57df31f3..174c73ed 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -33,6 +33,7 @@ import ru.bclib.blocks.BaseWoodenButtonBlock; import ru.bclib.blocks.StripableBarkBlock; import ru.bclib.blocks.WoodenPressurePlateBlock; import ru.bclib.recipes.GridRecipe; +import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; @@ -69,7 +70,7 @@ public class WoodenMaterial { public final Tag.Named logItemTag; public WoodenMaterial(String name, MaterialColor woodColor, MaterialColor planksColor) { - FabricBlockSettings materialPlanks = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(planksColor); + FabricBlockSettings materialPlanks = BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS).materialColor(planksColor); log_stripped = EndBlocks.registerBlock(name + "_stripped_log", new BaseRotatedPillarBlock(materialPlanks)); bark_stripped = EndBlocks.registerBlock(name + "_stripped_bark", new BaseBarkBlock(materialPlanks)); From 18d78acd07a51bef54d5832d9abf526e21d9a580 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sun, 4 Jul 2021 23:48:37 +0200 Subject: [PATCH 69/72] Revert "Automatic tool configuration for Blocks" This reverts commit 8c1f9567a518ac3a80b0de2db8a51623db9bb73f. --- .../ru/betterend/blocks/AeterniumBlock.java | 4 +--- .../betterend/blocks/AmaranitaStemBlock.java | 4 ++-- .../java/ru/betterend/blocks/AmberBlock.java | 4 ++-- .../blocks/AncientEmeraldIceBlock.java | 3 ++- .../ru/betterend/blocks/BrimstoneBlock.java | 3 ++- .../ru/betterend/blocks/CavePumpkinBlock.java | 4 ++-- .../ru/betterend/blocks/ChandelierBlock.java | 11 ++--------- .../ru/betterend/blocks/CharcoalBlock.java | 4 ++-- .../betterend/blocks/DenseEmeraldIceBlock.java | 4 ++-- .../ru/betterend/blocks/EmeraldIceBlock.java | 4 ++-- .../ru/betterend/blocks/EndLotusStemBlock.java | 3 ++- .../ru/betterend/blocks/EndPortalBlock.java | 4 ++-- .../ru/betterend/blocks/EndStoneSmelter.java | 18 +++++------------- .../java/ru/betterend/blocks/EnderBlock.java | 2 -- .../ru/betterend/blocks/EndstoneDustBlock.java | 4 ++-- .../betterend/blocks/JellyshroomCapBlock.java | 4 ++-- .../ru/betterend/blocks/MengerSpongeBlock.java | 5 +++-- .../betterend/blocks/MengerSpongeWetBlock.java | 3 ++- .../ru/betterend/blocks/MissingTileBlock.java | 4 ++-- .../betterend/blocks/MossyDragonBoneBlock.java | 4 ++-- .../ru/betterend/blocks/MossyObsidian.java | 4 ++-- .../ru/betterend/blocks/NeonCactusBlock.java | 4 ++-- .../betterend/blocks/NeonCactusPlantBlock.java | 3 ++- .../betterend/blocks/RespawnObeliskBlock.java | 3 ++- .../blocks/UmbrellaTreeClusterBlock.java | 3 ++- .../blocks/UmbrellaTreeClusterEmptyBlock.java | 3 ++- .../blocks/UmbrellaTreeMembraneBlock.java | 4 ++-- .../blocks/basis/EndLanternBlock.java | 4 ++-- .../betterend/blocks/basis/PedestalBlock.java | 15 ++++++++------- .../blocks/basis/StoneLanternBlock.java | 4 ++-- .../blocks/complex/ColoredMaterial.java | 2 +- .../complex/CrystalSubblocksMaterial.java | 3 +-- .../blocks/complex/MetalMaterial.java | 11 +++++------ .../blocks/complex/StoneMaterial.java | 3 +-- .../blocks/complex/WoodenMaterial.java | 3 +-- 35 files changed, 76 insertions(+), 89 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/AeterniumBlock.java b/src/main/java/ru/betterend/blocks/AeterniumBlock.java index f6369d15..d176689d 100644 --- a/src/main/java/ru/betterend/blocks/AeterniumBlock.java +++ b/src/main/java/ru/betterend/blocks/AeterniumBlock.java @@ -3,7 +3,6 @@ package ru.betterend.blocks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.SoundType; @@ -18,8 +17,7 @@ public class AeterniumBlock extends BaseBlock { super(FabricBlockSettings.of(Material.METAL, MaterialColor.COLOR_GRAY) .hardness(65F) .resistance(1200F) - .breakByTool(FabricToolTags.PICKAXES) - .requiresCorrectToolForDrops() + .requiresCorrectToolForDrops() .sound(SoundType.NETHERITE_BLOCK)); } diff --git a/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java b/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java index cfb07510..47885625 100644 --- a/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java +++ b/src/main/java/ru/betterend/blocks/AmaranitaStemBlock.java @@ -1,12 +1,12 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; import ru.bclib.blocks.BaseRotatedPillarBlock; -import ru.bclib.util.BlocksHelper; public class AmaranitaStemBlock extends BaseRotatedPillarBlock { public AmaranitaStemBlock() { - super(BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS).materialColor(MaterialColor.COLOR_LIGHT_GREEN)); + super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(MaterialColor.COLOR_LIGHT_GREEN)); } } diff --git a/src/main/java/ru/betterend/blocks/AmberBlock.java b/src/main/java/ru/betterend/blocks/AmberBlock.java index a26ea970..feedaea8 100644 --- a/src/main/java/ru/betterend/blocks/AmberBlock.java +++ b/src/main/java/ru/betterend/blocks/AmberBlock.java @@ -1,12 +1,12 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; import ru.bclib.blocks.BaseBlock; -import ru.bclib.util.BlocksHelper; public class AmberBlock extends BaseBlock { public AmberBlock() { - super(BlocksHelper.copySettingsOf(Blocks.DIAMOND_BLOCK).materialColor(MaterialColor.COLOR_YELLOW)); + super(FabricBlockSettings.copyOf(Blocks.DIAMOND_BLOCK).materialColor(MaterialColor.COLOR_YELLOW)); } } diff --git a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java index c1a62a76..2c73a6d1 100644 --- a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Random; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -22,7 +23,7 @@ import ru.betterend.registry.EndParticles; public class AncientEmeraldIceBlock extends BaseBlock { public AncientEmeraldIceBlock() { - super(BlocksHelper.copySettingsOf(Blocks.BLUE_ICE).randomTicks()); + super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java index 2e816be9..e26d2ce1 100644 --- a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java +++ b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java @@ -4,6 +4,7 @@ import java.util.Random; import org.jetbrains.annotations.Nullable; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -28,7 +29,7 @@ public class BrimstoneBlock extends BaseBlock { public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE; public BrimstoneBlock() { - super(BlocksHelper.copySettingsOf(Blocks.END_STONE).materialColor(MaterialColor.COLOR_BROWN).randomTicks()); + super(FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(MaterialColor.COLOR_BROWN).randomTicks()); registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false)); } diff --git a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java index a4c6c4af..f61aa0cb 100644 --- a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java +++ b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; @@ -19,7 +20,6 @@ import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { @@ -28,7 +28,7 @@ public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { private static final VoxelShape SHAPE_BIG; public CavePumpkinBlock() { - super(BlocksHelper.copySettingsOf(Blocks.PUMPKIN).luminance((state) -> state.getValue(SMALL) ? 10 : 15)); + super(FabricBlockSettings.copyOf(Blocks.PUMPKIN).luminance((state) -> state.getValue(SMALL) ? 10 : 15)); registerDefaultState(defaultBlockState().setValue(SMALL, false)); } diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index 2b218dc7..622eeb5e 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -10,7 +10,7 @@ import com.google.common.collect.Maps; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.UnbakedModel; @@ -28,20 +28,13 @@ import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.betterend.client.models.Patterns; public class ChandelierBlock extends BaseAttachedBlock implements IRenderTyped, BlockModelProvider { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public ChandelierBlock(Block source) { - super(BlocksHelper.copySettingsOf(source) - .breakByTool(FabricToolTags.PICKAXES) - .luminance(15) - .noCollission() - .noOcclusion() - .requiresCorrectToolForDrops() - ); + super(FabricBlockSettings.copyOf(source).luminance(15).noCollission().noOcclusion().requiresCorrectToolForDrops()); } @Override diff --git a/src/main/java/ru/betterend/blocks/CharcoalBlock.java b/src/main/java/ru/betterend/blocks/CharcoalBlock.java index 9e9df4c4..d9fa10a8 100644 --- a/src/main/java/ru/betterend/blocks/CharcoalBlock.java +++ b/src/main/java/ru/betterend/blocks/CharcoalBlock.java @@ -1,13 +1,13 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.registry.FuelRegistry; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseBlock; -import ru.bclib.util.BlocksHelper; public class CharcoalBlock extends BaseBlock { public CharcoalBlock() { - super(BlocksHelper.copySettingsOf(Blocks.COAL_BLOCK)); + super(FabricBlockSettings.copyOf(Blocks.COAL_BLOCK)); FuelRegistry.INSTANCE.add(this, 16000); } } diff --git a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java index 3c20c640..ece46509 100644 --- a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java @@ -3,6 +3,7 @@ package ru.betterend.blocks; import java.util.Collections; import java.util.List; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.Enchantments; @@ -13,11 +14,10 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseBlock; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; public class DenseEmeraldIceBlock extends BaseBlock implements IRenderTyped { public DenseEmeraldIceBlock() { - super(BlocksHelper.copySettingsOf(Blocks.PACKED_ICE)); + super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index ab078c7f..e4ebe572 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; @@ -28,11 +29,10 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTyped, BlockModelProvider { public EmeraldIceBlock() { - super(BlocksHelper.copySettingsOf(Blocks.ICE)); + super(FabricBlockSettings.copyOf(Blocks.ICE)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 260fa4e2..0c27ece2 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -4,6 +4,7 @@ import java.util.Map; import com.google.common.collect.Maps; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Direction.Axis; @@ -39,7 +40,7 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo private static final Map SHAPES = Maps.newEnumMap(Axis.class); public EndLotusStemBlock() { - super(BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS)); + super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS)); this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(SHAPE, TripleShape.MIDDLE).setValue(LEAF, false).setValue(FACING, Direction.UP)); } diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index ab12343f..a419608e 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -6,6 +6,7 @@ import java.util.Random; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; @@ -34,7 +35,6 @@ import net.minecraft.world.level.dimension.DimensionType; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IColorProvider; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.betterend.interfaces.TeleportingEntity; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndPortals; @@ -44,7 +44,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I public static final IntegerProperty PORTAL = EndBlockProperties.PORTAL; public EndPortalBlock() { - super(BlocksHelper.copySettingsOf(Blocks.NETHER_PORTAL).resistance(Blocks.BEDROCK.getExplosionResistance()).luminance(15)); + super(FabricBlockSettings.copyOf(Blocks.NETHER_PORTAL).resistance(Blocks.BEDROCK.getExplosionResistance()).luminance(15)); } @Override diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index d921ef0e..e7281b88 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -1,15 +1,9 @@ package ru.betterend.blocks; -import java.util.List; -import java.util.Random; - import com.google.common.collect.Lists; -import org.jetbrains.annotations.Nullable; - import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -22,12 +16,7 @@ import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; -import net.minecraft.world.level.block.Mirror; -import net.minecraft.world.level.block.RenderShape; -import net.minecraft.world.level.block.Rotation; -import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.*; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityTicker; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -41,10 +30,14 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.phys.BlockHitResult; +import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockWithEntity; import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; import ru.betterend.registry.EndBlockEntities; +import java.util.List; +import java.util.Random; + public class EndStoneSmelter extends BaseBlockWithEntity { public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; public static final BooleanProperty LIT = BlockStateProperties.LIT; @@ -54,7 +47,6 @@ public class EndStoneSmelter extends BaseBlockWithEntity { super(FabricBlockSettings.of(Material.STONE, MaterialColor.COLOR_GRAY) .hardness(4F) .resistance(100F) - .breakByTool(FabricToolTags.PICKAXES) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); this.registerDefaultState(this.stateDefinition.any() diff --git a/src/main/java/ru/betterend/blocks/EnderBlock.java b/src/main/java/ru/betterend/blocks/EnderBlock.java index 65994654..31469430 100644 --- a/src/main/java/ru/betterend/blocks/EnderBlock.java +++ b/src/main/java/ru/betterend/blocks/EnderBlock.java @@ -3,7 +3,6 @@ package ru.betterend.blocks; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; -import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.block.SoundType; @@ -18,7 +17,6 @@ public class EnderBlock extends BaseBlock { super(FabricBlockSettings.of(Material.STONE, MaterialColor.WARPED_WART_BLOCK) .hardness(5F) .resistance(6F) - .breakByTool(FabricToolTags.PICKAXES) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); } diff --git a/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java index 72c70d69..28ca0d6e 100644 --- a/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java +++ b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java @@ -5,6 +5,7 @@ import java.util.List; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; @@ -13,7 +14,6 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.FallingBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.ColorUtil; public class EndstoneDustBlock extends FallingBlock { @@ -21,7 +21,7 @@ public class EndstoneDustBlock extends FallingBlock { private static final int COLOR = ColorUtil.color(226, 239, 168); public EndstoneDustBlock() { - super(BlocksHelper.copySettingsOf(Blocks.SAND) + super(FabricBlockSettings.copyOf(Blocks.SAND) .breakByTool(FabricToolTags.SHOVELS) .materialColor(Blocks.END_STONE.defaultMaterialColor())); } diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index 7f1a7d9a..681e3578 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -9,6 +9,7 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; @@ -29,7 +30,6 @@ import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IColorProvider; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.ColorUtil; import ru.bclib.util.MHelper; import ru.betterend.client.models.Patterns; @@ -43,7 +43,7 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTyped, Blo private final int coloritem; public JellyshroomCapBlock(int r1, int g1, int b1, int r2, int g2, int b2) { - super(BlocksHelper.copySettingsOf(Blocks.SLIME_BLOCK)); + super(FabricBlockSettings.copyOf(Blocks.SLIME_BLOCK)); colorStart = new Vec3i(r1, g1, b1); colorEnd = new Vec3i(r2, g2, b2); coloritem = ColorUtil.color((r1 + r2) >> 1, (g1 + g2) >> 1, (b1 + b2) >> 1); diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java index 798d28ba..6890f22a 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java @@ -4,6 +4,7 @@ import java.util.Queue; import com.google.common.collect.Lists; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.tags.FluidTags; @@ -16,17 +17,17 @@ import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.FluidState; +import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeBlock() { - super(BlocksHelper.copySettingsOf(Blocks.SPONGE).noOcclusion()); + super(FabricBlockSettings.copyOf(Blocks.SPONGE).noOcclusion()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java index 82c58413..0908d9f3 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java @@ -4,6 +4,7 @@ import java.util.Random; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -27,7 +28,7 @@ import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MengerSpongeWetBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeWetBlock() { - super(BlocksHelper.copySettingsOf(Blocks.WET_SPONGE).noOcclusion()); + super(FabricBlockSettings.copyOf(Blocks.WET_SPONGE).noOcclusion()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MissingTileBlock.java b/src/main/java/ru/betterend/blocks/MissingTileBlock.java index 2bc243f6..7a516557 100644 --- a/src/main/java/ru/betterend/blocks/MissingTileBlock.java +++ b/src/main/java/ru/betterend/blocks/MissingTileBlock.java @@ -1,11 +1,11 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseBlock; -import ru.bclib.util.BlocksHelper; public class MissingTileBlock extends BaseBlock { public MissingTileBlock() { - super(BlocksHelper.copySettingsOf(Blocks.END_STONE)); + super(FabricBlockSettings.copyOf(Blocks.END_STONE)); } } diff --git a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java index ff885715..b7d3e7e1 100644 --- a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Random; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -18,13 +19,12 @@ import net.minecraft.world.level.lighting.LayerLightEngine; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseRotatedPillarBlock; -import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; @SuppressWarnings("deprecation") public class MossyDragonBoneBlock extends BaseRotatedPillarBlock { public MossyDragonBoneBlock() { - super(BlocksHelper.copySettingsOf(Blocks.BONE_BLOCK).hardness(0.5F).randomTicks()); + super(FabricBlockSettings.copyOf(Blocks.BONE_BLOCK).hardness(0.5F).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/MossyObsidian.java b/src/main/java/ru/betterend/blocks/MossyObsidian.java index d17588f5..d3423fdf 100644 --- a/src/main/java/ru/betterend/blocks/MossyObsidian.java +++ b/src/main/java/ru/betterend/blocks/MossyObsidian.java @@ -4,6 +4,7 @@ import java.util.Collections; import java.util.List; import java.util.Random; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -18,11 +19,10 @@ import net.minecraft.world.level.lighting.LayerLightEngine; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseBlock; -import ru.bclib.util.BlocksHelper; public class MossyObsidian extends BaseBlock { public MossyObsidian() { - super(BlocksHelper.copySettingsOf(Blocks.OBSIDIAN).hardness(3).randomTicks()); + super(FabricBlockSettings.copyOf(Blocks.OBSIDIAN).hardness(3).randomTicks()); } @Override diff --git a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java index bc6fb3ef..2d1d9acd 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java @@ -1,11 +1,11 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseRotatedPillarBlock; -import ru.bclib.util.BlocksHelper; public class NeonCactusBlock extends BaseRotatedPillarBlock { public NeonCactusBlock() { - super(BlocksHelper.copySettingsOf(Blocks.CACTUS).luminance(15)); + super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15)); } } diff --git a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java index 666e9308..568ea567 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -7,6 +7,7 @@ import java.util.Random; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -63,7 +64,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate private static final int MAX_LENGTH = 12; public NeonCactusPlantBlock() { - super(BlocksHelper.copySettingsOf(Blocks.CACTUS).luminance(15).randomTicks()); + super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15).randomTicks()); registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, Direction.UP).setValue(SHAPE, TripleShape.TOP)); } diff --git a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java index 2d274a1a..48b5e923 100644 --- a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java +++ b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import com.google.common.collect.Lists; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.core.BlockPos; @@ -53,7 +54,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; public RespawnObeliskBlock() { - super(BlocksHelper.copySettingsOf(Blocks.END_STONE).luminance((state) -> { + super(FabricBlockSettings.copyOf(Blocks.END_STONE).luminance((state) -> { return (state.getValue(SHAPE) == TripleShape.BOTTOM) ? 0 : 15; })); } diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java index c4d0a1c1..a8d3dcb0 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java @@ -1,5 +1,6 @@ package ru.betterend.blocks; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; @@ -26,7 +27,7 @@ public class UmbrellaTreeClusterBlock extends BaseBlock { public static final BooleanProperty NATURAL = BlockProperties.NATURAL; public UmbrellaTreeClusterBlock() { - super(BlocksHelper.copySettingsOf(Blocks.NETHER_WART_BLOCK) + super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .luminance(15)); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java index f176f4aa..d6569aa3 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java @@ -2,6 +2,7 @@ package ru.betterend.blocks; import java.util.Random; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.block.Block; @@ -18,7 +19,7 @@ public class UmbrellaTreeClusterEmptyBlock extends BaseBlock { public static final BooleanProperty NATURAL = EndBlockProperties.NATURAL; public UmbrellaTreeClusterEmptyBlock() { - super(BlocksHelper.copySettingsOf(Blocks.NETHER_WART_BLOCK) + super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .randomTicks()); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 7d6b4713..b267bf84 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -7,6 +7,7 @@ import com.google.common.collect.Lists; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -24,7 +25,6 @@ import net.minecraft.world.level.storage.loot.LootContext; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; @@ -34,7 +34,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); public UmbrellaTreeMembraneBlock() { - super(BlocksHelper.copySettingsOf(Blocks.SLIME_BLOCK)); + super(FabricBlockSettings.copyOf(Blocks.SLIME_BLOCK)); } @Override diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index cc801110..f4ada8b3 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -4,6 +4,7 @@ import java.util.Map; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -26,7 +27,6 @@ import net.minecraft.world.level.material.Fluids; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; -import ru.bclib.util.BlocksHelper; @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { @@ -34,7 +34,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public EndLanternBlock(Block source) { - this(BlocksHelper.copySettingsOf(source).luminance(15).noOcclusion()); + this(FabricBlockSettings.copyOf(source).luminance(15).noOcclusion()); } public EndLanternBlock(Properties settings) { diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index 80355ff3..8d79e82f 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -6,9 +6,15 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import com.google.common.collect.Lists; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; import org.jetbrains.annotations.Nullable; +import com.google.common.collect.Lists; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; @@ -28,8 +34,6 @@ import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; @@ -40,12 +44,9 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; -import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.EndBlockProperties; import ru.betterend.blocks.EndBlockProperties.PedestalState; import ru.betterend.blocks.InfusionPedestal; @@ -97,7 +98,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { protected float height = 1.0F; public PedestalBlock(Block parent) { - super(BlocksHelper.copySettingsOf(parent).luminance(state -> state.getValue(HAS_LIGHT) ? 12 : 0)); + super(FabricBlockSettings.copyOf(parent).luminance(state -> state.getValue(HAS_LIGHT) ? 12 : 0)); this.registerDefaultState(stateDefinition.any().setValue(STATE, PedestalState.DEFAULT).setValue(HAS_ITEM, false).setValue(HAS_LIGHT, false)); this.parent = parent; } diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index 6aea47ec..b8f2b7c9 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.renderer.block.model.BlockModel; @@ -18,7 +19,6 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; import ru.bclib.client.models.ModelsHelper; import ru.bclib.interfaces.IColorProvider; -import ru.bclib.util.BlocksHelper; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; @@ -27,7 +27,7 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider private static final VoxelShape SHAPE_FLOOR = Block.box(3, 0, 3, 13, 15, 13); public StoneLanternBlock(Block source) { - super(BlocksHelper.copySettingsOf(source).luminance(15)); + super(FabricBlockSettings.copyOf(source).luminance(15)); } @Override diff --git a/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java index 5b4ac1ea..9ae68e51 100644 --- a/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java @@ -31,7 +31,7 @@ public class ColoredMaterial { String id = Registry.BLOCK.getKey(source).getPath(); colors.forEach((color, name) -> { String blockName = id + "_" + name; - Block block = constructor.apply(BlocksHelper.copySettingsOf(source).materialColor(MaterialColor.COLOR_BLACK)); + Block block = constructor.apply(FabricBlockSettings.copyOf(source).materialColor(MaterialColor.COLOR_BLACK)); EndBlocks.registerBlock(blockName, block); if (craftEight) { GridRecipe.make(BetterEnd.MOD_ID, blockName, block).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(8).setShape("###", "#D#", "###").addMaterial('#', source).addMaterial('D', dyes.get(color)).build(); diff --git a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java index 4fdf1cae..1e82ff4c 100644 --- a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java @@ -10,7 +10,6 @@ import ru.bclib.blocks.BaseSlabBlock; import ru.bclib.blocks.BaseStairsBlock; import ru.bclib.blocks.BaseWallBlock; import ru.bclib.recipes.GridRecipe; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPedestal; @@ -32,7 +31,7 @@ public class CrystalSubblocksMaterial { public final Block brick_wall; public CrystalSubblocksMaterial(String name, Block source) { - FabricBlockSettings material = BlocksHelper.copySettingsOf(source); + FabricBlockSettings material = FabricBlockSettings.copyOf(source); polished = EndBlocks.registerBlock(name + "_polished", new BaseBlock(material)); tiles = EndBlocks.registerBlock(name + "_tiles", new BaseBlock(material)); pillar = EndBlocks.registerBlock(name + "_pillar", new BaseRotatedPillarBlock(material)); diff --git a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java index 75ca826e..4f5577bd 100644 --- a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java @@ -31,7 +31,6 @@ import ru.bclib.items.tool.BaseSwordItem; import ru.bclib.recipes.FurnaceRecipe; import ru.bclib.recipes.GridRecipe; import ru.bclib.recipes.SmithingTableRecipe; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.BulbVineLanternBlock; @@ -91,26 +90,26 @@ public class MetalMaterial { public final Item boots; public static MetalMaterial makeNormal(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, true, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, true, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeNormal(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, true, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, true, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeOreless(String name, MaterialColor color, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, false, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, false, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color), EndItems.makeEndItemSettings(), material, armor); } public static MetalMaterial makeOreless(String name, MaterialColor color, float hardness, float resistance, Tier material, ArmorMaterial armor) { - return new MetalMaterial(name, false, BlocksHelper.copySettingsOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); + return new MetalMaterial(name, false, FabricBlockSettings.copyOf(Blocks.IRON_BLOCK).materialColor(color).hardness(hardness).resistance(resistance), EndItems.makeEndItemSettings(), material, armor); } private MetalMaterial(String name, boolean hasOre, FabricBlockSettings settings, Properties itemSettings, Tier material, ArmorMaterial armor) { BlockBehaviour.Properties lanternProperties = FabricBlockSettings.copyOf(settings).hardness(1).resistance(1).luminance(15).sound(SoundType.LANTERN); final int level = material.getLevel(); - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseBlock(BlocksHelper.copySettingsOf(Blocks.END_STONE))) : null; + ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseBlock(FabricBlockSettings.copyOf(Blocks.END_STONE))) : null; block = EndBlocks.registerBlock(name + "_block", new BaseBlock(settings)); tile = EndBlocks.registerBlock(name + "_tile", new BaseBlock(settings)); stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(tile)); diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index 43050297..125c391e 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -16,7 +16,6 @@ import ru.bclib.blocks.BaseStoneButtonBlock; import ru.bclib.blocks.BaseWallBlock; import ru.bclib.blocks.StonePressurePlateBlock; import ru.bclib.recipes.GridRecipe; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPedestal; @@ -47,7 +46,7 @@ public class StoneMaterial { public final Block furnace; public StoneMaterial(String name, MaterialColor color) { - FabricBlockSettings material = BlocksHelper.copySettingsOf(Blocks.END_STONE).materialColor(color); + FabricBlockSettings material = FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(color); stone = EndBlocks.registerBlock(name, new BaseBlock(material)); polished = EndBlocks.registerBlock(name + "_polished", new BaseBlock(material)); diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index 174c73ed..57df31f3 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -33,7 +33,6 @@ import ru.bclib.blocks.BaseWoodenButtonBlock; import ru.bclib.blocks.StripableBarkBlock; import ru.bclib.blocks.WoodenPressurePlateBlock; import ru.bclib.recipes.GridRecipe; -import ru.bclib.util.BlocksHelper; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; @@ -70,7 +69,7 @@ public class WoodenMaterial { public final Tag.Named logItemTag; public WoodenMaterial(String name, MaterialColor woodColor, MaterialColor planksColor) { - FabricBlockSettings materialPlanks = BlocksHelper.copySettingsOf(Blocks.OAK_PLANKS).materialColor(planksColor); + FabricBlockSettings materialPlanks = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(planksColor); log_stripped = EndBlocks.registerBlock(name + "_stripped_log", new BaseRotatedPillarBlock(materialPlanks)); bark_stripped = EndBlocks.registerBlock(name + "_stripped_bark", new BaseBarkBlock(materialPlanks)); From 9db7f4d94074991c09cc3d16addf7bb0c9a9b525 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Sun, 4 Jul 2021 23:54:40 +0200 Subject: [PATCH 70/72] Added mining labels --- src/main/java/ru/betterend/minigTools.txt | 593 ++++++++++++++++++ .../minecraft/tags/blocks/mineable/axe.json | 31 + .../minecraft/tags/blocks/mineable/hoe.json | 14 + .../tags/blocks/mineable/pickaxe.json | 251 ++++++++ .../tags/blocks/mineable/shovel.json | 6 + 5 files changed, 895 insertions(+) create mode 100644 src/main/java/ru/betterend/minigTools.txt create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/axe.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json create mode 100644 src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json diff --git a/src/main/java/ru/betterend/minigTools.txt b/src/main/java/ru/betterend/minigTools.txt new file mode 100644 index 00000000..28523ccc --- /dev/null +++ b/src/main/java/ru/betterend/minigTools.txt @@ -0,0 +1,593 @@ +SHOVELS: + "betterend:endstone_dust", + +HOES: + "betterend:amber_root_seed", + "betterend:blossom_berry_seed", + "betterend:chorus_mushroom_seed", + "betterend:dragon_tree_leaves", + "betterend:lacugrove_leaves", + "betterend:lucernia_leaves", + "betterend:pythadendron_leaves", + "betterend:shadow_berry", + "betterend:tenanea_leaves", + +SWORDS: + +AXES: + "betterend:amaranita_cap", + "betterend:amaranita_hymenophore", + "betterend:amaranita_lantern", + "betterend:aurant_polypore", + "betterend:blue_vine_lantern", + "betterend:filalux_lantern", + "betterend:hydralux_petal_block", + "betterend:hydralux_petal_block_black", + "betterend:hydralux_petal_block_blue", + "betterend:hydralux_petal_block_brown", + "betterend:hydralux_petal_block_cyan", + "betterend:hydralux_petal_block_gray", + "betterend:hydralux_petal_block_green", + "betterend:hydralux_petal_block_light_blue", + "betterend:hydralux_petal_block_light_gray", + "betterend:hydralux_petal_block_lime", + "betterend:hydralux_petal_block_magenta", + "betterend:hydralux_petal_block_orange", + "betterend:hydralux_petal_block_pink", + "betterend:hydralux_petal_block_purple", + "betterend:hydralux_petal_block_red", + "betterend:hydralux_petal_block_white", + "betterend:hydralux_petal_block_yellow", + "betterend:mossy_glowshroom_cap", + "betterend:mossy_glowshroom_hymenophore", + "betterend:purple_polypore", + +SHEARS: + "betterend:aeridium", + "betterend:amaranita_fur", + "betterend:amber_grass", + "betterend:blooming_cooksonia", + "betterend:blue_vine_fur", + "betterend:blue_vine_seed", + "betterend:bolux_mushroom", + "betterend:bubble_coral", + "betterend:bulb_moss", + "betterend:bulb_vine", + "betterend:bulb_vine_seed", + "betterend:bushy_grass", + "betterend:cave_grass", + "betterend:cave_pumpkin_seed", + "betterend:charnia_cyan", + "betterend:charnia_green", + "betterend:charnia_light_blue", + "betterend:charnia_orange", + "betterend:charnia_purple", + "betterend:charnia_red", + "betterend:chorus_grass", + "betterend:clawfern", + "betterend:creeping_moss", + "betterend:crystal_grass", + "betterend:cyan_moss", + "betterend:dense_vine", + "betterend:dragon_tree_leaves", + "betterend:end_lily_seed", + "betterend:end_lotus_seed", + "betterend:filalux", + "betterend:filalux_wings", + "betterend:flamaea", + "betterend:fracturn", + "betterend:globulagus", + "betterend:glowing_pillar_leaves", + "betterend:glowing_pillar_luminophor", + "betterend:glowing_pillar_seed", + "betterend:helix_tree_leaves", + "betterend:hydralux_sapling", + "betterend:jungle_fern", + "betterend:jungle_grass", + "betterend:jungle_vine", + "betterend:lacugrove_leaves", + "betterend:lamellarium", + "betterend:lanceleaf_seed", + "betterend:lucernia_leaves", + "betterend:lucernia_outer_leaves", + "betterend:lumecorn_seed", + "betterend:lutebus", + "betterend:magnula", + "betterend:mossy_glowshroom_fur", + "betterend:murkweed", + "betterend:needlegrass", + "betterend:orango", + "betterend:pond_anemone", + "betterend:pythadendron_leaves", + "betterend:rubinea", + "betterend:ruscus", + "betterend:salteago", + "betterend:shadow_plant", + "betterend:small_amaranita_mushroom", + "betterend:small_jellyshroom", + "betterend:tail_moss", + "betterend:tenanea_flowers", + "betterend:tenanea_leaves", + "betterend:tenanea_outer_leaves", + "betterend:tube_worm", + "betterend:twisted_moss", + "betterend:twisted_umbrella_moss", + "betterend:twisted_umbrella_moss_tall", + "betterend:twisted_vine", + "betterend:umbrella_moss", + "betterend:umbrella_moss_tall", + "betterend:vaiolush_fern", + +UNKNOWN: + "betterend:aurora_crystal", + +MISSING: + "betterend:amber_ore", + "betterend:end_stone_stalactite", + "betterend:end_stone_stalactite_cavemoss", + "betterend:ender_ore", + +NONE: + "betterend:amaranita_hyphae", + "betterend:amaranita_stem", + "betterend:ancient_emerald_ice", + "betterend:cave_bush", + "betterend:cave_pumpkin", + "betterend:dense_emerald_ice", + "betterend:dense_snow", + "betterend:dragon_tree_bark", + "betterend:dragon_tree_barrel", + "betterend:dragon_tree_bookshelf", + "betterend:dragon_tree_button", + "betterend:dragon_tree_chest", + "betterend:dragon_tree_composter", + "betterend:dragon_tree_crafting_table", + "betterend:dragon_tree_door", + "betterend:dragon_tree_fence", + "betterend:dragon_tree_gate", + "betterend:dragon_tree_ladder", + "betterend:dragon_tree_log", + "betterend:dragon_tree_planks", + "betterend:dragon_tree_plate", + "betterend:dragon_tree_sign", + "betterend:dragon_tree_slab", + "betterend:dragon_tree_stairs", + "betterend:dragon_tree_stripped_bark", + "betterend:dragon_tree_stripped_log", + "betterend:dragon_tree_trapdoor", + "betterend:emerald_ice", + "betterend:end_lotus_bark", + "betterend:end_lotus_barrel", + "betterend:end_lotus_bookshelf", + "betterend:end_lotus_button", + "betterend:end_lotus_chest", + "betterend:end_lotus_composter", + "betterend:end_lotus_crafting_table", + "betterend:end_lotus_door", + "betterend:end_lotus_fence", + "betterend:end_lotus_gate", + "betterend:end_lotus_ladder", + "betterend:end_lotus_log", + "betterend:end_lotus_planks", + "betterend:end_lotus_plate", + "betterend:end_lotus_sign", + "betterend:end_lotus_slab", + "betterend:end_lotus_stairs", + "betterend:end_lotus_stem", + "betterend:end_lotus_stripped_bark", + "betterend:end_lotus_stripped_log", + "betterend:end_lotus_trapdoor", + "betterend:helix_tree_bark", + "betterend:helix_tree_barrel", + "betterend:helix_tree_bookshelf", + "betterend:helix_tree_button", + "betterend:helix_tree_chest", + "betterend:helix_tree_composter", + "betterend:helix_tree_crafting_table", + "betterend:helix_tree_door", + "betterend:helix_tree_fence", + "betterend:helix_tree_gate", + "betterend:helix_tree_ladder", + "betterend:helix_tree_log", + "betterend:helix_tree_planks", + "betterend:helix_tree_plate", + "betterend:helix_tree_sign", + "betterend:helix_tree_slab", + "betterend:helix_tree_stairs", + "betterend:helix_tree_stripped_bark", + "betterend:helix_tree_stripped_log", + "betterend:helix_tree_trapdoor", + "betterend:jellyshroom_bark", + "betterend:jellyshroom_barrel", + "betterend:jellyshroom_bookshelf", + "betterend:jellyshroom_button", + "betterend:jellyshroom_cap_purple", + "betterend:jellyshroom_chest", + "betterend:jellyshroom_composter", + "betterend:jellyshroom_crafting_table", + "betterend:jellyshroom_door", + "betterend:jellyshroom_fence", + "betterend:jellyshroom_gate", + "betterend:jellyshroom_ladder", + "betterend:jellyshroom_log", + "betterend:jellyshroom_planks", + "betterend:jellyshroom_plate", + "betterend:jellyshroom_sign", + "betterend:jellyshroom_slab", + "betterend:jellyshroom_stairs", + "betterend:jellyshroom_stripped_bark", + "betterend:jellyshroom_stripped_log", + "betterend:jellyshroom_trapdoor", + "betterend:lacugrove_bark", + "betterend:lacugrove_barrel", + "betterend:lacugrove_bookshelf", + "betterend:lacugrove_button", + "betterend:lacugrove_chest", + "betterend:lacugrove_composter", + "betterend:lacugrove_crafting_table", + "betterend:lacugrove_door", + "betterend:lacugrove_fence", + "betterend:lacugrove_gate", + "betterend:lacugrove_ladder", + "betterend:lacugrove_log", + "betterend:lacugrove_planks", + "betterend:lacugrove_plate", + "betterend:lacugrove_sign", + "betterend:lacugrove_slab", + "betterend:lacugrove_stairs", + "betterend:lacugrove_stripped_bark", + "betterend:lacugrove_stripped_log", + "betterend:lacugrove_trapdoor", + "betterend:lucernia_bark", + "betterend:lucernia_barrel", + "betterend:lucernia_bookshelf", + "betterend:lucernia_button", + "betterend:lucernia_chest", + "betterend:lucernia_composter", + "betterend:lucernia_crafting_table", + "betterend:lucernia_door", + "betterend:lucernia_fence", + "betterend:lucernia_gate", + "betterend:lucernia_ladder", + "betterend:lucernia_log", + "betterend:lucernia_planks", + "betterend:lucernia_plate", + "betterend:lucernia_sign", + "betterend:lucernia_slab", + "betterend:lucernia_stairs", + "betterend:lucernia_stripped_bark", + "betterend:lucernia_stripped_log", + "betterend:lucernia_trapdoor", + "betterend:menger_sponge", + "betterend:menger_sponge_wet", + "betterend:mossy_glowshroom_bark", + "betterend:mossy_glowshroom_barrel", + "betterend:mossy_glowshroom_bookshelf", + "betterend:mossy_glowshroom_button", + "betterend:mossy_glowshroom_chest", + "betterend:mossy_glowshroom_composter", + "betterend:mossy_glowshroom_crafting_table", + "betterend:mossy_glowshroom_door", + "betterend:mossy_glowshroom_fence", + "betterend:mossy_glowshroom_gate", + "betterend:mossy_glowshroom_ladder", + "betterend:mossy_glowshroom_log", + "betterend:mossy_glowshroom_planks", + "betterend:mossy_glowshroom_plate", + "betterend:mossy_glowshroom_sign", + "betterend:mossy_glowshroom_slab", + "betterend:mossy_glowshroom_stairs", + "betterend:mossy_glowshroom_stripped_bark", + "betterend:mossy_glowshroom_stripped_log", + "betterend:mossy_glowshroom_trapdoor", + "betterend:neon_cactus", + "betterend:neon_cactus_block", + "betterend:neon_cactus_slab", + "betterend:neon_cactus_stairs", + "betterend:pythadendron_bark", + "betterend:pythadendron_barrel", + "betterend:pythadendron_bookshelf", + "betterend:pythadendron_button", + "betterend:pythadendron_chest", + "betterend:pythadendron_composter", + "betterend:pythadendron_crafting_table", + "betterend:pythadendron_door", + "betterend:pythadendron_fence", + "betterend:pythadendron_gate", + "betterend:pythadendron_ladder", + "betterend:pythadendron_log", + "betterend:pythadendron_planks", + "betterend:pythadendron_plate", + "betterend:pythadendron_sign", + "betterend:pythadendron_slab", + "betterend:pythadendron_stairs", + "betterend:pythadendron_stripped_bark", + "betterend:pythadendron_stripped_log", + "betterend:pythadendron_trapdoor", + "betterend:silk_moth_nest", + "betterend:tenanea_bark", + "betterend:tenanea_barrel", + "betterend:tenanea_bookshelf", + "betterend:tenanea_button", + "betterend:tenanea_chest", + "betterend:tenanea_composter", + "betterend:tenanea_crafting_table", + "betterend:tenanea_door", + "betterend:tenanea_fence", + "betterend:tenanea_gate", + "betterend:tenanea_ladder", + "betterend:tenanea_log", + "betterend:tenanea_planks", + "betterend:tenanea_plate", + "betterend:tenanea_sign", + "betterend:tenanea_slab", + "betterend:tenanea_stairs", + "betterend:tenanea_stripped_bark", + "betterend:tenanea_stripped_log", + "betterend:tenanea_trapdoor", + "betterend:umbrella_tree_bark", + "betterend:umbrella_tree_barrel", + "betterend:umbrella_tree_bookshelf", + "betterend:umbrella_tree_button", + "betterend:umbrella_tree_chest", + "betterend:umbrella_tree_cluster", + "betterend:umbrella_tree_cluster_empty", + "betterend:umbrella_tree_composter", + "betterend:umbrella_tree_crafting_table", + "betterend:umbrella_tree_door", + "betterend:umbrella_tree_fence", + "betterend:umbrella_tree_gate", + "betterend:umbrella_tree_ladder", + "betterend:umbrella_tree_log", + "betterend:umbrella_tree_membrane", + "betterend:umbrella_tree_planks", + "betterend:umbrella_tree_plate", + "betterend:umbrella_tree_sign", + "betterend:umbrella_tree_slab", + "betterend:umbrella_tree_stairs", + "betterend:umbrella_tree_stripped_bark", + "betterend:umbrella_tree_stripped_log", + "betterend:umbrella_tree_trapdoor", + +PICKAXES: + "betterend:aeternium_anvil", + "betterend:aeternium_block", + "betterend:amber_block", + "betterend:amber_moss", + "betterend:amber_moss_path", + "betterend:andesite_lantern", + "betterend:andesite_pedestal", + "betterend:aurora_crystal", + "betterend:azure_jadestone", + "betterend:azure_jadestone_bricks", + "betterend:azure_jadestone_bricks_slab", + "betterend:azure_jadestone_bricks_stairs", + "betterend:azure_jadestone_bricks_wall", + "betterend:azure_jadestone_button", + "betterend:azure_jadestone_furnace", + "betterend:azure_jadestone_lantern", + "betterend:azure_jadestone_pedestal", + "betterend:azure_jadestone_pillar", + "betterend:azure_jadestone_plate", + "betterend:azure_jadestone_polished", + "betterend:azure_jadestone_slab", + "betterend:azure_jadestone_stairs", + "betterend:azure_jadestone_tiles", + "betterend:azure_jadestone_wall", + "betterend:blackstone_lantern", + "betterend:brimstone", + "betterend:cave_moss", + "betterend:cave_moss_path", + "betterend:charcoal_block", + "betterend:chorus_nylium", + "betterend:chorus_nylium_path", + "betterend:crystal_moss", + "betterend:crystal_moss_path", + "betterend:diorite_lantern", + "betterend:diorite_pedestal", + "betterend:dragon_bone_block", + "betterend:dragon_bone_slab", + "betterend:dragon_bone_stairs", + "betterend:end_moss", + "betterend:end_moss_path", + "betterend:end_mycelium", + "betterend:end_mycelium_path", + "betterend:end_stone_furnace", + "betterend:end_stone_lantern", + "betterend:end_stone_smelter", + "betterend:ender_block", + "betterend:eternal_pedestal", + "betterend:flavolite", + "betterend:flavolite_bricks", + "betterend:flavolite_bricks_slab", + "betterend:flavolite_bricks_stairs", + "betterend:flavolite_bricks_wall", + "betterend:flavolite_button", + "betterend:flavolite_furnace", + "betterend:flavolite_lantern", + "betterend:flavolite_pedestal", + "betterend:flavolite_pillar", + "betterend:flavolite_plate", + "betterend:flavolite_polished", + "betterend:flavolite_runed", + "betterend:flavolite_runed_eternal", + "betterend:flavolite_slab", + "betterend:flavolite_stairs", + "betterend:flavolite_tiles", + "betterend:flavolite_wall", + "betterend:gold_chandelier", + "betterend:granite_lantern", + "betterend:granite_pedestal", + "betterend:hydrothermal_vent", + "betterend:infusion_pedestal", + "betterend:iron_bulb_lantern", + "betterend:iron_bulb_lantern_black", + "betterend:iron_bulb_lantern_blue", + "betterend:iron_bulb_lantern_brown", + "betterend:iron_bulb_lantern_cyan", + "betterend:iron_bulb_lantern_gray", + "betterend:iron_bulb_lantern_green", + "betterend:iron_bulb_lantern_light_blue", + "betterend:iron_bulb_lantern_light_gray", + "betterend:iron_bulb_lantern_lime", + "betterend:iron_bulb_lantern_magenta", + "betterend:iron_bulb_lantern_orange", + "betterend:iron_bulb_lantern_pink", + "betterend:iron_bulb_lantern_purple", + "betterend:iron_bulb_lantern_red", + "betterend:iron_bulb_lantern_white", + "betterend:iron_bulb_lantern_yellow", + "betterend:iron_chandelier", + "betterend:jungle_moss", + "betterend:jungle_moss_path", + "betterend:missing_tile", + "betterend:mossy_dragon_bone", + "betterend:mossy_obsidian", + "betterend:pink_moss", + "betterend:pink_moss_path", + "betterend:purpur_lantern", + "betterend:purpur_pedestal", + "betterend:quartz_lantern", + "betterend:quartz_pedestal", + "betterend:respawn_obelisk", + "betterend:rutiscus", + "betterend:rutiscus_path", + "betterend:sandy_jadestone", + "betterend:sandy_jadestone_bricks", + "betterend:sandy_jadestone_bricks_slab", + "betterend:sandy_jadestone_bricks_stairs", + "betterend:sandy_jadestone_bricks_wall", + "betterend:sandy_jadestone_button", + "betterend:sandy_jadestone_furnace", + "betterend:sandy_jadestone_lantern", + "betterend:sandy_jadestone_pedestal", + "betterend:sandy_jadestone_pillar", + "betterend:sandy_jadestone_plate", + "betterend:sandy_jadestone_polished", + "betterend:sandy_jadestone_slab", + "betterend:sandy_jadestone_stairs", + "betterend:sandy_jadestone_tiles", + "betterend:sandy_jadestone_wall", + "betterend:sangnum", + "betterend:sangnum_path", + "betterend:shadow_grass", + "betterend:shadow_grass_path", + "betterend:smaragdant_crystal", + "betterend:smaragdant_crystal_bricks", + "betterend:smaragdant_crystal_bricks_slab", + "betterend:smaragdant_crystal_bricks_stairs", + "betterend:smaragdant_crystal_bricks_wall", + "betterend:smaragdant_crystal_pedestal", + "betterend:smaragdant_crystal_pillar", + "betterend:smaragdant_crystal_polished", + "betterend:smaragdant_crystal_shard", + "betterend:smaragdant_crystal_slab", + "betterend:smaragdant_crystal_stairs", + "betterend:smaragdant_crystal_tiles", + "betterend:smaragdant_crystal_wall", + "betterend:sulphur_crystal", + "betterend:sulphuric_rock", + "betterend:sulphuric_rock_bricks", + "betterend:sulphuric_rock_bricks_slab", + "betterend:sulphuric_rock_bricks_stairs", + "betterend:sulphuric_rock_bricks_wall", + "betterend:sulphuric_rock_button", + "betterend:sulphuric_rock_furnace", + "betterend:sulphuric_rock_lantern", + "betterend:sulphuric_rock_pedestal", + "betterend:sulphuric_rock_pillar", + "betterend:sulphuric_rock_plate", + "betterend:sulphuric_rock_polished", + "betterend:sulphuric_rock_slab", + "betterend:sulphuric_rock_stairs", + "betterend:sulphuric_rock_tiles", + "betterend:sulphuric_rock_wall", + "betterend:terminite_anvil", + "betterend:terminite_bars", + "betterend:terminite_block", + "betterend:terminite_bulb_lantern", + "betterend:terminite_bulb_lantern_black", + "betterend:terminite_bulb_lantern_blue", + "betterend:terminite_bulb_lantern_brown", + "betterend:terminite_bulb_lantern_cyan", + "betterend:terminite_bulb_lantern_gray", + "betterend:terminite_bulb_lantern_green", + "betterend:terminite_bulb_lantern_light_blue", + "betterend:terminite_bulb_lantern_light_gray", + "betterend:terminite_bulb_lantern_lime", + "betterend:terminite_bulb_lantern_magenta", + "betterend:terminite_bulb_lantern_orange", + "betterend:terminite_bulb_lantern_pink", + "betterend:terminite_bulb_lantern_purple", + "betterend:terminite_bulb_lantern_red", + "betterend:terminite_bulb_lantern_white", + "betterend:terminite_bulb_lantern_yellow", + "betterend:terminite_chain", + "betterend:terminite_chandelier", + "betterend:terminite_door", + "betterend:terminite_plate", + "betterend:terminite_slab", + "betterend:terminite_stairs", + "betterend:terminite_tile", + "betterend:terminite_trapdoor", + "betterend:thallasium_anvil", + "betterend:thallasium_bars", + "betterend:thallasium_block", + "betterend:thallasium_bulb_lantern", + "betterend:thallasium_bulb_lantern_black", + "betterend:thallasium_bulb_lantern_blue", + "betterend:thallasium_bulb_lantern_brown", + "betterend:thallasium_bulb_lantern_cyan", + "betterend:thallasium_bulb_lantern_gray", + "betterend:thallasium_bulb_lantern_green", + "betterend:thallasium_bulb_lantern_light_blue", + "betterend:thallasium_bulb_lantern_light_gray", + "betterend:thallasium_bulb_lantern_lime", + "betterend:thallasium_bulb_lantern_magenta", + "betterend:thallasium_bulb_lantern_orange", + "betterend:thallasium_bulb_lantern_pink", + "betterend:thallasium_bulb_lantern_purple", + "betterend:thallasium_bulb_lantern_red", + "betterend:thallasium_bulb_lantern_white", + "betterend:thallasium_bulb_lantern_yellow", + "betterend:thallasium_chain", + "betterend:thallasium_chandelier", + "betterend:thallasium_door", + "betterend:thallasium_ore", + "betterend:thallasium_plate", + "betterend:thallasium_slab", + "betterend:thallasium_stairs", + "betterend:thallasium_tile", + "betterend:thallasium_trapdoor", + "betterend:violecite", + "betterend:violecite_bricks", + "betterend:violecite_bricks_slab", + "betterend:violecite_bricks_stairs", + "betterend:violecite_bricks_wall", + "betterend:violecite_button", + "betterend:violecite_furnace", + "betterend:violecite_lantern", + "betterend:violecite_pedestal", + "betterend:violecite_pillar", + "betterend:violecite_plate", + "betterend:violecite_polished", + "betterend:violecite_slab", + "betterend:violecite_stairs", + "betterend:violecite_tiles", + "betterend:violecite_wall", + "betterend:virid_jadestone", + "betterend:virid_jadestone_bricks", + "betterend:virid_jadestone_bricks_slab", + "betterend:virid_jadestone_bricks_stairs", + "betterend:virid_jadestone_bricks_wall", + "betterend:virid_jadestone_button", + "betterend:virid_jadestone_furnace", + "betterend:virid_jadestone_lantern", + "betterend:virid_jadestone_pedestal", + "betterend:virid_jadestone_pillar", + "betterend:virid_jadestone_plate", + "betterend:virid_jadestone_polished", + "betterend:virid_jadestone_slab", + "betterend:virid_jadestone_stairs", + "betterend:virid_jadestone_tiles", + "betterend:virid_jadestone_wall", \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json new file mode 100644 index 00000000..538c9e24 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json @@ -0,0 +1,31 @@ +{ + "replace": "false", + "values": [ + "betterend:amaranita_cap", + "betterend:amaranita_hymenophore", + "betterend:amaranita_lantern", + "betterend:aurant_polypore", + "betterend:blue_vine_lantern", + "betterend:filalux_lantern", + "betterend:hydralux_petal_block", + "betterend:hydralux_petal_block_black", + "betterend:hydralux_petal_block_blue", + "betterend:hydralux_petal_block_brown", + "betterend:hydralux_petal_block_cyan", + "betterend:hydralux_petal_block_gray", + "betterend:hydralux_petal_block_green", + "betterend:hydralux_petal_block_light_blue", + "betterend:hydralux_petal_block_light_gray", + "betterend:hydralux_petal_block_lime", + "betterend:hydralux_petal_block_magenta", + "betterend:hydralux_petal_block_orange", + "betterend:hydralux_petal_block_pink", + "betterend:hydralux_petal_block_purple", + "betterend:hydralux_petal_block_red", + "betterend:hydralux_petal_block_white", + "betterend:hydralux_petal_block_yellow", + "betterend:mossy_glowshroom_cap", + "betterend:mossy_glowshroom_hymenophore", + "betterend:purple_polypore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json new file mode 100644 index 00000000..b90eeee2 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json @@ -0,0 +1,14 @@ +{ + "replace": "false", + "values": [ + "betterend:amber_root_seed", + "betterend:blossom_berry_seed", + "betterend:chorus_mushroom_seed", + "betterend:dragon_tree_leaves", + "betterend:lacugrove_leaves", + "betterend:lucernia_leaves", + "betterend:pythadendron_leaves", + "betterend:shadow_berry", + "betterend:tenanea_leaves" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json new file mode 100644 index 00000000..a6e13734 --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json @@ -0,0 +1,251 @@ +{ + "replace": "false", + "values": [ + "betterend:aeternium_anvil", + "betterend:aeternium_block", + "betterend:amber_block", + "betterend:amber_moss", + "betterend:amber_moss_path", + "betterend:andesite_lantern", + "betterend:andesite_pedestal", + "betterend:aurora_crystal", + "betterend:azure_jadestone", + "betterend:azure_jadestone_bricks", + "betterend:azure_jadestone_bricks_slab", + "betterend:azure_jadestone_bricks_stairs", + "betterend:azure_jadestone_bricks_wall", + "betterend:azure_jadestone_button", + "betterend:azure_jadestone_furnace", + "betterend:azure_jadestone_lantern", + "betterend:azure_jadestone_pedestal", + "betterend:azure_jadestone_pillar", + "betterend:azure_jadestone_plate", + "betterend:azure_jadestone_polished", + "betterend:azure_jadestone_slab", + "betterend:azure_jadestone_stairs", + "betterend:azure_jadestone_tiles", + "betterend:azure_jadestone_wall", + "betterend:blackstone_lantern", + "betterend:brimstone", + "betterend:cave_moss", + "betterend:cave_moss_path", + "betterend:charcoal_block", + "betterend:chorus_nylium", + "betterend:chorus_nylium_path", + "betterend:crystal_moss", + "betterend:crystal_moss_path", + "betterend:diorite_lantern", + "betterend:diorite_pedestal", + "betterend:dragon_bone_block", + "betterend:dragon_bone_slab", + "betterend:dragon_bone_stairs", + "betterend:end_moss", + "betterend:end_moss_path", + "betterend:end_mycelium", + "betterend:end_mycelium_path", + "betterend:end_stone_furnace", + "betterend:end_stone_lantern", + "betterend:end_stone_smelter", + "betterend:ender_block", + "betterend:eternal_pedestal", + "betterend:flavolite", + "betterend:flavolite_bricks", + "betterend:flavolite_bricks_slab", + "betterend:flavolite_bricks_stairs", + "betterend:flavolite_bricks_wall", + "betterend:flavolite_button", + "betterend:flavolite_furnace", + "betterend:flavolite_lantern", + "betterend:flavolite_pedestal", + "betterend:flavolite_pillar", + "betterend:flavolite_plate", + "betterend:flavolite_polished", + "betterend:flavolite_runed", + "betterend:flavolite_runed_eternal", + "betterend:flavolite_slab", + "betterend:flavolite_stairs", + "betterend:flavolite_tiles", + "betterend:flavolite_wall", + "betterend:gold_chandelier", + "betterend:granite_lantern", + "betterend:granite_pedestal", + "betterend:hydrothermal_vent", + "betterend:infusion_pedestal", + "betterend:iron_bulb_lantern", + "betterend:iron_bulb_lantern_black", + "betterend:iron_bulb_lantern_blue", + "betterend:iron_bulb_lantern_brown", + "betterend:iron_bulb_lantern_cyan", + "betterend:iron_bulb_lantern_gray", + "betterend:iron_bulb_lantern_green", + "betterend:iron_bulb_lantern_light_blue", + "betterend:iron_bulb_lantern_light_gray", + "betterend:iron_bulb_lantern_lime", + "betterend:iron_bulb_lantern_magenta", + "betterend:iron_bulb_lantern_orange", + "betterend:iron_bulb_lantern_pink", + "betterend:iron_bulb_lantern_purple", + "betterend:iron_bulb_lantern_red", + "betterend:iron_bulb_lantern_white", + "betterend:iron_bulb_lantern_yellow", + "betterend:iron_chandelier", + "betterend:jungle_moss", + "betterend:jungle_moss_path", + "betterend:missing_tile", + "betterend:mossy_dragon_bone", + "betterend:mossy_obsidian", + "betterend:pink_moss", + "betterend:pink_moss_path", + "betterend:purpur_lantern", + "betterend:purpur_pedestal", + "betterend:quartz_lantern", + "betterend:quartz_pedestal", + "betterend:respawn_obelisk", + "betterend:rutiscus", + "betterend:rutiscus_path", + "betterend:sandy_jadestone", + "betterend:sandy_jadestone_bricks", + "betterend:sandy_jadestone_bricks_slab", + "betterend:sandy_jadestone_bricks_stairs", + "betterend:sandy_jadestone_bricks_wall", + "betterend:sandy_jadestone_button", + "betterend:sandy_jadestone_furnace", + "betterend:sandy_jadestone_lantern", + "betterend:sandy_jadestone_pedestal", + "betterend:sandy_jadestone_pillar", + "betterend:sandy_jadestone_plate", + "betterend:sandy_jadestone_polished", + "betterend:sandy_jadestone_slab", + "betterend:sandy_jadestone_stairs", + "betterend:sandy_jadestone_tiles", + "betterend:sandy_jadestone_wall", + "betterend:sangnum", + "betterend:sangnum_path", + "betterend:shadow_grass", + "betterend:shadow_grass_path", + "betterend:smaragdant_crystal", + "betterend:smaragdant_crystal_bricks", + "betterend:smaragdant_crystal_bricks_slab", + "betterend:smaragdant_crystal_bricks_stairs", + "betterend:smaragdant_crystal_bricks_wall", + "betterend:smaragdant_crystal_pedestal", + "betterend:smaragdant_crystal_pillar", + "betterend:smaragdant_crystal_polished", + "betterend:smaragdant_crystal_shard", + "betterend:smaragdant_crystal_slab", + "betterend:smaragdant_crystal_stairs", + "betterend:smaragdant_crystal_tiles", + "betterend:smaragdant_crystal_wall", + "betterend:sulphur_crystal", + "betterend:sulphuric_rock", + "betterend:sulphuric_rock_bricks", + "betterend:sulphuric_rock_bricks_slab", + "betterend:sulphuric_rock_bricks_stairs", + "betterend:sulphuric_rock_bricks_wall", + "betterend:sulphuric_rock_button", + "betterend:sulphuric_rock_furnace", + "betterend:sulphuric_rock_lantern", + "betterend:sulphuric_rock_pedestal", + "betterend:sulphuric_rock_pillar", + "betterend:sulphuric_rock_plate", + "betterend:sulphuric_rock_polished", + "betterend:sulphuric_rock_slab", + "betterend:sulphuric_rock_stairs", + "betterend:sulphuric_rock_tiles", + "betterend:sulphuric_rock_wall", + "betterend:terminite_anvil", + "betterend:terminite_bars", + "betterend:terminite_block", + "betterend:terminite_bulb_lantern", + "betterend:terminite_bulb_lantern_black", + "betterend:terminite_bulb_lantern_blue", + "betterend:terminite_bulb_lantern_brown", + "betterend:terminite_bulb_lantern_cyan", + "betterend:terminite_bulb_lantern_gray", + "betterend:terminite_bulb_lantern_green", + "betterend:terminite_bulb_lantern_light_blue", + "betterend:terminite_bulb_lantern_light_gray", + "betterend:terminite_bulb_lantern_lime", + "betterend:terminite_bulb_lantern_magenta", + "betterend:terminite_bulb_lantern_orange", + "betterend:terminite_bulb_lantern_pink", + "betterend:terminite_bulb_lantern_purple", + "betterend:terminite_bulb_lantern_red", + "betterend:terminite_bulb_lantern_white", + "betterend:terminite_bulb_lantern_yellow", + "betterend:terminite_chain", + "betterend:terminite_chandelier", + "betterend:terminite_door", + "betterend:terminite_plate", + "betterend:terminite_slab", + "betterend:terminite_stairs", + "betterend:terminite_tile", + "betterend:terminite_trapdoor", + "betterend:thallasium_anvil", + "betterend:thallasium_bars", + "betterend:thallasium_block", + "betterend:thallasium_bulb_lantern", + "betterend:thallasium_bulb_lantern_black", + "betterend:thallasium_bulb_lantern_blue", + "betterend:thallasium_bulb_lantern_brown", + "betterend:thallasium_bulb_lantern_cyan", + "betterend:thallasium_bulb_lantern_gray", + "betterend:thallasium_bulb_lantern_green", + "betterend:thallasium_bulb_lantern_light_blue", + "betterend:thallasium_bulb_lantern_light_gray", + "betterend:thallasium_bulb_lantern_lime", + "betterend:thallasium_bulb_lantern_magenta", + "betterend:thallasium_bulb_lantern_orange", + "betterend:thallasium_bulb_lantern_pink", + "betterend:thallasium_bulb_lantern_purple", + "betterend:thallasium_bulb_lantern_red", + "betterend:thallasium_bulb_lantern_white", + "betterend:thallasium_bulb_lantern_yellow", + "betterend:thallasium_chain", + "betterend:thallasium_chandelier", + "betterend:thallasium_door", + "betterend:thallasium_ore", + "betterend:thallasium_plate", + "betterend:thallasium_slab", + "betterend:thallasium_stairs", + "betterend:thallasium_tile", + "betterend:thallasium_trapdoor", + "betterend:violecite", + "betterend:violecite_bricks", + "betterend:violecite_bricks_slab", + "betterend:violecite_bricks_stairs", + "betterend:violecite_bricks_wall", + "betterend:violecite_button", + "betterend:violecite_furnace", + "betterend:violecite_lantern", + "betterend:violecite_pedestal", + "betterend:violecite_pillar", + "betterend:violecite_plate", + "betterend:violecite_polished", + "betterend:violecite_slab", + "betterend:violecite_stairs", + "betterend:violecite_tiles", + "betterend:violecite_wall", + "betterend:virid_jadestone", + "betterend:virid_jadestone_bricks", + "betterend:virid_jadestone_bricks_slab", + "betterend:virid_jadestone_bricks_stairs", + "betterend:virid_jadestone_bricks_wall", + "betterend:virid_jadestone_button", + "betterend:virid_jadestone_furnace", + "betterend:virid_jadestone_lantern", + "betterend:virid_jadestone_pedestal", + "betterend:virid_jadestone_pillar", + "betterend:virid_jadestone_plate", + "betterend:virid_jadestone_polished", + "betterend:virid_jadestone_slab", + "betterend:virid_jadestone_stairs", + "betterend:virid_jadestone_tiles", + "betterend:virid_jadestone_wall", + + "betterend:amber_ore", + "betterend:end_stone_stalactite", + "betterend:end_stone_stalactite_cavemoss", + "betterend:ender_ore" + ] +} \ No newline at end of file diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json new file mode 100644 index 00000000..31f7636d --- /dev/null +++ b/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json @@ -0,0 +1,6 @@ +{ + "replace": "false", + "values": [ + "betterend:endstone_dust" + ] +} \ No newline at end of file From 885a72486d5f480dd88bd84f09fad80c0f22fe25 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 7 Jul 2021 13:39:33 +0200 Subject: [PATCH 71/72] Updated Versions for 1.17.1 --- gradle.properties | 9 +++++---- src/main/resources/fabric.mod.json | 8 ++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/gradle.properties b/gradle.properties index cc05f040..61345e6d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,18 +3,19 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version= 1.17 +minecraft_version= 1.17.1 yarn_mappings= 6 loader_version= 0.11.6 # Mod Properties -mod_version = 0.9.8.5-pre +mod_version = 0.10.0-pre maven_group = ru.betterend archives_base_name = better-end # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api patchouli_version = 55-FABRIC-SNAPSHOT -fabric_version = 0.36.0+1.17 +fabric_version = 0.36.1+1.17 canvas_version = 1.0.+ -rei_version = 6.0.260-alpha \ No newline at end of file +bclib_version = 0.2.0 +rei_version = 6.0.262-alpha \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index adb47c1c..d19705e1 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -41,10 +41,10 @@ ], "depends": { - "fabricloader": ">=0.11.0", - "fabric": ">=0.32.0", - "minecraft": ">=1.16.4", - "bclib": ">=0.1.42" + "fabricloader": ">=0.11.6", + "fabric": ">=0.36.0", + "minecraft": ">=1.17", + "bclib": ">=0.2.0" }, "suggests": { "byg": ">=1.1.3", From 18bc3a96646f7af7df745797b4f0bca2390d2e49 Mon Sep 17 00:00:00 2001 From: Frank Bauer Date: Wed, 7 Jul 2021 13:49:27 +0200 Subject: [PATCH 72/72] Fixes for 1.17.1 --- .../client/gui/EndStoneSmelterScreen.java | 4 +-- .../mixin/common/PlayerListMixin.java | 28 ++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java index a7f66c33..14ed9b49 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java @@ -46,8 +46,8 @@ public class EndStoneSmelterScreen extends AbstractContainerScreen gameProfile2 = userCache.get(gameProfile.getId()); + String string = gameProfile2.isPresent() ? gameProfile2.get().getName() : gameProfile.getName(); userCache.add(gameProfile); CompoundTag compoundTag = this.load(serverPlayer); ResourceKey var23;