diff --git a/.gitignore b/.gitignore index f1309d16..514dd716 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,3 @@ bin/ run/ output/ *.log -Convert.class -ModelPart.class diff --git a/Convert.java b/Convert.java deleted file mode 100644 index 3de64d73..00000000 --- a/Convert.java +++ /dev/null @@ -1,180 +0,0 @@ - -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; - float scale = 1; - static int wd = 64; - static int hg = 32; - - - 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); - } - - 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; - 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){ - 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; - by=y; - bz=z; - ba=a; - bb=b; - bc=c; - scale = _d; - 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 s = ""; - String pName = parent==null?"modelPartData":parent.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"; - 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"; - else - s+= ".addBox("+bx+"f, "+by+"f, "+bz+"f, "+ba+"f, "+bb+"f, "+bc+"f),\n"; - } else { - s+= ",\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(){ - 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, "+wd+", "+hg+");"); - System.out.println("}"); - - System.out.println(); - 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 (){ - 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/README.md b/README.md index a9f05f12..a3ff811f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![](https://jitpack.io/v/paulevsGitch/BetterEnd.svg)](https://jitpack.io/#paulevsGitch/BetterEnd) # Better End -Better End Mod for Fabric, MC 1.17.1 +Better End Mod for Fabric, MC 1.16.4 Importing: * Clone repo @@ -13,3 +13,5 @@ Building: * Run command line in folder: gradlew build * Mod .jar will be in ./build/libs +Mappings: +* https://modmuss50.me/fabric.html?&version=1.16.4 diff --git a/build.gradle b/build.gradle index b2fff8e6..83414897 100644 --- a/build.gradle +++ b/build.gradle @@ -7,19 +7,20 @@ buildscript { plugins { id 'idea' id 'eclipse' - id 'fabric-loom' version '0.8-SNAPSHOT' + id 'fabric-loom' version '0.7-SNAPSHOT' id 'maven-publish' } -sourceCompatibility = JavaVersion.VERSION_16 -targetCompatibility = JavaVersion.VERSION_16 +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 archivesBaseName = project.archives_base_name version = project.mod_version group = project.maven_group repositories { - maven { url "https://maven.dblsaiko.net/" } + maven { url "https://maven.dblsaiko.net/" } + maven { url "https://server.bbkr.space:8081/artifactory/libs-release/" } maven { url "https://maven.fabricmc.net/" } maven { url 'https://maven.blamejared.com' } maven { url "https://maven.shedaniel.me/" } @@ -32,40 +33,37 @@ dependencies { modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" - useApi "vazkii.patchouli:Patchouli:1.17-${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-fabric:${project.rei_version}" - useOptional "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" + useOptional "me.shedaniel:RoughlyEnoughItems:${project.rei_version}" + useOptional "me.shedaniel:RoughlyEnoughItems-api:${project.rei_version}" //useOptional "grondag:canvas-mc116:${project.canvas_version}" } 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" } } 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" } } } 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" } } } @@ -78,10 +76,6 @@ processResources { 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 @@ -161,4 +155,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 37767deb..f902a279 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,19 +3,19 @@ org.gradle.jvmargs=-Xmx2G # Fabric Properties # check these on https://fabricmc.net/use -minecraft_version= 1.17.1 -yarn_mappings= 6 -loader_version= 0.11.6 +minecraft_version=1.16.5 +yarn_mappings=6 +loader_version=0.11.3 # Mod Properties -mod_version = 0.10.2-pre +mod_version = 0.9.8-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.1+1.17 -bclib_version = 0.2.0 -rei_version = 6.0.262-alpha +patchouli_version = 50-FABRIC +fabric_version = 0.32.9+1.16 canvas_version = 1.0.+ +bclib_version = 0.1.38 +rei_version = 5.8.10 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 69a97150..f371643e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/jitpack.yml b/jitpack.yml deleted file mode 100644 index b0b045eb..00000000 --- a/jitpack.yml +++ /dev/null @@ -1,6 +0,0 @@ -# From https://github.com/jitpack/jitpack.io/issues/4506#issuecomment-864562270 -before_install: - - source "$HOME/.sdkman/bin/sdkman-init.sh" - - sdk update - - sdk install java 16.0.1.hs-adpt - - sdk use java 16.0.1.hs-adpt \ No newline at end of file diff --git a/src/main/java/ru/betterend/BetterEnd.java b/src/main/java/ru/betterend/BetterEnd.java index b18c01fe..df163a84 100644 --- a/src/main/java/ru/betterend/BetterEnd.java +++ b/src/main/java/ru/betterend/BetterEnd.java @@ -33,7 +33,7 @@ import ru.betterend.world.surface.SurfaceBuilders; public class BetterEnd implements ModInitializer { public static final String MOD_ID = "betterend"; public static final Logger LOGGER = new Logger(MOD_ID); - + @Override public void onInitialize() { WorldDataAPI.registerModCache(MOD_ID); @@ -62,11 +62,11 @@ public class BetterEnd implements ModInitializer { Integrations.init(); Configs.saveConfigs(); } - + public static ResourceLocation makeID(String path) { return new ResourceLocation(MOD_ID, path); } - + public static String getStringId(String id) { return String.format("%s:%s", MOD_ID, id); } diff --git a/src/main/java/ru/betterend/api/BetterEndPlugin.java b/src/main/java/ru/betterend/api/BetterEndPlugin.java index afc8daeb..4b278aec 100644 --- a/src/main/java/ru/betterend/api/BetterEndPlugin.java +++ b/src/main/java/ru/betterend/api/BetterEndPlugin.java @@ -2,33 +2,29 @@ package ru.betterend.api; public interface BetterEndPlugin { /** - * Alloying recipes registration. - * See AlloyingRecipe.Builder for details. + * Alloying recipes registration. + * See AlloyingRecipe.Builder for details. */ - default void registerAlloyingRecipes() { - } - + default void registerAlloyingRecipes() {} + /** - * Smithing recipes registration. - * See AnvilSmithingRecipe.Builder for details. + * Smithing recipes registration. + * See AnvilSmithingRecipe.Builder for details. */ - default void registerSmithingRecipes() { - } - + default void registerSmithingRecipes() {} + /** - * Additional biomes registration. - * See BiomeRegistry.registerBiome for details. + * Additional biomes registration. + * See BiomeRegistry.registerBiome for details. */ - default void registerEndBiomes() { - } - + default void registerEndBiomes() {} + /** - * Register other mod stuff, for example, EndHammers. + * Register other mod stuff, for example, EndHammers. */ - default void registerOthers() { - } - - + default void registerOthers() {} + + public static void register(BetterEndPlugin plugin) { plugin.registerAlloyingRecipes(); plugin.registerSmithingRecipes(); diff --git a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java index ce9f48a7..2c73a6d1 100644 --- a/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/AncientEmeraldIceBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +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; @@ -17,19 +21,15 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndParticles; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class AncientEmeraldIceBlock extends BaseBlock { public AncientEmeraldIceBlock() { super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).randomTicks()); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { Direction dir = BlocksHelper.randomDirection(random); - + if (random.nextBoolean()) { int x = MHelper.randRange(-2, 2, random); int y = MHelper.randRange(-2, 2, random); @@ -40,7 +40,7 @@ public class AncientEmeraldIceBlock extends BaseBlock { makeParticles(world, p, random); } } - + pos = pos.relative(dir); state = world.getBlockState(pos); if (state.is(Blocks.WATER)) { @@ -52,11 +52,11 @@ public class AncientEmeraldIceBlock extends BaseBlock { makeParticles(world, pos, random); } } - + private void makeParticles(ServerLevel world, BlockPos pos, Random random) { world.sendParticles(EndParticles.SNOWFLAKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 20, 0.5, 0.5, 0.5, 0); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getOptionalParameter(LootContextParams.TOOL); diff --git a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java index a69171d5..22473aa7 100644 --- a/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java +++ b/src/main/java/ru/betterend/blocks/AuroraCrystalBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.color.block.BlockColor; @@ -17,25 +20,23 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import ru.bclib.api.TagAPI; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IColorProvider; import ru.bclib.interfaces.IRenderTyped; import ru.bclib.util.ColorUtil; import ru.bclib.util.MHelper; import ru.betterend.registry.EndItems; - -import java.util.List; +import ru.betterend.registry.EndTags; public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyped, IColorProvider { public static final Vec3i[] COLORS; private static final int MIN_DROP = 1; private static final int MAX_DROP = 4; - + public AuroraCrystalBlock() { super(FabricBlockSettings.of(Material.GLASS) .breakByTool(FabricToolTags.PICKAXES) - .breakByTool(TagAPI.HAMMERS) + .breakByTool(EndTags.HAMMERS) .hardness(1F) .resistance(1F) .luminance(15) @@ -49,23 +50,22 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp return (state, world, pos, tintIndex) -> { if (pos == null) { pos = BlockPos.ZERO; - } - ; - + }; + long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); double delta = i * 0.1; int index = MHelper.floor(delta); int index2 = (index + 1) & 3; delta -= index; index &= 3; - + Vec3i color1 = COLORS[index]; Vec3i color2 = COLORS[index2]; - + int r = MHelper.floor(Mth.lerp(delta, color1.getX(), color2.getX())); int g = MHelper.floor(Mth.lerp(delta, color1.getY(), color2.getY())); int b = MHelper.floor(Mth.lerp(delta, color1.getZ(), color2.getZ())); - + return ColorUtil.color(r, g, b); }; } @@ -81,7 +81,7 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); @@ -99,21 +99,20 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyp return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, max)); } count = MHelper.randRange(min, max, MHelper.RANDOM); - } - else { + } else { count = MHelper.randRange(MIN_DROP, MAX_DROP, MHelper.RANDOM); } return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, count)); } return Lists.newArrayList(); } - + static { - COLORS = new Vec3i[]{ - new Vec3i(247, 77, 161), - new Vec3i(120, 184, 255), - new Vec3i(120, 255, 168), - new Vec3i(243, 58, 255) + COLORS = new Vec3i[] { + new Vec3i(247, 77, 161), + new Vec3i(120, 184, 255), + new Vec3i(120, 255, 168), + new Vec3i(243, 58, 255) }; } } diff --git a/src/main/java/ru/betterend/blocks/BlueVineBlock.java b/src/main/java/ru/betterend/blocks/BlueVineBlock.java index c73f3add..5e13a8f5 100644 --- a/src/main/java/ru/betterend/blocks/BlueVineBlock.java +++ b/src/main/java/ru/betterend/blocks/BlueVineBlock.java @@ -10,12 +10,12 @@ import ru.betterend.registry.EndBlocks; public class BlueVineBlock extends UpDownPlantBlock { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override protected boolean isTerrain(BlockState state) { return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; diff --git a/src/main/java/ru/betterend/blocks/BlueVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BlueVineLanternBlock.java index 98509b60..bec0c00e 100644 --- a/src/main/java/ru/betterend/blocks/BlueVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BlueVineLanternBlock.java @@ -19,17 +19,17 @@ import ru.betterend.registry.EndBlocks; public class BlueVineLanternBlock extends BaseBlock { public static final BooleanProperty NATURAL = BlockProperties.NATURAL; - + public BlueVineLanternBlock() { super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).luminance(15).sound(SoundType.WART_BLOCK)); this.registerDefaultState(this.stateDefinition.any().setValue(NATURAL, false)); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return !state.getValue(NATURAL) || world.getBlockState(pos.below()).getBlock() == EndBlocks.BLUE_VINE; } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -39,7 +39,7 @@ public class BlueVineLanternBlock extends BaseBlock { return state; } } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(NATURAL); diff --git a/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java b/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java index c80586dd..8f8edc36 100644 --- a/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/BlueVineSeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -12,8 +14,6 @@ import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class BlueVineSeedBlock extends EndPlantWithAgeBlock { @Override public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { @@ -29,10 +29,10 @@ public class BlueVineSeedBlock extends EndPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, pos.above(height), EndBlocks.BLUE_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP)); placeLantern(world, pos.above(height + 1)); } - + private void placeLantern(WorldGenLevel world, BlockPos pos) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.BLUE_VINE_LANTERN.defaultBlockState().setValue(BlueVineLanternBlock.NATURAL, true)); - for (Direction dir : BlocksHelper.HORIZONTAL) { + for (Direction dir: BlocksHelper.HORIZONTAL) { BlockPos p = pos.relative(dir); if (world.isEmptyBlock(p)) { BlocksHelper.setWithoutUpdate(world, p, EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, dir)); @@ -42,12 +42,12 @@ public class BlueVineSeedBlock extends EndPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, pos.above(), EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, Direction.UP)); } } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS) || state.is(EndBlocks.END_MYCELIUM); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/BoluxMushroomBlock.java b/src/main/java/ru/betterend/blocks/BoluxMushroomBlock.java index 83d9c0d7..a7c95243 100644 --- a/src/main/java/ru/betterend/blocks/BoluxMushroomBlock.java +++ b/src/main/java/ru/betterend/blocks/BoluxMushroomBlock.java @@ -1,6 +1,10 @@ package ru.betterend.blocks; +import java.util.List; +import java.util.Random; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; @@ -14,21 +18,18 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; - public class BoluxMushroomBlock extends EndPlantBlock { private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 9, 15); - + public BoluxMushroomBlock() { super(10); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.RUTISCUS); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; @@ -38,7 +39,7 @@ public class BoluxMushroomBlock extends EndPlantBlock { public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; @@ -48,7 +49,7 @@ public class BoluxMushroomBlock extends EndPlantBlock { public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { return false; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return Lists.newArrayList(new ItemStack(this)); diff --git a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java index 2a2e9140..e26d2ce1 100644 --- a/src/main/java/ru/betterend/blocks/BrimstoneBlock.java +++ b/src/main/java/ru/betterend/blocks/BrimstoneBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +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; @@ -16,22 +20,19 @@ import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.MaterialColor; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - 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()); registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(ACTIVATED); @@ -43,13 +44,13 @@ public class BrimstoneBlock extends BaseBlock { updateChunks((ClientLevel) world, pos); } } - + public void destroy(LevelAccessor world, BlockPos pos, BlockState state) { if (world.isClientSide()) { updateChunks((ClientLevel) world, pos); } } - + private void updateChunks(ClientLevel world, BlockPos pos) { int y = pos.getY() >> 4; int x1 = (pos.getX() - 2) >> 4; @@ -62,11 +63,11 @@ public class BrimstoneBlock extends BaseBlock { } } } - + @Override public void tick(BlockState state, ServerLevel world, BlockPos pos, Random random) { boolean deactivate = true; - for (Direction dir : BlocksHelper.DIRECTIONS) { + for (Direction dir: BlocksHelper.DIRECTIONS) { if (world.getFluidState(pos.relative(dir)).getType().equals(Fluids.WATER)) { deactivate = false; break; diff --git a/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java b/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java index 34d15af6..22bbaa67 100644 --- a/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java +++ b/src/main/java/ru/betterend/blocks/BubbleCoralBlock.java @@ -1,5 +1,7 @@ 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; @@ -17,12 +19,10 @@ 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); - + public BubbleCoralBlock() { super(FabricBlockSettings.of(Material.WATER_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -30,7 +30,7 @@ public class BubbleCoralBlock extends EndUnderwaterPlantBlock { .sound(SoundType.CORAL_BLOCK) .noCollission()); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; @@ -43,12 +43,12 @@ public class BubbleCoralBlock extends EndUnderwaterPlantBlock { double z = pos.getZ() + random.nextDouble(); world.addParticle(ParticleTypes.BUBBLE, x, y, z, 0.0D, 0.0D, 0.0D); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; diff --git a/src/main/java/ru/betterend/blocks/BulbVineBlock.java b/src/main/java/ru/betterend/blocks/BulbVineBlock.java index 7eb1985b..09b53a11 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.BlockGetter; @@ -13,13 +16,11 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.List; - public class BulbVineBlock extends BaseVineBlock { public BulbVineBlock() { super(15, true); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.getValue(SHAPE) == TripleShape.BOTTOM) { @@ -32,12 +33,12 @@ public class BulbVineBlock extends BaseVineBlock { return Lists.newArrayList(); } } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { boolean canPlace = super.canSurvive(state, world, pos); diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java index b18b29d9..0302faab 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternBlock.java @@ -1,8 +1,12 @@ package ru.betterend.blocks; +import java.util.Map; +import java.util.Optional; + +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; @@ -16,7 +20,6 @@ import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; @@ -24,13 +27,10 @@ import ru.bclib.interfaces.IRenderTyped; import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.client.models.Patterns; -import java.util.Map; -import java.util.Optional; - public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTyped, BlockModelProvider { private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12); private static final VoxelShape SHAPE_FLOOR = Block.box(4, 0, 4, 12, 12, 12); - + public BulbVineLanternBlock() { this(FabricBlockSettings.of(Material.METAL) .hardness(1) @@ -41,11 +41,11 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType .requiresCorrectToolForDrops() .sound(SoundType.LANTERN)); } - + public BulbVineLanternBlock(Properties settings) { super(settings); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; @@ -57,7 +57,6 @@ 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()); @@ -67,13 +66,13 @@ public class BulbVineLanternBlock extends EndLanternBlock implements IRenderType Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, textures); return ModelsHelper.fromPattern(pattern); } - + protected String getMetalTexture(ResourceLocation blockId) { String name = blockId.getPath(); name = name.substring(0, name.indexOf('_')); return name + "_bulb_vine_lantern_metal"; } - + protected String getGlowTexture() { return "bulb_vine_lantern_bulb"; } diff --git a/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java b/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java index cfde3ec7..4eab8f1a 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineLanternColoredBlock.java @@ -21,7 +21,7 @@ public class BulbVineLanternColoredBlock extends BulbVineLanternBlock implements public ItemColor getItemProvider() { return (stack, tintIndex) -> getColor(); } - + private int getColor() { int color = BlocksHelper.getBlockColor(this); int b = (color & 255); @@ -30,7 +30,7 @@ public class BulbVineLanternColoredBlock extends BulbVineLanternBlock implements float[] hsv = ColorUtil.RGBtoHSB(r, g, b, new float[3]); return ColorUtil.HSBtoRGB(hsv[0], hsv[1], hsv[1] > 0.2 ? 1 : hsv[2]); } - + @Override protected String getGlowTexture() { return "bulb_vine_lantern_overlay"; diff --git a/src/main/java/ru/betterend/blocks/BulbVineSeedBlock.java b/src/main/java/ru/betterend/blocks/BulbVineSeedBlock.java index 73e1c97d..e0fa5161 100644 --- a/src/main/java/ru/betterend/blocks/BulbVineSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/BulbVineSeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.tags.BlockTags; import net.minecraft.world.level.LevelReader; @@ -12,8 +14,6 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class BulbVineSeedBlock extends EndPlantWithAgeBlock { @Override diff --git a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java index 166c13e8..f61aa0cb 100644 --- a/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java +++ b/src/main/java/ru/betterend/blocks/CavePumpkinBlock.java @@ -1,5 +1,8 @@ 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; @@ -19,24 +22,21 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; - public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { public static final BooleanProperty SMALL = BlockProperties.SMALL; private static final VoxelShape SHAPE_SMALL; private static final VoxelShape SHAPE_BIG; - + public CavePumpkinBlock() { super(FabricBlockSettings.copyOf(Blocks.PUMPKIN).luminance((state) -> state.getValue(SMALL) ? 10 : 15)); registerDefaultState(defaultBlockState().setValue(SMALL, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SMALL); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; @@ -46,19 +46,19 @@ public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped { public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { return state.getValue(SMALL) ? SHAPE_SMALL : SHAPE_BIG; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return state.getValue(SMALL) ? Collections.singletonList(new ItemStack(EndBlocks.CAVE_PUMPKIN_SEED)) : Collections.singletonList(new ItemStack(this)); } - + static { VoxelShape lantern = Block.box(1, 0, 1, 15, 13, 15); VoxelShape cap = Block.box(0, 12, 0, 16, 15, 16); VoxelShape top = Block.box(5, 15, 5, 11, 16, 11); SHAPE_BIG = Shapes.or(lantern, cap, top); - - lantern = Block.box(5, 7, 5, 11, 13, 11); + + lantern = Block.box(1, 7, 1, 15, 13, 15); cap = Block.box(4, 12, 4, 12, 15, 12); top = Block.box(6, 15, 6, 10, 16, 10); SHAPE_SMALL = Shapes.or(lantern, cap, top); diff --git a/src/main/java/ru/betterend/blocks/CavePumpkinVineBlock.java b/src/main/java/ru/betterend/blocks/CavePumpkinVineBlock.java index 4d59e2d9..9e5278d9 100644 --- a/src/main/java/ru/betterend/blocks/CavePumpkinVineBlock.java +++ b/src/main/java/ru/betterend/blocks/CavePumpkinVineBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -16,17 +18,15 @@ import ru.bclib.blocks.BlockProperties; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class CavePumpkinVineBlock extends EndPlantWithAgeBlock { private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 16, 12); - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { BlockState down = world.getBlockState(pos.above()); return isTerrain(down); } - + @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { int age = state.getValue(AGE); @@ -45,9 +45,8 @@ public class CavePumpkinVineBlock extends EndPlantWithAgeBlock { } @Override - public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - } - + public void growAdult(WorldGenLevel world, Random random, BlockPos pos) {} + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { state = super.updateShape(state, facing, neighborState, world, pos, neighborPos); @@ -64,7 +63,7 @@ public class CavePumpkinVineBlock extends EndPlantWithAgeBlock { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/ChandelierBlock.java b/src/main/java/ru/betterend/blocks/ChandelierBlock.java index f998c29e..21a906f7 100644 --- a/src/main/java/ru/betterend/blocks/ChandelierBlock.java +++ b/src/main/java/ru/betterend/blocks/ChandelierBlock.java @@ -1,8 +1,13 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.Map; +import java.util.Optional; + +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; @@ -16,7 +21,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; @@ -24,35 +28,29 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; import ru.betterend.client.models.Patterns; -import java.util.EnumMap; -import java.util.Map; -import java.util.Optional; - 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()); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } @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)) { @@ -69,7 +67,6 @@ 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/ChorusGrassBlock.java b/src/main/java/ru/betterend/blocks/ChorusGrassBlock.java index 66bb0d7d..71635d36 100644 --- a/src/main/java/ru/betterend/blocks/ChorusGrassBlock.java +++ b/src/main/java/ru/betterend/blocks/ChorusGrassBlock.java @@ -8,7 +8,7 @@ public class ChorusGrassBlock extends EndPlantBlock { public ChorusGrassBlock() { super(true); } - + @Override protected boolean isTerrain(BlockState state) { return state.getBlock() == EndBlocks.CHORUS_NYLIUM; diff --git a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java index dfea39df..ece46509 100644 --- a/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/DenseEmeraldIceBlock.java @@ -1,5 +1,8 @@ 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; @@ -12,9 +15,6 @@ import ru.bclib.blocks.BaseBlock; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import java.util.Collections; -import java.util.List; - public class DenseEmeraldIceBlock extends BaseBlock implements IRenderTyped { public DenseEmeraldIceBlock() { super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE)); @@ -24,7 +24,7 @@ public class DenseEmeraldIceBlock extends BaseBlock implements IRenderTyped { public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getOptionalParameter(LootContextParams.TOOL); diff --git a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java index 882bd275..12310aab 100644 --- a/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/DragonTreeSaplingBlock.java @@ -17,7 +17,7 @@ public class DragonTreeSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.DRAGON_TREE.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.SHADOW_GRASS); diff --git a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java index 20466312..f8c010f1 100644 --- a/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java +++ b/src/main/java/ru/betterend/blocks/EmeraldIceBlock.java @@ -1,7 +1,11 @@ package ru.betterend.blocks; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; +import java.util.Collections; +import java.util.List; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.core.BlockPos; @@ -20,15 +24,10 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -import org.jetbrains.annotations.Nullable; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTyped, BlockModelProvider { public EmeraldIceBlock() { super(FabricBlockSettings.copyOf(Blocks.ICE)); @@ -73,7 +72,7 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderType world.neighborChanged(pos, Blocks.WATER, pos); } } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getOptionalParameter(LootContextParams.TOOL); @@ -86,7 +85,6 @@ 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/EndBlockProperties.java b/src/main/java/ru/betterend/blocks/EndBlockProperties.java index 5f40740e..233c5f05 100644 --- a/src/main/java/ru/betterend/blocks/EndBlockProperties.java +++ b/src/main/java/ru/betterend/blocks/EndBlockProperties.java @@ -11,10 +11,10 @@ public class EndBlockProperties extends BlockProperties { public static final EnumProperty HYDRALUX_SHAPE = EnumProperty.create("shape", HydraluxShape.class); public static final EnumProperty PEDESTAL_STATE = EnumProperty.create("state", PedestalState.class); public static final EnumProperty CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class); - + public static final BooleanProperty HAS_ITEM = BooleanProperty.create("has_item"); public static final IntegerProperty PORTAL = IntegerProperty.create("portal", 0, EndPortals.getCount()); - + public enum PedestalState implements StringRepresentable { PEDESTAL_TOP("pedestal_top"), COLUMN_TOP("column_top"), @@ -22,24 +22,24 @@ public class EndBlockProperties extends BlockProperties { PILLAR("pillar"), COLUMN("column"), DEFAULT("default"); - + private final String name; - + PedestalState(String name) { this.name = name; } - + @Override public String getSerializedName() { return this.name; } - + @Override public String toString() { return this.name; } } - + public enum HydraluxShape implements StringRepresentable { FLOWER_BIG_BOTTOM("flower_big_bottom", true), FLOWER_BIG_TOP("flower_big_top", true), @@ -47,10 +47,10 @@ public class EndBlockProperties extends BlockProperties { FLOWER_SMALL_TOP("flower_small_top", true), VINE("vine", false), ROOTS("roots", false); - + private final String name; private final boolean glow; - + HydraluxShape(String name, boolean glow) { this.name = name; this.glow = glow; @@ -60,17 +60,17 @@ public class EndBlockProperties extends BlockProperties { public String getSerializedName() { return name; } - + @Override public String toString() { return name; } - + public boolean hasGlow() { return glow; } } - + public enum LumecornShape implements StringRepresentable { LIGHT_TOP("light_top", 15), LIGHT_TOP_MIDDLE("light_top_middle", 15), @@ -79,10 +79,10 @@ public class EndBlockProperties extends BlockProperties { MIDDLE("middle", 0), BOTTOM_BIG("bottom_big", 0), BOTTOM_SMALL("bottom_small", 0); - + private final String name; private final int light; - + LumecornShape(String name, int light) { this.name = name; this.light = light; @@ -92,24 +92,24 @@ public class EndBlockProperties extends BlockProperties { public String getSerializedName() { return name; } - + @Override public String toString() { return name; } - + public int getLight() { return light; } } - + public enum CactusBottom implements StringRepresentable { EMPTY("empty"), SAND("sand"), MOSS("moss"); - + private final String name; - + CactusBottom(String name) { this.name = name; } @@ -118,7 +118,7 @@ public class EndBlockProperties extends BlockProperties { public String getSerializedName() { return name; } - + @Override public String toString() { return name; diff --git a/src/main/java/ru/betterend/blocks/EndLilyBlock.java b/src/main/java/ru/betterend/blocks/EndLilyBlock.java index f4bfa0b9..63b4dcb4 100644 --- a/src/main/java/ru/betterend/blocks/EndLilyBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLilyBlock.java @@ -1,6 +1,11 @@ package ru.betterend.blocks; +import java.util.Collections; +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; @@ -32,15 +37,11 @@ import ru.betterend.blocks.basis.EndUnderwaterPlantBlock; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class EndLilyBlock extends EndUnderwaterPlantBlock { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; private static final VoxelShape SHAPE_BOTTOM = Block.box(4, 0, 4, 12, 16, 12); private static final VoxelShape SHAPE_TOP = Block.box(2, 0, 2, 14, 6, 14); - + public EndLilyBlock() { super(FabricBlockSettings.of(Material.WATER_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -49,7 +50,7 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock { .lightLevel((state) -> state.getValue(SHAPE) == TripleShape.TOP ? 13 : 0) .noCollission()); } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -59,24 +60,24 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock { return state; } } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { Vec3 vec3d = state.getOffset(view, pos); VoxelShape shape = state.getValue(SHAPE) == TripleShape.TOP ? SHAPE_TOP : SHAPE_BOTTOM; return shape.move(vec3d.x, vec3d.y, vec3d.z); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(SHAPE) == TripleShape.TOP ? Fluids.EMPTY.defaultFluidState() : Fluids.WATER.getSource(false); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { if (state.getValue(SHAPE) == TripleShape.TOP) { @@ -91,7 +92,7 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock { return up.getBlock() == this && down.getBlock() == this; } } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.getValue(SHAPE) == TripleShape.TOP) { @@ -99,13 +100,13 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock { } return Collections.emptyList(); } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { return new ItemStack(EndBlocks.END_LILY_SEED); } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; diff --git a/src/main/java/ru/betterend/blocks/EndLilySeedBlock.java b/src/main/java/ru/betterend/blocks/EndLilySeedBlock.java index e85797e2..b955a39f 100644 --- a/src/main/java/ru/betterend/blocks/EndLilySeedBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLilySeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; @@ -10,8 +12,6 @@ import ru.bclib.blocks.UnderwaterPlantWithAgeBlock; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class EndLilySeedBlock extends UnderwaterPlantWithAgeBlock { @Override public void grow(WorldGenLevel world, Random random, BlockPos pos) { @@ -25,7 +25,7 @@ public class EndLilySeedBlock extends UnderwaterPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, up, EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.TOP)); } } - + private boolean canGrow(WorldGenLevel world, BlockPos pos) { BlockPos up = pos.above(); while (world.getBlockState(up).getFluidState().getType().equals(Fluids.WATER.getSource())) { diff --git a/src/main/java/ru/betterend/blocks/EndLotusFlowerBlock.java b/src/main/java/ru/betterend/blocks/EndLotusFlowerBlock.java index a7da3edc..d79a31ac 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusFlowerBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusFlowerBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + 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; @@ -18,42 +21,40 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.List; - public class EndLotusFlowerBlock extends EndPlantBlock { private static final VoxelShape SHAPE_OUTLINE = Block.box(2, 0, 2, 14, 14, 14); private static final VoxelShape SHAPE_COLLISION = Block.box(0, 0, 0, 16, 2, 16); - + public EndLotusFlowerBlock() { super(FabricBlockSettings.of(Material.PLANT).luminance(15).noOcclusion()); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_LOTUS_STEM); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE_OUTLINE; } - + @Override public VoxelShape getCollisionShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE_COLLISION; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { int count = MHelper.randRange(1, 2, MHelper.RANDOM); return Lists.newArrayList(new ItemStack(EndBlocks.END_LOTUS_SEED, count)); } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { diff --git a/src/main/java/ru/betterend/blocks/EndLotusLeafBlock.java b/src/main/java/ru/betterend/blocks/EndLotusLeafBlock.java index 7b9644a7..af3199f3 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusLeafBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusLeafBlock.java @@ -32,27 +32,27 @@ public class EndLotusLeafBlock extends BaseBlockNotFull implements IRenderTyped public static final EnumProperty HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; private static final VoxelShape VSHAPE = Block.box(0, 0, 0, 16, 1, 16); - + public EndLotusLeafBlock() { super(FabricBlockSettings.of(Material.PLANT).noOcclusion().sound(SoundType.WET_GRASS)); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { BlockState down = world.getBlockState(pos.below()); return !down.getFluidState().isEmpty() && down.getFluidState().getType() instanceof WaterFluid; } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(SHAPE, HORIZONTAL_FACING); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return VSHAPE; } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return BlocksHelper.rotateHorizontal(state, rotation, HORIZONTAL_FACING); @@ -62,12 +62,12 @@ public class EndLotusLeafBlock extends BaseBlockNotFull implements IRenderTyped public BlockState mirror(BlockState state, Mirror mirror) { return BlocksHelper.mirrorHorizontal(state, mirror, HORIZONTAL_FACING); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { diff --git a/src/main/java/ru/betterend/blocks/EndLotusSeedBlock.java b/src/main/java/ru/betterend/blocks/EndLotusSeedBlock.java index 73ca66ff..de268c6a 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusSeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -12,8 +14,6 @@ import ru.bclib.blocks.UnderwaterPlantWithAgeBlock; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { @Override public void grow(WorldGenLevel world, Random random, BlockPos pos) { @@ -22,7 +22,7 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { BlockState roots = EndBlocks.END_LOTUS_STEM.defaultBlockState().setValue(EndLotusStemBlock.SHAPE, TripleShape.BOTTOM).setValue(EndLotusStemBlock.WATERLOGGED, true); BlockState stem = EndBlocks.END_LOTUS_STEM.defaultBlockState(); BlockState flower = EndBlocks.END_LOTUS_FLOWER.defaultBlockState(); - + BlocksHelper.setWithoutUpdate(world, pos, roots); MutableBlockPos bpos = new MutableBlockPos().set(pos); bpos.setY(bpos.getY() + 1); @@ -30,7 +30,7 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, bpos, stem.setValue(EndLotusStemBlock.WATERLOGGED, true)); bpos.setY(bpos.getY() + 1); } - + int height = random.nextBoolean() ? 0 : random.nextBoolean() ? 1 : random.nextBoolean() ? 1 : -1; TripleShape shape = (height == 0) ? TripleShape.TOP : TripleShape.MIDDLE; Direction dir = BlocksHelper.randomHorizontal(random); @@ -42,7 +42,7 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { else { BlocksHelper.setWithoutUpdate(world, bpos, stem.setValue(EndLotusStemBlock.SHAPE, shape)); } - + bpos.setY(bpos.getY() + 1); for (int i = 1; i <= height; i++) { if (!world.isEmptyBlock(bpos)) { @@ -56,11 +56,11 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, bpos, stem); bpos.setY(bpos.getY() + 1); } - + if (!world.isEmptyBlock(bpos) || height < 0) { bpos.setY(bpos.getY() - 1); } - + BlocksHelper.setWithoutUpdate(world, bpos, flower); bpos.setY(bpos.getY() - 1); stem = world.getBlockState(bpos); @@ -70,15 +70,15 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { stem = stem.setValue(EndLotusStemBlock.WATERLOGGED, true); } } - + if (world.getBlockState(bpos.relative(dir)).is(EndBlocks.END_LOTUS_LEAF)) { stem = stem.setValue(EndLotusStemBlock.LEAF, true).setValue(EndLotusStemBlock.FACING, dir); } - + BlocksHelper.setWithoutUpdate(world, bpos, stem.setValue(EndLotusStemBlock.SHAPE, TripleShape.TOP)); } } - + private boolean canGrow(WorldGenLevel world, BlockPos pos) { MutableBlockPos bpos = new MutableBlockPos(); bpos.set(pos); @@ -87,31 +87,31 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { } return world.isEmptyBlock(bpos) && world.isEmptyBlock(bpos.above()); } - + private void generateLeaf(WorldGenLevel world, BlockPos pos) { MutableBlockPos p = new MutableBlockPos(); BlockState leaf = EndBlocks.END_LOTUS_LEAF.defaultBlockState(); BlocksHelper.setWithoutUpdate(world, pos, leaf.setValue(EndLotusLeafBlock.SHAPE, TripleShape.BOTTOM)); - for (Direction move : BlocksHelper.HORIZONTAL) { + for (Direction move: BlocksHelper.HORIZONTAL) { BlocksHelper.setWithoutUpdate(world, p.set(pos).move(move), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, move).setValue(EndLotusLeafBlock.SHAPE, TripleShape.MIDDLE)); } - for (int i = 0; i < 4; i++) { + for (int i = 0; i < 4; i ++) { Direction d1 = BlocksHelper.HORIZONTAL[i]; Direction d2 = BlocksHelper.HORIZONTAL[(i + 1) & 3]; BlocksHelper.setWithoutUpdate(world, p.set(pos).move(d1).move(d2), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, d1).setValue(EndLotusLeafBlock.SHAPE, TripleShape.TOP)); } } - + private boolean hasLeaf(WorldGenLevel world, BlockPos pos) { MutableBlockPos p = new MutableBlockPos(); p.setY(pos.getY()); int count = 0; - for (int x = -1; x < 2; x++) { + for (int x = -1; x < 2; x ++) { p.setX(pos.getX() + x); - for (int z = -1; z < 2; z++) { + for (int z = -1; z < 2; z ++) { p.setZ(pos.getZ() + z); if (world.isEmptyBlock(p) && !world.getFluidState(p.below()).isEmpty()) - count++; + count ++; } } return count == 9; diff --git a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java index 05a3c639..0c27ece2 100644 --- a/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java +++ b/src/main/java/ru/betterend/blocks/EndLotusStemBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +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; @@ -29,30 +32,28 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; import ru.bclib.util.BlocksHelper; -import java.util.Map; - public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, IRenderTyped { public static final EnumProperty FACING = BlockStateProperties.FACING; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty LEAF = BooleanProperty.create("leaf"); public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; private static final Map SHAPES = Maps.newEnumMap(Axis.class); - + public EndLotusStemBlock() { super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS)); this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(SHAPE, TripleShape.MIDDLE).setValue(LEAF, false).setValue(FACING, Direction.UP)); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(LEAF) ? SHAPES.get(Axis.Y) : SHAPES.get(state.getValue(FACING).getAxis()); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(FACING, WATERLOGGED, SHAPE, LEAF); } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); @@ -64,7 +65,7 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo BlockPos blockPos = ctx.getClickedPos(); return this.defaultBlockState().setValue(WATERLOGGED, worldAccess.getFluidState(blockPos).getType() == Fluids.WATER).setValue(FACING, ctx.getClickedFace()); } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return BlocksHelper.rotateHorizontal(state, rotation, FACING); @@ -82,12 +83,12 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo } return state; } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + static { SHAPES.put(Axis.X, Block.box(0, 6, 6, 16, 10, 10)); SHAPES.put(Axis.Y, Block.box(6, 0, 6, 10, 16, 10)); diff --git a/src/main/java/ru/betterend/blocks/EndPedestal.java b/src/main/java/ru/betterend/blocks/EndPedestal.java index a86c2a31..be4b0a78 100644 --- a/src/main/java/ru/betterend/blocks/EndPedestal.java +++ b/src/main/java/ru/betterend/blocks/EndPedestal.java @@ -1,14 +1,14 @@ package ru.betterend.blocks; +import java.util.HashMap; +import java.util.Map; + import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import ru.betterend.BetterEnd; import ru.betterend.blocks.basis.PedestalBlock; -import java.util.HashMap; -import java.util.Map; - public class EndPedestal extends PedestalBlock { public EndPedestal(Block parent) { @@ -21,9 +21,8 @@ public class EndPedestal extends PedestalBlock { String name = blockId.getPath(); return new HashMap() { private static final long serialVersionUID = 1L; - { - put("%mod%", BetterEnd.MOD_ID); + put("%mod%", BetterEnd.MOD_ID ); put("%top%", name + "_polished"); put("%base%", name + "_polished"); put("%pillar%", name + "_pillar_side"); diff --git a/src/main/java/ru/betterend/blocks/EndPortalBlock.java b/src/main/java/ru/betterend/blocks/EndPortalBlock.java index e4dc81ab..6d5ab346 100644 --- a/src/main/java/ru/betterend/blocks/EndPortalBlock.java +++ b/src/main/java/ru/betterend/blocks/EndPortalBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +import java.util.Objects; +import java.util.Optional; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -36,10 +40,6 @@ import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndPortals; import ru.betterend.rituals.EternalRitual; -import java.util.Objects; -import java.util.Optional; -import java.util.Random; - public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, IColorProvider { public static final IntegerProperty PORTAL = EndBlockProperties.PORTAL; @@ -52,7 +52,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I super.createBlockStateDefinition(builder); builder.add(PORTAL); } - + @Override @Environment(EnvType.CLIENT) public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { @@ -66,8 +66,7 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I int k = random.nextInt(2) * 2 - 1; if (!world.getBlockState(pos.west()).is(this) && !world.getBlockState(pos.east()).is(this)) { x = pos.getX() + 0.5D + 0.25D * k; - } - else { + } else { z = pos.getZ() + 0.5D + 0.25D * k; } @@ -75,14 +74,13 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I } @Override - public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { - } - + public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) {} + @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { return state; } - + @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { if (world.isClientSide || !validate(entity)) return; @@ -96,9 +94,8 @@ 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.getYRot(), entity.getXRot()); - } - else { + exitPos.getZ() + 0.5, entity.yRot, entity.xRot); + } else { ((TeleportingEntity) entity).be_setExitPos(exitPos); Optional teleported = Optional.ofNullable(entity.changeDimension(destination)); teleported.ifPresent(Entity::setPortalCooldown); @@ -109,15 +106,15 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I return !entity.isPassenger() && !entity.isVehicle() && entity.canChangeDimensions() && !entity.isOnPortalCooldown(); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + private BlockPos findExitPos(ServerLevel currentWorld, ServerLevel targetWorld, BlockPos currentPos, Entity entity) { if (targetWorld == null) return null; - Registry registry = targetWorld.registryAccess().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); + Registry registry = targetWorld.registryAccess().dimensionTypes(); ResourceLocation targetWorldId = targetWorld.dimension().location(); ResourceLocation currentWorldId = currentWorld.dimension().location(); double targetMultiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale(); @@ -146,11 +143,11 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I } return null; } - + private MutableBlockPos findCenter(Level world, MutableBlockPos pos, Direction.Axis axis) { return findCenter(world, pos, axis, 1); } - + private MutableBlockPos findCenter(Level world, MutableBlockPos pos, Direction.Axis axis, int step) { if (step > 8) return pos; BlockState right, left; @@ -162,14 +159,11 @@ public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, I BlockState down = world.getBlockState(pos.below()); if (down.is(this)) { return findCenter(world, pos.move(Direction.DOWN), axis, step); - } - else if (right.is(this) && left.is(this)) { + } else if (right.is(this) && left.is(this)) { return pos; - } - else if (right.is(this)) { + } else if (right.is(this)) { return findCenter(world, pos.move(rightDir), axis, ++step); - } - else if (left.is(this)) { + } else if (left.is(this)) { return findCenter(world, pos.move(leftDir), axis, ++step); } return pos; diff --git a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java index 5b08ab4f..46e17878 100644 --- a/src/main/java/ru/betterend/blocks/EndStoneSmelter.java +++ b/src/main/java/ru/betterend/blocks/EndStoneSmelter.java @@ -1,6 +1,10 @@ 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; @@ -15,6 +19,7 @@ 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.Block; import net.minecraft.world.level.block.HorizontalDirectionalBlock; @@ -23,8 +28,6 @@ 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; 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; @@ -35,13 +38,8 @@ 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; @@ -50,19 +48,19 @@ public class EndStoneSmelter extends BaseBlockWithEntity { public EndStoneSmelter() { super(FabricBlockSettings.of(Material.STONE, MaterialColor.COLOR_GRAY) - .luminance(state -> state.getValue(LIT) ? 15 : 0) .hardness(4F) .resistance(100F) .requiresCorrectToolForDrops() .sound(SoundType.STONE)); - registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(LIT, false)); + this.registerDefaultState(this.stateDefinition.any() + .setValue(FACING, Direction.NORTH) + .setValue(LIT, false)); } - + public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { if (world.isClientSide) { return InteractionResult.SUCCESS; - } - else { + } else { this.openScreen(world, pos, player); return InteractionResult.CONSUME; } @@ -74,17 +72,17 @@ public class EndStoneSmelter extends BaseBlockWithEntity { player.openMenu((EndStoneSmelterBlockEntity) blockEntity); } } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { - return defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); + return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); } - + @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { - return new EndStoneSmelterBlockEntity(blockPos, blockState); + public BlockEntity newBlockEntity(BlockGetter world) { + return new EndStoneSmelterBlockEntity(); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { List drop = Lists.newArrayList(new ItemStack(this)); @@ -131,7 +129,7 @@ public class EndStoneSmelter extends BaseBlockWithEntity { protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(FACING, LIT); } - + @Environment(EnvType.CLIENT) public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { if (state.getValue(LIT)) { @@ -139,7 +137,7 @@ public class EndStoneSmelter extends BaseBlockWithEntity { double y = pos.getY(); double z = pos.getZ() + 0.5D; if (random.nextDouble() < 0.1D) { - world.playLocalSound(x, y, z, SoundEvents.BLASTFURNACE_FIRE_CRACKLE, SoundSource.BLOCKS, 1.0F, 1.0F, false); + world.playLocalSound(x, y, z, SoundEvents.BLASTFURNACE_FIRE_CRACKLE, SoundSource.BLOCKS, 1.0F, 1.0F, false); } Direction direction = state.getValue(FACING); @@ -151,11 +149,4 @@ public class EndStoneSmelter extends BaseBlockWithEntity { world.addParticle(ParticleTypes.SMOKE, x + offX, y + offY, z + offZ, 0.0D, 0.0D, 0.0D); } } - - - @Override - @Nullable - 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/EndstoneDustBlock.java b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java index 4dc094f3..28ca0d6e 100644 --- a/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java +++ b/src/main/java/ru/betterend/blocks/EndstoneDustBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -13,19 +16,16 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import ru.bclib.util.ColorUtil; -import java.util.Collections; -import java.util.List; - public class EndstoneDustBlock extends FallingBlock { @Environment(EnvType.CLIENT) private static final int COLOR = ColorUtil.color(226, 239, 168); - + public EndstoneDustBlock() { super(FabricBlockSettings.copyOf(Blocks.SAND) .breakByTool(FabricToolTags.SHOVELS) .materialColor(Blocks.END_STONE.defaultMaterialColor())); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return Collections.singletonList(new ItemStack(this)); diff --git a/src/main/java/ru/betterend/blocks/EternalPedestal.java b/src/main/java/ru/betterend/blocks/EternalPedestal.java index e699bc08..e1b5404e 100644 --- a/src/main/java/ru/betterend/blocks/EternalPedestal.java +++ b/src/main/java/ru/betterend/blocks/EternalPedestal.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -25,16 +28,14 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndPortals; import ru.betterend.rituals.EternalRitual; -import java.util.List; - public class EternalPedestal extends PedestalBlock { public static final BooleanProperty ACTIVATED = EndBlockProperties.ACTIVE; - + public EternalPedestal() { super(EndBlocks.FLAVOLITE_RUNED_ETERNAL); this.registerDefaultState(defaultBlockState().setValue(ACTIVATED, false)); } - + @Override public void checkRitual(Level world, BlockPos pos) { BlockEntity blockEntity = world.getBlockEntity(pos); @@ -49,24 +50,21 @@ public class EternalPedestal extends PedestalBlock { int portalId; if (targetWorld != null) { portalId = EndPortals.getPortalIdByWorld(targetWorld); - } - else { + } else { portalId = EndPortals.getPortalIdByWorld(EndPortals.OVERWORLD_ID); } ritual.disablePortal(portalId); } } world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, false).setValue(HAS_LIGHT, false)); - } - else { + } else { ItemStack itemStack = pedestal.getItem(0); ResourceLocation id = Registry.ITEM.getKey(itemStack.getItem()); if (EndPortals.isAvailableItem(id)) { world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, true).setValue(HAS_LIGHT, true)); if (pedestal.hasRitual()) { pedestal.getRitual().checkStructure(); - } - else { + } else { EternalRitual ritual = new EternalRitual(world, pos); ritual.checkStructure(); } @@ -74,7 +72,7 @@ public class EternalPedestal extends PedestalBlock { } } } - + @Override @Deprecated public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { @@ -85,23 +83,23 @@ public class EternalPedestal extends PedestalBlock { } return updated; } - + @Override @Deprecated public float getDestroyProgress(BlockState state, Player player, BlockGetter world, BlockPos pos) { return 0.0F; } - + @Override public float getExplosionResistance() { return Blocks.BEDROCK.getExplosionResistance(); } - + @Override public boolean dropFromExplosion(Explosion explosion) { return false; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.is(this)) { @@ -120,7 +118,7 @@ public class EternalPedestal extends PedestalBlock { } return drop; } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { super.createBlockStateDefinition(stateManager); @@ -128,8 +126,8 @@ public class EternalPedestal extends PedestalBlock { } @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { - return new EternalPedestalEntity(blockPos, blockState); + public BlockEntity newBlockEntity(BlockGetter world) { + return new EternalPedestalEntity(); } @Override diff --git a/src/main/java/ru/betterend/blocks/FilaluxBlock.java b/src/main/java/ru/betterend/blocks/FilaluxBlock.java index 3d09def1..55d35214 100644 --- a/src/main/java/ru/betterend/blocks/FilaluxBlock.java +++ b/src/main/java/ru/betterend/blocks/FilaluxBlock.java @@ -7,7 +7,7 @@ public class FilaluxBlock extends BaseVineBlock { public FilaluxBlock() { super(15, true); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/FilaluxWingsBlock.java b/src/main/java/ru/betterend/blocks/FilaluxWingsBlock.java index 3b1392a4..7a3ef492 100644 --- a/src/main/java/ru/betterend/blocks/FilaluxWingsBlock.java +++ b/src/main/java/ru/betterend/blocks/FilaluxWingsBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.EnumMap; + import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -16,11 +19,9 @@ import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import java.util.EnumMap; - public class FilaluxWingsBlock extends BaseAttachedBlock implements IRenderTyped { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); - + public FilaluxWingsBlock() { super(FabricBlockSettings.of(Material.PLANT).breakByTool(FabricToolTags.SHEARS).sound(SoundType.WET_GRASS).noCollission()); } @@ -29,12 +30,12 @@ public class FilaluxWingsBlock extends BaseAttachedBlock implements IRenderTyped public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - + static { BOUNDING_SHAPES.put(Direction.UP, Shapes.box(0.0, 0.0, 0.0, 1.0, 0.5, 1.0)); BOUNDING_SHAPES.put(Direction.DOWN, Shapes.box(0.0, 0.5, 0.0, 1.0, 1.0, 1.0)); diff --git a/src/main/java/ru/betterend/blocks/FlamaeaBlock.java b/src/main/java/ru/betterend/blocks/FlamaeaBlock.java index e9a5a1ea..bba1a69d 100644 --- a/src/main/java/ru/betterend/blocks/FlamaeaBlock.java +++ b/src/main/java/ru/betterend/blocks/FlamaeaBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -15,26 +18,24 @@ 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 java.util.List; +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); - + public FlamaeaBlock() { super(FabricBlockSettings.of(Material.PLANT) .breakByTool(FabricToolTags.SHEARS) .breakByHand(true) .sound(SoundType.WET_GRASS)); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(Blocks.WATER); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; @@ -44,7 +45,7 @@ public class FlamaeaBlock extends EndPlantBlock implements ISpetialItem { public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return Lists.newArrayList(new ItemStack(this)); diff --git a/src/main/java/ru/betterend/blocks/GlowingMossBlock.java b/src/main/java/ru/betterend/blocks/GlowingMossBlock.java index 10b21eab..22191437 100644 --- a/src/main/java/ru/betterend/blocks/GlowingMossBlock.java +++ b/src/main/java/ru/betterend/blocks/GlowingMossBlock.java @@ -12,19 +12,19 @@ public class GlowingMossBlock extends EndPlantBlock { public GlowingMossBlock(int light) { super(light); } - + @Override protected boolean isTerrain(BlockState state) { return state.getBlock() == EndBlocks.END_MOSS || state.getBlock() == EndBlocks.END_MYCELIUM; } - + @Environment(EnvType.CLIENT) - public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { - return true; - } + public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { + return true; + } - @Environment(EnvType.CLIENT) - public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { - return 1F; - } + @Environment(EnvType.CLIENT) + public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { + return 1F; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/GlowingPillarLuminophorBlock.java b/src/main/java/ru/betterend/blocks/GlowingPillarLuminophorBlock.java index b2b5b903..1a3c6fe0 100644 --- a/src/main/java/ru/betterend/blocks/GlowingPillarLuminophorBlock.java +++ b/src/main/java/ru/betterend/blocks/GlowingPillarLuminophorBlock.java @@ -19,7 +19,7 @@ import ru.betterend.registry.EndBlocks; public class GlowingPillarLuminophorBlock extends BaseBlock { public static final BooleanProperty NATURAL = EndBlockProperties.NATURAL; - + public GlowingPillarLuminophorBlock() { super(FabricBlockSettings.of(Material.LEAVES) .materialColor(MaterialColor.COLOR_ORANGE) @@ -29,12 +29,12 @@ public class GlowingPillarLuminophorBlock extends BaseBlock { .sound(SoundType.GRASS)); this.registerDefaultState(this.stateDefinition.any().setValue(NATURAL, false)); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return !state.getValue(NATURAL) || world.getBlockState(pos.below()).is(EndBlocks.GLOWING_PILLAR_ROOTS); } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -44,7 +44,7 @@ public class GlowingPillarLuminophorBlock extends BaseBlock { return state; } } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(NATURAL); diff --git a/src/main/java/ru/betterend/blocks/GlowingPillarRootsBlock.java b/src/main/java/ru/betterend/blocks/GlowingPillarRootsBlock.java index 4af0f1ac..fe1f49ef 100644 --- a/src/main/java/ru/betterend/blocks/GlowingPillarRootsBlock.java +++ b/src/main/java/ru/betterend/blocks/GlowingPillarRootsBlock.java @@ -16,17 +16,17 @@ import ru.betterend.registry.EndBlocks; public class GlowingPillarRootsBlock extends UpDownPlantBlock { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.AMBER_MOSS); } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { diff --git a/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java b/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java index 549f8664..fa20609d 100644 --- a/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/GlowingPillarSeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -18,8 +20,6 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class GlowingPillarSeedBlock extends EndPlantWithAgeBlock { public GlowingPillarSeedBlock() { @@ -31,7 +31,7 @@ public class GlowingPillarSeedBlock extends EndPlantWithAgeBlock { .randomTicks() .noCollission()); } - + @Override public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { int height = MHelper.randRange(1, 2, random); @@ -39,20 +39,19 @@ public class GlowingPillarSeedBlock extends EndPlantWithAgeBlock { if (h < height) { return; } - + MutableBlockPos mut = new MutableBlockPos().set(pos); BlockState roots = EndBlocks.GLOWING_PILLAR_ROOTS.defaultBlockState(); if (height < 2) { BlocksHelper.setWithUpdate(world, mut, roots.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.MIDDLE)); - } - else { + } else { BlocksHelper.setWithUpdate(world, mut, roots.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.BOTTOM)); mut.move(Direction.UP); BlocksHelper.setWithUpdate(world, mut, roots.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.TOP)); } mut.move(Direction.UP); BlocksHelper.setWithUpdate(world, mut, EndBlocks.GLOWING_PILLAR_LUMINOPHOR.defaultBlockState().setValue(BlueVineLanternBlock.NATURAL, true)); - for (Direction dir : BlocksHelper.DIRECTIONS) { + for (Direction dir: BlocksHelper.DIRECTIONS) { pos = mut.relative(dir); if (world.isEmptyBlock(pos)) { BlocksHelper.setWithUpdate(world, pos, EndBlocks.GLOWING_PILLAR_LEAVES.defaultBlockState().setValue(BlockStateProperties.FACING, dir)); @@ -63,12 +62,12 @@ public class GlowingPillarSeedBlock extends EndPlantWithAgeBlock { BlocksHelper.setWithUpdate(world, mut, EndBlocks.GLOWING_PILLAR_LEAVES.defaultBlockState().setValue(BlockStateProperties.FACING, Direction.UP)); } } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.AMBER_MOSS); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java b/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java index 3f893e82..625d503c 100644 --- a/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java +++ b/src/main/java/ru/betterend/blocks/HelixTreeLeavesBlock.java @@ -1,6 +1,10 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + import com.google.common.collect.Lists; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.client.color.block.BlockColor; @@ -26,13 +30,10 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; - public class HelixTreeLeavesBlock extends BaseBlock implements IColorProvider { public static final IntegerProperty COLOR = EndBlockProperties.COLOR; private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); - + public HelixTreeLeavesBlock() { super(FabricBlockSettings.of(Material.LEAVES) .materialColor(MaterialColor.COLOR_ORANGE) @@ -41,7 +42,7 @@ public class HelixTreeLeavesBlock extends BaseBlock implements IColorProvider { .sound(SoundType.GRASS) .strength(0.2F)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(COLOR); @@ -60,7 +61,7 @@ public class HelixTreeLeavesBlock extends BaseBlock implements IColorProvider { return ColorUtil.color(237, getGreen(4), 20); }; } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { double px = ctx.getClickedPos().getX() * 0.1; @@ -68,17 +69,17 @@ public class HelixTreeLeavesBlock extends BaseBlock implements IColorProvider { double pz = ctx.getClickedPos().getZ() * 0.1; return this.defaultBlockState().setValue(COLOR, MHelper.floor(NOISE.eval(px, py, pz) * 3.5 + 4)); } - + private int getGreen(int color) { float delta = color / 7F; return (int) Mth.lerp(delta, 80, 158); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); if (tool != null) { - if (tool.is(FabricToolTags.SHEARS) || tool.isCorrectToolForDrops(state) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool.getItem().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/HydraluxBlock.java b/src/main/java/ru/betterend/blocks/HydraluxBlock.java index f5f93876..9169bfaf 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxBlock.java @@ -1,6 +1,11 @@ package ru.betterend.blocks; +import java.util.Collections; +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; @@ -24,14 +29,10 @@ import ru.betterend.blocks.EndBlockProperties.HydraluxShape; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class HydraluxBlock extends UnderwaterPlantBlock { public static final EnumProperty SHAPE = EndBlockProperties.HYDRALUX_SHAPE; - + public HydraluxBlock() { super(FabricBlockSettings.of(Material.WATER_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -40,12 +41,12 @@ public class HydraluxBlock extends UnderwaterPlantBlock { .lightLevel((state) -> state.getValue(SHAPE).hasGlow() ? 15 : 0) .noCollission()); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { BlockState down = world.getBlockState(pos.below()); @@ -75,13 +76,13 @@ public class HydraluxBlock extends UnderwaterPlantBlock { public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { return false; } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { return new ItemStack(EndBlocks.HYDRALUX_SAPLING); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { HydraluxShape shape = state.getValue(SHAPE); diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java index 14c08d7d..5c82d09a 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalBlock.java @@ -6,7 +6,6 @@ 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; @@ -21,12 +20,11 @@ public class HydraluxPetalBlock extends BaseBlock { .materialColor(MaterialColor.PODZOL) .sound(SoundType.WART_BLOCK)); } - + public HydraluxPetalBlock(Properties settings) { super(settings); } - + @Override - public void fallOn(Level level, BlockState blockState, BlockPos blockPos, Entity entity, float f) { - } + public void fallOn(Level world, BlockPos pos, Entity entity, float distance) {} } diff --git a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java index 0b27b837..f9a882b5 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxPetalColoredBlock.java @@ -1,26 +1,25 @@ package ru.betterend.blocks; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; +import java.util.Optional; + +import org.jetbrains.annotations.Nullable; + 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; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; import ru.bclib.client.models.ModelsHelper; import ru.bclib.interfaces.IColorProvider; import ru.bclib.util.BlocksHelper; import ru.betterend.client.models.Patterns; -import java.util.Optional; - public class HydraluxPetalColoredBlock extends HydraluxPetalBlock implements IColorProvider { public HydraluxPetalColoredBlock(FabricBlockSettings settings) { super(settings); } - + @Override public BlockColor getProvider() { return (state, world, pos, tintIndex) -> BlocksHelper.getBlockColor(this); @@ -32,7 +31,6 @@ 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/HydraluxSaplingBlock.java b/src/main/java/ru/betterend/blocks/HydraluxSaplingBlock.java index 05a2cf0b..f3b11147 100644 --- a/src/main/java/ru/betterend/blocks/HydraluxSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/HydraluxSaplingBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.world.level.WorldGenLevel; @@ -11,22 +13,20 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.EndBlockProperties.HydraluxShape; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class HydraluxSaplingBlock extends UnderwaterPlantWithAgeBlock { @Override public void grow(WorldGenLevel world, Random random, BlockPos pos) { int h = MHelper.randRange(4, 8, random); MutableBlockPos mut = new MutableBlockPos().set(pos); - + for (int i = 1; i < h; i++) { mut.setY(pos.getY() + i); if (!world.getBlockState(mut).is(Blocks.WATER)) { return; } } - + mut.setY(pos.getY()); BlockState state = EndBlocks.HYDRALUX.defaultBlockState(); BlocksHelper.setWithoutUpdate(world, pos, state.setValue(EndBlockProperties.HYDRALUX_SHAPE, HydraluxShape.ROOTS)); @@ -34,15 +34,15 @@ public class HydraluxSaplingBlock extends UnderwaterPlantWithAgeBlock { mut.setY(pos.getY() + i); BlocksHelper.setWithoutUpdate(world, mut, state.setValue(EndBlockProperties.HYDRALUX_SHAPE, HydraluxShape.VINE)); } - + mut.setY(mut.getY() + 1); boolean big = random.nextBoolean(); BlocksHelper.setWithoutUpdate(world, mut, state.setValue(EndBlockProperties.HYDRALUX_SHAPE, big ? HydraluxShape.FLOWER_BIG_BOTTOM : HydraluxShape.FLOWER_SMALL_BOTTOM)); - + mut.setY(mut.getY() + 1); BlocksHelper.setWithoutUpdate(world, mut, state.setValue(EndBlockProperties.HYDRALUX_SHAPE, big ? HydraluxShape.FLOWER_BIG_TOP : HydraluxShape.FLOWER_SMALL_TOP)); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.SULPHURIC_ROCK.stone); diff --git a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java index 6b5eba5e..806455f5 100644 --- a/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java +++ b/src/main/java/ru/betterend/blocks/HydrothermalVentBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +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; @@ -22,8 +26,6 @@ import net.minecraft.world.level.block.LiquidBlockContainer; import net.minecraft.world.level.block.SimpleWaterloggedBlock; 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; 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; @@ -34,7 +36,6 @@ import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; @@ -42,14 +43,12 @@ import ru.betterend.blocks.entities.BlockEntityHydrothermalVent; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndParticles; -import java.util.Random; - @SuppressWarnings("deprecation") public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlock, LiquidBlockContainer, SimpleWaterloggedBlock { public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE; private static final VoxelShape SHAPE = Block.box(1, 1, 1, 15, 16, 15); - + public HydrothermalVentBlock() { super(FabricBlockSettings.of(Material.STONE) .breakByTool(FabricToolTags.PICKAXES) @@ -58,17 +57,17 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo .requiresCorrectToolForDrops()); this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, true).setValue(ACTIVATED, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(WATERLOGGED, ACTIVATED); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return false; @@ -78,13 +77,13 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo public boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { return false; } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { state = world.getBlockState(pos.below()); return state.is(EndBlocks.SULPHURIC_ROCK.stone); } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -95,22 +94,22 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo } return state; } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { LevelAccessor worldAccess = ctx.getLevel(); BlockPos blockPos = ctx.getClickedPos(); return this.defaultBlockState().setValue(WATERLOGGED, worldAccess.getFluidState(blockPos).getType() == Fluids.WATER); } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); } @Override - public BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new BlockEntityHydrothermalVent(pos, state); + public BlockEntity newBlockEntity(BlockGetter world) { + return new BlockEntityHydrothermalVent(); } @Override @@ -121,28 +120,27 @@ public class HydrothermalVentBlock extends BaseBlockNotFull implements EntityBlo world.getBlockTicks().scheduleTick(up, EndBlocks.VENT_BUBBLE_COLUMN, 5); } } - + @Override public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { if (world instanceof ServerLevel && state.getValue(WATERLOGGED) && world.getBlockState(pos.above()).is(Blocks.WATER)) { - tick(state, (ServerLevel) world, pos, world.random); + tick(state,(ServerLevel) world, pos, world.random); } } - + @Environment(EnvType.CLIENT) public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { - super.animateTick(state, world, pos, random); if (!state.getValue(ACTIVATED) && random.nextBoolean()) { + super.animateTick(state, world, pos, random); double x = pos.getX() + random.nextDouble(); double y = pos.getY() + 0.9 + random.nextDouble() * 0.3; double z = pos.getZ() + random.nextDouble(); - world.addParticle(ParticleTypes.LARGE_SMOKE, x, y, z, 0, 0, 0); + if (state.getValue(WATERLOGGED)) { + world.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); + } + else { + world.addParticle(ParticleTypes.SMOKE, x, y, z, 0, 0, 0); + } } } - - @Nullable - @Override - public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { - return BlockEntityHydrothermalVent::tick; - } } diff --git a/src/main/java/ru/betterend/blocks/InfusionPedestal.java b/src/main/java/ru/betterend/blocks/InfusionPedestal.java index 45c2e56e..2604055d 100644 --- a/src/main/java/ru/betterend/blocks/InfusionPedestal.java +++ b/src/main/java/ru/betterend/blocks/InfusionPedestal.java @@ -6,16 +6,12 @@ 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.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.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.entities.InfusionPedestalEntity; -import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.rituals.InfusionRitual; @SuppressWarnings("deprecation") @@ -27,7 +23,7 @@ public class InfusionPedestal extends PedestalBlock { super(Blocks.OBSIDIAN); this.height = 1.08F; } - + @Override public void checkRitual(Level world, BlockPos pos) { BlockEntity blockEntity = world.getBlockEntity(pos); @@ -39,18 +35,17 @@ public class InfusionPedestal extends PedestalBlock { ritual.configure(); } pedestal.getRitual().checkRecipe(); - } - else { + } else { InfusionRitual ritual = new InfusionRitual(pedestal, world, pos); pedestal.linkRitual(ritual); ritual.checkRecipe(); } } } - + @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { - return new InfusionPedestalEntity(blockPos, blockState); + public BlockEntity newBlockEntity(BlockGetter world) { + return new InfusionPedestalEntity(); } @Override @@ -62,7 +57,7 @@ public class InfusionPedestal extends PedestalBlock { @Deprecated public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (state.is(this)) { - switch (state.getValue(STATE)) { + switch(state.getValue(STATE)) { case PEDESTAL_TOP: { return SHAPE_PEDESTAL_TOP; } @@ -77,12 +72,6 @@ public class InfusionPedestal extends PedestalBlock { return super.getShape(state, world, pos, context); } - @Override - @Nullable - public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { - return InfusionPedestalEntity::tickEnity; - } - static { VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14); VoxelShape basinDown = Block.box(0, 0, 0, 16, 3, 16); diff --git a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java index b0b857aa..caf38d89 100644 --- a/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/JellyshroomCapBlock.java @@ -1,8 +1,12 @@ package ru.betterend.blocks; +import java.util.List; +import java.util.Optional; + +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; @@ -19,7 +23,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.storage.loot.LootContext; -import org.jetbrains.annotations.Nullable; import ru.bclib.client.models.BlockModelProvider; import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.render.BCLRenderLayer; @@ -30,23 +33,20 @@ import ru.bclib.util.MHelper; import ru.betterend.client.models.Patterns; import ru.betterend.noise.OpenSimplexNoise; -import java.util.List; -import java.util.Optional; - public class JellyshroomCapBlock extends SlimeBlock implements IRenderTyped, BlockModelProvider, IColorProvider { public static final IntegerProperty COLOR = EndBlockProperties.COLOR; private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); private final Vec3i colorStart; private final Vec3i colorEnd; private final int coloritem; - + public JellyshroomCapBlock(int r1, int g1, int b1, int r2, int g2, int b2) { 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); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { double px = ctx.getClickedPos().getX() * 0.1; @@ -54,30 +54,28 @@ public class JellyshroomCapBlock extends SlimeBlock implements IRenderTyped, Blo double pz = ctx.getClickedPos().getZ() * 0.1; return this.defaultBlockState().setValue(COLOR, MHelper.floor(NOISE.eval(px, py, pz) * 3.5 + 4)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(COLOR); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return Lists.newArrayList(new ItemStack(this)); } @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/LacugroveSaplingBlock.java b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java index f353b7dc..5c2a678e 100644 --- a/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LacugroveSaplingBlock.java @@ -17,7 +17,7 @@ public class LacugroveSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.LACUGROVE.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.END_MOSS) || world.getBlockState(pos.below()).is(EndBlocks.ENDSTONE_DUST); diff --git a/src/main/java/ru/betterend/blocks/LanceleafBlock.java b/src/main/java/ru/betterend/blocks/LanceleafBlock.java index 081405ab..a7e29890 100644 --- a/src/main/java/ru/betterend/blocks/LanceleafBlock.java +++ b/src/main/java/ru/betterend/blocks/LanceleafBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.item.ItemStack; @@ -18,14 +21,11 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; - public class LanceleafBlock extends EndPlantBlock { public static final EnumProperty SHAPE = BlockProperties.PENTA_SHAPE; public static final IntegerProperty ROTATION = BlockProperties.ROTATION; - + public LanceleafBlock() { super(); } @@ -34,7 +34,7 @@ public class LanceleafBlock extends EndPlantBlock { protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE, ROTATION); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { PentaShape shape = state.getValue(SHAPE); @@ -48,7 +48,7 @@ public class LanceleafBlock extends EndPlantBlock { return world.getBlockState(pos.below()).is(this) && world.getBlockState(pos.above()).is(this); } } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -58,7 +58,7 @@ public class LanceleafBlock extends EndPlantBlock { return state; } } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.getValue(SHAPE) == PentaShape.BOTTOM) { diff --git a/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java b/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java index 8325e8f7..8c8455e9 100644 --- a/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LanceleafSeedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -13,8 +15,6 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class LanceleafSeedBlock extends EndPlantWithAgeBlock { @Override public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { @@ -34,12 +34,12 @@ public class LanceleafSeedBlock extends EndPlantWithAgeBlock { BlocksHelper.setWithoutUpdate(world, mut.move(Direction.UP), plant.setValue(BlockProperties.PENTA_SHAPE, PentaShape.PRE_TOP)); BlocksHelper.setWithoutUpdate(world, mut.move(Direction.UP), plant.setValue(BlockProperties.PENTA_SHAPE, PentaShape.TOP)); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.AMBER_MOSS); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/LargeAmaranitaBlock.java b/src/main/java/ru/betterend/blocks/LargeAmaranitaBlock.java index 098140af..d45f9de2 100644 --- a/src/main/java/ru/betterend/blocks/LargeAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/LargeAmaranitaBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -20,13 +22,11 @@ import ru.bclib.blocks.BlockProperties.TripleShape; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class LargeAmaranitaBlock extends EndPlantBlock { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; private static final VoxelShape SHAPE_BOTTOM = Block.box(4, 0, 4, 12, 14, 12); private static final VoxelShape SHAPE_TOP = Shapes.or(Block.box(1, 3, 1, 15, 16, 15), SHAPE_BOTTOM); - + public LargeAmaranitaBlock() { super(FabricBlockSettings.of(Material.PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -34,22 +34,22 @@ public class LargeAmaranitaBlock extends EndPlantBlock { .sound(SoundType.GRASS) .lightLevel((state) -> (state.getValue(SHAPE) == TripleShape.TOP) ? 15 : 0)); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(SHAPE) == TripleShape.TOP ? SHAPE_TOP : SHAPE_BOTTOM; } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.SANGNUM) || state.is(EndBlocks.MOSSY_OBSIDIAN) || state.is(EndBlocks.MOSSY_DRAGON_BONE); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { TripleShape shape = state.getValue(SHAPE); @@ -63,12 +63,12 @@ public class LargeAmaranitaBlock extends EndPlantBlock { return world.getBlockState(pos.below()).is(this) && world.getBlockState(pos.above()).is(this); } } - + @Override public OffsetType getOffsetType() { return OffsetType.NONE; } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; diff --git a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java index b174bb8e..91ed218a 100644 --- a/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/LucerniaSaplingBlock.java @@ -17,7 +17,7 @@ public class LucerniaSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.LUCERNIA.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.RUTISCUS); diff --git a/src/main/java/ru/betterend/blocks/LumecornBlock.java b/src/main/java/ru/betterend/blocks/LumecornBlock.java index 95257dd1..e0717bea 100644 --- a/src/main/java/ru/betterend/blocks/LumecornBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; @@ -28,22 +31,19 @@ import ru.betterend.blocks.EndBlockProperties.LumecornShape; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.Collections; -import java.util.List; - @SuppressWarnings("deprecation") public class LumecornBlock extends BaseBlockNotFull implements IRenderTyped { public static final EnumProperty SHAPE = EnumProperty.create("shape", LumecornShape.class); private static final VoxelShape SHAPE_BOTTOM = Block.box(6, 0, 6, 10, 16, 10); private static final VoxelShape SHAPE_TOP = Block.box(6, 0, 6, 10, 8, 10); - + public LumecornBlock() { super(FabricBlockSettings.of(Material.WOOD) .breakByTool(FabricToolTags.AXES) .hardness(0.5F) .luminance(state -> state.getValue(SHAPE).getLight())); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); @@ -53,12 +53,12 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTyped { public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(SHAPE) == LumecornShape.LIGHT_TOP ? SHAPE_TOP : SHAPE_BOTTOM; } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { LumecornShape shape = state.getValue(SHAPE); @@ -72,7 +72,7 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTyped { return world.getBlockState(pos.below()).is(this) && world.getBlockState(pos.above()).is(this); } } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!canSurvive(state, world, pos)) { @@ -82,7 +82,7 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTyped { return state; } } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { LumecornShape shape = state.getValue(SHAPE); @@ -91,7 +91,7 @@ public class LumecornBlock extends BaseBlockNotFull implements IRenderTyped { } return MHelper.RANDOM.nextBoolean() ? Collections.singletonList(new ItemStack(EndItems.LUMECORN_ROD)) : Collections.emptyList(); } - + @Override @Environment(EnvType.CLIENT) public ItemStack getCloneItemStack(BlockGetter world, BlockPos pos, BlockState state) { diff --git a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java index b7e7b3af..ed04a881 100644 --- a/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java +++ b/src/main/java/ru/betterend/blocks/LumecornSeedBlock.java @@ -1,28 +1,27 @@ package ru.betterend.blocks; +import java.util.Random; + 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; -import java.util.Random; - public class LumecornSeedBlock extends EndPlantWithAgeBlock { @Override public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { - EndFeatures.LUMECORN.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + EndFeatures.LUMECORN.getFeature().place(world, null, random, pos, null); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java index 8565038b..d644fcaf 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +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; @@ -14,27 +17,26 @@ 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.betterend.registry.EndBlocks; -import java.util.Queue; - @SuppressWarnings("deprecation") public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeBlock() { super(FabricBlockSettings.copyOf(Blocks.SPONGE).noOcclusion()); } - + @Override public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) { if (absorbWater(world, pos)) { world.setBlockAndUpdate(pos, EndBlocks.MENGER_SPONGE_WET.defaultBlockState()); } } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (absorbWater(world, pos)) { @@ -59,21 +61,19 @@ 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()).pickupBlock(world, blockPos2, blockState).isEmpty()) { + if (blockState.getBlock() instanceof BucketPickup && ((BucketPickup) blockState.getBlock()).takeLiquid(world, blockPos2, blockState) != Fluids.EMPTY) { ++i; if (j < 6) { queue.add(new Tuple<>(blockPos2, j + 1)); } - } - else if (blockState.getBlock() instanceof LiquidBlock) { + } else if (blockState.getBlock() instanceof LiquidBlock) { world.setBlock(blockPos2, Blocks.AIR.defaultBlockState(), 3); ++i; if (j < 6) { queue.add(new Tuple<>(blockPos2, j + 1)); } - } - else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { - BlockEntity blockEntity = blockState.hasBlockEntity() ? world.getBlockEntity(blockPos2) : null; + } else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) { + BlockEntity blockEntity = blockState.getBlock().isEntityBlock() ? world.getBlockEntity(blockPos2) : null; dropResources(blockState, world, blockPos2, blockEntity); world.setBlock(blockPos2, Blocks.AIR.defaultBlockState(), 3); ++i; @@ -91,7 +91,7 @@ public class MengerSpongeBlock extends BaseBlockNotFull implements IRenderTyped return i > 0; } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; diff --git a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java index 2b9dc68b..0908d9f3 100644 --- a/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java +++ b/src/main/java/ru/betterend/blocks/MengerSpongeWetBlock.java @@ -1,5 +1,7 @@ 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; @@ -23,8 +25,6 @@ import ru.bclib.interfaces.IRenderTyped; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - @SuppressWarnings("deprecation") public class MengerSpongeWetBlock extends BaseBlockNotFull implements IRenderTyped { public MengerSpongeWetBlock() { @@ -94,12 +94,12 @@ public class MengerSpongeWetBlock extends BaseBlockNotFull implements IRenderTyp world.addFreshEntity(drop); } } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public FluidState getFluidState(BlockState state) { return Fluids.WATER.getSource(false); diff --git a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java index 28bbc7e1..b7d3e7e1 100644 --- a/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyDragonBoneBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +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; @@ -17,16 +21,12 @@ import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseRotatedPillarBlock; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; -import java.util.Random; - @SuppressWarnings("deprecation") public class MossyDragonBoneBlock extends BaseRotatedPillarBlock { public MossyDragonBoneBlock() { super(FabricBlockSettings.copyOf(Blocks.BONE_BLOCK).hardness(0.5F).randomTicks()); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); @@ -35,7 +35,7 @@ public class MossyDragonBoneBlock extends BaseRotatedPillarBlock { } return Collections.singletonList(new ItemStack(EndBlocks.DRAGON_BONE_BLOCK)); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { if (random.nextInt(16) == 0 && !canSurvive(state, world, pos)) { @@ -45,17 +45,15 @@ public class MossyDragonBoneBlock extends BaseRotatedPillarBlock { @Override public boolean canSurvive(BlockState state, LevelReader worldView, BlockPos pos) { - BlockPos blockPos = pos.above(); - BlockState blockState = worldView.getBlockState(blockPos); - if (blockState.is(Blocks.SNOW) && blockState.getValue(SnowLayerBlock.LAYERS) == 1) { - return true; - } - else if (blockState.getFluidState().getAmount() == 8) { - return false; - } - else { - int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); - return i < 5; - } - } + BlockPos blockPos = pos.above(); + BlockState blockState = worldView.getBlockState(blockPos); + if (blockState.is(Blocks.SNOW) && blockState.getValue(SnowLayerBlock.LAYERS) == 1) { + return true; + } else if (blockState.getFluidState().getAmount() == 8) { + return false; + } else { + int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); + return i < 5; + } + } } diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java index c004ce87..982d4cf6 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomCapBlock.java @@ -14,12 +14,12 @@ import ru.betterend.registry.EndBlocks; public class MossyGlowshroomCapBlock extends BaseBlock { public static final BooleanProperty TRANSITION = EndBlockProperties.TRANSITION; - + public MossyGlowshroomCapBlock() { super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).sound(SoundType.WOOD)); this.registerDefaultState(this.stateDefinition.any().setValue(TRANSITION, false)); } - + public BlockState getStateForPlacement(BlockPlaceContext ctx) { return this.defaultBlockState().setValue(TRANSITION, EndBlocks.MOSSY_GLOWSHROOM.isTreeLog(ctx.getLevel().getBlockState(ctx.getClickedPos().below()))); } diff --git a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java index 64bc3c75..da75416d 100644 --- a/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/MossyGlowshroomSaplingBlock.java @@ -18,7 +18,7 @@ public class MossyGlowshroomSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.MOSSY_GLOWSHROOM.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.END_MOSS) || world.getBlockState(pos.below()).is(EndBlocks.END_MYCELIUM); diff --git a/src/main/java/ru/betterend/blocks/MossyObsidian.java b/src/main/java/ru/betterend/blocks/MossyObsidian.java index b601c482..d3423fdf 100644 --- a/src/main/java/ru/betterend/blocks/MossyObsidian.java +++ b/src/main/java/ru/betterend/blocks/MossyObsidian.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +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; @@ -16,15 +20,11 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import ru.bclib.blocks.BaseBlock; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class MossyObsidian extends BaseBlock { public MossyObsidian() { super(FabricBlockSettings.copyOf(Blocks.OBSIDIAN).hardness(3).randomTicks()); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); @@ -33,26 +33,24 @@ public class MossyObsidian extends BaseBlock { } return Collections.singletonList(new ItemStack(Blocks.OBSIDIAN)); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { if (random.nextInt(16) == 0 && !canSurvive(state, world, pos)) { world.setBlockAndUpdate(pos, Blocks.OBSIDIAN.defaultBlockState()); } } - + public boolean canSurvive(BlockState state, LevelReader worldView, BlockPos pos) { - BlockPos blockPos = pos.above(); - BlockState blockState = worldView.getBlockState(blockPos); - if (blockState.is(Blocks.SNOW) && (Integer) blockState.getValue(SnowLayerBlock.LAYERS) == 1) { - return true; - } - else if (blockState.getFluidState().getAmount() == 8) { - return false; - } - else { - int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); - return i < 5; - } - } + BlockPos blockPos = pos.above(); + BlockState blockState = worldView.getBlockState(blockPos); + if (blockState.is(Blocks.SNOW) && (Integer)blockState.getValue(SnowLayerBlock.LAYERS) == 1) { + return true; + } else if (blockState.getFluidState().getAmount() == 8) { + return false; + } else { + int i = LayerLightEngine.getLightBlockInto(worldView, state, pos, blockState, blockPos, Direction.UP, blockState.getLightBlock(worldView, blockPos)); + return i < 5; + } + } } diff --git a/src/main/java/ru/betterend/blocks/MurkweedBlock.java b/src/main/java/ru/betterend/blocks/MurkweedBlock.java index 673fff3a..cd7ec961 100644 --- a/src/main/java/ru/betterend/blocks/MurkweedBlock.java +++ b/src/main/java/ru/betterend/blocks/MurkweedBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; @@ -15,8 +17,6 @@ import net.minecraft.world.level.pathfinder.PathComputationType; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class MurkweedBlock extends EndPlantBlock { @Override @Environment(EnvType.CLIENT) @@ -27,19 +27,19 @@ public class MurkweedBlock extends EndPlantBlock { double v = random.nextDouble() * 0.1; world.addParticle(ParticleTypes.ENTITY_EFFECT, x, y, z, v, v, v); } - + @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { if (entity instanceof LivingEntity && !((LivingEntity) entity).hasEffect(MobEffects.BLINDNESS)) { ((LivingEntity) entity).addEffect(new MobEffectInstance(MobEffects.BLINDNESS, 50)); } } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.SHADOW_GRASS); } - + @Override public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { return false; diff --git a/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java b/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java index 7f55cd31..57807754 100644 --- a/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java +++ b/src/main/java/ru/betterend/blocks/NeedlegrassBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; import net.minecraft.world.damagesource.DamageSource; @@ -20,8 +23,6 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.List; - public class NeedlegrassBlock extends EndPlantBlock { @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { @@ -29,18 +30,18 @@ public class NeedlegrassBlock extends EndPlantBlock { entity.hurt(DamageSource.CACTUS, 0.1F); } } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.getItem().is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Lists.newArrayList(new ItemStack(this)); } else { return Lists.newArrayList(new ItemStack(Items.STICK, MHelper.randRange(0, 2, MHelper.RANDOM))); } } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.SHADOW_GRASS); diff --git a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java index db9468c8..2d1d9acd 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusBlock.java @@ -2,9 +2,9 @@ package ru.betterend.blocks; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.level.block.Blocks; -import ru.betterend.blocks.basis.LitPillarBlock; +import ru.bclib.blocks.BaseRotatedPillarBlock; -public class NeonCactusBlock extends LitPillarBlock { +public class NeonCactusBlock extends BaseRotatedPillarBlock { public NeonCactusBlock() { 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 8cd897ef..568ea567 100644 --- a/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/NeonCactusPlantBlock.java @@ -1,7 +1,12 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +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; @@ -43,17 +48,13 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.EndBlockProperties.CactusBottom; import ru.betterend.registry.EndBlocks; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - @SuppressWarnings("deprecation") public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, IRenderTyped { public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; public static final EnumProperty CACTUS_BOTTOM = EndBlockProperties.CACTUS_BOTTOM; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final DirectionProperty FACING = BlockStateProperties.FACING; - + private static final EnumMap BIG_SHAPES_OPEN = Maps.newEnumMap(Direction.class); private static final EnumMap MEDIUM_SHAPES_OPEN = Maps.newEnumMap(Direction.class); private static final EnumMap SMALL_SHAPES_OPEN = Maps.newEnumMap(Direction.class); @@ -61,17 +62,17 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate private static final EnumMap MEDIUM_SHAPES = Maps.newEnumMap(Axis.class); private static final EnumMap SMALL_SHAPES = Maps.newEnumMap(Axis.class); private static final int MAX_LENGTH = 12; - + public NeonCactusPlantBlock() { super(FabricBlockSettings.copyOf(Blocks.CACTUS).luminance(15).randomTicks()); registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(FACING, Direction.UP).setValue(SHAPE, TripleShape.TOP)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE, CACTUS_BOTTOM, WATERLOGGED, FACING); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { LevelAccessor world = ctx.getLevel(); @@ -90,7 +91,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate } return state; } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return BlocksHelper.rotateHorizontal(state, rotation, FACING); @@ -100,12 +101,12 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate public BlockState mirror(BlockState state, Mirror mirror) { return BlocksHelper.mirrorHorizontal(state, mirror, FACING); } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); } - + @Override public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { world.getBlockTicks().scheduleTick(pos, this, 2); @@ -125,19 +126,19 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate } return state; } - + @Override public void tick(BlockState blockState, ServerLevel serverLevel, BlockPos blockPos, Random random) { if (!blockState.canSurvive(serverLevel, blockPos)) { serverLevel.destroyBlock(blockPos, true, null, 1); } } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { TripleShape shape = state.getValue(SHAPE); @@ -157,7 +158,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate return shape == TripleShape.MIDDLE ? MEDIUM_SHAPES_OPEN.get(dir) : SMALL_SHAPES_OPEN.get(dir); } } - + @Override public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { Direction dir = state.getValue(FACING); @@ -165,12 +166,12 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate BlockState support = level.getBlockState(supportPos); return support.is(this) || support.isFaceSturdy(level, supportPos, dir); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { if (!this.canSurvive(state, world, pos) || random.nextInt(8) > 0) { return; - } + } Direction dir = state.getValue(FACING); if (!world.isEmptyBlock(pos.relative(dir))) { return; @@ -200,11 +201,11 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate BlocksHelper.setWithoutUpdate(world, pos.relative(dir), placement); mutateStem(placement, world, pos, MAX_LENGTH); } - + public void growPlant(WorldGenLevel world, BlockPos pos, Random random) { growPlant(world, pos, random, MHelper.randRange(MAX_LENGTH >> 1, MAX_LENGTH, random)); } - + public void growPlant(WorldGenLevel world, BlockPos pos, Random random, int iterations) { BlockState state = defaultBlockState(); BlockState downState = world.getBlockState(pos.below()); @@ -230,7 +231,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate } } } - + private boolean growIteration(WorldGenLevel world, MutableBlockPos pos, Random random, List ends, int length) { BlockState state = world.getBlockState(pos); if (!state.is(this)) { @@ -264,7 +265,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate pos.move(dir); return true; } - + private Direction getSideDirection(WorldGenLevel world, BlockPos pos, BlockState iterState, Direction dir, Random random) { MutableBlockPos iterPos = pos.mutable(); Direction startDir = dir; @@ -272,7 +273,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate while (iterState.is(this) && startDir.getAxis().isVertical()) { startDir = iterState.getValue(FACING); if (lastDir == null) { - for (Direction side : BlocksHelper.HORIZONTAL) { + for (Direction side: BlocksHelper.HORIZONTAL) { BlockState sideState = world.getBlockState(iterPos.relative(side)); if (sideState.is(this)) { Direction sideDir = sideState.getValue(FACING); @@ -286,7 +287,7 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate iterPos.move(dir); iterState = world.getBlockState(iterPos); } - + Direction side = lastDir == null ? BlocksHelper.randomHorizontal(random) : lastDir.getClockWise(); if (side.getOpposite() == startDir) { side = side.getOpposite(); @@ -298,12 +299,12 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate public boolean isPathfindable(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, PathComputationType pathComputationType) { return false; } - + @Override public void entityInside(BlockState blockState, Level level, BlockPos blockPos, Entity entity) { entity.hurt(DamageSource.CACTUS, 1.0F); } - + private int getLength(BlockState state, ServerLevel world, BlockPos pos, int max) { int length = 0; Direction dir = state.getValue(FACING).getOpposite(); @@ -318,11 +319,11 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate break; } dir = state.getValue(FACING).getOpposite(); - length++; + length ++; } return length; } - + private int getHorizontal(BlockState state, WorldGenLevel world, BlockPos pos, int max) { int count = 0; Direction dir = state.getValue(FACING).getOpposite(); @@ -337,11 +338,11 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate if (dir.getStepY() != 0) { break; } - count++; + count ++; } return count; } - + private void mutateStem(BlockState state, WorldGenLevel world, BlockPos pos, int max) { Direction dir = state.getValue(FACING).getOpposite(); MutableBlockPos mut = new MutableBlockPos().set(pos); @@ -360,39 +361,39 @@ public class NeonCactusPlantBlock extends BaseBlockNotFull implements SimpleWate } } } - + static { BIG_SHAPES.put(Axis.X, Block.box(0, 2, 2, 16, 14, 14)); BIG_SHAPES.put(Axis.Y, Block.box(2, 0, 2, 14, 16, 14)); BIG_SHAPES.put(Axis.Z, Block.box(2, 2, 0, 14, 14, 16)); - + MEDIUM_SHAPES.put(Axis.X, Block.box(0, 3, 3, 16, 13, 13)); MEDIUM_SHAPES.put(Axis.Y, Block.box(3, 0, 3, 13, 16, 13)); MEDIUM_SHAPES.put(Axis.Z, Block.box(3, 3, 0, 13, 13, 16)); - + SMALL_SHAPES.put(Axis.X, Block.box(0, 4, 4, 16, 12, 12)); SMALL_SHAPES.put(Axis.Y, Block.box(4, 0, 4, 12, 16, 12)); SMALL_SHAPES.put(Axis.Z, Block.box(4, 4, 0, 12, 12, 16)); - - BIG_SHAPES_OPEN.put(Direction.UP, Block.box(2, 0, 2, 14, 14, 14)); - BIG_SHAPES_OPEN.put(Direction.DOWN, Block.box(2, 2, 2, 14, 16, 14)); + + BIG_SHAPES_OPEN.put(Direction.UP, Block.box(2, 0, 2, 14, 14, 14)); + BIG_SHAPES_OPEN.put(Direction.DOWN, Block.box(2, 2, 2, 14, 16, 14)); BIG_SHAPES_OPEN.put(Direction.NORTH, Block.box(2, 2, 2, 14, 14, 16)); BIG_SHAPES_OPEN.put(Direction.SOUTH, Block.box(2, 2, 0, 14, 14, 14)); - BIG_SHAPES_OPEN.put(Direction.WEST, Block.box(2, 2, 2, 16, 14, 14)); - BIG_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 2, 2, 14, 14, 14)); - - MEDIUM_SHAPES_OPEN.put(Direction.UP, Block.box(3, 0, 3, 13, 13, 13)); - MEDIUM_SHAPES_OPEN.put(Direction.DOWN, Block.box(3, 3, 3, 13, 16, 13)); + BIG_SHAPES_OPEN.put(Direction.WEST, Block.box(2, 2, 2, 16, 14, 14)); + BIG_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 2, 2, 14, 14, 14)); + + MEDIUM_SHAPES_OPEN.put(Direction.UP, Block.box(3, 0, 3, 13, 13, 13)); + MEDIUM_SHAPES_OPEN.put(Direction.DOWN, Block.box(3, 3, 3, 13, 16, 13)); MEDIUM_SHAPES_OPEN.put(Direction.NORTH, Block.box(3, 3, 3, 13, 13, 16)); MEDIUM_SHAPES_OPEN.put(Direction.SOUTH, Block.box(3, 3, 0, 13, 13, 13)); - MEDIUM_SHAPES_OPEN.put(Direction.WEST, Block.box(3, 3, 3, 16, 13, 13)); - MEDIUM_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 3, 3, 13, 13, 13)); - - SMALL_SHAPES_OPEN.put(Direction.UP, Block.box(4, 0, 4, 12, 12, 12)); - SMALL_SHAPES_OPEN.put(Direction.DOWN, Block.box(4, 4, 4, 12, 16, 12)); + MEDIUM_SHAPES_OPEN.put(Direction.WEST, Block.box(3, 3, 3, 16, 13, 13)); + MEDIUM_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 3, 3, 13, 13, 13)); + + SMALL_SHAPES_OPEN.put(Direction.UP, Block.box(4, 0, 4, 12, 12, 12)); + SMALL_SHAPES_OPEN.put(Direction.DOWN, Block.box(4, 4, 4, 12, 16, 12)); SMALL_SHAPES_OPEN.put(Direction.NORTH, Block.box(4, 4, 4, 12, 12, 16)); SMALL_SHAPES_OPEN.put(Direction.SOUTH, Block.box(4, 4, 0, 12, 12, 12)); - SMALL_SHAPES_OPEN.put(Direction.WEST, Block.box(4, 4, 4, 16, 12, 12)); - SMALL_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 4, 4, 12, 12, 12)); + SMALL_SHAPES_OPEN.put(Direction.WEST, Block.box(4, 4, 4, 16, 12, 12)); + SMALL_SHAPES_OPEN.put(Direction.EAST, Block.box(0, 4, 4, 12, 12, 12)); } } diff --git a/src/main/java/ru/betterend/blocks/PedestalVanilla.java b/src/main/java/ru/betterend/blocks/PedestalVanilla.java index bc729cc9..77eafd9d 100644 --- a/src/main/java/ru/betterend/blocks/PedestalVanilla.java +++ b/src/main/java/ru/betterend/blocks/PedestalVanilla.java @@ -1,13 +1,13 @@ package ru.betterend.blocks; +import java.util.HashMap; +import java.util.Map; + import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.block.Block; import ru.betterend.blocks.basis.PedestalBlock; -import java.util.HashMap; -import java.util.Map; - public class PedestalVanilla extends PedestalBlock { public PedestalVanilla(Block parent) { @@ -20,9 +20,8 @@ public class PedestalVanilla extends PedestalBlock { String name = blockId.getPath().replace("_block", ""); return new HashMap() { private static final long serialVersionUID = 1L; - { - put("%mod%", blockId.getNamespace()); + put("%mod%", blockId.getNamespace() ); put("%top%", "polished_" + name); put("%base%", "polished_" + name); put("%pillar%", name + "_pillar"); diff --git a/src/main/java/ru/betterend/blocks/PondAnemoneBlock.java b/src/main/java/ru/betterend/blocks/PondAnemoneBlock.java index 9ac012a2..8a485ed2 100644 --- a/src/main/java/ru/betterend/blocks/PondAnemoneBlock.java +++ b/src/main/java/ru/betterend/blocks/PondAnemoneBlock.java @@ -1,5 +1,7 @@ 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; @@ -17,11 +19,9 @@ 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 PondAnemoneBlock extends EndUnderwaterPlantBlock { private static final VoxelShape SHAPE = Block.box(2, 0, 2, 14, 14, 14); - + public PondAnemoneBlock() { super(FabricBlockSettings.of(Material.WATER_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -30,7 +30,7 @@ public class PondAnemoneBlock extends EndUnderwaterPlantBlock { .sound(SoundType.CORAL_BLOCK) .noCollission()); } - + @Override public BlockBehaviour.OffsetType getOffsetType() { return BlockBehaviour.OffsetType.NONE; @@ -43,12 +43,12 @@ public class PondAnemoneBlock extends EndUnderwaterPlantBlock { double z = pos.getZ() + random.nextDouble(); world.addParticle(ParticleTypes.BUBBLE, x, y, z, 0.0D, 0.0D, 0.0D); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; diff --git a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java index 580b129a..1f01907e 100644 --- a/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/PythadendronSaplingBlock.java @@ -17,7 +17,7 @@ public class PythadendronSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.PYTHADENDRON_TREE.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.CHORUS_NYLIUM); diff --git a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java index c43bc723..48b5e923 100644 --- a/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java +++ b/src/main/java/ru/betterend/blocks/RespawnObeliskBlock.java @@ -1,6 +1,11 @@ package ru.betterend.blocks; +import java.util.List; + +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; @@ -30,7 +35,6 @@ import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; @@ -43,30 +47,28 @@ import ru.betterend.particle.InfusionParticleType; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.List; - public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IRenderTyped { private static final VoxelShape VOXEL_SHAPE_BOTTOM = Block.box(1, 0, 1, 15, 16, 15); private static final VoxelShape VOXEL_SHAPE_MIDDLE_TOP = Block.box(2, 0, 2, 14, 16, 14); - + public static final EnumProperty SHAPE = BlockProperties.TRIPLE_SHAPE; - + public RespawnObeliskBlock() { super(FabricBlockSettings.copyOf(Blocks.END_STONE).luminance((state) -> { return (state.getValue(SHAPE) == TripleShape.BOTTOM) ? 0 : 15; })); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return (state.getValue(SHAPE) == TripleShape.BOTTOM) ? VOXEL_SHAPE_BOTTOM : VOXEL_SHAPE_MIDDLE_TOP; } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(SHAPE); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { for (int i = 0; i < 3; i++) { @@ -76,7 +78,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR } return true; } - + @Override public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { state = this.defaultBlockState(); @@ -84,7 +86,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR BlocksHelper.setWithUpdate(world, pos.above(), state.setValue(SHAPE, TripleShape.MIDDLE)); BlocksHelper.setWithUpdate(world, pos.above(2), state.setValue(SHAPE, TripleShape.TOP)); } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { TripleShape shape = state.getValue(SHAPE); @@ -113,7 +115,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR } } } - + @Override public void playerWillDestroy(Level world, BlockPos pos, BlockState state, Player player) { if (player.isCreative()) { @@ -127,7 +129,7 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR } super.playerWillDestroy(world, pos, state, player); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.getValue(SHAPE) == TripleShape.BOTTOM) { @@ -142,12 +144,12 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + @Override public BlockColor getProvider() { return ((IColorProvider) EndBlocks.AURORA_CRYSTAL).getProvider(); } - + @Override public ItemColor getItemProvider() { return (stack, tintIndex) -> { @@ -191,10 +193,10 @@ public class RespawnObeliskBlock extends BaseBlock implements IColorProvider, IR ((ServerLevel) world).sendParticles(particle, px, py1, pz, 20, 0.14, 0.5, 0.14, 0.1); ((ServerLevel) world).sendParticles(particle, px, py2, pz, 20, 0.14, 0.3, 0.14, 0.1); } - world.playSound(null, px, py, py, SoundEvents.RESPAWN_ANCHOR_SET_SPAWN, SoundSource.BLOCKS, 1F, 1F); - if (!player.isCreative()) { - itemStack.shrink(6); - } + world.playSound(null, px, py, py, SoundEvents.RESPAWN_ANCHOR_SET_SPAWN, SoundSource.BLOCKS, 1F, 1F); + if (!player.isCreative()) { + itemStack.shrink(6); + } } return player.isCreative() ? InteractionResult.PASS : InteractionResult.sidedSuccess(world.isClientSide); } diff --git a/src/main/java/ru/betterend/blocks/RunedFlavolite.java b/src/main/java/ru/betterend/blocks/RunedFlavolite.java index a7502123..9cae1cea 100644 --- a/src/main/java/ru/betterend/blocks/RunedFlavolite.java +++ b/src/main/java/ru/betterend/blocks/RunedFlavolite.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.List; + import com.google.common.collect.Lists; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Explosion; @@ -15,32 +18,30 @@ import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.List; - public class RunedFlavolite extends BaseBlock { public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE; public RunedFlavolite(boolean unbreakable) { super(FabricBlockSettings.copyOf(EndBlocks.FLAVOLITE.polished) - .strength( - unbreakable ? -1 : 1, - unbreakable ? Blocks.BEDROCK.getExplosionResistance() : Blocks.OBSIDIAN.getExplosionResistance() - ).luminance(state -> { - return state.getValue(ACTIVATED) ? 8 : 0; - })); + .strength( + unbreakable ? -1 : 1, + unbreakable ? Blocks.BEDROCK.getExplosionResistance() : Blocks.OBSIDIAN.getExplosionResistance() + ).luminance(state -> { + return state.getValue(ACTIVATED) ? 8 : 0; + })); this.registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(ACTIVATED); } - + @Override public boolean dropFromExplosion(Explosion explosion) { return !BlocksHelper.isInvulnerableUnsafe(this.defaultBlockState()); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (BlocksHelper.isInvulnerableUnsafe(this.defaultBlockState())) { diff --git a/src/main/java/ru/betterend/blocks/ShadowBerryBlock.java b/src/main/java/ru/betterend/blocks/ShadowBerryBlock.java index 41b72758..997a8f85 100644 --- a/src/main/java/ru/betterend/blocks/ShadowBerryBlock.java +++ b/src/main/java/ru/betterend/blocks/ShadowBerryBlock.java @@ -12,11 +12,11 @@ import ru.betterend.registry.EndItems; public class ShadowBerryBlock extends BaseCropBlock { private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 8, 15); - + public ShadowBerryBlock() { super(EndItems.SHADOW_BERRY_RAW, EndBlocks.SHADOW_GRASS); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return SHAPE; diff --git a/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java b/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java index 7149ec83..99740b04 100644 --- a/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java +++ b/src/main/java/ru/betterend/blocks/ShadowGrassBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; @@ -9,8 +11,6 @@ import net.minecraft.world.level.material.MaterialColor; import ru.betterend.blocks.basis.EndTerrainBlock; import ru.betterend.registry.EndParticles; -import java.util.Random; - public class ShadowGrassBlock extends EndTerrainBlock { public ShadowGrassBlock() { super(MaterialColor.COLOR_BLACK); diff --git a/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java b/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java index 9ecb7761..a769f1a3 100644 --- a/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java +++ b/src/main/java/ru/betterend/blocks/SilkMothHiveBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -34,28 +36,26 @@ import ru.betterend.entity.SilkMothEntity; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndItems; -import java.util.Random; - public class SilkMothHiveBlock extends BaseBlock { public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final IntegerProperty FULLNESS = EndBlockProperties.FULLNESS; - + public SilkMothHiveBlock() { super(FabricBlockSettings.of(Material.WOOD).breakByHand(true).hardness(0.5F).resistance(0.1F).sound(SoundType.WOOL).noOcclusion().randomTicks()); this.registerDefaultState(defaultBlockState().setValue(FULLNESS, 0)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(FACING, FULLNESS); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { Direction dir = ctx.getHorizontalDirection().getOpposite(); return this.defaultBlockState().setValue(FACING, dir); } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return BlocksHelper.rotateHorizontal(state, rotation, FACING); @@ -65,7 +65,7 @@ public class SilkMothHiveBlock extends BaseBlock { public BlockState mirror(BlockState state, Mirror mirror) { return BlocksHelper.mirrorHorizontal(state, mirror, FACING); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { Direction dir = state.getValue(FACING); @@ -73,9 +73,7 @@ public class SilkMothHiveBlock extends BaseBlock { if (!world.getBlockState(spawn).isAir()) { return; } - int count = world.getEntities(EndEntities.SILK_MOTH, new AABB(pos).inflate(16), (entity) -> { - return true; - }).size(); + int count = world.getEntities(EndEntities.SILK_MOTH, new AABB(pos).inflate(16), (entity) -> { return true; }).size(); if (count > 6) { return; } @@ -86,12 +84,12 @@ public class SilkMothHiveBlock extends BaseBlock { world.addFreshEntity(moth); world.playSound(null, pos, SoundEvents.BEEHIVE_EXIT, SoundSource.BLOCKS, 1, 1); } - + @Override 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.is(FabricToolTags.SHEARS) && state.getValue(FULLNESS) == 3) { + if (stack.getItem().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/SilkMothNestBlock.java b/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java index b21f8758..2d13649d 100644 --- a/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java +++ b/src/main/java/ru/betterend/blocks/SilkMothNestBlock.java @@ -1,5 +1,9 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; +import java.util.Random; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -44,27 +48,23 @@ import ru.betterend.entity.SilkMothEntity; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndItems; -import java.util.Collections; -import java.util.List; -import java.util.Random; - public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { public static final BooleanProperty ACTIVE = EndBlockProperties.ACTIVE; public static final DirectionProperty FACING = BlockStateProperties.HORIZONTAL_FACING; public static final IntegerProperty FULLNESS = EndBlockProperties.FULLNESS; private static final VoxelShape TOP = box(6, 0, 6, 10, 16, 10); private static final VoxelShape BOTTOM = box(0, 0, 0, 16, 16, 16); - + public SilkMothNestBlock() { super(FabricBlockSettings.of(Material.WOOL).hardness(0.5F).resistance(0.1F).sound(SoundType.WOOL).noOcclusion().randomTicks()); this.registerDefaultState(defaultBlockState().setValue(ACTIVE, true).setValue(FULLNESS, 0)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(ACTIVE, FACING, FULLNESS); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(ACTIVE) ? BOTTOM : TOP; @@ -74,13 +74,13 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { Direction dir = ctx.getHorizontalDirection().getOpposite(); return this.defaultBlockState().setValue(FACING, dir); } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (!state.getValue(ACTIVE)) { @@ -93,7 +93,7 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { } return state; } - + @Override public BlockState rotate(BlockState state, Rotation rotation) { return BlocksHelper.rotateHorizontal(state, rotation, FACING); @@ -103,12 +103,12 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { public BlockState mirror(BlockState state, Mirror mirror) { return BlocksHelper.mirrorHorizontal(state, mirror, FACING); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return state.getValue(ACTIVE) ? Collections.singletonList(new ItemStack(this)) : Collections.emptyList(); } - + @Override public void playerWillDestroy(Level world, BlockPos pos, BlockState state, Player player) { if (!state.getValue(ACTIVE) && player.isCreative()) { @@ -120,7 +120,7 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { } super.playerWillDestroy(world, pos, state, player); } - + @Override public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { if (!state.getValue(ACTIVE)) { @@ -134,9 +134,7 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { if (!world.getBlockState(spawn).isAir()) { return; } - int count = world.getEntities(EndEntities.SILK_MOTH, new AABB(pos).inflate(16), (entity) -> { - return true; - }).size(); + int count = world.getEntities(EndEntities.SILK_MOTH, new AABB(pos).inflate(16), (entity) -> { return true; }).size(); if (count > 6) { return; } @@ -147,12 +145,12 @@ public class SilkMothNestBlock extends BaseBlock implements IRenderTyped { world.addFreshEntity(moth); world.playSound(null, pos, SoundEvents.BEEHIVE_EXIT, SoundSource.BLOCKS, 1, 1); } - + @Override 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.is(FabricToolTags.SHEARS) && state.getValue(ACTIVE) && state.getValue(FULLNESS) == 3) { + if (stack.getItem().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 8a82e638..2bc6059b 100644 --- a/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallAmaranitaBlock.java @@ -1,5 +1,7 @@ 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; @@ -7,7 +9,6 @@ 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; @@ -16,21 +17,19 @@ 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); - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.SANGNUM) || state.is(EndBlocks.MOSSY_OBSIDIAN) || state.is(EndBlocks.MOSSY_DRAGON_BONE); } - + @Override 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(new FeaturePlaceContext<>(world, null, random, bigPos, null))) { + if (EndFeatures.GIGANTIC_AMARANITA.getFeature().place(world, null, random, bigPos, null)) { replaceMushroom(world, bigPos); replaceMushroom(world, bigPos.south()); replaceMushroom(world, bigPos.east()); @@ -38,15 +37,15 @@ public class SmallAmaranitaBlock extends EndPlantBlock { } return; } - EndFeatures.LARGE_AMARANITA.getFeature().place(new FeaturePlaceContext<>(world, null, random, pos, null)); + EndFeatures.LARGE_AMARANITA.getFeature().place(world, null, random, pos, null); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { Vec3 vec3d = state.getOffset(view, pos); return SHAPE.move(vec3d.x, vec3d.y, vec3d.z); } - + private BlockPos growBig(ServerLevel world, BlockPos pos) { for (int x = -1; x < 2; x++) { for (int z = -1; z < 2; z++) { @@ -58,20 +57,20 @@ public class SmallAmaranitaBlock extends EndPlantBlock { } return null; } - + private boolean checkFrame(ServerLevel world, BlockPos pos) { return world.getBlockState(pos).is(this) && world.getBlockState(pos.south()).is(this) && world.getBlockState(pos.east()).is(this) && world.getBlockState(pos.south().east()).is(this); } - + private void replaceMushroom(ServerLevel world, BlockPos pos) { if (world.getBlockState(pos).is(this)) { BlocksHelper.setWithUpdate(world, pos, Blocks.AIR); } } - + @Override public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { return random.nextInt(8) == 0; diff --git a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java index a9f2a3cf..60aac3b5 100644 --- a/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java +++ b/src/main/java/ru/betterend/blocks/SmallJellyshroomBlock.java @@ -1,7 +1,12 @@ package ru.betterend.blocks; +import java.util.EnumMap; +import java.util.List; +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.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -18,7 +23,6 @@ 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; @@ -32,13 +36,9 @@ import ru.bclib.interfaces.IRenderTyped; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndFeatures; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; - public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderTyped, BonemealableBlock { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); - + public SmallJellyshroomBlock() { super(FabricBlockSettings.of(Material.PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -52,18 +52,18 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderT public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.getItem().is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { return Lists.newArrayList(new ItemStack(this)); } else { return Lists.newArrayList(); } } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { Direction direction = state.getValue(FACING); @@ -71,12 +71,12 @@ public class SmallJellyshroomBlock extends BaseAttachedBlock implements IRenderT BlockState support = world.getBlockState(blockPos); return canSupportCenter(world, blockPos, direction) && support.canOcclude() && support.getLightEmission() == 0; } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + static { BOUNDING_SHAPES.put(Direction.UP, Block.box(3, 0, 3, 13, 16, 13)); BOUNDING_SHAPES.put(Direction.DOWN, Block.box(3, 0, 3, 13, 16, 13)); @@ -99,6 +99,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(new FeaturePlaceContext<>(world, null, random, pos, null)); + EndFeatures.JELLYSHROOM.getFeature().place(world, null, random, pos, null); } } diff --git a/src/main/java/ru/betterend/blocks/SmaragdantCrystalBlock.java b/src/main/java/ru/betterend/blocks/SmaragdantCrystalBlock.java index af2a1808..c99d5e79 100644 --- a/src/main/java/ru/betterend/blocks/SmaragdantCrystalBlock.java +++ b/src/main/java/ru/betterend/blocks/SmaragdantCrystalBlock.java @@ -4,9 +4,9 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.material.Material; -import ru.betterend.blocks.basis.LitPillarBlock; +import ru.bclib.blocks.BaseRotatedPillarBlock; -public class SmaragdantCrystalBlock extends LitPillarBlock { +public class SmaragdantCrystalBlock extends BaseRotatedPillarBlock { public SmaragdantCrystalBlock() { super(FabricBlockSettings.of(Material.GLASS) .breakByTool(FabricToolTags.PICKAXES) @@ -14,6 +14,6 @@ public class SmaragdantCrystalBlock extends LitPillarBlock { .hardness(1F) .resistance(1F) .noOcclusion() - .sound(SoundType.AMETHYST)); + .sound(SoundType.GLASS)); } } diff --git a/src/main/java/ru/betterend/blocks/SmaragdantCrystalShardBlock.java b/src/main/java/ru/betterend/blocks/SmaragdantCrystalShardBlock.java index e80fe955..a4bb26d2 100644 --- a/src/main/java/ru/betterend/blocks/SmaragdantCrystalShardBlock.java +++ b/src/main/java/ru/betterend/blocks/SmaragdantCrystalShardBlock.java @@ -1,6 +1,9 @@ package ru.betterend.blocks; +import java.util.EnumMap; + import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -29,34 +32,32 @@ import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; -import java.util.EnumMap; - @SuppressWarnings("deprecation") public class SmaragdantCrystalShardBlock extends BaseAttachedBlock implements IRenderTyped, SimpleWaterloggedBlock, LiquidBlockContainer { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - + public SmaragdantCrystalShardBlock() { super(FabricBlockSettings.of(Material.STONE) .materialColor(MaterialColor.COLOR_GREEN) .breakByTool(FabricToolTags.PICKAXES) .luminance(15) - .sound(SoundType.AMETHYST_CLUSTER) + .sound(SoundType.GLASS) .requiresCorrectToolForDrops() .noCollission()); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { super.createBlockStateDefinition(stateManager); stateManager.add(WATERLOGGED); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return !state.getValue(WATERLOGGED); @@ -66,7 +67,7 @@ public class SmaragdantCrystalShardBlock extends BaseAttachedBlock implements IR public boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { return !state.getValue(WATERLOGGED); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { BlockState state = super.getStateForPlacement(ctx); @@ -78,24 +79,24 @@ public class SmaragdantCrystalShardBlock extends BaseAttachedBlock implements IR } return null; } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { Direction direction = state.getValue(FACING); BlockPos blockPos = pos.relative(direction.getOpposite()); return world.getBlockState(blockPos).isFaceSturdy(world, blockPos, direction); } - + static { BOUNDING_SHAPES.put(Direction.UP, Shapes.box(0.125, 0.0, 0.125, 0.875F, 0.875F, 0.875F)); BOUNDING_SHAPES.put(Direction.DOWN, Shapes.box(0.125, 0.125, 0.125, 0.875F, 1.0, 0.875F)); diff --git a/src/main/java/ru/betterend/blocks/SulphurCrystalBlock.java b/src/main/java/ru/betterend/blocks/SulphurCrystalBlock.java index e2534aaa..7d6c0727 100644 --- a/src/main/java/ru/betterend/blocks/SulphurCrystalBlock.java +++ b/src/main/java/ru/betterend/blocks/SulphurCrystalBlock.java @@ -1,7 +1,12 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.EnumMap; +import java.util.List; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -36,16 +41,12 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.Collections; -import java.util.EnumMap; -import java.util.List; - @SuppressWarnings("deprecation") public class SulphurCrystalBlock extends BaseAttachedBlock implements IRenderTyped, SimpleWaterloggedBlock, LiquidBlockContainer { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); public static final IntegerProperty AGE = IntegerProperty.create("age", 0, 2); public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - + public SulphurCrystalBlock() { super(FabricBlockSettings.of(Material.STONE) .materialColor(MaterialColor.COLOR_YELLOW) @@ -54,23 +55,23 @@ public class SulphurCrystalBlock extends BaseAttachedBlock implements IRenderTyp .requiresCorrectToolForDrops() .noCollission()); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { super.createBlockStateDefinition(stateManager); stateManager.add(AGE, WATERLOGGED); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { return state.getValue(AGE) < 2 ? Collections.emptyList() : Lists.newArrayList(new ItemStack(EndItems.CRYSTALLINE_SULPHUR, MHelper.randRange(1, 3, MHelper.RANDOM))); } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return !state.getValue(WATERLOGGED); @@ -80,7 +81,7 @@ public class SulphurCrystalBlock extends BaseAttachedBlock implements IRenderTyp public boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { return !state.getValue(WATERLOGGED); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { BlockState state = super.getStateForPlacement(ctx); @@ -92,24 +93,24 @@ public class SulphurCrystalBlock extends BaseAttachedBlock implements IRenderTyp } return null; } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { Direction direction = state.getValue(FACING); BlockPos blockPos = pos.relative(direction.getOpposite()); return world.getBlockState(blockPos).is(EndBlocks.BRIMSTONE); } - + static { BOUNDING_SHAPES.put(Direction.UP, Shapes.box(0.125, 0.0, 0.125, 0.875F, 0.5, 0.875F)); BOUNDING_SHAPES.put(Direction.DOWN, Shapes.box(0.125, 0.5, 0.125, 0.875F, 1.0, 0.875F)); diff --git a/src/main/java/ru/betterend/blocks/TenaneaFlowersBlock.java b/src/main/java/ru/betterend/blocks/TenaneaFlowersBlock.java index c1b32bf0..775878b6 100644 --- a/src/main/java/ru/betterend/blocks/TenaneaFlowersBlock.java +++ b/src/main/java/ru/betterend/blocks/TenaneaFlowersBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.color.block.BlockColor; @@ -16,11 +18,9 @@ import ru.bclib.util.ColorUtil; import ru.bclib.util.MHelper; import ru.betterend.registry.EndParticles; -import java.util.Random; - public class TenaneaFlowersBlock extends BaseVineBlock implements IColorProvider { public static final Vec3i[] COLORS; - + public TenaneaFlowersBlock() { super(15); } @@ -30,23 +30,22 @@ public class TenaneaFlowersBlock extends BaseVineBlock implements IColorProvider return (state, world, pos, tintIndex) -> { if (pos == null) { pos = BlockPos.ZERO; - } - ; + }; long i = (MHelper.getRandom(pos.getX(), pos.getZ()) & 63) + pos.getY(); double delta = i * 0.1; int index = MHelper.floor(delta); int index2 = (index + 1) & 3; delta -= index; index &= 3; - + Vec3i color1 = COLORS[index]; Vec3i color2 = COLORS[index2]; - + int r = MHelper.floor(Mth.lerp(delta, color1.getX(), color2.getX())); int g = MHelper.floor(Mth.lerp(delta, color1.getY(), color2.getY())); int b = MHelper.floor(Mth.lerp(delta, color1.getZ(), color2.getZ())); float[] hsb = ColorUtil.RGBtoHSB(r, g, b, new float[3]); - + return ColorUtil.HSBtoRGB(hsb[0], MHelper.max(0.5F, hsb[1]), hsb[2]); }; } @@ -55,12 +54,12 @@ public class TenaneaFlowersBlock extends BaseVineBlock implements IColorProvider public ItemColor getItemProvider() { return (stack, tintIndex) -> ColorUtil.color(255, 255, 255); } - + @Override public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { return false; } - + @Environment(EnvType.CLIENT) public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { super.animateTick(state, world, pos, random); @@ -71,13 +70,13 @@ public class TenaneaFlowersBlock extends BaseVineBlock implements IColorProvider world.addParticle(EndParticles.TENANEA_PETAL, x, y, z, 0, 0, 0); } } - + static { - COLORS = new Vec3i[]{ - new Vec3i(250, 111, 222), - new Vec3i(167, 89, 255), - new Vec3i(120, 207, 239), - new Vec3i(255, 87, 182) + COLORS = new Vec3i[] { + new Vec3i(250, 111, 222), + new Vec3i(167, 89, 255), + new Vec3i(120, 207, 239), + new Vec3i(255, 87, 182) }; } } diff --git a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java index 5a91977e..9928dcc6 100644 --- a/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/TenaneaSaplingBlock.java @@ -17,7 +17,7 @@ public class TenaneaSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.TENANEA.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.PINK_MOSS); diff --git a/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java b/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java index 3f1ba358..090b3b15 100644 --- a/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/TerrainPlantBlock.java @@ -6,15 +6,15 @@ import ru.betterend.blocks.basis.EndPlantBlock; public class TerrainPlantBlock extends EndPlantBlock { private final Block[] ground; - + public TerrainPlantBlock(Block... ground) { super(true); this.ground = ground; } - + @Override protected boolean isTerrain(BlockState state) { - for (Block block : ground) { + for (Block block: ground) { if (state.is(block)) { return true; } diff --git a/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossBlock.java b/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossBlock.java index e0977aa2..9fc3ffa2 100644 --- a/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossBlock.java +++ b/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; @@ -12,36 +14,34 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class TwistedUmbrellaMossBlock extends EndPlantBlock { public TwistedUmbrellaMossBlock() { super(11); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS) || state.is(EndBlocks.END_MYCELIUM) || state.is(EndBlocks.JUNGLE_MOSS); } - + @Environment(EnvType.CLIENT) - public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { - return true; - } + public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { + return true; + } - @Environment(EnvType.CLIENT) - public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { - return 1F; - } - - @Override + @Environment(EnvType.CLIENT) + public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { + return 1F; + } + + @Override public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { return world.isEmptyBlock(pos.above()); } - - @Override + + @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { - int rot = world.random.nextInt(4); + int rot = world.random.nextInt(4); BlockState bs = EndBlocks.TWISTED_UMBRELLA_MOSS_TALL.defaultBlockState().setValue(BaseDoublePlantBlock.ROTATION, rot); BlocksHelper.setWithoutUpdate(world, pos, bs); BlocksHelper.setWithoutUpdate(world, pos.above(), bs.setValue(BaseDoublePlantBlock.TOP, true)); diff --git a/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossTallBlock.java b/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossTallBlock.java index 07bff735..b33c8235 100644 --- a/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossTallBlock.java +++ b/src/main/java/ru/betterend/blocks/TwistedUmbrellaMossTallBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; @@ -8,19 +10,17 @@ import net.minecraft.world.level.block.state.BlockState; import ru.bclib.blocks.BaseDoublePlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class TwistedUmbrellaMossTallBlock extends BaseDoublePlantBlock { public TwistedUmbrellaMossTallBlock() { super(12); } - + @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { ItemEntity item = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(EndBlocks.TWISTED_UMBRELLA_MOSS)); world.addFreshEntity(item); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS) || state.is(EndBlocks.END_MYCELIUM) || state.is(EndBlocks.JUNGLE_MOSS); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaMossBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaMossBlock.java index 08ad3fea..44525319 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaMossBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaMossBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.core.BlockPos; @@ -12,36 +14,34 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class UmbrellaMossBlock extends EndPlantBlock { public UmbrellaMossBlock() { super(11); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS) || state.is(EndBlocks.END_MYCELIUM) || state.is(EndBlocks.JUNGLE_MOSS); } - + @Environment(EnvType.CLIENT) - public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { - return true; - } + public boolean hasEmissiveLighting(BlockGetter world, BlockPos pos) { + return true; + } - @Environment(EnvType.CLIENT) - public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { - return 1F; - } - - @Override + @Environment(EnvType.CLIENT) + public float getAmbientOcclusionLightLevel(BlockGetter world, BlockPos pos) { + return 1F; + } + + @Override public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { return world.isEmptyBlock(pos.above()); } - - @Override + + @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { - int rot = world.random.nextInt(4); + int rot = world.random.nextInt(4); BlockState bs = EndBlocks.UMBRELLA_MOSS_TALL.defaultBlockState().setValue(BaseDoublePlantBlock.ROTATION, rot); BlocksHelper.setWithoutUpdate(world, pos, bs); BlocksHelper.setWithoutUpdate(world, pos.above(), bs.setValue(BaseDoublePlantBlock.TOP, true)); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaMossTallBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaMossTallBlock.java index e89bc3c0..18d15ee2 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaMossTallBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaMossTallBlock.java @@ -1,5 +1,7 @@ package ru.betterend.blocks; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.item.ItemEntity; @@ -8,19 +10,17 @@ import net.minecraft.world.level.block.state.BlockState; import ru.bclib.blocks.BaseDoublePlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class UmbrellaMossTallBlock extends BaseDoublePlantBlock { public UmbrellaMossTallBlock() { super(12); } - + @Override public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { ItemEntity item = new ItemEntity(world, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, new ItemStack(EndBlocks.UMBRELLA_MOSS)); world.addFreshEntity(item); } - + @Override protected boolean isTerrain(BlockState state) { return state.is(EndBlocks.END_MOSS) || state.is(EndBlocks.END_MYCELIUM) || state.is(EndBlocks.JUNGLE_MOSS); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java index 0ba01d1f..a8d3dcb0 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterBlock.java @@ -25,19 +25,19 @@ import ru.betterend.registry.EndItems; public class UmbrellaTreeClusterBlock extends BaseBlock { public static final BooleanProperty NATURAL = BlockProperties.NATURAL; - + public UmbrellaTreeClusterBlock() { super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .luminance(15)); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(NATURAL); } - + @Override public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { ItemStack stack = player.getMainHandItem(); diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java index 0c5abc6e..d6569aa3 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeClusterEmptyBlock.java @@ -1,5 +1,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; @@ -13,23 +15,21 @@ import ru.bclib.blocks.BaseBlock; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class UmbrellaTreeClusterEmptyBlock extends BaseBlock { public static final BooleanProperty NATURAL = EndBlockProperties.NATURAL; - + public UmbrellaTreeClusterEmptyBlock() { super(FabricBlockSettings.copyOf(Blocks.NETHER_WART_BLOCK) .materialColor(MaterialColor.COLOR_PURPLE) .randomTicks()); registerDefaultState(stateDefinition.any().setValue(NATURAL, false)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(NATURAL); } - + @Override public void tick(BlockState state, ServerLevel world, BlockPos pos, Random random) { if (state.getValue(NATURAL) && random.nextInt(16) == 0) { diff --git a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java index 1f2e0683..67ad0a06 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeMembraneBlock.java @@ -1,6 +1,10 @@ package ru.betterend.blocks; +import java.util.Collections; +import java.util.List; + 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; @@ -25,17 +29,14 @@ import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Collections; -import java.util.List; - public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderTyped, BlockModelProvider { public static final IntegerProperty COLOR = EndBlockProperties.COLOR; private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(0); - + public UmbrellaTreeMembraneBlock() { super(FabricBlockSettings.copyOf(Blocks.SLIME_BLOCK)); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { double px = ctx.getClickedPos().getX() * 0.1; @@ -43,17 +44,17 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType double pz = ctx.getClickedPos().getZ() * 0.1; return this.defaultBlockState().setValue(COLOR, MHelper.floor(NOISE.eval(px, py, pz) * 3.5 + 4)); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(COLOR); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { if (state.getValue(COLOR) > 0) { @@ -68,7 +69,7 @@ public class UmbrellaTreeMembraneBlock extends SlimeBlock implements IRenderType public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) { return state.getValue(COLOR) > 0; } - + @Environment(EnvType.CLIENT) public boolean skipRendering(BlockState state, BlockState stateFrom, Direction direction) { if (state.getValue(COLOR) > 0) { @@ -80,7 +81,6 @@ 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/UmbrellaTreeSaplingBlock.java b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java index 46eebfb8..652b0b83 100644 --- a/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java +++ b/src/main/java/ru/betterend/blocks/UmbrellaTreeSaplingBlock.java @@ -18,12 +18,12 @@ public class UmbrellaTreeSaplingBlock extends FeatureSaplingBlock { protected Feature getFeature() { return EndFeatures.UMBRELLA_TREE.getFeature(); } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { return world.getBlockState(pos.below()).is(EndBlocks.JUNGLE_MOSS); } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.TRANSLUCENT; diff --git a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java index 174a7739..e58333b7 100644 --- a/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java +++ b/src/main/java/ru/betterend/blocks/VentBubbleColumnBlock.java @@ -1,5 +1,7 @@ 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; @@ -7,12 +9,9 @@ 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; @@ -33,20 +32,17 @@ import net.minecraft.world.phys.shapes.VoxelShape; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Optional; -import java.util.Random; - public class VentBubbleColumnBlock extends Block implements BucketPickup, LiquidBlockContainer { public VentBubbleColumnBlock() { super(FabricBlockSettings.of(Material.BUBBLE_COLUMN).noOcclusion().noCollission().noDrops()); } @Override - public ItemStack pickupBlock(LevelAccessor world, BlockPos pos, BlockState state) { + public Fluid takeLiquid(LevelAccessor world, BlockPos pos, BlockState state) { world.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); - return new ItemStack(Items.WATER_BUCKET); + return Fluids.WATER; } - + @Override public RenderShape getRenderShape(BlockState state) { return RenderShape.INVISIBLE; @@ -109,7 +105,7 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid entity.onInsideBubbleColumn(false); } } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return false; @@ -119,15 +115,9 @@ public class VentBubbleColumnBlock extends Block implements BucketPickup, Liquid public boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { return false; } - + @Override 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/EndAnvilBlock.java b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java index 406d26dd..893bbf2f 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndAnvilBlock.java @@ -1,5 +1,8 @@ package ru.betterend.blocks.basis; +import java.util.List; +import java.util.Objects; + import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -14,16 +17,13 @@ import ru.bclib.blocks.BaseAnvilBlock; import ru.betterend.blocks.complex.MetalMaterial; import ru.betterend.item.EndAnvilItem; -import java.util.List; -import java.util.Objects; - public class EndAnvilBlock extends BaseAnvilBlock { protected final int level; protected IntegerProperty durability; protected MetalMaterial metalMaterial; protected int maxDurability; - + public EndAnvilBlock(MaterialColor color, int level) { super(color); this.level = level; @@ -81,7 +81,7 @@ public class EndAnvilBlock extends BaseAnvilBlock { super.createBlockStateDefinition(builder); builder.add(getDurability()); } - + public int getCraftingLevel() { return level; } @@ -109,8 +109,7 @@ public class EndAnvilBlock extends BaseAnvilBlock { if (destructionProperty.getPossibleValues().contains(destruction)) { try { return fallingState.setValue(destructionProperty, destruction); - } - catch (Exception ex) { + } catch (Exception ex) { return null; } } diff --git a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java index f5509ed6..f66fa6dc 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndLanternBlock.java @@ -1,7 +1,7 @@ package ru.betterend.blocks.basis; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; +import java.util.Map; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.resources.model.UnbakedModel; import net.minecraft.core.BlockPos; @@ -26,26 +26,24 @@ import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; -import java.util.Map; - @SuppressWarnings("deprecation") public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterloggedBlock, LiquidBlockContainer { public static final BooleanProperty IS_FLOOR = BlockProperties.IS_FLOOR; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; - + public EndLanternBlock(Block source) { this(FabricBlockSettings.copyOf(source).luminance(15).noOcclusion()); } - + public EndLanternBlock(Properties settings) { super(settings.noOcclusion()); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(IS_FLOOR, WATERLOGGED); } - + @Override public BlockState getStateForPlacement(BlockPlaceContext ctx) { LevelReader worldView = ctx.getLevel(); @@ -86,7 +84,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg } } } - + @Override public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { if (state.getValue(IS_FLOOR)) { @@ -96,7 +94,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg return canSupportCenter(world, pos.above(), Direction.DOWN); } } - + @Override public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { Boolean water = state.getValue(WATERLOGGED); @@ -110,7 +108,7 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg return state; } } - + @Override public boolean canPlaceLiquid(BlockGetter world, BlockPos pos, BlockState state, Fluid fluid) { return false; @@ -120,14 +118,13 @@ public class EndLanternBlock extends BaseBlockNotFull implements SimpleWaterlogg public boolean placeLiquid(LevelAccessor world, BlockPos pos, BlockState state, FluidState fluidState) { return false; } - + @Override public FluidState getFluidState(BlockState state) { return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : Fluids.EMPTY.defaultFluidState(); } @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/EndPlantWithAgeBlock.java b/src/main/java/ru/betterend/blocks/basis/EndPlantWithAgeBlock.java index 8956b9de..c3d2045b 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndPlantWithAgeBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndPlantWithAgeBlock.java @@ -6,8 +6,7 @@ import ru.bclib.blocks.BasePlantWithAgeBlock; public abstract class EndPlantWithAgeBlock extends BasePlantWithAgeBlock { - public EndPlantWithAgeBlock() { - } + public EndPlantWithAgeBlock() {} public EndPlantWithAgeBlock(Properties settings) { super(settings); diff --git a/src/main/java/ru/betterend/blocks/basis/EndUnderwaterPlantBlock.java b/src/main/java/ru/betterend/blocks/basis/EndUnderwaterPlantBlock.java index de41a686..747095d2 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndUnderwaterPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndUnderwaterPlantBlock.java @@ -6,8 +6,7 @@ import ru.bclib.blocks.UnderwaterPlantBlock; public class EndUnderwaterPlantBlock extends UnderwaterPlantBlock { - public EndUnderwaterPlantBlock() { - } + public EndUnderwaterPlantBlock() {} public EndUnderwaterPlantBlock(int light) { super(light); diff --git a/src/main/java/ru/betterend/blocks/basis/EndUnderwaterWallPlantBlock.java b/src/main/java/ru/betterend/blocks/basis/EndUnderwaterWallPlantBlock.java index 032eea09..59bb034d 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndUnderwaterWallPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndUnderwaterWallPlantBlock.java @@ -6,8 +6,7 @@ import ru.bclib.blocks.BaseUnderwaterWallPlantBlock; public class EndUnderwaterWallPlantBlock extends BaseUnderwaterWallPlantBlock { - public EndUnderwaterWallPlantBlock() { - } + public EndUnderwaterWallPlantBlock() {} public EndUnderwaterWallPlantBlock(int light) { super(light); diff --git a/src/main/java/ru/betterend/blocks/basis/EndWallPlantBlock.java b/src/main/java/ru/betterend/blocks/basis/EndWallPlantBlock.java index 9b7f6a8e..35288cbf 100644 --- a/src/main/java/ru/betterend/blocks/basis/EndWallPlantBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/EndWallPlantBlock.java @@ -5,8 +5,7 @@ import ru.bclib.api.TagAPI; import ru.bclib.blocks.BaseWallPlantBlock; public class EndWallPlantBlock extends BaseWallPlantBlock { - public EndWallPlantBlock() { - } + public EndWallPlantBlock() {} public EndWallPlantBlock(int light) { super(light); diff --git a/src/main/java/ru/betterend/blocks/basis/FurBlock.java b/src/main/java/ru/betterend/blocks/basis/FurBlock.java index 96e2ce4a..0514f5b5 100644 --- a/src/main/java/ru/betterend/blocks/basis/FurBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/FurBlock.java @@ -1,7 +1,11 @@ package ru.betterend.blocks.basis; +import java.util.EnumMap; +import java.util.List; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.minecraft.core.BlockPos; @@ -24,14 +28,11 @@ import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.interfaces.IRenderTyped; import ru.bclib.util.MHelper; -import java.util.EnumMap; -import java.util.List; - public class FurBlock extends BaseAttachedBlock implements IRenderTyped { private static final EnumMap BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); private final ItemLike drop; private final int dropChance; - + public FurBlock(ItemLike drop, int light, int dropChance, boolean wet) { super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -42,7 +43,7 @@ public class FurBlock extends BaseAttachedBlock implements IRenderTyped { this.drop = drop; this.dropChance = dropChance; } - + public FurBlock(ItemLike drop, int dropChance) { super(FabricBlockSettings.of(Material.REPLACEABLE_PLANT) .breakByTool(FabricToolTags.SHEARS) @@ -57,11 +58,11 @@ public class FurBlock extends BaseAttachedBlock implements IRenderTyped { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return BOUNDING_SHAPES.get(state.getValue(FACING)); } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { ItemStack tool = builder.getParameter(LootContextParams.TOOL); - if (tool != null && tool.is(FabricToolTags.SHEARS) || EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) > 0) { + if (tool != null && tool.getItem().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) { @@ -71,12 +72,12 @@ public class FurBlock extends BaseAttachedBlock implements IRenderTyped { return Lists.newArrayList(); } } - + @Override public BCLRenderLayer getRenderLayer() { return BCLRenderLayer.CUTOUT; } - + static { BOUNDING_SHAPES.put(Direction.UP, Shapes.box(0.0, 0.0, 0.0, 1.0, 0.5, 1.0)); BOUNDING_SHAPES.put(Direction.DOWN, Shapes.box(0.0, 0.5, 0.0, 1.0, 1.0, 1.0)); diff --git a/src/main/java/ru/betterend/blocks/basis/LitBaseBlock.java b/src/main/java/ru/betterend/blocks/basis/LitBaseBlock.java deleted file mode 100644 index 19e906d9..00000000 --- a/src/main/java/ru/betterend/blocks/basis/LitBaseBlock.java +++ /dev/null @@ -1,24 +0,0 @@ -package ru.betterend.blocks.basis; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.client.renderer.block.model.BlockModel; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.level.block.state.BlockState; -import org.jetbrains.annotations.Nullable; -import ru.bclib.blocks.BaseBlock; - -public class LitBaseBlock extends BaseBlock { - private static final String PATTERN = "{\"parent\":\"betterend:block/cube_noshade\",\"textures\":{\"texture\":\"betterend:block/name\"}}"; - - public LitBaseBlock(Properties settings) { - super(settings); - } - - @Nullable - @Override - @Environment(EnvType.CLIENT) - public BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { - return BlockModel.fromString(PATTERN.replace("name", resourceLocation.getPath())); - } -} diff --git a/src/main/java/ru/betterend/blocks/basis/LitPillarBlock.java b/src/main/java/ru/betterend/blocks/basis/LitPillarBlock.java deleted file mode 100644 index 214d01cc..00000000 --- a/src/main/java/ru/betterend/blocks/basis/LitPillarBlock.java +++ /dev/null @@ -1,23 +0,0 @@ -package ru.betterend.blocks.basis; - -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.resources.ResourceLocation; -import ru.bclib.blocks.BaseRotatedPillarBlock; - -import java.util.Optional; - -public class LitPillarBlock extends BaseRotatedPillarBlock { - private static final String PATTERN = "{\"parent\":\"betterend:block/pillar_noshade\",\"textures\":{\"end\":\"betterend:block/name_top\",\"side\":\"betterend:block/name_side\"}}"; - - public LitPillarBlock(Properties settings) { - super(settings); - } - - @Override - @Environment(EnvType.CLIENT) - protected Optional createBlockPattern(ResourceLocation blockId) { - String name = blockId.getPath(); - return Optional.of(PATTERN.replace("name", name)); - } -} diff --git a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java index fe4990cc..886e8435 100644 --- a/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/PedestalBlock.java @@ -1,8 +1,15 @@ package ru.betterend.blocks.basis; +import java.awt.Point; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +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; @@ -23,8 +30,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; @@ -35,7 +40,6 @@ 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 org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BlockProperties; import ru.bclib.client.models.ModelsHelper; @@ -48,72 +52,59 @@ import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; import ru.betterend.rituals.InfusionRitual; -import java.awt.Point; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.ToIntFunction; - @SuppressWarnings({"deprecation"}) public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { public final static EnumProperty STATE = EndBlockProperties.PEDESTAL_STATE; public static final BooleanProperty HAS_ITEM = EndBlockProperties.HAS_ITEM; public static final BooleanProperty HAS_LIGHT = BlockProperties.HAS_LIGHT; - + private static final VoxelShape SHAPE_DEFAULT; private static final VoxelShape SHAPE_COLUMN; private static final VoxelShape SHAPE_PILLAR; private static final VoxelShape SHAPE_PEDESTAL_TOP; private static final VoxelShape SHAPE_COLUMN_TOP; private static final VoxelShape SHAPE_BOTTOM; - + /** + * * Register new Pedestal block with Better End mod id. - * - * @param name pedestal name + * + * @param name pedestal name * @param source source block * @return new Pedestal block with Better End id. */ public static Block registerPedestal(String name, Block source) { return EndBlocks.registerBlock(name, new PedestalBlock(source)); } - + /** + * * Register new Pedestal block with specified mod id. - * - * @param id pedestal id + * + * @param id pedestal id * @param source source block * @return new Pedestal block with specified id. */ public static Block registerPedestal(ResourceLocation id, Block source) { return EndBlocks.registerBlock(id, new PedestalBlock(source)); } - + protected final Block parent; protected float height = 1.0F; - + public PedestalBlock(Block parent) { - super(FabricBlockSettings.copyOf(parent).luminance(getLuminance(parent.defaultBlockState()))); + 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; } - - private static ToIntFunction getLuminance(BlockState parent) { - final int light = parent.getLightEmission(); - if (light > 0) { - return state -> light; - } - return state -> state.getValue(HAS_LIGHT) ? 12 : 0; - } - + public float getHeight(BlockState state) { if (state.getBlock() instanceof PedestalBlock && state.getValue(STATE) == PedestalState.PEDESTAL_TOP) { return this.height - 0.2F; } return this.height; } - + @Override @Deprecated public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { @@ -130,8 +121,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { pedestal.setItem(0, itemStack); checkRitual(world, pos); return InteractionResult.SUCCESS; - } - else { + } else { ItemStack itemStack = pedestal.getItem(0); if (player.addItem(itemStack)) { pedestal.removeItemNoUpdate(0); @@ -147,7 +137,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { @Override public void destroy(LevelAccessor levelAccessor, BlockPos blockPos, BlockState blockState) { MutableBlockPos posMutable = new MutableBlockPos(); - for (Point point : InfusionRitual.getMap()) { + for (Point point: InfusionRitual.getMap()) { posMutable.set(blockPos).move(point.x, 0, point.y); BlockState state = levelAccessor.getBlockState(posMutable); if (state.getBlock() instanceof InfusionPedestal) { @@ -165,7 +155,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { public void checkRitual(Level world, BlockPos pos) { MutableBlockPos posMutable = new MutableBlockPos(); - for (Point point : InfusionRitual.getMap()) { + for (Point point: InfusionRitual.getMap()) { posMutable.set(pos).move(point.x, 0, point.y); BlockState state = world.getBlockState(posMutable); if (state.getBlock() instanceof InfusionPedestal) { @@ -174,7 +164,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } } } - + @Override @Nullable public BlockState getStateForPlacement(BlockPlaceContext context) { @@ -187,22 +177,18 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { boolean hasPedestalUnder = downState.getBlock() instanceof PedestalBlock; if (!hasPedestalOver && hasPedestalUnder && upSideSolid) { return defaultBlockState().setValue(STATE, PedestalState.COLUMN_TOP); - } - else if (!hasPedestalOver && !hasPedestalUnder && upSideSolid) { + } else if (!hasPedestalOver && !hasPedestalUnder && upSideSolid) { return defaultBlockState().setValue(STATE, PedestalState.COLUMN); - } - else if (hasPedestalUnder && hasPedestalOver) { + } else if (hasPedestalUnder && hasPedestalOver) { return defaultBlockState().setValue(STATE, PedestalState.PILLAR); - } - else if (hasPedestalUnder) { + } else if (hasPedestalUnder) { return defaultBlockState().setValue(STATE, PedestalState.PEDESTAL_TOP); - } - else if (hasPedestalOver) { + } else if (hasPedestalOver) { return defaultBlockState().setValue(STATE, PedestalState.BOTTOM); } return defaultBlockState(); } - + @Override @Deprecated public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { @@ -213,7 +199,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } return updated; } - + private BlockState getUpdatedState(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { if (!state.is(this)) return state.updateShape(direction, newState, world, pos, posFrom); if (direction != Direction.UP && direction != Direction.DOWN) return state; @@ -225,27 +211,21 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { if (direction == Direction.UP) { upSideSolid = newState.isFaceSturdy(world, posFrom, Direction.DOWN) || newState.is(BlockTags.WALLS); hasPedestalOver = newState.getBlock() instanceof PedestalBlock; - } - else { + } else { hasPedestalUnder = newState.getBlock() instanceof PedestalBlock; } BlockState updatedState; if (!hasPedestalOver && hasPedestalUnder && upSideSolid) { updatedState = state.setValue(STATE, PedestalState.COLUMN_TOP); - } - else if (!hasPedestalOver && !hasPedestalUnder && upSideSolid) { + } else if (!hasPedestalOver && !hasPedestalUnder && upSideSolid) { updatedState = state.setValue(STATE, PedestalState.COLUMN); - } - else if (hasPedestalUnder && hasPedestalOver) { + } else if (hasPedestalUnder && hasPedestalOver) { updatedState = state.setValue(STATE, PedestalState.PILLAR); - } - else if (hasPedestalUnder) { + } else if (hasPedestalUnder) { updatedState = state.setValue(STATE, PedestalState.PEDESTAL_TOP); - } - else if (hasPedestalOver) { + } else if (hasPedestalOver) { updatedState = state.setValue(STATE, PedestalState.BOTTOM); - } - else { + } else { updatedState = state.setValue(STATE, PedestalState.DEFAULT); } if (!isPlaceable(updatedState)) { @@ -253,7 +233,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } return updatedState; } - + @Override public List getDrops(BlockState state, LootContext.Builder builder) { List drop = Lists.newArrayList(super.getDrops(state, builder)); @@ -266,14 +246,13 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { drop.add(pedestal.getItem(0)); } } - } - else { + } else { return drop; } } return drop; } - + private void moveStoredStack(LevelAccessor world, BlockState state, BlockPos pos) { BlockEntity blockEntity = world.getBlockEntity(pos); if (blockEntity instanceof PedestalBlockEntity && state.is(this)) { @@ -284,39 +263,34 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } } } - + private void moveStoredStack(BlockEntity blockEntity, LevelAccessor world, ItemStack stack, BlockPos pos) { BlockState state = world.getBlockState(pos); if (!state.is(this)) { dropStoredStack(blockEntity, stack, pos); - } - else if (state.getValue(STATE).equals(PedestalState.PILLAR)) { + } else if (state.getValue(STATE).equals(PedestalState.PILLAR)) { moveStoredStack(blockEntity, world, stack, pos.above()); - } - else if (!isPlaceable(state)) { + } else if (!isPlaceable(state)) { dropStoredStack(blockEntity, stack, pos); - } - else if (blockEntity instanceof PedestalBlockEntity) { + } else if (blockEntity instanceof PedestalBlockEntity) { PedestalBlockEntity pedestal = (PedestalBlockEntity) blockEntity; if (pedestal.isEmpty()) { pedestal.setItem(0, stack); - } - else { + } else { dropStoredStack(blockEntity, stack, pos); } - } - else { + } else { dropStoredStack(blockEntity, stack, pos); } } - + private void dropStoredStack(BlockEntity blockEntity, ItemStack stack, BlockPos pos) { if (blockEntity != null && blockEntity.getLevel() != null) { Level world = blockEntity.getLevel(); Block.popResource(world, getDropPos(world, pos), stack); } } - + private BlockPos getDropPos(LevelAccessor world, BlockPos pos) { BlockPos dropPos; if (world.getBlockState(pos).isAir()) { @@ -325,7 +299,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { if (world.getBlockState(pos.above()).isAir()) { return pos.above(); } - for (int i = 2; i < Direction.values().length; i++) { + for(int i = 2; i < Direction.values().length; i++) { dropPos = pos.relative(Direction.from3DDataValue(i)); if (world.getBlockState(dropPos).isAir()) { return dropPos.immutable(); @@ -333,19 +307,19 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } return getDropPos(world, pos.above()); } - + public boolean isPlaceable(BlockState state) { if (!state.is(this)) return false; PedestalState currentState = state.getValue(STATE); return currentState == PedestalState.DEFAULT || - currentState == PedestalState.PEDESTAL_TOP; + currentState == PedestalState.PEDESTAL_TOP; } - + @Override @Deprecated public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (state.is(this)) { - switch (state.getValue(STATE)) { + switch(state.getValue(STATE)) { case BOTTOM: { return SHAPE_BOTTOM; } @@ -368,27 +342,27 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } return super.getShape(state, world, pos, context); } - + @Override protected void createBlockStateDefinition(StateDefinition.Builder stateManager) { stateManager.add(STATE, HAS_ITEM, HAS_LIGHT); } @Override - public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { - return new PedestalBlockEntity(blockPos, blockState); + public BlockEntity newBlockEntity(BlockGetter world) { + return new PedestalBlockEntity(); } public boolean hasUniqueEntity() { return false; } - + @Override @Deprecated public boolean hasAnalogOutputSignal(BlockState state) { return state.getBlock() instanceof PedestalBlock; } - + @Override @Deprecated public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { @@ -396,13 +370,11 @@ 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); @@ -423,14 +395,12 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { case PILLAR: pattern = Patterns.createJson(Patterns.BLOCK_PEDESTAL_PILLAR, textures); break; - default: - break; + default: break; } return ModelsHelper.fromPattern(pattern); } @Override - @Environment(EnvType.CLIENT) public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map modelCache) { PedestalState state = blockState.getValue(STATE); ResourceLocation modelId = new ResourceLocation(stateId.getNamespace(), @@ -444,9 +414,8 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { String name = blockId.getPath(); return new HashMap() { private static final long serialVersionUID = 1L; - { - put("%mod%", blockId.getNamespace()); + put("%mod%", blockId.getNamespace() ); put("%top%", name + "_top"); put("%base%", name + "_base"); put("%pillar%", name + "_pillar"); @@ -454,7 +423,7 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { } }; } - + static { VoxelShape basinUp = Block.box(2, 3, 2, 14, 4, 14); VoxelShape basinDown = Block.box(0, 0, 0, 16, 3, 16); @@ -473,10 +442,4 @@ public class PedestalBlock extends BaseBlockNotFull implements EntityBlock { SHAPE_COLUMN = Shapes.or(basin, SHAPE_PILLAR, columnTop); SHAPE_BOTTOM = Shapes.or(basin, SHAPE_PILLAR); } - - @Override - @Nullable - public BlockEntityTicker getTicker(Level level, BlockState blockState, BlockEntityType blockEntityType) { - return level.isClientSide() ? PedestalBlockEntity::tick : null; - } } diff --git a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java index d421cd5d..b7319079 100644 --- a/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java +++ b/src/main/java/ru/betterend/blocks/basis/StoneLanternBlock.java @@ -1,7 +1,9 @@ package ru.betterend.blocks.basis; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; +import java.util.Optional; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.item.ItemColor; @@ -13,22 +15,19 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; import ru.bclib.client.models.ModelsHelper; import ru.bclib.interfaces.IColorProvider; import ru.betterend.client.models.Patterns; import ru.betterend.registry.EndBlocks; -import java.util.Optional; - public class StoneLanternBlock extends EndLanternBlock implements IColorProvider { private static final VoxelShape SHAPE_CEIL = Block.box(3, 1, 3, 13, 16, 13); private static final VoxelShape SHAPE_FLOOR = Block.box(3, 0, 3, 13, 15, 13); - + public StoneLanternBlock(Block source) { super(FabricBlockSettings.copyOf(source).luminance(15)); } - + @Override public BlockColor getProvider() { return ((IColorProvider) EndBlocks.AURORA_CRYSTAL).getProvider(); @@ -38,14 +37,13 @@ public class StoneLanternBlock extends EndLanternBlock implements IColorProvider public ItemColor getItemProvider() { return ((IColorProvider) EndBlocks.AURORA_CRYSTAL).getItemProvider(); } - + @Override public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; } @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/blocks/complex/ColoredMaterial.java b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java index 16a2c92e..9ae68e51 100644 --- a/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/ColoredMaterial.java @@ -1,6 +1,10 @@ package ru.betterend.blocks.complex; +import java.util.Map; +import java.util.function.Function; + import com.google.common.collect.Maps; + import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.core.Registry; import net.minecraft.world.item.DyeColor; @@ -14,18 +18,15 @@ import ru.betterend.BetterEnd; import ru.betterend.config.Configs; import ru.betterend.registry.EndBlocks; -import java.util.Map; -import java.util.function.Function; - public class ColoredMaterial { private static final Map DYES = Maps.newHashMap(); private static final Map COLORS = Maps.newHashMap(); private final Map colors = Maps.newHashMap(); - + public ColoredMaterial(Function constructor, Block source, boolean craftEight) { this(constructor, source, COLORS, DYES, craftEight); } - + public ColoredMaterial(Function constructor, Block source, Map colors, Map dyes, boolean craftEight) { String id = Registry.BLOCK.getKey(source).getPath(); colors.forEach((color, name) -> { @@ -42,17 +43,17 @@ public class ColoredMaterial { BlocksHelper.addBlockColor(block, color); }); } - + public Block getByColor(DyeColor color) { return colors.get(color.getMaterialColor().col); } - + public Block getByColor(int color) { return colors.get(color); } - + static { - for (DyeColor color : DyeColor.values()) { + for (DyeColor color: DyeColor.values()) { int colorRGB = color.getMaterialColor().col; COLORS.put(colorRGB, color.getName()); DYES.put(colorRGB, DyeItem.byColor(color)); diff --git a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java index e3bd82b3..1e82ff4c 100644 --- a/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/CrystalSubblocksMaterial.java @@ -4,6 +4,8 @@ import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; import net.minecraft.world.level.block.Block; +import ru.bclib.blocks.BaseBlock; +import ru.bclib.blocks.BaseRotatedPillarBlock; import ru.bclib.blocks.BaseSlabBlock; import ru.bclib.blocks.BaseStairsBlock; import ru.bclib.blocks.BaseWallBlock; @@ -11,8 +13,6 @@ import ru.bclib.recipes.GridRecipe; import ru.bclib.util.TagHelper; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPedestal; -import ru.betterend.blocks.basis.LitBaseBlock; -import ru.betterend.blocks.basis.LitPillarBlock; import ru.betterend.config.Configs; import ru.betterend.recipe.CraftingRecipes; import ru.betterend.registry.EndBlocks; @@ -29,43 +29,43 @@ public class CrystalSubblocksMaterial { public final Block brick_stairs; public final Block brick_slab; public final Block brick_wall; - + public CrystalSubblocksMaterial(String name, Block source) { FabricBlockSettings material = FabricBlockSettings.copyOf(source); - polished = EndBlocks.registerBlock(name + "_polished", new LitBaseBlock(material)); - tiles = EndBlocks.registerBlock(name + "_tiles", new LitBaseBlock(material)); - pillar = EndBlocks.registerBlock(name + "_pillar", new LitPillarBlock(material)); + polished = EndBlocks.registerBlock(name + "_polished", new BaseBlock(material)); + tiles = EndBlocks.registerBlock(name + "_tiles", new BaseBlock(material)); + pillar = EndBlocks.registerBlock(name + "_pillar", new BaseRotatedPillarBlock(material)); stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(source)); slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(source)); wall = EndBlocks.registerBlock(name + "_wall", new BaseWallBlock(source)); pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(source)); - bricks = EndBlocks.registerBlock(name + "_bricks", new LitBaseBlock(material)); + bricks = EndBlocks.registerBlock(name + "_bricks", new BaseBlock(material)); brick_stairs = EndBlocks.registerBlock(name + "_bricks_stairs", new BaseStairsBlock(bricks)); brick_slab = EndBlocks.registerBlock(name + "_bricks_slab", new BaseSlabBlock(bricks)); brick_wall = EndBlocks.registerBlock(name + "_bricks_wall", new BaseWallBlock(bricks)); - + // Recipes // GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks", bricks).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', source).setGroup("end_bricks").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_polished", polished).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', bricks).setGroup("end_tile").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_tiles", tiles).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', polished).setGroup("end_small_tile").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_pillar", pillar).checkConfig(Configs.RECIPE_CONFIG).setShape("#", "#").addMaterial('#', slab).setGroup("end_pillar").build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', source).setGroup("end_stone_stairs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###").addMaterial('#', source).setGroup("end_stone_slabs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_stairs", brick_stairs).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', bricks).setGroup("end_stone_stairs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_slab", brick_slab).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###").addMaterial('#', bricks).setGroup("end_stone_slabs").build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_wall", wall).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###", "###").addMaterial('#', source).setGroup("end_wall").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_wall", brick_wall).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###", "###").addMaterial('#', bricks).setGroup("end_wall").build(); - + CraftingRecipes.registerPedestal(name + "_pedestal", pedestal, slab, pillar); - + // Item Tags // TagHelper.addTag(ItemTags.SLABS, slab, brick_slab); TagHelper.addTag(ItemTags.STONE_BRICKS, bricks); TagHelper.addTag(ItemTags.STONE_CRAFTING_MATERIALS, source); TagHelper.addTag(ItemTags.STONE_TOOL_MATERIALS, source); - + // Block Tags // TagHelper.addTag(BlockTags.STONE_BRICKS, bricks); TagHelper.addTag(BlockTags.WALLS, wall, brick_wall); diff --git a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java index b0dbd619..4f5577bd 100644 --- a/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/MetalMaterial.java @@ -3,7 +3,6 @@ package ru.betterend.blocks.complex; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.minecraft.tags.BlockTags; import net.minecraft.tags.ItemTags; -import net.minecraft.tags.Tag; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.Item; @@ -15,12 +14,10 @@ import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.material.MaterialColor; -import ru.bclib.api.TagAPI; import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseChainBlock; import ru.bclib.blocks.BaseDoorBlock; import ru.bclib.blocks.BaseMetalBarsBlock; -import ru.bclib.blocks.BaseOreBlock; import ru.bclib.blocks.BaseSlabBlock; import ru.bclib.blocks.BaseStairsBlock; import ru.bclib.blocks.BaseTrapdoorBlock; @@ -28,6 +25,7 @@ import ru.bclib.blocks.WoodenPressurePlateBlock; import ru.bclib.items.ModelProviderItem; import ru.bclib.items.tool.BaseAxeItem; import ru.bclib.items.tool.BaseHoeItem; +import ru.bclib.items.tool.BasePickaxeItem; import ru.bclib.items.tool.BaseShovelItem; import ru.bclib.items.tool.BaseSwordItem; import ru.bclib.recipes.FurnaceRecipe; @@ -43,11 +41,11 @@ import ru.betterend.config.Configs; import ru.betterend.item.EndAnvilItem; import ru.betterend.item.EndArmorItem; import ru.betterend.item.tool.EndHammerItem; -import ru.betterend.item.tool.EndPickaxe; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; +import ru.betterend.registry.EndTags; public class MetalMaterial { public final Block ore; @@ -60,7 +58,7 @@ public class MetalMaterial { public final Block chain; public final Block stairs; public final Block slab; - + public final Block chandelier; public final Block bulb_lantern; public final ColoredMaterial bulb_lantern_colored; @@ -68,59 +66,50 @@ public class MetalMaterial { public final Block anvilBlock; public final Item anvilItem; - public final Item rawOre; public final Item nugget; public final Item ingot; - + public final Item shovelHead; public final Item pickaxeHead; public final Item axeHead; public final Item hoeHead; public final Item swordBlade; public final Item swordHandle; - + public final Item shovel; public final Item sword; public final Item pickaxe; public final Item axe; public final Item hoe; public final Item hammer; - + public final Item forgedPlate; public final Item helmet; public final Item chestplate; public final Item leggings; public final Item boots; - - public final Tag.Named alloyingOre; - + 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); } - + 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); } - + 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); } - + 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); } - + 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(); - - rawOre = hasOre ? EndItems.registerEndItem(name + "_raw", new ModelProviderItem(itemSettings)) : null; - ore = hasOre ? EndBlocks.registerBlock(name + "_ore", new BaseOreBlock(rawOre, 1, 3, 1)) : null; - alloyingOre = hasOre ? TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_alloying") : null; - if (hasOre) { - TagHelper.addTag(alloyingOre, ore, rawOre); - } - + + 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)); @@ -130,28 +119,28 @@ public class MetalMaterial { bars = EndBlocks.registerBlock(name + "_bars", new BaseMetalBarsBlock(block)); chain = EndBlocks.registerBlock(name + "_chain", new BaseChainBlock(block.defaultMaterialColor())); pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(block)); - + chandelier = EndBlocks.registerBlock(name + "_chandelier", new ChandelierBlock(block)); bulb_lantern = EndBlocks.registerBlock(name + "_bulb_lantern", new BulbVineLanternBlock(lanternProperties)); bulb_lantern_colored = new ColoredMaterial(BulbVineLanternColoredBlock::new, bulb_lantern, false); nugget = EndItems.registerEndItem(name + "_nugget", new ModelProviderItem(itemSettings)); ingot = EndItems.registerEndItem(name + "_ingot", new ModelProviderItem(itemSettings)); - + shovelHead = EndItems.registerEndItem(name + "_shovel_head"); pickaxeHead = EndItems.registerEndItem(name + "_pickaxe_head"); axeHead = EndItems.registerEndItem(name + "_axe_head"); hoeHead = EndItems.registerEndItem(name + "_hoe_head"); swordBlade = EndItems.registerEndItem(name + "_sword_blade"); swordHandle = EndItems.registerEndItem(name + "_sword_handle"); - + shovel = EndItems.registerEndTool(name + "_shovel", new BaseShovelItem(material, 1.5F, -3.0F, itemSettings)); sword = EndItems.registerEndTool(name + "_sword", new BaseSwordItem(material, 3, -2.4F, itemSettings)); - pickaxe = EndItems.registerEndTool(name + "_pickaxe", new EndPickaxe(material, 1, -2.8F, itemSettings)); + pickaxe = EndItems.registerEndTool(name + "_pickaxe", new BasePickaxeItem(material, 1, -2.8F, itemSettings)); axe = EndItems.registerEndTool(name + "_axe", new BaseAxeItem(material, 6.0F, -3.0F, itemSettings)); hoe = EndItems.registerEndTool(name + "_hoe", new BaseHoeItem(material, -3, 0.0F, itemSettings)); hammer = EndItems.registerEndTool(name + "_hammer", new EndHammerItem(material, 5.0F, -3.2F, 0.3D, itemSettings)); - + forgedPlate = EndItems.registerEndItem(name + "_forged_plate"); helmet = EndItems.registerEndItem(name + "_helmet", new EndArmorItem(armor, EquipmentSlot.HEAD, itemSettings)); chestplate = EndItems.registerEndItem(name + "_chestplate", new EndArmorItem(armor, EquipmentSlot.CHEST, itemSettings)); @@ -160,19 +149,18 @@ public class MetalMaterial { anvilBlock = EndBlocks.registerBlock(name + "_anvil", new EndAnvilBlock(this, block.defaultMaterialColor(), level)); anvilItem = EndItems.registerEndItem(name + "_anvil_item", new EndAnvilItem(anvilBlock)); - + if (hasOre) { - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_ore", ore, ingot).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_ingot").buildWithBlasting(); - FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace_raw", rawOre, ingot).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_ingot").buildWithBlasting(); - AlloyingRecipe.Builder.create(name + "_ingot_alloy").setInput(alloyingOre, alloyingOre).setOutput(ingot, 3).setExpiriense(2.1F).build(); + FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_ingot_furnace", ore, ingot).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_ingot").buildWithBlasting(); + AlloyingRecipe.Builder.create(name + "_ingot_alloy").setInput(ore, ore).setOutput(ingot, 3).setExpiriense(2.1F).build(); } - + // Basic recipes GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_nuggets", ingot).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "###", "###").addMaterial('#', nugget).setGroup("end_metal_ingots_nug").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_nuggets_from_ingot", nugget).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(9).setList("#").addMaterial('#', ingot).setGroup("end_metal_nuggets_ing").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_block", block).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "###", "###").addMaterial('#', ingot).setGroup("end_metal_blocks").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_ingot_from_block", ingot).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(9).setList("#").addMaterial('#', block).setGroup("end_metal_ingots").build(); - + // Block recipes GridRecipe.make(BetterEnd.MOD_ID, name + "_tile", tile).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', block).setGroup("end_metal_tiles").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bars", bars).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(16).setShape("###", "###").addMaterial('#', ingot).setGroup("end_metal_bars").build(); @@ -184,9 +172,9 @@ public class MetalMaterial { GridRecipe.make(BetterEnd.MOD_ID, name + "_chain", chain).checkConfig(Configs.RECIPE_CONFIG).setShape("N", "#", "N").addMaterial('#', ingot).addMaterial('N', nugget).setGroup("end_metal_chain").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_anvil", anvilBlock).checkConfig(Configs.RECIPE_CONFIG).setShape("###", " I ", "III").addMaterial('#', block, tile).addMaterial('I', ingot).setGroup("end_metal_anvil").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bulb_lantern", bulb_lantern).checkConfig(Configs.RECIPE_CONFIG).setShape("C", "I", "#").addMaterial('C', chain).addMaterial('I', ingot).addMaterial('#', EndItems.GLOWING_BULB).build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_chandelier", chandelier).checkConfig(Configs.RECIPE_CONFIG).setShape("I#I", " # ").addMaterial('#', ingot).addMaterial('I', EndItems.LUMECORN_ROD).setGroup("end_metal_chandelier").build(); - + // Tools & armor into nuggets FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_axe_nugget", axe, nugget).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_nugget").buildWithBlasting(); FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_hoe_nugget", hoe, nugget).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_nugget").buildWithBlasting(); @@ -197,7 +185,7 @@ public class MetalMaterial { FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_chestplate_nugget", chestplate, nugget).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_nugget").buildWithBlasting(); FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_leggings_nugget", leggings, nugget).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_nugget").buildWithBlasting(); FurnaceRecipe.make(BetterEnd.MOD_ID, name + "_boots_nugget", boots, nugget).checkConfig(Configs.RECIPE_CONFIG).setGroup("end_nugget").buildWithBlasting(); - + // Tool parts from ingots AnvilRecipe.Builder.create(name + "_shovel_head").setInput(ingot).setOutput(shovelHead).setAnvilLevel(level).setToolLevel(level).setDamage(level).build(); AnvilRecipe.Builder.create(name + "_pickaxe_head").setInput(ingot).setInputCount(3).setOutput(pickaxeHead).setAnvilLevel(level).setToolLevel(level).setDamage(level).build(); @@ -205,7 +193,7 @@ public class MetalMaterial { AnvilRecipe.Builder.create(name + "_hoe_head").setInput(ingot).setInputCount(2).setOutput(hoeHead).setAnvilLevel(level).setToolLevel(level).setDamage(level).build(); AnvilRecipe.Builder.create(name + "_sword_blade").setInput(ingot).setOutput(swordBlade).setAnvilLevel(level).setToolLevel(level).setDamage(level).build(); AnvilRecipe.Builder.create(name + "_forged_plate").setInput(ingot).setOutput(forgedPlate).setAnvilLevel(level).setToolLevel(level).setDamage(level).build(); - + // Tools from parts SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_hammer").checkConfig(Configs.RECIPE_CONFIG).setResult(hammer).setBase(block).setAddition(Items.STICK).build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_axe").checkConfig(Configs.RECIPE_CONFIG).setResult(axe).setBase(axeHead).setAddition(Items.STICK).build(); @@ -214,17 +202,16 @@ public class MetalMaterial { SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword_handle").checkConfig(Configs.RECIPE_CONFIG).setResult(swordHandle).setBase(ingot).setAddition(Items.STICK).build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_sword").checkConfig(Configs.RECIPE_CONFIG).setResult(sword).setBase(swordBlade).setAddition(swordHandle).build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, name + "_shovel").checkConfig(Configs.RECIPE_CONFIG).setResult(shovel).setBase(shovelHead).setAddition(Items.STICK).build(); - + // Armor crafting GridRecipe.make(BetterEnd.MOD_ID, name + "_helmet", helmet).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "# #").addMaterial('#', forgedPlate).setGroup("end_metal_helmets").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_chestplate", chestplate).checkConfig(Configs.RECIPE_CONFIG).setShape("# #", "###", "###").addMaterial('#', forgedPlate).setGroup("end_metal_chestplates").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_leggings", leggings).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "# #", "# #").addMaterial('#', forgedPlate).setGroup("end_metal_leggings").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_boots", boots).checkConfig(Configs.RECIPE_CONFIG).setShape("# #", "# #").addMaterial('#', forgedPlate).setGroup("end_metal_boots").build(); - + TagHelper.addTag(BlockTags.ANVIL, anvilBlock); TagHelper.addTag(BlockTags.BEACON_BASE_BLOCKS, block); TagHelper.addTag(ItemTags.BEACON_PAYMENT_ITEMS, ingot); - TagHelper.addTag(TagAPI.DRAGON_IMMUNE, ore, bars); - TagHelper.addTag(TagAPI.HAMMERS, hammer); + TagHelper.addTag(EndTags.DRAGON_IMMUNE, ore, bars); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java index 26aed797..125c391e 100644 --- a/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/StoneMaterial.java @@ -27,7 +27,7 @@ import ru.betterend.registry.EndItems; public class StoneMaterial { public final Block stone; - + public final Block polished; public final Block tiles; public final Block pillar; @@ -38,16 +38,16 @@ public class StoneMaterial { public final Block pressure_plate; public final Block pedestal; public final Block lantern; - + public final Block bricks; public final Block brick_stairs; public final Block brick_slab; public final Block brick_wall; public final Block furnace; - + public StoneMaterial(String name, 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)); tiles = EndBlocks.registerBlock(name + "_tiles", new BaseBlock(material)); @@ -59,48 +59,48 @@ public class StoneMaterial { pressure_plate = EndBlocks.registerBlock(name + "_plate", new StonePressurePlateBlock(stone)); pedestal = EndBlocks.registerBlock(name + "_pedestal", new EndPedestal(stone)); lantern = EndBlocks.registerBlock(name + "_lantern", new StoneLanternBlock(stone)); - + bricks = EndBlocks.registerBlock(name + "_bricks", new BaseBlock(material)); brick_stairs = EndBlocks.registerBlock(name + "_bricks_stairs", new BaseStairsBlock(bricks)); brick_slab = EndBlocks.registerBlock(name + "_bricks_slab", new BaseSlabBlock(bricks)); brick_wall = EndBlocks.registerBlock(name + "_bricks_wall", new BaseWallBlock(bricks)); furnace = EndBlocks.registerBlock(name + "_furnace", new BaseFurnaceBlock(bricks)); - + // Recipes // GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks", bricks).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', stone).setGroup("end_bricks").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_polished", polished).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', bricks).setGroup("end_tile").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_tiles", tiles).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("##", "##").addMaterial('#', polished).setGroup("end_small_tile").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_pillar", pillar).checkConfig(Configs.RECIPE_CONFIG).setShape("#", "#").addMaterial('#', slab).setGroup("end_pillar").build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', stone).setGroup("end_stone_stairs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_slab", slab).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###").addMaterial('#', stone).setGroup("end_stone_slabs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_stairs", brick_stairs).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', bricks).setGroup("end_stone_stairs").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_slab", brick_slab).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###").addMaterial('#', bricks).setGroup("end_stone_slabs").build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_wall", wall).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###", "###").addMaterial('#', stone).setGroup("end_wall").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_bricks_wall", brick_wall).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(6).setShape("###", "###").addMaterial('#', bricks).setGroup("end_wall").build(); - + GridRecipe.make(BetterEnd.MOD_ID, name + "_button", button).checkConfig(Configs.RECIPE_CONFIG).setList("#").addMaterial('#', stone).setGroup("end_stone_buttons").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_pressure_plate", pressure_plate).checkConfig(Configs.RECIPE_CONFIG).setShape("##").addMaterial('#', stone).setGroup("end_stone_plates").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_lantern", lantern).checkConfig(Configs.RECIPE_CONFIG).setShape("S", "#", "S").addMaterial('#', EndItems.CRYSTAL_SHARDS).addMaterial('S', slab, brick_slab).setGroup("end_stone_lanterns").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_furnace", furnace).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "# #", "###").addMaterial('#', stone).setGroup("end_stone_furnaces").build(); - + CraftingRecipes.registerPedestal(name + "_pedestal", pedestal, slab, pillar); - + // Item Tags // TagHelper.addTag(ItemTags.SLABS, slab, brick_slab); TagHelper.addTag(ItemTags.STONE_BRICKS, bricks); TagHelper.addTag(ItemTags.STONE_CRAFTING_MATERIALS, stone); TagHelper.addTag(ItemTags.STONE_TOOL_MATERIALS, stone); TagHelper.addTag(TagAPI.FURNACES, furnace); - + // Block Tags // TagHelper.addTag(BlockTags.STONE_BRICKS, bricks); TagHelper.addTag(BlockTags.WALLS, wall, brick_wall); TagHelper.addTag(BlockTags.SLABS, slab, brick_slab); TagHelper.addTags(pressure_plate, BlockTags.PRESSURE_PLATES, BlockTags.STONE_PRESSURE_PLATES); TagHelper.addTag(TagAPI.END_STONES, stone); - + TagHelper.addTag(TagAPI.DRAGON_IMMUNE, stone, stairs, slab, wall); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java index 9c17ae2f..c42dc9e9 100644 --- a/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java +++ b/src/main/java/ru/betterend/blocks/complex/WoodenMaterial.java @@ -16,7 +16,6 @@ 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; @@ -55,28 +54,28 @@ public class WoodenMaterial { public final Block pressurePlate; public final Block trapdoor; public final Block door; - + public final Block craftingTable; public final Block ladder; public final Block sign; - + public final Block chest; public final Block barrel; public final Block shelf; public final Block composter; - + public final Tag.Named logBlockTag; public final Tag.Named logItemTag; - + public WoodenMaterial(String name, MaterialColor woodColor, 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)); - + log = EndBlocks.registerBlock(name + "_log", new BaseStripableLogBlock(woodColor, log_stripped)); bark = EndBlocks.registerBlock(name + "_bark", new StripableBarkBlock(woodColor, bark_stripped)); - + planks = EndBlocks.registerBlock(name + "_planks", new BaseBlock(materialPlanks)); stairs = EndBlocks.registerBlock(name + "_stairs", new BaseStairsBlock(planks)); slab = EndBlocks.registerBlock(name + "_slab", new BaseSlabBlock(planks)); @@ -86,16 +85,16 @@ public class WoodenMaterial { pressurePlate = EndBlocks.registerBlock(name + "_plate", new WoodenPressurePlateBlock(planks)); trapdoor = EndBlocks.registerBlock(name + "_trapdoor", new BaseTrapdoorBlock(planks)); door = EndBlocks.registerBlock(name + "_door", new BaseDoorBlock(planks)); - + craftingTable = EndBlocks.registerBlock(name + "_crafting_table", new BaseCraftingTableBlock(planks)); ladder = EndBlocks.registerBlock(name + "_ladder", new BaseLadderBlock(planks)); sign = EndBlocks.registerBlock(name + "_sign", new BaseSignBlock(planks)); - - chest = EndBlocks.registerBlock(name + "_chest", new BaseChestBlock(planks)); + + chest = EndBlocks.registerBlock(name + "_chest", new BaseFenceBlock(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)); - + // Recipes // GridRecipe.make(BetterEnd.MOD_ID, name + "_planks", planks).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setList("#").addMaterial('#', log, bark, log_stripped, bark_stripped).setGroup("end_planks").build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_stairs", stairs).checkConfig(Configs.RECIPE_CONFIG).setOutputCount(4).setShape("# ", "## ", "###").addMaterial('#', planks).setGroup("end_planks_stairs").build(); @@ -116,13 +115,13 @@ public class WoodenMaterial { GridRecipe.make(BetterEnd.MOD_ID, name + "_log", log).checkConfig(Configs.RECIPE_CONFIG).setShape("##", "##").addMaterial('#', bark).setOutputCount(3).build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_composter", composter).checkConfig(Configs.RECIPE_CONFIG).setShape("# #", "# #", "###").addMaterial('#', slab).build(); GridRecipe.make(BetterEnd.MOD_ID, name + "_shulker", Items.SHULKER_BOX).checkConfig(Configs.RECIPE_CONFIG).setShape("S", "#", "S").addMaterial('S', Items.SHULKER_SHELL).addMaterial('#', chest).build(); - + // Item Tags // TagHelper.addTag(ItemTags.PLANKS, planks); TagHelper.addTag(ItemTags.WOODEN_PRESSURE_PLATES, pressurePlate); TagHelper.addTag(ItemTags.LOGS, log, bark, log_stripped, bark_stripped); TagHelper.addTag(ItemTags.LOGS_THAT_BURN, log, bark, log_stripped, bark_stripped); - + TagHelper.addTags(button, ItemTags.WOODEN_BUTTONS, ItemTags.BUTTONS); TagHelper.addTags(door, ItemTags.WOODEN_DOORS, ItemTags.DOORS); TagHelper.addTags(fence, ItemTags.WOODEN_FENCES, ItemTags.FENCES); @@ -130,13 +129,13 @@ public class WoodenMaterial { TagHelper.addTags(stairs, ItemTags.WOODEN_STAIRS, ItemTags.STAIRS); TagHelper.addTags(trapdoor, ItemTags.WOODEN_TRAPDOORS, ItemTags.TRAPDOORS); TagHelper.addTag(TagAPI.ITEM_CHEST, chest); - + // Block Tags // TagHelper.addTag(BlockTags.PLANKS, planks); TagHelper.addTag(BlockTags.CLIMBABLE, ladder); TagHelper.addTag(BlockTags.LOGS, log, bark, log_stripped, bark_stripped); TagHelper.addTag(BlockTags.LOGS_THAT_BURN, log, bark, log_stripped, bark_stripped); - + TagHelper.addTags(button, BlockTags.WOODEN_BUTTONS, BlockTags.BUTTONS); TagHelper.addTags(door, BlockTags.WOODEN_DOORS, BlockTags.DOORS); TagHelper.addTags(fence, BlockTags.WOODEN_FENCES, BlockTags.FENCES); @@ -145,42 +144,42 @@ public class WoodenMaterial { TagHelper.addTags(trapdoor, BlockTags.WOODEN_TRAPDOORS, BlockTags.TRAPDOORS); TagHelper.addTag(TagAPI.BOOKSHELVES, shelf); TagHelper.addTag(TagAPI.BLOCK_CHEST, chest); - + logBlockTag = TagAPI.makeBlockTag(BetterEnd.MOD_ID, name + "_logs"); logItemTag = TagAPI.makeItemTag(BetterEnd.MOD_ID, name + "_logs"); TagHelper.addTag(logBlockTag, log_stripped, bark_stripped, log, bark); TagHelper.addTag(logItemTag, log_stripped, bark_stripped, log, bark); - + FlammableBlockRegistry.getDefaultInstance().add(log, 5, 5); FlammableBlockRegistry.getDefaultInstance().add(bark, 5, 5); FlammableBlockRegistry.getDefaultInstance().add(log_stripped, 5, 5); FlammableBlockRegistry.getDefaultInstance().add(bark_stripped, 5, 5); - + FlammableBlockRegistry.getDefaultInstance().add(planks, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(stairs, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(slab, 5, 20); - + FlammableBlockRegistry.getDefaultInstance().add(fence, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(gate, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(button, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(pressurePlate, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(trapdoor, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(door, 5, 20); - + FlammableBlockRegistry.getDefaultInstance().add(craftingTable, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(ladder, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(sign, 5, 20); - + FlammableBlockRegistry.getDefaultInstance().add(chest, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(barrel, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(shelf, 5, 20); FlammableBlockRegistry.getDefaultInstance().add(composter, 5, 20); } - + public boolean isTreeLog(Block block) { return block == log || block == bark; } - + public boolean isTreeLog(BlockState state) { return isTreeLog(state.getBlock()); } diff --git a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java index b0d16ec7..ecce043d 100644 --- a/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java +++ b/src/main/java/ru/betterend/blocks/entities/BlockEntityHydrothermalVent.java @@ -1,6 +1,7 @@ package ru.betterend.blocks.entities; -import net.minecraft.core.BlockPos; +import java.util.List; + import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -8,8 +9,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; @@ -19,54 +20,48 @@ import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndParticles; -import java.util.List; +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); - private static final MutableBlockPos POS = new MutableBlockPos(); - public BlockEntityHydrothermalVent(BlockPos blockPos, BlockState blockState) { - super(EndBlockEntities.HYDROTHERMAL_VENT, blockPos, blockState); + public BlockEntityHydrothermalVent() { + super(EndBlockEntities.HYDROTHERMAL_VENT); } - public static void tick(Level level, BlockPos worldPosition, BlockState state, T uncastedEntity) { - if (level != null && uncastedEntity instanceof BlockEntityHydrothermalVent && state.is(EndBlocks.HYDROTHERMAL_VENT)) { - BlockEntityHydrothermalVent blockEntity = (BlockEntityHydrothermalVent) uncastedEntity; - if (level.isClientSide()) { - clientTick(level, worldPosition, state, blockEntity); - } - //else { - serverTick(level, worldPosition, state, blockEntity); - //} - } - } - - private static void clientTick(Level level, BlockPos worldPosition, BlockState state, BlockEntityHydrothermalVent blockEntity) { - boolean active = state.getValue(HydrothermalVentBlock.ACTIVATED); - if (active && level.random.nextInt(20) == 0 && state.getValue(HydrothermalVentBlock.WATERLOGGED)) { - double x = worldPosition.getX() + level.random.nextDouble(); - double y = worldPosition.getY() + 0.9 + level.random.nextDouble() * 0.3; - double z = worldPosition.getZ() + level.random.nextDouble(); - level.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); - } - } - - private static void serverTick(Level level, BlockPos worldPosition, BlockState state, BlockEntityHydrothermalVent blockEntity) { - boolean active = state.getValue(HydrothermalVentBlock.ACTIVATED); - POS.set(worldPosition).move(Direction.UP); - int height = active ? 85 : 25; - AABB box = new AABB(POS.offset(-1, 0, -1), POS.offset(1, height, 1)); - List entities = level.getEntitiesOfClass(LivingEntity.class, box); - if (entities.size() > 0) { - while (POS.getY() < box.maxY) { - BlockState blockState = level.getBlockState(POS); - if (blockState.isSolidRender(level, POS)) break; - if (blockState.isAir()) { - double mult = active ? 3.0 : 5.0; - float force = (float) ((1.0 - (POS.getY() / box.maxY)) / mult); - entities.stream().filter(entity -> (int) entity.getY() == POS.getY() && blockEntity.hasElytra(entity) && entity.isFallFlying()).forEach(entity -> entity.moveRelative(force, POSITIVE_Y)); + @Override + public void tick() { + 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) { + double x = worldPosition.getX() + level.random.nextDouble(); + double y = worldPosition.getY() + 0.9 + level.random.nextDouble() * 0.3; + double z = worldPosition.getZ() + level.random.nextDouble(); + if (state.getValue(HydrothermalVentBlock.WATERLOGGED)) { + level.addParticle(EndParticles.GEYSER_PARTICLE, x, y, z, 0, 0, 0); + } else { + level.addParticle(ParticleTypes.BUBBLE, x, y, z, 0, 0, 0); + } + } + MutableBlockPos mutable = worldPosition.mutable().move(Direction.UP); + int height = active ? 85 : 25; + AABB box = new AABB(mutable.offset(-1, 0, -1), mutable.offset(1, height, 1)); + List entities = level.getEntitiesOfClass(LivingEntity.class, box); + if (entities.size() > 0) { + while (mutable.getY() < box.maxY) { + BlockState blockState = level.getBlockState(mutable); + if (blockState.isSolidRender(level, mutable)) break; + if (blockState.isAir()) { + 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()) + .forEach(entity -> entity.moveRelative(force, POSITIVE_Y)); + } + mutable.move(Direction.UP); + } } - POS.move(Direction.UP); } } } diff --git a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java index c53f7b40..49516b35 100644 --- a/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EndStoneSmelterBlockEntity.java @@ -1,11 +1,15 @@ 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; @@ -33,6 +37,7 @@ 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; @@ -41,17 +46,13 @@ import ru.betterend.client.gui.EndStoneSmelterScreenHandler; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlockEntities; -import java.util.Iterator; -import java.util.List; -import java.util.Map; +public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity implements WorldlyContainer, RecipeHolder, StackedContentsCompatible, TickableBlockEntity { -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}; - private static final int[] SIDE_SLOTS = new int[]{1, 2}; + private static final int[] TOP_SLOTS = new int[] { 0, 1 }; + private static final int[] BOTTOM_SLOTS = new int[] { 2, 3 }; + private static final int[] SIDE_SLOTS = new int[] { 1, 2 }; private static final Map AVAILABLE_FUELS = Maps.newHashMap(); - + private final Object2IntOpenHashMap recipesUsed; protected NonNullList inventory; protected final ContainerData propertyDelegate; @@ -60,47 +61,47 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme private int smeltTime; private int burnTime; private int fuelTime; - - public EndStoneSmelterBlockEntity(BlockPos blockPos, BlockState blockState) { - super(EndBlockEntities.END_STONE_SMELTER, blockPos, blockState); + + public EndStoneSmelterBlockEntity() { + super(EndBlockEntities.END_STONE_SMELTER); this.inventory = NonNullList.withSize(4, ItemStack.EMPTY); this.recipesUsed = new Object2IntOpenHashMap<>(); - this.propertyDelegate = new ContainerData() { - public int get(int index) { - switch (index) { - case 0: - return EndStoneSmelterBlockEntity.this.burnTime; - case 1: - return EndStoneSmelterBlockEntity.this.fuelTime; - case 2: - return EndStoneSmelterBlockEntity.this.smeltTime; - case 3: - return EndStoneSmelterBlockEntity.this.smeltTimeTotal; - default: - return 0; - } - } + this.propertyDelegate = new ContainerData() { + public int get(int index) { + switch(index) { + case 0: + return EndStoneSmelterBlockEntity.this.burnTime; + case 1: + return EndStoneSmelterBlockEntity.this.fuelTime; + case 2: + return EndStoneSmelterBlockEntity.this.smeltTime; + case 3: + return EndStoneSmelterBlockEntity.this.smeltTimeTotal; + default: + return 0; + } + } - public void set(int index, int value) { - switch (index) { - case 0: - EndStoneSmelterBlockEntity.this.burnTime = value; - break; - case 1: - EndStoneSmelterBlockEntity.this.fuelTime = value; - break; - case 2: - EndStoneSmelterBlockEntity.this.smeltTime = value; - break; - case 3: - EndStoneSmelterBlockEntity.this.smeltTimeTotal = value; - } - } + public void set(int index, int value) { + switch(index) { + case 0: + EndStoneSmelterBlockEntity.this.burnTime = value; + break; + case 1: + EndStoneSmelterBlockEntity.this.fuelTime = value; + break; + case 2: + EndStoneSmelterBlockEntity.this.smeltTime = value; + break; + case 3: + EndStoneSmelterBlockEntity.this.smeltTimeTotal = value; + } + } - public int getCount() { - return 4; - } - }; + public int getCount() { + return 4; + } + }; } private boolean isBurning() { @@ -121,8 +122,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme return true; } itemStack = iterator.next(); - } - while (itemStack.isEmpty()); + } while (itemStack.isEmpty()); return false; } @@ -156,19 +156,19 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme setChanged(); } } - + protected int getSmeltTime() { if (level == null) return 200; int smeltTime = level.getRecipeManager().getRecipeFor(AlloyingRecipe.TYPE, this, level) .map(AlloyingRecipe::getSmeltTime).orElse(0); if (smeltTime == 0) { smeltTime = level.getRecipeManager().getRecipeFor(RecipeType.BLASTING, this, level) - .map(BlastingRecipe::getCookingTime).orElse(200); + .map(BlastingRecipe::getCookingTime).orElse(200); smeltTime /= 1.5; } return smeltTime; } - + public void dropExperience(Player player) { if (level == null) return; List> list = Lists.newArrayList(); @@ -178,8 +178,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme if (recipe instanceof AlloyingRecipe) { AlloyingRecipe alloying = (AlloyingRecipe) recipe; dropExperience(player.level, player.position(), entry.getIntValue(), alloying.getExperience()); - } - else { + } else { BlastingRecipe blasting = (BlastingRecipe) recipe; dropExperience(player.level, player.position(), entry.getIntValue(), blasting.getExperience()); } @@ -188,7 +187,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme player.awardRecipes(list); recipesUsed.clear(); } - + private void dropExperience(Level world, Vec3 vec3d, int count, float amount) { int expTotal = Mth.floor(count * amount); float g = Mth.frac(count * amount); @@ -196,7 +195,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme expTotal++; } - while (expTotal > 0) { + while(expTotal > 0) { int expVal = ExperienceOrb.getExperienceValue(expTotal); expTotal -= expVal; world.addFreshEntity(new ExperienceOrb(world, vec3d.x, vec3d.y, vec3d.z, expVal)); @@ -226,74 +225,72 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme return new EndStoneSmelterScreenHandler(syncId, playerInventory, this, propertyDelegate); } - public static void tick(Level tickLevel, BlockPos tickPos, BlockState tickState, EndStoneSmelterBlockEntity blockEntity) { - if (tickLevel == null) return; + @Override + public void tick() { + if (level == null) return; - boolean initialBurning = blockEntity.isBurning(); + boolean initialBurning = isBurning(); if (initialBurning) { - blockEntity.burnTime--; + burnTime--; } boolean burning = initialBurning; - 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); + 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); } - } - else { - Recipe recipe = tickLevel.getRecipeManager().getRecipeFor(AlloyingRecipe.TYPE, blockEntity, tickLevel).orElse(null); + } else { + Recipe recipe = level.getRecipeManager().getRecipeFor(AlloyingRecipe.TYPE, this, level).orElse(null); if (recipe == null) { - recipe = tickLevel.getRecipeManager().getRecipeFor(RecipeType.BLASTING, blockEntity, tickLevel).orElse(null); + recipe = level.getRecipeManager().getRecipeFor(RecipeType.BLASTING, this, level).orElse(null); } - boolean accepted = blockEntity.canAcceptRecipeOutput(recipe); + boolean accepted = this.canAcceptRecipeOutput(recipe); if (!burning && accepted) { - blockEntity.burnTime = blockEntity.getFuelTime(fuel); - blockEntity.fuelTime = blockEntity.burnTime; - burning = blockEntity.isBurning(); + burnTime = getFuelTime(fuel); + fuelTime = burnTime; + burning = isBurning(); if (burning) { if (!fuel.isEmpty()) { Item item = fuel.getItem(); fuel.shrink(1); if (fuel.isEmpty()) { Item remainFuel = item.getCraftingRemainingItem(); - blockEntity.inventory.set(2, remainFuel == null ? ItemStack.EMPTY : new ItemStack(remainFuel)); + inventory.set(2, remainFuel == null ? ItemStack.EMPTY : new ItemStack(remainFuel)); } } - blockEntity.setChanged(); + setChanged(); } } if (burning && accepted) { - blockEntity.smeltTime++; - if (blockEntity.smeltTime == blockEntity.smeltTimeTotal) { - blockEntity.smeltTime = 0; - blockEntity.smeltTimeTotal = blockEntity.getSmeltTime(); - blockEntity.craftRecipe(recipe); - blockEntity.setChanged(); + this.smeltTime++; + if (smeltTime == smeltTimeTotal) { + smeltTime = 0; + smeltTimeTotal = getSmeltTime(); + craftRecipe(recipe); + setChanged(); } - } - else { - blockEntity.smeltTime = 0; + } else { + smeltTime = 0; } } - burning = blockEntity.isBurning(); + if (initialBurning != burning) { - tickLevel.setBlock(tickPos, tickState.setValue(EndStoneSmelter.LIT, burning), 3); - blockEntity.setChanged(); + level.setBlock(worldPosition, level.getBlockState(worldPosition).setValue(EndStoneSmelter.LIT, burning), 3); + setChanged(); } } } - + protected boolean canAcceptRecipeOutput(Recipe recipe) { if (recipe == null) return false; boolean validInput; if (recipe instanceof AlloyingRecipe) { validInput = !inventory.get(0).isEmpty() && !inventory.get(1).isEmpty(); - } - else { + } else { validInput = !inventory.get(0).isEmpty() || !inventory.get(1).isEmpty(); } @@ -321,13 +318,12 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme private void craftRecipe(Recipe recipe) { if (recipe == null || !canAcceptRecipeOutput(recipe)) return; - + ItemStack result = recipe.getResultItem(); ItemStack output = inventory.get(3); if (output.isEmpty()) { inventory.set(3, result.copy()); - } - else if (output.getItem() == result.getItem()) { + } else if (output.getItem() == result.getItem()) { output.grow(result.getCount()); } @@ -335,16 +331,14 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme if (!this.level.isClientSide) { setRecipeUsed(recipe); } - + if (recipe instanceof AlloyingRecipe) { inventory.get(0).shrink(1); inventory.get(1).shrink(1); - } - else { + } else { if (!inventory.get(0).isEmpty()) { inventory.get(0).shrink(1); - } - else { + } else { inventory.get(1).shrink(1); } } @@ -399,10 +393,10 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme Item item = fuel.getItem(); return AVAILABLE_FUELS.getOrDefault(item, getFabricFuel(fuel)); } - + @Override - public void load(CompoundTag tag) { - super.load(tag); + public void load(BlockState state, CompoundTag tag) { + super.load(state, tag); inventory = NonNullList.withSize(getContainerSize(), ItemStack.EMPTY); ContainerHelper.loadAllItems(tag, inventory); burnTime = tag.getShort("BurnTime"); @@ -414,7 +408,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme recipesUsed.put(new ResourceLocation(id), compoundTag.getInt(id)); } } - + @Override public CompoundTag save(CompoundTag tag) { super.save(tag); @@ -426,15 +420,14 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme CompoundTag usedRecipes = new CompoundTag(); recipesUsed.forEach((identifier, integer) -> usedRecipes.putInt(identifier.toString(), integer)); tag.put("RecipesUsed", usedRecipes); - + return tag; } - + public boolean canPlaceItem(int slot, ItemStack stack) { if (slot == 3) { return false; - } - else if (slot != 2) { + } else if (slot != 2) { return true; } ItemStack itemStack = this.inventory.get(2); @@ -452,7 +445,7 @@ public class EndStoneSmelterBlockEntity extends BaseContainerBlockEntity impleme public static Map availableFuels() { return AVAILABLE_FUELS; } - + private static int getFabricFuel(ItemStack stack) { Integer ticks = FuelRegistry.INSTANCE.get(stack.getItem()); return ticks == null ? 0 : ticks; diff --git a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java index 7796d528..d4da8a18 100644 --- a/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/EternalPedestalEntity.java @@ -3,34 +3,33 @@ 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(BlockPos blockPos, BlockState blockState) { - super(EndBlockEntities.ETERNAL_PEDESTAL, blockPos, blockState); + + public EternalPedestalEntity() { + super(EndBlockEntities.ETERNAL_PEDESTAL); } - + public boolean hasRitual() { return linkedRitual != null; } - + public void linkRitual(EternalRitual ritual) { this.linkedRitual = ritual; } - + public EternalRitual getRitual() { return linkedRitual; } - + @Override - public void setLevel(Level level) { - super.setLevel(level); + public void setLevelAndPosition(Level world, BlockPos pos) { + super.setLevelAndPosition(world, pos); if (hasRitual()) { - linkedRitual.setWorld(level); + linkedRitual.setWorld(world); } } diff --git a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java index b4f67dce..2a6a4029 100644 --- a/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/InfusionPedestalEntity.java @@ -3,41 +3,46 @@ 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.entity.BlockEntity; -import net.minecraft.world.level.block.state.BlockState; import ru.betterend.registry.EndBlockEntities; import ru.betterend.rituals.InfusionRitual; public class InfusionPedestalEntity extends PedestalBlockEntity { private InfusionRitual linkedRitual; - - public InfusionPedestalEntity(BlockPos blockPos, BlockState blockState) { - super(EndBlockEntities.INFUSION_PEDESTAL, blockPos, blockState); + + public InfusionPedestalEntity() { + super(EndBlockEntities.INFUSION_PEDESTAL); } - + @Override - public void setLevel(Level world) { - super.setLevel(world); + public void setLevelAndPosition(Level world, BlockPos pos) { + super.setLevelAndPosition(world, pos); if (hasRitual()) { - linkedRitual.setLocation(world, this.getBlockPos()); - } - else { - linkRitual(new InfusionRitual(this, world, this.getBlockPos())); + linkedRitual.setLocation(world, pos); + } else { + linkRitual(new InfusionRitual(this, world, pos)); } } - + public void linkRitual(InfusionRitual ritual) { linkedRitual = ritual; } - + public InfusionRitual getRitual() { return linkedRitual; } - + public boolean hasRitual() { return linkedRitual != null; } + + @Override + public void tick() { + if (hasRitual()) { + linkedRitual.tick(); + } + super.tick(); + } @Override public CompoundTag save(CompoundTag tag) { @@ -55,14 +60,4 @@ public class InfusionPedestalEntity extends PedestalBlockEntity { linkedRitual.fromTag(tag.getCompound("ritual")); } } - - public static void tickEnity(Level level, BlockPos blockPos, BlockState blockState, T uncastedEntity) { - if (uncastedEntity instanceof InfusionPedestalEntity) { - InfusionPedestalEntity blockEntity = (InfusionPedestalEntity) uncastedEntity; - if (blockEntity.hasRitual()) { - blockEntity.linkedRitual.tick(); - } - PedestalBlockEntity.tick(level, blockPos, blockState, blockEntity); - } - } } diff --git a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java index 0e61d526..5dfe65e0 100644 --- a/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java +++ b/src/main/java/ru/betterend/blocks/entities/PedestalBlockEntity.java @@ -1,37 +1,36 @@ 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, BlockEntityClientSerializable { +public class PedestalBlockEntity extends BlockEntity implements Container, TickableBlockEntity, BlockEntityClientSerializable { private ItemStack activeItem = ItemStack.EMPTY; - + private final int maxAge = 314; private int age; - - public PedestalBlockEntity(BlockPos blockPos, BlockState blockState) { - this(EndBlockEntities.PEDESTAL, blockPos, blockState); + + public PedestalBlockEntity() { + super(EndBlockEntities.PEDESTAL); } - - public PedestalBlockEntity(BlockEntityType blockEntityType, BlockPos blockPos, BlockState blockState) { - super(blockEntityType, blockPos, blockState); + + public PedestalBlockEntity(BlockEntityType type) { + super(type); } - + public int getAge() { return age; } - + public int getMaxAge() { return maxAge; } @@ -55,7 +54,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block public ItemStack removeItem(int slot, int amount) { return removeItemNoUpdate(slot); } - + @Override public boolean canPlaceItem(int slot, ItemStack stack) { return isEmpty(); @@ -79,7 +78,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block activeItem = stack.split(1); setChanged(); } - + @Override public void setChanged() { if (level != null && !level.isClientSide) { @@ -88,8 +87,7 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block BlockState trueState = state.setValue(PedestalBlock.HAS_ITEM, !isEmpty()); if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) { trueState = trueState.setValue(PedestalBlock.HAS_LIGHT, true); - } - else { + } else { trueState = trueState.setValue(PedestalBlock.HAS_LIGHT, false); } level.setBlockAndUpdate(worldPosition, trueState); @@ -98,15 +96,15 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block super.setChanged(); } - + @Override public boolean stillValid(Player player) { return true; } - + @Override - public void load(CompoundTag tag) { - super.load(tag); + public void load(BlockState state, CompoundTag tag) { + super.load(state, tag); fromTag(tag); } @@ -133,15 +131,12 @@ public class PedestalBlockEntity extends BlockEntity implements Container, Block } } - public static void tick(Level level, BlockPos blockPos, BlockState blockState, T uncastedEntity) { - clientTick(level, blockPos, blockState, (PedestalBlockEntity) uncastedEntity); - } - - private static void clientTick(Level tickLevel, BlockPos tickPos, BlockState tickState, PedestalBlockEntity blockEntity) { - if (!blockEntity.isEmpty()) { - blockEntity.age++; - if (blockEntity.age > blockEntity.maxAge) { - blockEntity.age = 0; + @Override + public void tick() { + if (!isEmpty()) { + age++; + if (age > maxAge) { + age = 0; } } } diff --git a/src/main/java/ru/betterend/client/BetterEndClient.java b/src/main/java/ru/betterend/client/BetterEndClient.java index 73859941..2a83e0c5 100644 --- a/src/main/java/ru/betterend/client/BetterEndClient.java +++ b/src/main/java/ru/betterend/client/BetterEndClient.java @@ -1,5 +1,7 @@ package ru.betterend.client; +import java.util.List; + import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; import net.minecraft.ChatFormatting; @@ -28,8 +30,6 @@ import ru.betterend.registry.EndModelProviders; import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndScreens; -import java.util.List; - public class BetterEndClient implements ClientModInitializer { @Override public void onInitializeClient() { @@ -43,7 +43,7 @@ public class BetterEndClient implements ClientModInitializer { ClientOptions.init(); registerRenderers(); registerTooltips(); - + if (BCLib.isDevEnvironment()) { TranslationHelper.printMissingNames(BetterEnd.MOD_ID); } diff --git a/src/main/java/ru/betterend/client/ClientOptions.java b/src/main/java/ru/betterend/client/ClientOptions.java index a82bfe9a..d80f950c 100644 --- a/src/main/java/ru/betterend/client/ClientOptions.java +++ b/src/main/java/ru/betterend/client/ClientOptions.java @@ -7,7 +7,7 @@ public class ClientOptions { private static boolean useFogDensity; private static boolean blendBiomeMusic; private static boolean sulfurWaterColor; - + public static void init() { customSky = Configs.CLENT_CONFIG.getBooleanRoot("customSky", true); useFogDensity = Configs.CLENT_CONFIG.getBooleanRoot("useFogDensity", true); @@ -39,7 +39,7 @@ public class ClientOptions { public static void setBlendBiomeMusic(boolean blendBiomeMusic) { ClientOptions.blendBiomeMusic = blendBiomeMusic; } - + public static boolean useSulfurWaterColor() { return sulfurWaterColor; } diff --git a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java index c794b5d2..1ed760f5 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterRecipeBookScreen.java @@ -1,7 +1,12 @@ package ru.betterend.client.gui; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.GuiComponent; @@ -15,10 +20,6 @@ import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.crafting.Recipe; import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - @Environment(EnvType.CLIENT) public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent { private Iterator fuelIterator; @@ -26,12 +27,12 @@ public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent private Slot fuelSlot; private Item currentItem; private float frameTime; - + @Override protected Set getFuelItems() { return EndStoneSmelterBlockEntity.availableFuels().keySet(); } - + @Override public void slotClicked(Slot slot) { super.slotClicked(slot); @@ -39,7 +40,7 @@ public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent this.fuelSlot = null; } } - + @Override public void setupGhostRecipe(Recipe recipe, List slots) { this.ghostRecipe.clear(); @@ -48,7 +49,7 @@ public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent this.ghostRecipe.addIngredient(Ingredient.of(result), (slots.get(3)).x, (slots.get(3)).y); NonNullList inputs = recipe.getIngredients(); Iterator iterator = inputs.iterator(); - for (int i = 0; i < 2; i++) { + for(int i = 0; i < 2; i++) { if (!iterator.hasNext()) { return; } @@ -66,7 +67,7 @@ public class EndStoneSmelterRecipeBookScreen extends BlastingRecipeBookComponent this.fuelIterator = this.fuels.iterator(); this.currentItem = null; } - + @Override public void renderGhostRecipe(PoseStack matrices, int x, int y, boolean bl, float f) { this.ghostRecipe.render(matrices, minecraft, x, y, bl, f); @@ -78,8 +79,7 @@ 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); - //TODO: test k=0 - this.minecraft.getItemRenderer().renderAndDecorateItem(minecraft.player, this.getFuel().getDefaultInstance(), slotX, slotY, 0); + this.minecraft.getItemRenderer().renderAndDecorateItem(minecraft.player, this.getFuel().getDefaultInstance(), slotX, slotY); 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/gui/EndStoneSmelterScreen.java b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java index c1cce315..c030ed9f 100644 --- a/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java +++ b/src/main/java/ru/betterend/client/gui/EndStoneSmelterScreen.java @@ -2,6 +2,7 @@ package ru.betterend.client.gui; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.components.ImageButton; @@ -20,33 +21,32 @@ public class EndStoneSmelterScreen extends AbstractContainerScreen { - recipeBook.initVisuals(); + leftPos = recipeBook.updateScreenPosition(narrow, width, imageWidth); + addButton(new ImageButton(leftPos + 20, height / 2 - 49, 20, 18, 0, 0, 19, RECIPE_BUTTON_TEXTURE, (buttonWidget) -> { + recipeBook.initVisuals(narrow); recipeBook.toggleVisibility(); - leftPos = recipeBook.updateScreenPosition(width, imageWidth); + leftPos = recipeBook.updateScreenPosition(narrow, width, imageWidth); ((ImageButton) buttonWidget).setPosition(leftPos + 20, height / 2 - 49); })); titleLabelX = (imageWidth - font.width(title)) / 2; } @Override - public void containerTick() { - super.containerTick(); + public void tick() { + super.tick(); recipeBook.tick(); } @@ -56,8 +56,7 @@ public class EndStoneSmelterScreen extends AbstractContainerScreen { public final static MenuType HANDLER_TYPE = ScreenHandlerRegistry.registerSimple( BetterEnd.makeID(EndStoneSmelter.ID), EndStoneSmelterScreenHandler::new); - + private final Container inventory; private final ContainerData propertyDelegate; protected final Level world; - + public EndStoneSmelterScreenHandler(int syncId, Inventory playerInventory) { this(syncId, playerInventory, new SimpleContainer(4), new SimpleContainerData(4)); } - + public EndStoneSmelterScreenHandler(int syncId, Inventory playerInventory, Container inventory, ContainerData propertyDelegate) { super(HANDLER_TYPE, syncId); this.inventory = inventory; this.propertyDelegate = propertyDelegate; this.world = playerInventory.player.level; - + addDataSlots(propertyDelegate); addSlot(new Slot(inventory, 0, 45, 17)); addSlot(new Slot(inventory, 1, 67, 17)); addSlot(new SmelterFuelSlot(this, inventory, 2, 56, 53)); addSlot(new SmelterOutputSlot(playerInventory.player, inventory, 3, 129, 35)); - for (int i = 0; i < 3; ++i) { - for (int j = 0; j < 9; ++j) { + for(int i = 0; i < 3; ++i) { + for(int j = 0; j < 9; ++j) { addSlot(new Slot(playerInventory, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); } } - for (int i = 0; i < 9; ++i) { + for(int i = 0; i < 9; ++i) { addSlot(new Slot(playerInventory, i, 8 + i * 18, 142)); } } - + @Override public MenuType getType() { return HANDLER_TYPE; @@ -107,11 +107,6 @@ public class EndStoneSmelterScreenHandler extends RecipeBookMenu { return RecipeBookType.BLAST_FURNACE; } - @Override - public boolean shouldMoveToInventory(int i) { - return i != this.getResultSlotIndex(); - } - @Override public boolean stillValid(Player player) { return inventory.stillValid(player); @@ -124,7 +119,7 @@ public class EndStoneSmelterScreenHandler extends RecipeBookMenu { public boolean isFuel(ItemStack itemStack) { return EndStoneSmelterBlockEntity.canUseAsFuel(itemStack); } - + @Override public ItemStack quickMoveStack(Player player, int index) { Slot slot = slots.get(index); @@ -137,35 +132,29 @@ public class EndStoneSmelterScreenHandler extends RecipeBookMenu { return ItemStack.EMPTY; } slot.onQuickCraft(slotStack, itemStack); - } - else if (index != 2 && index != 1 && index != 0) { + } else if (index != 2 && index != 1 && index != 0) { if (isSmeltable(slotStack)) { if (!moveItemStackTo(slotStack, 0, 2, false)) { return ItemStack.EMPTY; } - } - else if (isFuel(slotStack)) { + } else if (isFuel(slotStack)) { if (!moveItemStackTo(slotStack, 2, 3, false)) { return ItemStack.EMPTY; } - } - else if (index < 31) { + } else if (index < 31) { if (!moveItemStackTo(slotStack, 31, 40, false)) { return ItemStack.EMPTY; } - } - else if (index < 40 && !moveItemStackTo(slotStack, 4, 31, false)) { + } else if (index < 40 && !moveItemStackTo(slotStack, 4, 31, false)) { return ItemStack.EMPTY; } - } - else if (!moveItemStackTo(slotStack, 4, 40, false)) { + } else if (!moveItemStackTo(slotStack, 4, 40, false)) { return ItemStack.EMPTY; } if (slotStack.isEmpty()) { slot.set(ItemStack.EMPTY); - } - else { + } else { slot.setChanged(); } @@ -177,7 +166,7 @@ public class EndStoneSmelterScreenHandler extends RecipeBookMenu { return itemStack; } - + @Environment(EnvType.CLIENT) public int getSmeltProgress() { int time = propertyDelegate.get(2); diff --git a/src/main/java/ru/betterend/client/gui/slot/SmelterFuelSlot.java b/src/main/java/ru/betterend/client/gui/slot/SmelterFuelSlot.java index 3ff61a84..06ec70a5 100644 --- a/src/main/java/ru/betterend/client/gui/slot/SmelterFuelSlot.java +++ b/src/main/java/ru/betterend/client/gui/slot/SmelterFuelSlot.java @@ -9,12 +9,12 @@ import ru.betterend.client.gui.EndStoneSmelterScreenHandler; public class SmelterFuelSlot extends Slot { private final EndStoneSmelterScreenHandler handler; - + public SmelterFuelSlot(EndStoneSmelterScreenHandler handler, Container inventory, int index, int x, int y) { super(inventory, index, x, y); this.handler = handler; } - + public boolean mayPlace(ItemStack stack) { return this.handler.isFuel(stack) || FurnaceFuelSlot.isBucket(stack); } 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 3b4d0edc..212eb179 100644 --- a/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java +++ b/src/main/java/ru/betterend/client/gui/slot/SmelterOutputSlot.java @@ -28,9 +28,10 @@ public class SmelterOutputSlot extends Slot { return super.remove(amount); } - public void onTake(Player player, ItemStack stack) { + public ItemStack 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/client/models/Patterns.java b/src/main/java/ru/betterend/client/models/Patterns.java index 4da3a10f..d78a1327 100644 --- a/src/main/java/ru/betterend/client/models/Patterns.java +++ b/src/main/java/ru/betterend/client/models/Patterns.java @@ -1,11 +1,5 @@ package ru.betterend.client.models; -import com.google.common.collect.Maps; -import net.minecraft.client.Minecraft; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.ResourceManager; -import ru.betterend.BetterEnd; - import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; @@ -16,6 +10,13 @@ import java.util.Map.Entry; import java.util.Optional; import java.util.stream.Collectors; +import com.google.common.collect.Maps; + +import net.minecraft.client.Minecraft; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.ResourceManager; +import ru.betterend.BetterEnd; + public class Patterns { //Block Models public final static ResourceLocation BLOCK_EMPTY = BetterEnd.makeID("patterns/block/empty.json"); @@ -74,7 +75,7 @@ public class Patterns { public final static ResourceLocation BLOCK_FURNACE_LIT = BetterEnd.makeID("patterns/block/furnace_glow.json"); public final static ResourceLocation BLOCK_TOP_SIDE_BOTTOM = BetterEnd.makeID("patterns/block/top_side_bottom.json"); public final static ResourceLocation BLOCK_PATH = BetterEnd.makeID("patterns/block/path.json"); - + //Item Models public final static ResourceLocation ITEM_WALL = BetterEnd.makeID("patterns/item/pattern_wall.json"); public final static ResourceLocation ITEM_FENCE = BetterEnd.makeID("patterns/item/pattern_fence.json"); @@ -92,28 +93,25 @@ public class Patterns { public static Optional createBlockSimple(String name) { return Patterns.createJson(Patterns.BLOCK_BASE, name, name); } - public static Optional createBlockPillar(String name) { return Patterns.createJson(Patterns.BLOCK_PILLAR, name, name); } - + public static String createJson(Reader data, String parent, String block) { try (BufferedReader buffer = new BufferedReader(data)) { return buffer.lines().collect(Collectors.joining()) .replace("%parent%", parent) .replace("%block%", block); - } - catch (Exception ex) { + } catch (Exception ex) { return null; } } - + public static Optional createJson(ResourceLocation patternId, String parent, String block) { ResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); try (InputStream input = resourceManager.getResource(patternId).getInputStream()) { return Optional.ofNullable(createJson(new InputStreamReader(input, StandardCharsets.UTF_8), parent, block)); - } - catch (Exception ex) { + } catch (Exception ex) { return Optional.empty(); } } @@ -133,8 +131,7 @@ public class Patterns { json = json.replace(texture.getKey(), texture.getValue()); } return Optional.of(json); - } - catch (Exception ex) { + } catch (Exception ex) { return Optional.empty(); } } diff --git a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java index 174ed8b9..6f729286 100644 --- a/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java +++ b/src/main/java/ru/betterend/client/render/ArmoredElytraLayer.java @@ -2,8 +2,8 @@ package ru.betterend.client.render; 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,14 +18,12 @@ 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; + private final ArmoredElytraModel elytraModel = new ArmoredElytraModel<>(); - public ArmoredElytraLayer(RenderLayerParent renderLayerParent, EntityModelSet entityModelSet) { - super(renderLayerParent, entityModelSet); - elytraModel = new ArmoredElytraModel<>(entityModelSet.bakeLayer(EndEntitiesRenders.ARMORED_ELYTRA)); + public ArmoredElytraLayer(RenderLayerParent renderLayerParent) { + super(renderLayerParent); } public void render(PoseStack poseStack, MultiBufferSource multiBufferSource, int i, T livingEntity, float f, float g, float h, float j, float k, float l) { @@ -36,8 +34,7 @@ public class ArmoredElytraLayer AbstractClientPlayer abstractClientPlayer = (AbstractClientPlayer) livingEntity; if (abstractClientPlayer.isElytraLoaded() && abstractClientPlayer.getElytraTextureLocation() != null) { wingsTexture = abstractClientPlayer.getElytraTextureLocation(); - } - else if (abstractClientPlayer.isCapeLoaded() && abstractClientPlayer.getCloakTextureLocation() != null && abstractClientPlayer.isModelPartShown(PlayerModelPart.CAPE)) { + } else if (abstractClientPlayer.isCapeLoaded() && abstractClientPlayer.getCloakTextureLocation() != null && abstractClientPlayer.isModelPartShown(PlayerModelPart.CAPE)) { wingsTexture = abstractClientPlayer.getCloakTextureLocation(); } } diff --git a/src/main/java/ru/betterend/client/render/BeamRenderer.java b/src/main/java/ru/betterend/client/render/BeamRenderer.java index a623f094..88de8add 100644 --- a/src/main/java/ru/betterend/client/render/BeamRenderer.java +++ b/src/main/java/ru/betterend/client/render/BeamRenderer.java @@ -5,6 +5,7 @@ import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.math.Matrix3f; import com.mojang.math.Matrix4f; import com.mojang.math.Vector3f; + import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -13,26 +14,26 @@ import net.minecraft.util.Mth; public class BeamRenderer { private static final ResourceLocation BEAM_TEXTURE = new ResourceLocation("textures/entity/end_gateway_beam.png"); - + public static void renderLightBeam(PoseStack matrices, MultiBufferSource vertexConsumers, int age, float tick, int minY, int maxY, float[] colors, float alpha, float beamIn, float beamOut) { float red = colors[0]; float green = colors[1]; float blue = colors[2]; - + int maxBY = minY + maxY; float delta = maxY < 0 ? tick : -tick; - float fractDelta = Mth.frac(delta * 0.2F - (float) Mth.floor(delta * 0.1F)); + float fractDelta = Mth.frac(delta * 0.2F - (float) Mth.floor(delta * 0.1F)); float xIn = -beamIn; float minV = Mth.clamp(fractDelta - 1.0F, 0.0F, 1.0F); float maxV = (float) maxY * (0.5F / beamIn) + minV; float rotation = (age + tick) / 25.0F + 6.0F; - + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderType.beaconBeam(BEAM_TEXTURE, true)); - + matrices.pushPose(); matrices.mulPose(Vector3f.YP.rotation(-rotation)); renderBeam(matrices, vertexConsumer, red, green, blue, alpha, minY, maxBY, beamIn, 0.0F, 0.0F, beamIn, 0.0F, xIn, xIn, 0.0F, 0.0F, 1.0F, minV, maxV); - + float xOut = -beamOut; maxV = (float) maxY + minV; renderBeam(matrices, vertexConsumer, red, green, blue, alpha, minY, maxBY, xOut, xOut, beamOut, xOut, xOut, beamOut, beamOut, beamOut, 0.0F, 1.0F, minV, maxV); @@ -42,7 +43,7 @@ public class BeamRenderer { private static void renderBeam(PoseStack matrices, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int minY, int maxY, float x1, float d1, float x2, float d2, float x3, float d3, float x4, float d4, float minU, float maxU, float minV, float maxV) { PoseStack.Pose entry = matrices.last(); Matrix4f matrix4f = entry.pose(); - Matrix3f matrix3f = entry.normal(); + Matrix3f matrix3f = entry.normal(); renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x1, d1, x2, d2, minU, maxU, minV, maxV); renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x4, d4, x3, d3, minU, maxU, minV, maxV); renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x2, d2, x4, d4, minU, maxU, minV, maxV); diff --git a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java index d03473e3..c75dfc93 100644 --- a/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EndCrystalRenderer.java @@ -4,12 +4,8 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; 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; @@ -23,7 +19,7 @@ public class EndCrystalRenderer { private static final ModelPart FRAME; private static final int AGE_CYCLE = 240; private static final float SINE_45_DEGREES; - + public static void render(int age, int maxAge, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) { float k = (float) AGE_CYCLE / maxAge; float rotation = (age * k + tickDelta) * 3.0F; @@ -45,30 +41,14 @@ 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() - .texOffs(0, 0) - .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f), - PartPose.ZERO); - - modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() - .texOffs(32, 0) - .addBox(-4.0f, -4.0f, -4.0f, 8.0f, 8.0f, 8.0f), - 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); - - ModelPart root = getTexturedModelData().bakeRoot(); - FRAME = root.getChild("FRAME"); - CORE = root.getChild("CORE"); + 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); } } diff --git a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java index a6ecb0ed..f9100d9d 100644 --- a/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java +++ b/src/main/java/ru/betterend/client/render/EternalCrystalRenderer.java @@ -3,12 +3,8 @@ package ru.betterend.client.render; import com.mojang.blaze3d.vertex.PoseStack; 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; @@ -23,7 +19,7 @@ public class EternalCrystalRenderer { private static final RenderType RENDER_LAYER; private static final ModelPart[] SHARDS; private static final ModelPart CORE; - + public static void render(int age, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumerProvider, int light) { VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(RENDER_LAYER); float[] colors = colors(age); @@ -32,7 +28,7 @@ public class EternalCrystalRenderer { matrices.scale(0.6F, 0.6F, 0.6F); matrices.mulPose(Vector3f.YP.rotation(rotation)); CORE.render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]); - + for (int i = 0; i < 4; i++) { matrices.pushPose(); float offset = Mth.sin(rotation * 2 + i) * 0.15F; @@ -40,67 +36,35 @@ public class EternalCrystalRenderer { SHARDS[i].render(matrices, vertexConsumer, light, OverlayTexture.NO_OVERLAY, colors[0], colors[1], colors[2], colors[3]); matrices.popPose(); } - + matrices.popPose(); } - + public static float[] colors(int age) { double delta = age * 0.01; int index = MHelper.floor(delta); int index2 = (index + 1) & 3; delta -= index; index &= 3; - + Vec3i color1 = AuroraCrystalBlock.COLORS[index]; Vec3i color2 = AuroraCrystalBlock.COLORS[index2]; - + int r = MHelper.floor(Mth.lerp(delta, color1.getX(), color2.getX())); int g = MHelper.floor(Mth.lerp(delta, color1.getY(), color2.getY())); int b = MHelper.floor(Mth.lerp(delta, color1.getZ(), color2.getZ())); - + 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() - .texOffs(2, 4) - .addBox(-5.0f, 1.0f, -3.0f, 2.0f, 8.0f, 2.0f), - PartPose.ZERO); - - modelPartData.addOrReplaceChild("SHARDS_1", CubeListBuilder.create() - .texOffs(2, 4) - .addBox(3.0f, -1.0f, -1.0f, 2.0f, 8.0f, 2.0f), - PartPose.ZERO); - - modelPartData.addOrReplaceChild("SHARDS_2", CubeListBuilder.create() - .texOffs(2, 4) - .addBox(-1.0f, 0.0f, -5.0f, 2.0f, 4.0f, 2.0f), - PartPose.ZERO); - - modelPartData.addOrReplaceChild("SHARDS_3", CubeListBuilder.create() - .texOffs(2, 4) - .addBox(0.0f, 3.0f, 4.0f, 2.0f, 6.0f, 2.0f), - PartPose.ZERO); - - modelPartData.addOrReplaceChild("CORE", CubeListBuilder.create() - .texOffs(0, 0) - .addBox(-2.0f, -2.0f, -2.0f, 4.0f, 12.0f, 4.0f), - 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]; - - 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"); + 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); } } diff --git a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java index 2568db8c..e66cdee8 100644 --- a/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/client/render/PedestalItemRenderer.java @@ -2,13 +2,14 @@ package ru.betterend.client.render; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Vector3f; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.Minecraft; 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.resources.model.BakedModel; import net.minecraft.util.Mth; import net.minecraft.world.item.BlockItem; @@ -23,51 +24,50 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) -public class PedestalItemRenderer implements BlockEntityRenderer { - - public PedestalItemRenderer(BlockEntityRendererProvider.Context ctx) { - super(); +public class PedestalItemRenderer extends BlockEntityRenderer { + + public PedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) { + super(dispatcher); } @Override - public void render(T blockEntity, float tickDelta, PoseStack matrices, MultiBufferSource vertexConsumers, int light, int overlay) { + public void render(T blockEntity, float tickDelta, PoseStack matrices, + MultiBufferSource vertexConsumers, int light, int overlay) { + Level world = blockEntity.getLevel(); if (world == null || blockEntity.isEmpty()) return; BlockState state = world.getBlockState(blockEntity.getBlockPos()); if (!(state.getBlock() instanceof PedestalBlock)) return; - + ItemStack activeItem = blockEntity.getItem(0); matrices.pushPose(); Minecraft minecraft = Minecraft.getInstance(); - //TODO: check i=0 - BakedModel model = minecraft.getItemRenderer().getModel(activeItem, world, null, 0); + BakedModel model = minecraft.getItemRenderer().getModel(activeItem, world, null); Vector3f translate = model.getTransforms().ground.translation; PedestalBlock pedestal = (PedestalBlock) state.getBlock(); - matrices.translate(translate.x() + 0.5, translate.y() + pedestal.getHeight(state), translate.z() + 0.5); + matrices.translate(translate.x(), translate.y(), translate.z()); + matrices.translate(0.5, pedestal.getHeight(state), 0.5); if (activeItem.getItem() instanceof BlockItem) { matrices.scale(1.5F, 1.5F, 1.5F); - } - else { + } else { matrices.scale(1.25F, 1.25F, 1.25F); } int age = blockEntity.getAge(); if (state.is(EndBlocks.ETERNAL_PEDESTAL) && state.getValue(EternalPedestal.ACTIVATED)) { float[] colors = EternalCrystalRenderer.colors(age); int y = blockEntity.getBlockPos().getY(); - + BeamRenderer.renderLightBeam(matrices, vertexConsumers, age, tickDelta, -y, 1024 - y, colors, 0.25F, 0.13F, 0.16F); float altitude = Mth.sin((blockEntity.getAge() + tickDelta) / 10.0F) * 0.1F + 0.1F; matrices.translate(0.0D, altitude, 0.0D); } if (activeItem.getItem() == Items.END_CRYSTAL) { EndCrystalRenderer.render(age, blockEntity.getMaxAge(), tickDelta, matrices, vertexConsumers, light); - } - else if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) { + } else if (activeItem.getItem() == EndItems.ETERNAL_CRYSTAL) { EternalCrystalRenderer.render(age, tickDelta, matrices, vertexConsumers, light); - } - else { + } else { float rotation = (age + tickDelta) / 25.0F + 6.0F; matrices.mulPose(Vector3f.YP.rotation(rotation)); minecraft.getItemRenderer().render(activeItem, ItemTransforms.TransformType.GROUND, false, matrices, vertexConsumers, light, overlay, model); diff --git a/src/main/java/ru/betterend/config/Configs.java b/src/main/java/ru/betterend/config/Configs.java index e249ddd5..98c5d859 100644 --- a/src/main/java/ru/betterend/config/Configs.java +++ b/src/main/java/ru/betterend/config/Configs.java @@ -18,7 +18,7 @@ public class Configs { @Environment(value = EnvType.CLIENT) public static final PathConfig CLENT_CONFIG = new PathConfig(BetterEnd.MOD_ID, "client"); - + public static void saveConfigs() { ENTITY_CONFIG.saveChanges(); BLOCK_CONFIG.saveChanges(); @@ -26,7 +26,7 @@ public class Configs { ITEM_CONFIG.saveChanges(); GENERATOR_CONFIG.saveChanges(); RECIPE_CONFIG.saveChanges(); - + if (BCLib.isClient()) { CLENT_CONFIG.saveChanges(); } diff --git a/src/main/java/ru/betterend/effects/EndEnchantments.java b/src/main/java/ru/betterend/effects/EndEnchantments.java index 8dd15091..6755a3de 100644 --- a/src/main/java/ru/betterend/effects/EndEnchantments.java +++ b/src/main/java/ru/betterend/effects/EndEnchantments.java @@ -7,11 +7,10 @@ import ru.betterend.effects.enchantment.EndVeilEnchantment; public class EndEnchantments { public final static Enchantment END_VEIL = registerEnchantment("end_veil", new EndVeilEnchantment()); - + public static Enchantment registerEnchantment(String name, Enchantment enchantment) { return Registry.register(Registry.ENCHANTMENT, BetterEnd.makeID(name), enchantment); } - - public static void register() { - } + + public static void register() {} } diff --git a/src/main/java/ru/betterend/effects/EndPotions.java b/src/main/java/ru/betterend/effects/EndPotions.java index 1151175c..0b2e2394 100644 --- a/src/main/java/ru/betterend/effects/EndPotions.java +++ b/src/main/java/ru/betterend/effects/EndPotions.java @@ -14,15 +14,15 @@ import ru.betterend.registry.EndItems; public class EndPotions { public final static Potion END_VEIL = registerPotion("end_veil", EndStatusEffects.END_VEIL, 3600); public final static Potion LONG_END_VEIL = registerPotion("long_end_veil", EndStatusEffects.END_VEIL, 9600); - + public static Potion registerPotion(String name, MobEffect effect, int duration) { return registerPotion(name, new Potion(name, new MobEffectInstance(effect, duration))); } - + public static Potion registerPotion(String name, Potion potion) { return Registry.register(Registry.POTION, BetterEnd.makeID(name), potion); } - + public static void register() { PotionBrewingAccessor.callAddMix(Potions.AWKWARD, EndItems.ENDER_DUST, END_VEIL); PotionBrewingAccessor.callAddMix(END_VEIL, Items.REDSTONE, LONG_END_VEIL); diff --git a/src/main/java/ru/betterend/effects/enchantment/EndVeilEnchantment.java b/src/main/java/ru/betterend/effects/enchantment/EndVeilEnchantment.java index 6a0fa0d0..57d040e9 100644 --- a/src/main/java/ru/betterend/effects/enchantment/EndVeilEnchantment.java +++ b/src/main/java/ru/betterend/effects/enchantment/EndVeilEnchantment.java @@ -7,9 +7,9 @@ import net.minecraft.world.item.enchantment.EnchantmentCategory; public class EndVeilEnchantment extends Enchantment { public EndVeilEnchantment() { - super(Enchantment.Rarity.VERY_RARE, EnchantmentCategory.ARMOR_HEAD, new EquipmentSlot[]{EquipmentSlot.HEAD}); + super(Enchantment.Rarity.VERY_RARE, EnchantmentCategory.ARMOR_HEAD, new EquipmentSlot[] { EquipmentSlot.HEAD }); } - + @Override public boolean isDiscoverable() { return false; diff --git a/src/main/java/ru/betterend/effects/status/EndVeilEffect.java b/src/main/java/ru/betterend/effects/status/EndVeilEffect.java index 1a324c24..eff6cbb3 100644 --- a/src/main/java/ru/betterend/effects/status/EndVeilEffect.java +++ b/src/main/java/ru/betterend/effects/status/EndVeilEffect.java @@ -8,7 +8,7 @@ public class EndVeilEffect extends MobEffect { public EndVeilEffect() { super(MobEffectCategory.BENEFICIAL, 0x0D554A); } - + @Override public boolean isDurationEffectTick(int duration, int amplifier) { return false; diff --git a/src/main/java/ru/betterend/entity/CubozoaEntity.java b/src/main/java/ru/betterend/entity/CubozoaEntity.java index bfe8def7..e58053f4 100644 --- a/src/main/java/ru/betterend/entity/CubozoaEntity.java +++ b/src/main/java/ru/betterend/entity/CubozoaEntity.java @@ -1,5 +1,8 @@ package ru.betterend.entity; +import java.util.List; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.game.ClientboundGameEventPacket; @@ -32,9 +35,6 @@ import ru.bclib.api.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; -import java.util.List; -import java.util.Random; - public class CubozoaEntity extends AbstractSchoolingFish { public static final int VARIANTS = 2; private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(CubozoaEntity.class, EntityDataSerializers.BYTE); @@ -47,11 +47,11 @@ public class CubozoaEntity extends AbstractSchoolingFish { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) { SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag); - + if (BiomeAPI.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) { this.entityData.set(VARIANT, (byte) 1); } - + if (entityTag != null) { if (entityTag.contains("Variant")) { this.entityData.set(VARIANT, entityTag.getByte("Variant")); @@ -60,7 +60,7 @@ public class CubozoaEntity extends AbstractSchoolingFish { this.entityData.set(SCALE, entityTag.getByte("Scale")); } } - + this.refreshDimensions(); return data; } @@ -89,9 +89,9 @@ public class CubozoaEntity extends AbstractSchoolingFish { this.entityData.set(SCALE, tag.getByte("Scale")); } } - + @Override - public ItemStack getBucketItemStack() { + protected ItemStack getBucketItemStack() { ItemStack bucket = EndItems.BUCKET_CUBOZOA.getDefaultInstance(); CompoundTag tag = bucket.getOrCreateTag(); tag.putByte("Variant", entityData.get(VARIANT)); @@ -109,7 +109,7 @@ public class CubozoaEntity extends AbstractSchoolingFish { public int getVariant() { return (int) this.entityData.get(VARIANT); } - + public byte getByteScale() { return this.entityData.get(SCALE); } @@ -129,7 +129,7 @@ public class CubozoaEntity extends AbstractSchoolingFish { protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return dimensions.height * 0.5F; } - + @Override protected void dropFromLootTable(DamageSource source, boolean causedByPlayer) { int count = random.nextInt(3); @@ -143,7 +143,7 @@ public class CubozoaEntity extends AbstractSchoolingFish { protected SoundEvent getFlopSound() { return SoundEvents.SALMON_FLOP; } - + @Override public void playerTouch(Player player) { if (player instanceof ServerPlayer && player.hurt(DamageSource.mobAttack(this), 0.5F)) { diff --git a/src/main/java/ru/betterend/entity/DragonflyEntity.java b/src/main/java/ru/betterend/entity/DragonflyEntity.java index ea18a0c4..63ff1ed3 100644 --- a/src/main/java/ru/betterend/entity/DragonflyEntity.java +++ b/src/main/java/ru/betterend/entity/DragonflyEntity.java @@ -1,11 +1,12 @@ package ru.betterend.entity; +import java.util.EnumSet; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; -import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.entity.AgeableMob; -import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.AgableMob; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -20,8 +21,7 @@ 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; import net.minecraft.world.entity.player.Player; @@ -38,9 +38,6 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndSounds; -import java.util.EnumSet; -import java.util.Random; - public class DragonflyEntity extends Animal implements FlyingAnimal { public DragonflyEntity(EntityType entityType, Level world) { super(entityType, world); @@ -58,7 +55,7 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { .add(Attributes.FLYING_SPEED, 1.0D) .add(Attributes.MOVEMENT_SPEED, 0.1D); } - + @Override public boolean canBeLeashed(Player player) { return false; @@ -101,18 +98,18 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } @Override - public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { + protected boolean makeFlySound() { + return true; + } + + @Override + public boolean causeFallDamage(float fallDistance, float damageMultiplier) { return false; } @Override - protected Entity.MovementEmission getMovementEmission() { - return Entity.MovementEmission.EVENTS; - } - - @Override - public boolean isFlying() { - return !this.onGround; + public boolean isMovementNoisy() { + return false; } @Override @@ -163,8 +160,7 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { DragonflyEntity.this.navigation.moveTo(path, 1.0D); } } - catch (Exception e) { - } + catch (Exception e) {} } super.start(); } @@ -172,11 +168,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 = HoverRandomPos.getPos(DragonflyEntity.this, 8, 7, rotation.x, rotation.z, 1.5707964F, 3, 1); + Vec3 airPos = RandomPos.getAboveLandPos(DragonflyEntity.this, 8, 7, rotation, 1.5707964F, 2, 1); if (airPos != null) { if (isInVoid(airPos)) { for (int i = 0; i < 8; i++) { - airPos = HoverRandomPos.getPos(DragonflyEntity.this, 16, 7, rotation.x, rotation.z, MHelper.PI2, 3, 1); + airPos = RandomPos.getAboveLandPos(DragonflyEntity.this, 16, 7, rotation, MHelper.PI2, 2, 1); if (airPos != null && !isInVoid(airPos)) { return airPos; } @@ -188,7 +184,7 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } return airPos; } - return AirAndWaterRandomPos.getPos(DragonflyEntity.this, 8, 4, -2, rotation.x, rotation.z, 1.5707963705062866D); + return RandomPos.getAirPos(DragonflyEntity.this, 8, 4, -2, rotation, 1.5707963705062866D); } private boolean isInVoid(Vec3 pos) { @@ -198,10 +194,10 @@ public class DragonflyEntity extends Animal implements FlyingAnimal { } @Override - public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { + public AgableMob getBreedOffspring(ServerLevel world, AgableMob entity) { return EndEntities.DRAGONFLY.create(world); } - + public static boolean canSpawn(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { int y = world.getChunk(pos).getHeight(Types.WORLD_SURFACE, pos.getX() & 15, pos.getY() & 15); return y > 0 && pos.getY() >= y; diff --git a/src/main/java/ru/betterend/entity/EndFishEntity.java b/src/main/java/ru/betterend/entity/EndFishEntity.java index 19d6bf32..dec0cad8 100644 --- a/src/main/java/ru/betterend/entity/EndFishEntity.java +++ b/src/main/java/ru/betterend/entity/EndFishEntity.java @@ -1,5 +1,8 @@ package ru.betterend.entity; +import java.util.List; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -27,28 +30,25 @@ import ru.bclib.api.BiomeAPI; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndItems; -import java.util.List; -import java.util.Random; - public class EndFishEntity extends AbstractSchoolingFish { public static final int VARIANTS_NORMAL = 5; public static final int VARIANTS_SULPHUR = 3; public static final int VARIANTS = VARIANTS_NORMAL + VARIANTS_SULPHUR; private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(EndFishEntity.class, EntityDataSerializers.BYTE); private static final EntityDataAccessor SCALE = SynchedEntityData.defineId(EndFishEntity.class, EntityDataSerializers.BYTE); - + public EndFishEntity(EntityType entityType, Level world) { super(entityType, world); } - + @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) { SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag); - + if (BiomeAPI.getFromBiome(world.getBiome(blockPosition())) == EndBiomes.SULPHUR_SPRINGS) { this.entityData.set(VARIANT, (byte) (random.nextInt(VARIANTS_SULPHUR) + VARIANTS_NORMAL)); } - + if (entityTag != null) { if (entityTag.contains("Variant")) { this.entityData.set(VARIANT, entityTag.getByte("variant")); @@ -57,18 +57,18 @@ public class EndFishEntity extends AbstractSchoolingFish { this.entityData.set(SCALE, entityTag.getByte("scale")); } } - + this.refreshDimensions(); return data; } - + @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(VARIANT, (byte) this.getRandom().nextInt(VARIANTS_NORMAL)); this.entityData.define(SCALE, (byte) this.getRandom().nextInt(16)); } - + @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); @@ -88,7 +88,7 @@ public class EndFishEntity extends AbstractSchoolingFish { } @Override - public ItemStack getBucketItemStack() { + protected ItemStack getBucketItemStack() { ItemStack bucket = EndItems.BUCKET_END_FISH.getDefaultInstance(); CompoundTag tag = bucket.getOrCreateTag(); tag.putByte("variant", entityData.get(VARIANT)); @@ -115,7 +115,7 @@ public class EndFishEntity extends AbstractSchoolingFish { protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.SALMON_HURT; } - + @Override public void tick() { super.tick(); @@ -126,34 +126,32 @@ public class EndFishEntity extends AbstractSchoolingFish { level.addParticle(ParticleTypes.BUBBLE, x, y, z, 0, 0, 0); } } - + public static AttributeSupplier.Builder createMobAttributes() { return LivingEntity.createLivingAttributes() .add(Attributes.MAX_HEALTH, 2.0) .add(Attributes.FOLLOW_RANGE, 16.0) .add(Attributes.MOVEMENT_SPEED, 0.75); } - + public int getVariant() { return (int) this.entityData.get(VARIANT); } - + public byte getByteScale() { return this.entityData.get(SCALE); } - + public float getScale() { return getByteScale() / 32F + 0.75F; } - + public static boolean canSpawn(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { AABB box = new AABB(pos).inflate(16); - List list = world.getEntitiesOfClass(EndFishEntity.class, box, (entity) -> { - return true; - }); + List list = world.getEntitiesOfClass(EndFishEntity.class, box, (entity) -> { return true; }); return list.size() < 9; } - + @Override protected void dropFromLootTable(DamageSource source, boolean causedByPlayer) { ItemEntity drop = new ItemEntity(level, getX(), getY(), getZ(), new ItemStack(EndItems.END_FISH_RAW)); diff --git a/src/main/java/ru/betterend/entity/EndSlimeEntity.java b/src/main/java/ru/betterend/entity/EndSlimeEntity.java index 00a8c861..24662f26 100644 --- a/src/main/java/ru/betterend/entity/EndSlimeEntity.java +++ b/src/main/java/ru/betterend/entity/EndSlimeEntity.java @@ -1,5 +1,9 @@ package ru.betterend.entity; +import java.util.EnumSet; +import java.util.List; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.particles.ParticleOptions; @@ -41,19 +45,15 @@ import ru.bclib.world.biomes.BCLBiome; import ru.betterend.interfaces.ISlime; import ru.betterend.registry.EndBiomes; -import java.util.EnumSet; -import java.util.List; -import java.util.Random; - public class EndSlimeEntity extends Slime { private static final EntityDataAccessor VARIANT = SynchedEntityData.defineId(EndSlimeEntity.class, EntityDataSerializers.BYTE); private static final MutableBlockPos POS = new MutableBlockPos(); - + public EndSlimeEntity(EntityType entityType, Level world) { super(entityType, world); this.moveControl = new EndSlimeMoveControl(this); } - + protected void registerGoals() { this.goalSelector.addGoal(1, new SwimmingGoal()); this.goalSelector.addGoal(2, new FaceTowardTargetGoal()); @@ -64,7 +64,7 @@ public class EndSlimeEntity extends Slime { })); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal(this, IronGolem.class, true)); } - + public static AttributeSupplier.Builder createMobAttributes() { return LivingEntity.createLivingAttributes() .add(Attributes.MAX_HEALTH, 1.0D) @@ -72,7 +72,7 @@ public class EndSlimeEntity extends Slime { .add(Attributes.FOLLOW_RANGE, 16.0D) .add(Attributes.MOVEMENT_SPEED, 0.15D); } - + @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, SpawnGroupData entityData, CompoundTag entityTag) { SpawnGroupData data = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityTag); @@ -95,7 +95,7 @@ public class EndSlimeEntity extends Slime { super.defineSynchedData(); this.entityData.define(VARIANT, (byte) 0); } - + @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); @@ -114,9 +114,9 @@ public class EndSlimeEntity extends Slime { protected ParticleOptions getParticleType() { return ParticleTypes.PORTAL; } - + @Override - public void remove(RemovalReason reason) { + public void remove() { int i = this.getSize(); if (!this.level.isClientSide && i > 1 && this.isDeadOrDying()) { Component text = this.getCustomName(); @@ -125,7 +125,7 @@ public class EndSlimeEntity extends Slime { int j = i / 2; int k = 2 + this.random.nextInt(3); int type = this.getSlimeType(); - + for (int l = 0; l < k; ++l) { float g = ((float) (l % 2) - 0.5F) * f; float h = ((float) (l / 2) - 0.5F) * f; @@ -144,10 +144,9 @@ public class EndSlimeEntity extends Slime { this.level.addFreshEntity(slimeEntity); } } - - ((ISlime) this).entityRemove(reason); + this.removed = true; } - + @Override protected void dropFromLootTable(DamageSource source, boolean causedByPlayer) { int maxCount = this.getSize(); @@ -163,15 +162,15 @@ public class EndSlimeEntity extends Slime { ItemEntity drop = new ItemEntity(level, getX(), getY(), getZ(), new ItemStack(Items.SLIME_BALL, count)); this.level.addFreshEntity(drop); } - + public int getSlimeType() { return this.entityData.get(VARIANT).intValue(); } - + public void setSlimeType(int value) { this.entityData.set(VARIANT, (byte) value); } - + protected void setMossy() { setSlimeType(1); } @@ -179,7 +178,7 @@ public class EndSlimeEntity extends Slime { public boolean isMossy() { return getSlimeType() == 1; } - + protected void setLake() { setSlimeType(2); } @@ -187,7 +186,7 @@ public class EndSlimeEntity extends Slime { public boolean isLake() { return getSlimeType() == 2; } - + protected void setAmber(boolean mossy) { this.entityData.set(VARIANT, (byte) 3); } @@ -195,28 +194,26 @@ public class EndSlimeEntity extends Slime { public boolean isAmber() { return this.entityData.get(VARIANT) == 3; } - + public boolean isChorus() { return this.entityData.get(VARIANT) == 0; } - + public static boolean canSpawn(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { return random.nextInt(16) == 0 || isPermanentBiome(world, pos) || (notManyEntities(world, pos, 32, 3) && isWaterNear(world, pos, 32, 8)); } - + private static boolean isPermanentBiome(ServerLevelAccessor world, BlockPos pos) { Biome biome = world.getBiome(pos); return BiomeAPI.getFromBiome(biome) == EndBiomes.CHORUS_FOREST; } - + private static boolean notManyEntities(ServerLevelAccessor world, BlockPos pos, int radius, int maxCount) { AABB box = new AABB(pos).inflate(radius); - List list = world.getEntitiesOfClass(EndSlimeEntity.class, box, (entity) -> { - return true; - }); + List list = world.getEntitiesOfClass(EndSlimeEntity.class, box, (entity) -> { return true; }); return list.size() <= maxCount; } - + private static boolean isWaterNear(ServerLevelAccessor world, BlockPos pos, int radius, int radius2) { for (int x = pos.getX() - radius; x <= pos.getX() + radius; x++) { POS.setX(x); @@ -232,7 +229,7 @@ public class EndSlimeEntity extends Slime { } return false; } - + class MoveGoal extends Goal { public MoveGoal() { this.setFlags(EnumSet.of(Goal.Flag.JUMP, Goal.Flag.MOVE)); @@ -242,7 +239,7 @@ public class EndSlimeEntity extends Slime { if (EndSlimeEntity.this.isPassenger()) { return false; } - + float yaw = EndSlimeEntity.this.getYHeadRot(); float speed = EndSlimeEntity.this.getSpeed(); if (speed > 0.1) { @@ -252,7 +249,7 @@ public class EndSlimeEntity extends Slime { int down = BlocksHelper.downRay(EndSlimeEntity.this.level, pos, 16); return down < 5; } - + return true; } @@ -293,9 +290,9 @@ public class EndSlimeEntity extends Slime { public boolean canUse() { return EndSlimeEntity.this.getTarget() == null && (EndSlimeEntity.this.onGround - || EndSlimeEntity.this.isInWater() - || EndSlimeEntity.this.isInLava() - || EndSlimeEntity.this.hasEffect(MobEffects.LEVITATION)) + || EndSlimeEntity.this.isInWater() + || EndSlimeEntity.this.isInLava() + || EndSlimeEntity.this.hasEffect(MobEffects.LEVITATION)) && EndSlimeEntity.this.getMoveControl() instanceof EndSlimeMoveControl; } @@ -325,7 +322,7 @@ public class EndSlimeEntity extends Slime { return false; } else { - return livingEntity instanceof Player && ((Player) livingEntity).getAbilities().invulnerable ? false : EndSlimeEntity.this.getMoveControl() instanceof EndSlimeMoveControl; + return livingEntity instanceof Player && ((Player) livingEntity).abilities.invulnerable ? false : EndSlimeEntity.this.getMoveControl() instanceof EndSlimeMoveControl; } } @@ -342,7 +339,7 @@ public class EndSlimeEntity extends Slime { else if (!livingEntity.isAlive()) { return false; } - else if (livingEntity instanceof Player && ((Player) livingEntity).getAbilities().invulnerable) { + else if (livingEntity instanceof Player && ((Player) livingEntity).abilities.invulnerable) { return false; } else { @@ -352,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.getYRot(), EndSlimeEntity.this.isDealsDamage()); + ((EndSlimeMoveControl) EndSlimeEntity.this.getMoveControl()).look(EndSlimeEntity.this.yRot, EndSlimeEntity.this.isDealsDamage()); } } @@ -363,7 +360,7 @@ public class EndSlimeEntity extends Slime { public EndSlimeMoveControl(EndSlimeEntity slime) { super(slime); - this.targetYaw = 180.0F * slime.getYRot() / 3.1415927F; + this.targetYaw = 180.0F * slime.yRot / 3.1415927F; } public void look(float targetYaw, boolean jumpOften) { @@ -377,9 +374,9 @@ public class EndSlimeEntity extends Slime { } public void tick() { - this.mob.setYRot(this.rotlerp(this.mob.getYRot(), this.targetYaw, 90.0F)); - this.mob.yHeadRot = this.mob.getYRot(); - this.mob.yBodyRot = this.mob.getYRot(); + this.mob.yRot = this.rotlerp(this.mob.yRot, this.targetYaw, 90.0F); + this.mob.yHeadRot = this.mob.yRot; + this.mob.yBodyRot = this.mob.yRot; if (this.operation != MoveControl.Operation.MOVE_TO) { this.mob.setZza(0.0F); } diff --git a/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java b/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java index b5c08d8d..100bccac 100644 --- a/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java +++ b/src/main/java/ru/betterend/entity/ShadowWalkerEntity.java @@ -1,5 +1,8 @@ package ru.betterend.entity; +import java.util.List; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; @@ -26,14 +29,11 @@ import net.minecraft.world.phys.AABB; import ru.bclib.util.MHelper; import ru.betterend.registry.EndSounds; -import java.util.List; -import java.util.Random; - public class ShadowWalkerEntity extends Monster { public ShadowWalkerEntity(EntityType entityType, Level world) { super(entityType, world); } - + @Override protected void registerGoals() { this.goalSelector.addGoal(2, new AttackGoal(this, 1.0D, false)); @@ -51,7 +51,7 @@ public class ShadowWalkerEntity extends Monster { .add(Attributes.ARMOR, 2.0) .add(Attributes.SPAWN_REINFORCEMENTS_CHANCE); } - + @Override public void tick() { super.tick(); @@ -71,7 +71,7 @@ public class ShadowWalkerEntity extends Monster { getZ() + random.nextGaussian() * 0.2, 0, 0, 0); } - + @Override protected SoundEvent getAmbientSound() { return EndSounds.ENTITY_SHADOW_WALKER; @@ -88,19 +88,18 @@ public class ShadowWalkerEntity extends Monster { } @Override - protected void playStepSound(BlockPos pos, BlockState state) { - } - + protected void playStepSound(BlockPos pos, BlockState state) {} + @Override protected float getSoundVolume() { return MHelper.randRange(0.25F, 0.5F, random); } - + @Override - public float getVoicePitch() { + protected float getVoicePitch() { return MHelper.randRange(0.75F, 1.25F, random); } - + @Override public boolean doHurtTarget(Entity target) { boolean attack = super.doHurtTarget(target); @@ -112,26 +111,24 @@ public class ShadowWalkerEntity extends Monster { } return attack; } - + public static boolean canSpawn(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { if (Monster.checkMonsterSpawnRules(type, world, spawnReason, pos, random)) { AABB box = new AABB(pos).inflate(16); - List entities = world.getEntitiesOfClass(ShadowWalkerEntity.class, box, (entity) -> { - return true; - }); + List entities = world.getEntitiesOfClass(ShadowWalkerEntity.class, box, (entity) -> { return true; }); return entities.size() < 6; } return false; } - + private final class AttackGoal extends MeleeAttackGoal { private final ShadowWalkerEntity walker; private int ticks; public AttackGoal(ShadowWalkerEntity walker, double speed, boolean pauseWhenMobIdle) { - super(walker, speed, pauseWhenMobIdle); - this.walker = walker; - } + super(walker, speed, pauseWhenMobIdle); + this.walker = walker; + } public void start() { super.start(); diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java index 05192a8a..4c54e387 100644 --- a/src/main/java/ru/betterend/entity/SilkMothEntity.java +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -1,5 +1,11 @@ package ru.betterend.entity; +import java.util.EnumSet; +import java.util.List; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; + import net.minecraft.core.BlockPos; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; @@ -10,8 +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.AgeableMob; -import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.AgableMob; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.Mob; @@ -26,8 +31,7 @@ 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; import net.minecraft.world.entity.item.ItemEntity; @@ -42,7 +46,6 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.pathfinder.BlockPathTypes; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -import org.jetbrains.annotations.Nullable; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.BetterEnd; @@ -51,15 +54,11 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndItems; -import java.util.EnumSet; -import java.util.List; -import java.util.Random; - public class SilkMothEntity extends Animal implements FlyingAnimal { private BlockPos hivePos; private BlockPos entrance; private Level hiveWorld; - + public SilkMothEntity(EntityType entityType, Level world) { super(entityType, world); this.moveControl = new FlyingMoveControl(this, 20, true); @@ -68,7 +67,7 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); this.xpReward = 1; } - + public static AttributeSupplier.Builder createMobAttributes() { return LivingEntity.createLivingAttributes() .add(Attributes.MAX_HEALTH, 2.0D) @@ -76,17 +75,17 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { .add(Attributes.FLYING_SPEED, 0.4D) .add(Attributes.MOVEMENT_SPEED, 0.1D); } - + public void setHive(Level world, BlockPos hive) { this.hivePos = hive; this.hiveWorld = world; } - + @Override public boolean canBeLeashed(Player player) { return false; } - + @Override public void addAdditionalSaveData(CompoundTag tag) { if (hivePos != null) { @@ -94,7 +93,7 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { tag.putString("HiveWorld", hiveWorld.dimension().location().toString()); } } - + @Override public void readAdditionalSaveData(CompoundTag tag) { if (tag.contains("HivePos")) { @@ -118,7 +117,7 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { this.goalSelector.addGoal(8, new WanderAroundGoal()); this.goalSelector.addGoal(9, new FloatGoal(this)); } - + @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation birdNavigation = new FlyingPathNavigation(this, world) { @@ -143,18 +142,18 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { } @Override - public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { + protected boolean makeFlySound() { + return true; + } + + @Override + public boolean causeFallDamage(float fallDistance, float damageMultiplier) { return false; } @Override - protected Entity.MovementEmission getMovementEmission() { - return Entity.MovementEmission.EVENTS; - } - - @Override - public boolean isFlying() { - return !this.onGround; + public boolean isMovementNoisy() { + return false; } @Override @@ -163,10 +162,10 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { } @Override - public AgeableMob getBreedOffspring(ServerLevel world, AgeableMob entity) { + public AgableMob getBreedOffspring(ServerLevel world, AgableMob entity) { return EndEntities.SILK_MOTH.create(world); } - + @Override protected void dropFromLootTable(DamageSource source, boolean causedByPlayer) { int minCount = 0; @@ -183,18 +182,18 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { ItemEntity drop = new ItemEntity(level, getX(), getY(), getZ(), new ItemStack(EndItems.SILK_FIBER, count)); this.level.addFreshEntity(drop); } - + public static boolean canSpawn(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, Random random) { int y = world.getChunk(pos).getHeight(Types.WORLD_SURFACE, pos.getX() & 15, pos.getY() & 15); return y > 0 && pos.getY() >= y && notManyEntities(world, pos, 32, 1); } - + private static boolean notManyEntities(ServerLevelAccessor world, BlockPos pos, int radius, int maxCount) { AABB box = new AABB(pos).inflate(radius); List list = world.getEntitiesOfClass(SilkMothEntity.class, box, (entity) -> true); return list.size() <= maxCount; } - + class MothLookControl extends LookControl { MothLookControl(Mob entity) { super(entity); @@ -233,24 +232,23 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { try { SilkMothEntity.this.navigation.moveTo(SilkMothEntity.this.navigation.createPath(new BlockPos(vec3d), 1), 1.0D); } - catch (Exception e) { - } + catch (Exception e) {} } } @Nullable private Vec3 getRandomLocation() { Vec3 vec3d3 = SilkMothEntity.this.getViewVector(0.0F); - 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); + 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); } } - + class ReturnToHiveGoal extends Goal { ReturnToHiveGoal() { this.setFlags(EnumSet.of(Goal.Flag.MOVE)); } - + @Override public boolean canUse() { return SilkMothEntity.this.hivePos != null @@ -259,12 +257,12 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { && SilkMothEntity.this.random.nextInt(16) == 0 && SilkMothEntity.this.position().distanceToSqr(SilkMothEntity.this.hivePos.getX(), SilkMothEntity.this.hivePos.getY(), SilkMothEntity.this.hivePos.getZ()) < 64; } - + @Override public boolean canContinueToUse() { return SilkMothEntity.this.navigation.isInProgress() && level.getBlockState(entrance).isAir() && (level.getBlockState(hivePos).is(EndBlocks.SILK_MOTH_NEST) || level.getBlockState(hivePos).is(EndBlocks.SILK_MOTH_HIVE)); } - + @Override public void start() { BlockState state = SilkMothEntity.this.level.getBlockState(SilkMothEntity.this.hivePos); @@ -276,10 +274,9 @@ public class SilkMothEntity extends Animal implements FlyingAnimal { SilkMothEntity.this.entrance = SilkMothEntity.this.hivePos.relative(state.getValue(BlockStateProperties.HORIZONTAL_FACING)); SilkMothEntity.this.navigation.moveTo(SilkMothEntity.this.navigation.createPath(entrance, 1), 1.0D); } - catch (Exception e) { - } + catch (Exception e) {} } - + @Override public void tick() { super.tick(); @@ -302,7 +299,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.discard(); + SilkMothEntity.this.remove(); } else { SilkMothEntity.this.hivePos = null; diff --git a/src/main/java/ru/betterend/entity/model/BlockBenchModel.java b/src/main/java/ru/betterend/entity/model/BlockBenchModel.java index 24e18c09..cb0758ad 100644 --- a/src/main/java/ru/betterend/entity/model/BlockBenchModel.java +++ b/src/main/java/ru/betterend/entity/model/BlockBenchModel.java @@ -1,22 +1,22 @@ package ru.betterend.entity.model; +import java.util.function.Function; + import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.renderer.RenderType; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; -import java.util.function.Function; - public abstract class BlockBenchModel extends EntityModel { public BlockBenchModel() { super(); } - + public BlockBenchModel(Function function) { super(function); } - + protected void setRotationAngle(ModelPart modelRenderer, float x, float y, float z) { modelRenderer.xRot = x; modelRenderer.yRot = y; diff --git a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java index fd0f9f75..91f0abda 100644 --- a/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/CubozoaEntityModel.java @@ -2,82 +2,96 @@ 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 static int TENTACLE_COUNT = 4; - private final ModelPart model; - private final ModelPart[] tentacle_center; - private final ModelPart[] tentacle; + 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; - 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) - ); - - 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)); - - 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, i * 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)); - } - - return LayerDefinition.create(modelData, 48, 48); - } - - public CubozoaEntityModel(ModelPart modelPart) { + public CubozoaEntityModel() { super(RenderType::entityTranslucent); - tentacle = new ModelPart[TENTACLE_COUNT]; - tentacle_center = new ModelPart[TENTACLE_COUNT]; + + texWidth = 48; + texHeight = 48; + + 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 = modelPart.getChild(PartNames.BODY); - for (int i = 1; i <= TENTACLE_COUNT; i++) { - tentacle_center[i - 1] = model.getChild("tentacle_center_" + i); - tentacle[i - 1] = tentacle_center[i - 1].getChild("tentacle_" + i); - } + 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); + + 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); + tentacle_center_1.addChild(tentacle_1); + tentacle_1.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_2 = new ModelPart(this); + 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); + tentacle_center_2.addChild(tentacle_2); + tentacle_2.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_3 = new ModelPart(this); + 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); + tentacle_center_3.addChild(tentacle_3); + tentacle_3.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_4 = new ModelPart(this); + 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; - - for (int i = 0; i < TENTACLE_COUNT; i++) { - tentacle[i].xRot = sin * 0.15f; - } + + tentacle_1.xRot = sin * 0.15F; + tentacle_2.xRot = sin * 0.15F; + tentacle_3.xRot = sin * 0.15F; + tentacle_4.xRot = sin * 0.15F; } @Override diff --git a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java index 6490d8ca..88162bc2 100644 --- a/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/DragonflyEntityModel.java @@ -2,13 +2,8 @@ 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 ru.betterend.entity.DragonflyEntity; @@ -24,112 +19,70 @@ public class DragonflyEntityModel extends BlockBenchModel { private final ModelPart legs_1; private final ModelPart legs_2; - public static LayerDefinition getTexturedModelData() { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - 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) - ); - - return LayerDefinition.create(modelData, 64, 64); - } - - public DragonflyEntityModel(ModelPart modelPart) { + public DragonflyEntityModel() { super(RenderType::entityCutout); - model = modelPart.getChild(PartNames.BODY); - 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); + texWidth = 64; + texHeight = 64; + + 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); + + 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); + + 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); + + 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); + 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_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_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_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); + + 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) { + public void setupAnim(DragonflyEntity entity, float limbAngle, float limbDistance, float animationProgress, + float headYaw, float headPitch) { float progress = animationProgress * 2F; wing_1.zRot = 0.3491F + (float) Math.sin(progress) * 0.3491F; @@ -146,7 +99,8 @@ public class DragonflyEntityModel extends BlockBenchModel { } @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + 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/model/EndFishEntityModel.java b/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java index 8a4860e3..ebfe8f7b 100644 --- a/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/EndFishEntityModel.java @@ -2,13 +2,8 @@ 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 ru.betterend.entity.EndFishEntity; @@ -20,75 +15,50 @@ public class EndFishEntityModel extends BlockBenchModel { private final ModelPart fin_right; private final ModelPart fin_left; - public static LayerDefinition getTexturedModelData() { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); - - 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) - ); - - bodyPart.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) - ); - - bodyPart.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) - ); - - bodyPart.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) - ); - - bodyPart.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) - ); - - bodyPart.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) - ); - - return LayerDefinition.create(modelData, 32, 32); - } - - public EndFishEntityModel(ModelPart modelPart) { + public EndFishEntityModel() { super(RenderType::entityCutout); - model = modelPart.getChild(PartNames.BODY); - fin_top = model.getChild(PartNames.TOP_FIN); - fin_bottom = model.getChild(PartNames.BOTTOM_FIN); - flipper = model.getChild(PartNames.TAIL_FIN); - fin_right = model.getChild(PartNames.RIGHT_FIN); - fin_left = model.getChild(PartNames.LEFT_FIN); + texWidth = 32; + texHeight = 32; + + 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); + + fin_top = new ModelPart(this); + 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_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); + + 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); + + 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_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); } @Override - public void setupAnim(EndFishEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + public void setupAnim(EndFishEntity entity, float limbAngle, float limbDistance, float animationProgress, + float headYaw, float headPitch) { float s1 = (float) Math.sin(animationProgress * 0.1); float s2 = (float) Math.sin(animationProgress * 0.05); flipper.yRot = s1 * 0.3F; @@ -99,7 +69,8 @@ public class EndFishEntityModel extends BlockBenchModel { } @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + 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/model/EndSlimeEntityModel.java b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java index 3fda3e2b..5d3bb97d 100644 --- a/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/EndSlimeEntityModel.java @@ -3,131 +3,69 @@ package ru.betterend.entity.model; import com.google.common.collect.ImmutableList; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; + import net.minecraft.client.model.ListModel; -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.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; -import ru.betterend.registry.EndEntitiesRenders; 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 static LayerDefinition getShellOnlyTexturedModelData() { - return getTexturedModelData(true); - } - - public static LayerDefinition getCompleteTexturedModelData() { - return getTexturedModelData(false); - } - - private static LayerDefinition getTexturedModelData(boolean onlyShell) { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); - - if (onlyShell) { - modelPartData.addOrReplaceChild(PartNames.BODY, - CubeListBuilder - .create() - .texOffs(0, 0) - .addBox(-4.0F, 16.0F, -4.0F, 8.0F, 8.0F, 8.0F), - PartPose.ZERO - ); - } - else { - modelPartData.addOrReplaceChild(PartNames.BODY, - CubeListBuilder - .create() - .texOffs(0, 16) - .addBox(-3.0F, 17.0F, -3.0F, 6.0F, 6.0F, 6.0F), - PartPose.ZERO - ); - - 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 - ); - - 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 - ); - - modelPartData.addOrReplaceChild(PartNames.MOUTH, - CubeListBuilder - .create() - .texOffs(32, 8) - .addBox(0.0F, 21.0F, -3.5F, 1.0F, 1.0F, 1.0F), - PartPose.ZERO - ); - - 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) - ); - } - } - - return LayerDefinition.create(modelData, 64, 32); - } - - public EndSlimeEntityModel(EntityModelSet modelSet, boolean onlyShell) { + public EndSlimeEntityModel(boolean onlyShell) { super(RenderType::entityCutout); - ModelPart modelPart = modelSet.bakeLayer(onlyShell ? EndEntitiesRenders.END_SLIME_SHELL_MODEL : EndEntitiesRenders.END_SLIME_MODEL); + 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); - innerCube = modelPart.getChild(PartNames.BODY); - 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; + if (onlyShell) { + 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); + + for (int i = 0; i < 4; i++) { + ModelPart petalRot = new ModelPart(this); + petalRot.yRot = MHelper.degreesToRadians(i * 45F); + + ModelPart petal = new ModelPart(this, 40, 0); + petal.setPos(-4, 8, 0); + petal.addBox(0.0F, 0.0F, 0.0F, 8.0F, 8.0F, 0.0F, 0.0F); + + this.flower.addChild(petalRot); + petalRot.addChild(petal); + } + + for (int i = 0; i < 2; i++) { + ModelPart petalRot = new ModelPart(this); + petalRot.yRot = MHelper.degreesToRadians(i * 90F + 45F); + + ModelPart petal = new ModelPart(this, 40, 0); + petal.setPos(-4, 8, 0); + petal.addBox(0.0F, 0.0F, 0.0F, 8.0F, 8.0F, 0.0F, 0.0F); + + this.crop.addChild(petalRot); + petalRot.addChild(petal); + } } } @Override - public void setupAnim(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + public void setupAnim(T entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, + float headPitch) { } public void renderFlower(PoseStack matrices, VertexConsumer vertices, int light, int overlay) { @@ -138,17 +76,8 @@ public class EndSlimeEntityModel extends ListModel crop.render(matrices, vertices, light, overlay); } - private boolean isOnlyShell() { - return rightEye == null; - } - @Override public Iterable parts() { - if (isOnlyShell()) { - return ImmutableList.of(this.innerCube); - } - else { - return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth); - } + return ImmutableList.of(this.innerCube, this.rightEye, this.leftEye, this.mouth); } } diff --git a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java index c0f156b8..5d21fafe 100644 --- a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java +++ b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java @@ -2,13 +2,8 @@ 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.SilkMothEntity; @@ -30,154 +25,98 @@ public class SilkMothEntityModel extends BlockBenchModel { private final ModelPart wingL_r1; private final ModelPart abdomen_r1; - 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() - .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() - .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() - .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) - ); - - 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() - .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() - .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() - .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() - .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() - .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() - .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() - .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() - .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() - .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() - .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) - ); - - return LayerDefinition.create(modelData, 64, 64); - } - - public SilkMothEntityModel(ModelPart modelPart) { + public SilkMothEntityModel() { super(RenderType::entityCutout); - 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"); + texWidth = 64; + texHeight = 64; + + legsL = new ModelPart(this); + legsL.setPos(1.5F, 19.9F, -0.45F); + setRotationAngle(legsL, 0.0F, 0.0F, 0.6981F); + + cube_r1 = new ModelPart(this); + 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); + + cube_r2 = new ModelPart(this); + 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); + + cube_r3 = new ModelPart(this); + 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); + + legsR = new ModelPart(this); + legsR.setPos(-1.5F, 19.9F, -0.55F); + setRotationAngle(legsR, 0.0F, 3.1416F, -0.6545F); + + cube_r4 = new ModelPart(this); + 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); + + cube_r5 = new ModelPart(this); + 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); + + cube_r6 = new ModelPart(this); + 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); + + head_pivot = new ModelPart(this); + 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); + + tendril_r_r1 = new ModelPart(this); + 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); + + tendril_r_r2 = new ModelPart(this); + 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); + + bb_main = new ModelPart(this); + 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); + + wingR_r1 = new ModelPart(this); + 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); + + wingL_r1 = new ModelPart(this); + 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); + + abdomen_r1 = new ModelPart(this); + 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); } @Override - public void setupAnim(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + 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; @@ -189,7 +128,8 @@ public class SilkMothEntityModel extends BlockBenchModel { } @Override - public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + 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); diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java index e04d4082..5b6b78fe 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityCubozoa.java @@ -2,9 +2,10 @@ package ru.betterend.entity.render; 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.EntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -12,14 +13,13 @@ 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(EntityRendererProvider.Context ctx) { - super(ctx, new CubozoaEntityModel(ctx.bakeLayer(EndEntitiesRenders.CUBOZOA_MODEL)), 0.5f); + public RendererEntityCubozoa(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new CubozoaEntityModel(), 0.5f); this.addLayer(new EyesLayer(this) { @Override public RenderType renderType() { @@ -31,7 +31,7 @@ public class RendererEntityCubozoa 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")); + 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(EntityRendererProvider.Context ctx) { - super(ctx, new DragonflyEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f); - this.addLayer(new EyesLayer(this) { - @Override - public RenderType renderType() { - return GLOW; - } - }); - } + public RendererEntityDragonfly(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new DragonflyEntityModel(), 0.5f); + this.addLayer(new EyesLayer(this) { + @Override + public RenderType renderType() { + return GLOW; + } + }); + } - @Override - public ResourceLocation getTextureLocation(DragonflyEntity entity) { - return TEXTURE; - } + @Override + public ResourceLocation getTextureLocation(DragonflyEntity entity) { + return TEXTURE; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java index fc8246e7..fce70f61 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityEndFish.java @@ -2,9 +2,10 @@ package ru.betterend.entity.render; 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.EntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.texture.OverlayTexture; @@ -12,14 +13,13 @@ import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; import ru.betterend.entity.EndFishEntity; 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(EntityRendererProvider.Context ctx) { - super(ctx, new EndFishEntityModel(ctx.bakeLayer(EndEntitiesRenders.END_FISH_MODEL)), 0.5f); + public RendererEntityEndFish(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new EndFishEntityModel(), 0.5f); this.addLayer(new EyesLayer(this) { @Override public RenderType renderType() { @@ -28,8 +28,8 @@ public class RendererEntityEndFish extends MobRenderer(ctx.getModelSet(), false), 0.25f); - this.addLayer(new OverlayFeatureRenderer(this, ctx)); + public RendererEntityEndSlime(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new EndSlimeEntityModel(false), 0.25F); + this.addLayer(new OverlayFeatureRenderer(this)); this.addLayer(new EyesLayer>(this) { @Override public RenderType renderType() { @@ -32,8 +33,8 @@ public class RendererEntityEndSlime extends MobRenderer extends RenderLayer> { - private final EndSlimeEntityModel modelOrdinal; - private final EndSlimeEntityModel modelLake; + private final EndSlimeEntityModel modelOrdinal = new EndSlimeEntityModel(true); + private final EndSlimeEntityModel modelLake = new EndSlimeEntityModel(true); - public OverlayFeatureRenderer(RenderLayerParent> featureRendererContext, EntityRendererProvider.Context ctx) { + public OverlayFeatureRenderer(RenderLayerParent> featureRendererContext) { super(featureRendererContext); - modelOrdinal = new EndSlimeEntityModel<>(ctx.getModelSet(), true); - modelLake = new EndSlimeEntityModel<>(ctx.getModelSet(), true); } public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity, - float f, float g, float h, float j, float k, float l) { + float f, float g, float h, float j, float k, float l) { if (!livingEntity.isInvisible()) { if (livingEntity.isLake()) { VertexConsumer vertexConsumer = vertexConsumerProvider .getBuffer(RenderType.entityCutout(this.getTextureLocation(livingEntity))); this.getParentModel().renderFlower(matrixStack, vertexConsumer, i, LivingEntityRenderer.getOverlayCoords(livingEntity, 0.0F)); - } - else if (livingEntity.isAmber() || livingEntity.isChorus()) { + } else if (livingEntity.isAmber() || livingEntity.isChorus()) { VertexConsumer vertexConsumer = vertexConsumerProvider .getBuffer(RenderType.entityCutout(this.getTextureLocation(livingEntity))); this.getParentModel().renderCrop(matrixStack, vertexConsumer, i, diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java b/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java index cf51c758..d75db944 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityShadowWalker.java @@ -1,8 +1,7 @@ package ru.betterend.entity.render; import net.minecraft.client.model.PlayerModel; -import net.minecraft.client.model.geom.ModelLayers; -import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.HumanoidMobRenderer; import net.minecraft.resources.ResourceLocation; import ru.betterend.BetterEnd; @@ -12,9 +11,8 @@ public class RendererEntityShadowWalker extends HumanoidMobRenderer> { private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/shadow_walker.png"); - 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); + public RendererEntityShadowWalker(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new PlayerModel(0.0F, false), 0.5F); } @Override diff --git a/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java index 089e6e44..7d3a2745 100644 --- a/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java +++ b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java @@ -1,22 +1,21 @@ package ru.betterend.entity.render; -import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; 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.SilkMothEntityModel; -import ru.betterend.registry.EndEntitiesRenders; public class SilkMothEntityRenderer extends MobRenderer { - private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/silk_moth.png"); + private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/silk_moth.png"); - public SilkMothEntityRenderer(EntityRendererProvider.Context ctx) { - super(ctx, new SilkMothEntityModel(ctx.bakeLayer(EndEntitiesRenders.SILK_MOTH_MODEL)), 0.5f); - } + public SilkMothEntityRenderer(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new SilkMothEntityModel(), 0.5f); + } - @Override - public ResourceLocation getTextureLocation(SilkMothEntity entity) { - return TEXTURE; - } + @Override + public ResourceLocation getTextureLocation(SilkMothEntity entity) { + return TEXTURE; + } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/events/ItemTooltipCallback.java b/src/main/java/ru/betterend/events/ItemTooltipCallback.java index f0a70655..3173e5f6 100644 --- a/src/main/java/ru/betterend/events/ItemTooltipCallback.java +++ b/src/main/java/ru/betterend/events/ItemTooltipCallback.java @@ -1,5 +1,7 @@ package ru.betterend.events; +import java.util.List; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.fabric.api.event.Event; @@ -9,8 +11,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -import java.util.List; - @Environment(EnvType.CLIENT) public interface ItemTooltipCallback { /** diff --git a/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java b/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java index 29d0f1aa..8c6aca1a 100644 --- a/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java +++ b/src/main/java/ru/betterend/events/PlayerAdvancementsCallback.java @@ -6,7 +6,7 @@ import net.minecraft.advancements.Advancement; import net.minecraft.server.level.ServerPlayer; public interface PlayerAdvancementsCallback { - + Event PLAYER_ADVANCEMENT_COMPLETE = EventFactory.createArrayBacked(PlayerAdvancementsCallback.class, callbacks -> (player, advancement, criterionName) -> { for (PlayerAdvancementsCallback event : callbacks) { event.onAdvancementComplete(player, advancement, criterionName); diff --git a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java index 49c56ea1..c123c9a9 100644 --- a/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java +++ b/src/main/java/ru/betterend/integration/FlamboyantRefabricatedIntegration.java @@ -1,6 +1,10 @@ package ru.betterend.integration; +import java.awt.Color; +import java.util.Map; + import com.google.common.collect.Maps; + import net.minecraft.world.level.ItemLike; import ru.bclib.integration.ModIntegration; import ru.bclib.util.ColorUtil; @@ -8,9 +12,6 @@ import ru.betterend.blocks.HydraluxPetalColoredBlock; import ru.betterend.blocks.complex.ColoredMaterial; import ru.betterend.registry.EndBlocks; -import java.awt.Color; -import java.util.Map; - public class FlamboyantRefabricatedIntegration extends ModIntegration { public FlamboyantRefabricatedIntegration() { super("flamboyant"); @@ -20,7 +21,7 @@ public class FlamboyantRefabricatedIntegration extends ModIntegration { public void init() { Map colors = Maps.newHashMap(); Map dyes = Maps.newHashMap(); - + addColor("fead1d", "amber", colors, dyes); addColor("bd9a5f", "beige", colors, dyes); addColor("edeada", "cream", colors, dyes); @@ -37,15 +38,15 @@ public class FlamboyantRefabricatedIntegration extends ModIntegration { addColor("6bb1cf", "sky_blue", colors, dyes); addColor("6e8c9c", "slate_gray", colors, dyes); addColor("b02454", "violet", colors, dyes); - + new ColoredMaterial(HydraluxPetalColoredBlock::new, EndBlocks.HYDRALUX_PETAL_BLOCK, colors, dyes, true); } - + private void addColor(String hex, String name, Map colors, Map dyes) { int color = ColorUtil.color(hex); colors.put(color, name); dyes.put(color, getItem(name + "_dye")); - + System.out.println(name + " " + color + " " + new Color(color)); } } diff --git a/src/main/java/ru/betterend/integration/Integrations.java b/src/main/java/ru/betterend/integration/Integrations.java index d4a90d55..f611af4d 100644 --- a/src/main/java/ru/betterend/integration/Integrations.java +++ b/src/main/java/ru/betterend/integration/Integrations.java @@ -18,35 +18,35 @@ public class Integrations { public static final ModIntegration BYG = ModIntegrationAPI.register(new BYGIntegration()); public static final ModIntegration NOURISH = ModIntegrationAPI.register(new NourishIntegration()); public static final ModIntegration FLAMBOYANT_REFABRICATED = ModIntegrationAPI.register(new FlamboyantRefabricatedIntegration()); - + private static boolean hasHydrogen; - + public static void init() { if (hasGuideBook()) { GuideBookItem.register(); - + PlayerAdvancementsCallback.PLAYER_ADVANCEMENT_COMPLETE.register((player, advancement, criterionName) -> { ResourceLocation advId = new ResourceLocation("minecraft:end/enter_end_gateway"); if (advId.equals(advancement.getId())) { player.addItem(new ItemStack(GuideBookItem.GUIDE_BOOK)); } }); - + GridRecipe.make(BetterEnd.MOD_ID, "guide_book", GuideBookItem.GUIDE_BOOK) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("D", "B", "C") - .addMaterial('D', EndItems.ENDER_DUST) - .addMaterial('B', Items.BOOK) - .addMaterial('C', EndItems.CRYSTAL_SHARDS) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("D", "B", "C") + .addMaterial('D', EndItems.ENDER_DUST) + .addMaterial('B', Items.BOOK) + .addMaterial('C', EndItems.CRYSTAL_SHARDS) + .build(); } hasHydrogen = FabricLoader.getInstance().isModLoaded("hydrogen"); } - + public static boolean hasGuideBook() { return FabricLoader.getInstance().isModLoaded("patchouli"); } - + public static boolean hasHydrogen() { return hasHydrogen; } diff --git a/src/main/java/ru/betterend/integration/NourishIntegration.java b/src/main/java/ru/betterend/integration/NourishIntegration.java index abed1ced..71f6cd47 100644 --- a/src/main/java/ru/betterend/integration/NourishIntegration.java +++ b/src/main/java/ru/betterend/integration/NourishIntegration.java @@ -17,39 +17,39 @@ public class NourishIntegration extends ModIntegration { Tag.Named fruit = getItemTag("fruit"); Tag.Named protein = getItemTag("protein"); Tag.Named sweets = getItemTag("sweets"); - + TagHelper.addTag( - fats, - EndItems.END_FISH_RAW, - EndItems.END_FISH_COOKED + fats, + EndItems.END_FISH_RAW, + EndItems.END_FISH_COOKED ); TagHelper.addTag( - fruit, - EndItems.SHADOW_BERRY_RAW, - EndItems.SHADOW_BERRY_COOKED, - EndItems.BLOSSOM_BERRY, - EndItems.SHADOW_BERRY_JELLY, - EndItems.SWEET_BERRY_JELLY, - EndItems.BLOSSOM_BERRY_JELLY, - EndItems.AMBER_ROOT_RAW, - EndItems.CHORUS_MUSHROOM_RAW, - EndItems.CHORUS_MUSHROOM_COOKED, - EndItems.BOLUX_MUSHROOM_COOKED + fruit, + EndItems.SHADOW_BERRY_RAW, + EndItems.SHADOW_BERRY_COOKED, + EndItems.BLOSSOM_BERRY, + EndItems.SHADOW_BERRY_JELLY, + EndItems.SWEET_BERRY_JELLY, + EndItems.BLOSSOM_BERRY_JELLY, + EndItems.AMBER_ROOT_RAW, + EndItems.CHORUS_MUSHROOM_RAW, + EndItems.CHORUS_MUSHROOM_COOKED, + EndItems.BOLUX_MUSHROOM_COOKED ); TagHelper.addTag( - protein, - EndItems.END_FISH_RAW, - EndItems.END_FISH_COOKED, - EndItems.CHORUS_MUSHROOM_COOKED, - EndItems.BOLUX_MUSHROOM_COOKED, - EndItems.CAVE_PUMPKIN_PIE + protein, + EndItems.END_FISH_RAW, + EndItems.END_FISH_COOKED, + EndItems.CHORUS_MUSHROOM_COOKED, + EndItems.BOLUX_MUSHROOM_COOKED, + EndItems.CAVE_PUMPKIN_PIE ); TagHelper.addTag( - sweets, - EndItems.SHADOW_BERRY_JELLY, - EndItems.SWEET_BERRY_JELLY, - EndItems.BLOSSOM_BERRY_JELLY, - EndItems.CAVE_PUMPKIN_PIE + sweets, + EndItems.SHADOW_BERRY_JELLY, + EndItems.SWEET_BERRY_JELLY, + EndItems.BLOSSOM_BERRY_JELLY, + EndItems.CAVE_PUMPKIN_PIE ); } } diff --git a/src/main/java/ru/betterend/integration/byg/BYGBlocks.java b/src/main/java/ru/betterend/integration/byg/BYGBlocks.java index 7107e62a..18ceff7a 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGBlocks.java +++ b/src/main/java/ru/betterend/integration/byg/BYGBlocks.java @@ -8,9 +8,8 @@ import ru.betterend.registry.EndBlocks; public class BYGBlocks { public static final Block IVIS_MOSS = EndBlocks.registerBlock("ivis_moss", new EndWallPlantBlock()); public static final Block NIGHTSHADE_MOSS = EndBlocks.registerBlock("nightshade_moss", new EndWallPlantBlock()); - + public static final Block IVIS_VINE = EndBlocks.registerBlock("ivis_vine", new BaseVineBlock()); - - public static void register() { - } + + public static void register() {} } diff --git a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java index c9e1fbd6..7306d1dd 100644 --- a/src/main/java/ru/betterend/integration/byg/BYGIntegration.java +++ b/src/main/java/ru/betterend/integration/byg/BYGIntegration.java @@ -1,8 +1,11 @@ package ru.betterend.integration.byg; +import java.util.List; +import java.util.stream.Collectors; + import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.entity.ai.behavior.ShufflingList; +import net.minecraft.world.entity.ai.behavior.WeightedList; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; import ru.bclib.api.BiomeAPI; @@ -16,9 +19,6 @@ import ru.betterend.integration.byg.biomes.BYGBiomes; import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndBiomes; -import java.util.List; -import java.util.stream.Collectors; - public class BYGIntegration extends ModIntegration implements EndBiomeIntegration { public BYGIntegration() { super("byg"); @@ -38,10 +38,10 @@ public class BYGIntegration extends ModIntegration implements EndBiomeIntegratio @Override public void addBiomes() { BYGBiomes.addBiomes(); - + Class biomeClass = this.getClass("corgiaoc.byg.common.world.biome.BYGEndBiome"); List biomes = this.getStaticFieldValue(biomeClass, "BYG_END_BIOMES"); - + if (biomes != null && biomeClass != null) { biomes.forEach((obj) -> { Biome biome = this.getAndExecuteRuntime(biomeClass, obj, "getBiome"); @@ -62,7 +62,7 @@ public class BYGIntegration extends ModIntegration implements EndBiomeIntegratio EndBiomes.LAND_BIOMES.removeMutableBiome(biomeID); EndBiomes.VOID_BIOMES.addBiomeMutable(endBiome); } - ShufflingList subBiomes = this.getAndExecuteRuntime(biomeClass, obj, "getHills"); + WeightedList 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/integration/byg/biomes/BYGBiomes.java b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java index 06bc218e..013afbe9 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/BYGBiomes.java @@ -9,11 +9,11 @@ public class BYGBiomes { public static final EndBiome OLD_BULBIS_GARDENS = EndBiomes.registerSubBiomeIntegration(new OldBulbisGardens()); public static final EndBiome NIGHTSHADE_REDWOODS = EndBiomes.registerSubBiomeIntegration(new NightshadeRedwoods()); //public static final EndBiome ETHERIAL_GROVE = EndBiomes.registerSubBiomeIntegration(new EterialGrove()); - + public static void register() { System.out.println("Registered " + OLD_BULBIS_GARDENS); } - + public static void addBiomes() { EndBiomes.addSubBiomeIntegration(OLD_BULBIS_GARDENS, Integrations.BYG.getID("bulbis_gardens")); EndBiomes.addSubBiomeIntegration(NIGHTSHADE_REDWOODS, Integrations.BYG.getID("nightshade_forest")); 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 e99863a3..61e48d18 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/NightshadeRedwoods.java @@ -1,5 +1,7 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; + import net.minecraft.core.particles.ParticleTypes; import net.minecraft.sounds.SoundEvent; import net.minecraft.world.entity.MobCategory; @@ -15,17 +17,15 @@ import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; - public class NightshadeRedwoods extends EndBiome { public NightshadeRedwoods() { super(makeDef()); } - + private static BCLBiomeDef makeDef() { Biome biome = Integrations.BYG.getBiome("nightshade_forest"); BiomeSpecialEffects effects = biome.getSpecialEffects(); - + BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("nightshade_redwoods")) .setFogColor(140, 108, 47) .setFogDensity(1.5F) @@ -39,7 +39,7 @@ public class NightshadeRedwoods extends EndBiome { .addFeature(BYGFeatures.NIGHTSHADE_REDWOOD_TREE) .addFeature(BYGFeatures.NIGHTSHADE_MOSS_WOOD) .addFeature(BYGFeatures.NIGHTSHADE_MOSS); - + if (BCLib.isClient()) { SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); SoundEvent music = effects.getBackgroundMusic().get().getEvent(); @@ -52,14 +52,14 @@ public class NightshadeRedwoods extends EndBiome { def.addFeature(Decoration.VEGETAL_DECORATION, feature.get()); }); }); - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); + + for (MobCategory group: MobCategory.values()) { + List list = biome.getMobSettings().getMobs(group); list.forEach((entry) -> { def.addMobSpawn(entry); }); } - + return def; } } 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 04b11ddd..27bcd5a0 100644 --- a/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java +++ b/src/main/java/ru/betterend/integration/byg/biomes/OldBulbisGardens.java @@ -1,5 +1,8 @@ package ru.betterend.integration.byg.biomes; +import java.util.List; +import java.util.function.Supplier; + import net.minecraft.core.Registry; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.data.BuiltinRegistries; @@ -13,7 +16,6 @@ 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.placement.ConfiguredDecorator; import ru.bclib.BCLib; import ru.bclib.world.biomes.BCLBiomeDef; import ru.betterend.BetterEnd; @@ -22,26 +24,15 @@ import ru.betterend.integration.byg.features.BYGFeatures; import ru.betterend.registry.EndFeatures; import ru.betterend.world.biome.EndBiome; -import java.util.List; -import java.util.function.Supplier; - -class FeaturesAccesor extends Features { - static ConfiguredDecorator shadowHEIGHTMAP_SQUARE; - - static { - shadowHEIGHTMAP_SQUARE = Decorators.HEIGHTMAP_SQUARE; - } -} - public class OldBulbisGardens extends EndBiome { public OldBulbisGardens() { super(makeDef()); } - + private static BCLBiomeDef makeDef() { Biome biome = Integrations.BYG.getBiome("bulbis_gardens"); BiomeSpecialEffects effects = biome.getSpecialEffects(); - + Block ivis = Integrations.BYG.getBlock("ivis_phylium"); Block origin = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial().getBlock(); BCLBiomeDef def = new BCLBiomeDef(BetterEnd.makeID("old_bulbis_gardens")) @@ -53,7 +44,7 @@ public class OldBulbisGardens extends EndBiome { .setSurface(ivis, origin) .addFeature(EndFeatures.END_LAKE_RARE) .addFeature(BYGFeatures.OLD_BULBIS_TREE); - + if (BCLib.isClient()) { SoundEvent loop = effects.getAmbientLoopSoundEvent().get(); SoundEvent music = effects.getBackgroundMusic().get().getEvent(); @@ -61,14 +52,14 @@ public class OldBulbisGardens extends EndBiome { SoundEvent mood = effects.getAmbientMoodSettings().get().getSoundEvent(); def.setLoop(loop).setMusic(music).setAdditions(additions).setMood(mood); } - - for (MobCategory group : MobCategory.values()) { - List list = biome.getMobSettings().getMobs(group).unwrap(); + + for (MobCategory group: MobCategory.values()) { + List list = biome.getMobSettings().getMobs(group); list.forEach((entry) -> { def.addMobSpawn(entry); }); } - + List>>> features = biome.getGenerationSettings().features(); List>> vegetal = features.get(Decoration.VEGETAL_DECORATION.ordinal()); if (vegetal.size() > 2) { @@ -79,7 +70,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(FeaturesAccesor.shadowHEIGHTMAP_SQUARE).countRandom(1)); + feature = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.decorated(Features.Decorators.HEIGHTMAP_SQUARE).countRandom(1)); def.addFeature(Decoration.VEGETAL_DECORATION, feature); } // Grasses and other features @@ -89,13 +80,13 @@ public class OldBulbisGardens extends EndBiome { def.addFeature(Decoration.VEGETAL_DECORATION, feature); } } - + def.addFeature(EndFeatures.PURPLE_POLYPORE) - .addFeature(BYGFeatures.IVIS_MOSS_WOOD) - .addFeature(BYGFeatures.IVIS_MOSS) - .addFeature(BYGFeatures.IVIS_VINE) - .addFeature(BYGFeatures.IVIS_SPROUT); - + .addFeature(BYGFeatures.IVIS_MOSS_WOOD) + .addFeature(BYGFeatures.IVIS_MOSS) + .addFeature(BYGFeatures.IVIS_VINE) + .addFeature(BYGFeatures.IVIS_SPROUT); + return def; } } diff --git a/src/main/java/ru/betterend/integration/byg/features/BYGFeatures.java b/src/main/java/ru/betterend/integration/byg/features/BYGFeatures.java index 7d1cb873..1a906683 100644 --- a/src/main/java/ru/betterend/integration/byg/features/BYGFeatures.java +++ b/src/main/java/ru/betterend/integration/byg/features/BYGFeatures.java @@ -19,13 +19,12 @@ public class BYGFeatures { public static final BCLFeature IVIS_MOSS_WOOD = redisterVegetation("ivis_moss_wood", new WallPlantOnLogFeature(BYGBlocks.IVIS_MOSS, 6), 15); public static final BCLFeature NIGHTSHADE_MOSS = redisterVegetation("nightshade_moss", new WallPlantFeature(BYGBlocks.NIGHTSHADE_MOSS, 5), 2); public static final BCLFeature NIGHTSHADE_MOSS_WOOD = redisterVegetation("nightshade_moss_wood", new WallPlantOnLogFeature(BYGBlocks.NIGHTSHADE_MOSS, 5), 8); - + public static final BCLFeature NIGHTSHADE_REDWOOD_TREE = redisterVegetation("nightshade_redwood_tree", new NightshadeRedwoodTreeFeature(), 1); public static final BCLFeature BIG_ETHER_TREE = redisterVegetation("big_ether_tree", new BigEtherTreeFeature(), 1); - - public static void register() { - } - + + public static void register() {} + 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/integration/byg/features/BigEtherTreeFeature.java b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java index 8d6e4dab..4883e4a5 100644 --- a/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/BigEtherTreeFeature.java @@ -1,11 +1,15 @@ package ru.betterend.integration.byg.features; +import java.util.List; +import java.util.Random; + import com.google.common.base.Function; import com.mojang.math.Vector3f; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -15,16 +19,10 @@ import ru.bclib.util.SplineHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.integration.Integrations; -import java.util.List; -import java.util.Random; - public class BigEtherTreeFeature extends DefaultFeature { @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; BlockState log = Integrations.BYG.getDefaultState("ether_log"); 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 dd8ba4ff..43cd3689 100644 --- a/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/NightshadeRedwoodTreeFeature.java @@ -1,8 +1,12 @@ package ru.betterend.integration.byg.features; +import java.util.List; +import java.util.Random; + import com.google.common.base.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; @@ -10,7 +14,7 @@ import net.minecraft.world.level.WorldGenLevel; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -27,18 +31,13 @@ import ru.bclib.util.SplineHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.integration.Integrations; -import java.util.List; -import java.util.Random; - public class NightshadeRedwoodTreeFeature extends DefaultFeature { private static final List BRANCH; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().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 1f2b5cae..41830663 100644 --- a/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java +++ b/src/main/java/ru/betterend/integration/byg/features/OldBulbisTreeFeature.java @@ -1,13 +1,18 @@ package ru.betterend.integration.byg.features; +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.util.Mth; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import net.minecraft.world.phys.AABB; @@ -24,10 +29,6 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.integration.Integrations; import ru.betterend.noise.OpenSimplexNoise; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class OldBulbisTreeFeature extends DefaultFeature { private static final List SPLINE; private static final List ROOT; @@ -35,13 +36,11 @@ public class OldBulbisTreeFeature extends DefaultFeature { private static final List SIDE; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; - if (!world.getBlockState(pos.below(4)).is(TagAPI.GEN_TERRAIN)) + if (!world.getBlockState(pos.below(4)).getBlock().is(TagAPI.GEN_TERRAIN)) return false; BlockState stem = Integrations.BYG.getDefaultState("bulbis_stem"); @@ -102,7 +101,7 @@ public class OldBulbisTreeFeature extends DefaultFeature { } private void bigSphere(WorldGenLevel world, BlockPos pos, float radius, BlockState cap, BlockState glow, - BlockState wood, Function replacement, Random random) { + BlockState wood, Function replacement, Random random) { OpenSimplexNoise noise = new OpenSimplexNoise(random.nextLong()); SDF sphere = new SDFSphere().setRadius(radius).setBlock(cap); @@ -150,7 +149,7 @@ public class OldBulbisTreeFeature extends DefaultFeature { } private void makeRoots(WorldGenLevel world, BlockPos pos, float radius, Random random, BlockState wood, - Function replacement) { + Function replacement) { int count = (int) (radius * 1.5F); for (int i = 0; i < count; i++) { float angle = (float) i / (float) count * MHelper.PI2; diff --git a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java index 369037e9..507cfc15 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingCategory.java @@ -1,47 +1,46 @@ 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.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.registry.EndBlocks; - import java.text.DecimalFormat; import java.util.List; -public class REIAlloyingCategory implements TransferDisplayCategory { - private final EntryStack ICON; +import org.jetbrains.annotations.NotNull; - REIAlloyingCategory(EntryStack icon) { - ICON = icon; +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 { + + @Override + public @NotNull ResourceLocation getIdentifier() { + return AlloyingRecipe.ID; } @Override - public @NotNull CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.ALLOYING; + public @NotNull String getCategoryName() { + return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getDescriptionId()); } - + @Override - public @NotNull Component getTitle() { - return new TranslatableComponent(EndBlocks.END_STONE_SMELTER.getDescriptionId()); + public @NotNull EntryStack getLogo() { + return REIPlugin.END_STONE_SMELTER; } - - @Override - public @NotNull EntryStack getIcon() { - return ICON; - } - + @Override public @NotNull List setupDisplay(REIAlloyingDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); @@ -54,21 +53,20 @@ public class REIAlloyingCategory implements TransferDisplayCategory 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 { + } 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.getOutputEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); return widgets; } @Override public void renderRedSlots(PoseStack matrices, List widgets, Rectangle bounds, REIAlloyingDisplay display, - IntList redSlots) { + IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); matrices.translate(0, 0, 400); @@ -78,7 +76,12 @@ public class REIAlloyingCategory implements TransferDisplayCategory fuel; - + private Recipe recipe; + private List> input; + private List output; 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 = xp; - this.smeltTime = smeltTime; + 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) { + 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(); + } + public static List getFuel() { return fuel; } - + @Override - public @NotNull Optional getDisplayLocation() { + public @NotNull Optional getRecipeLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } - + @Override - public CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.ALLOYING; + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); } - // @Override - // public @NotNull List> getRequiredEntries() { - // return this.input; - // } - + @Override + public @NotNull ResourceLocation getRecipeCategory() { + return AlloyingRecipe.ID; + } + + @Override + public @NotNull List> getRequiredEntries() { + return this.input; + } + public float getXp() { return this.xp; } - + public double getSmeltTime() { return this.smeltTime; } - + public Optional> getOptionalRecipe() { return Optional.ofNullable(recipe); } @@ -85,14 +97,14 @@ public class REIAlloyingDisplay extends BasicDisplay implements SimpleGridMenuDi 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(EntryStacks::of) + .map(Item::getDefaultInstance).map(EntryStack::create) .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 930d3e3e..8b7a552a 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAlloyingFuelCategory.java @@ -1,39 +1,40 @@ 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; -public class REIAlloyingFuelCategory implements DisplayCategory { +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 { private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.##"); @Override - public @NotNull CategoryIdentifier getCategoryIdentifier() { + public @NotNull ResourceLocation getIdentifier() { return REIPlugin.ALLOYING_FUEL; } @Override - public @NotNull Component getTitle() { - return new TranslatableComponent("category.rei.fuel"); + public @NotNull String getCategoryName() { + return I18n.get("category.rei.fuel"); } @Override @@ -42,12 +43,12 @@ public class REIAlloyingFuelCategory implements DisplayCategory setupDisplay(REIAlloyingFuelDisplay recipeDisplay, Rectangle bounds) { + public @NotNull 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(); @@ -60,10 +61,10 @@ public class REIAlloyingFuelCategory implements DisplayCategory 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) { + public REIAlloyingFuelDisplay(EntryStack fuel, int fuelTime) { this.fuel = fuel; this.fuelTime = fuelTime; - }*/ + } @Override - public CategoryIdentifier getCategoryIdentifier() { + public @NotNull List> getInputEntries() { + return Collections.singletonList(Collections.singletonList(fuel)); + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.emptyList(); + } + + @Override + public @NotNull ResourceLocation getRecipeCategory() { return REIPlugin.ALLOYING_FUEL; } diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 6be1b8ab..fddf1a83 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -1,53 +1,50 @@ 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.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.world.item.BlockItem; -import net.minecraft.world.item.ItemStack; -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.Collections; import java.util.List; import java.util.stream.Collectors; -public class REIAnvilCategory implements TransferDisplayCategory { - private final EntryStack[] ANVILS; +import org.jetbrains.annotations.NotNull; - REIAnvilCategory(EntryStack[] anvils) { - ANVILS = anvils; - } +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 net.minecraft.world.item.BlockItem; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import ru.betterend.blocks.basis.EndAnvilBlock; +import ru.betterend.util.LangUtil; + +public class REIAnvilCategory implements TransferRecipeCategory { @Override - public @NotNull CategoryIdentifier getCategoryIdentifier() { + public @NotNull ResourceLocation getIdentifier() { return REIPlugin.SMITHING; } @Override - public @NotNull Component getTitle() { - return new TranslatableComponent(Blocks.ANVIL.getDescriptionId()); + public @NotNull String getCategoryName() { + return LangUtil.translate(Blocks.ANVIL.getDescriptionId()); } - + @Override - public @NotNull EntryStack getIcon() { - return ANVILS[0]; + public @NotNull EntryStack getLogo() { + return REIPlugin.ANVILS[0]; } - - + @Override public @NotNull List setupDisplay(REIAnvilDisplay display, Rectangle bounds) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); @@ -56,27 +53,23 @@ public class REIAnvilCategory implements TransferDisplayCategory inputEntries = display.getInputEntries(); - EntryIngredient materials = inputEntries.get(1); + List> inputEntries = display.getInputEntries(); + List materials = inputEntries.get(1); int anvilLevel = display.getAnvilLevel(); - List anvils = Arrays.stream(ANVILS).filter(anvil -> { - Object value = anvil.getValue(); - if (value instanceof ItemStack) { - value = ((ItemStack) value).getItem(); - } - Block block = ((BlockItem) value).getBlock(); + List anvils = Arrays.stream(REIPlugin.ANVILS).filter(anvil -> { + Block block = ((BlockItem) anvil.getItem()).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.getOutputEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils)); return widgets; @@ -84,7 +77,7 @@ public class REIAnvilCategory implements TransferDisplayCategory widgets, Rectangle bounds, REIAnvilDisplay display, - IntList redSlots) { + IntList redSlots) { Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); matrices.pushPose(); matrices.translate(0, 0, 400); @@ -94,7 +87,12 @@ public class REIAnvilCategory implements TransferDisplayCategory> 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() { return recipe.getDamage(); } @@ -35,21 +37,31 @@ public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDispl public int getAnvilLevel() { return recipe.getAnvilLevel(); } - + @Override - public @NotNull Optional getDisplayLocation() { + public @NotNull Optional getRecipeLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } @Override - public CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.SMITHING; + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); } - // @Override - // public @NotNull List> getRequiredEntries() { - // return input; - // } + @Override + public @NotNull ResourceLocation getRecipeCategory() { + return REIPlugin.SMITHING; + } + + @Override + public @NotNull List> getRequiredEntries() { + return input; + } @Override public int getWidth() { @@ -61,9 +73,9 @@ public class REIAnvilDisplay extends BasicDisplay implements SimpleGridMenuDispl 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/REIBlastingDisplay.java b/src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java deleted file mode 100644 index 5a133156..00000000 --- a/src/main/java/ru/betterend/integration/rei/REIBlastingDisplay.java +++ /dev/null @@ -1,9 +0,0 @@ -package ru.betterend.integration.rei; - -import net.minecraft.world.item.crafting.BlastingRecipe; - -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..9d6a0118 100644 --- a/src/main/java/ru/betterend/integration/rei/REIContainer.java +++ b/src/main/java/ru/betterend/integration/rei/REIContainer.java @@ -1,9 +1,14 @@ 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 a390f2c3..5acb5b12 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionCategory.java @@ -1,65 +1,59 @@ 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.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 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.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; -import java.util.ArrayList; -import java.util.List; - -public class REIInfusionCategory implements TransferDisplayCategory { - +public class REIInfusionCategory implements TransferRecipeCategory { + private final static ResourceLocation BACKGROUND = BetterEnd.makeID("textures/gui/rei_infusion.png"); - private final EntryStack ICON; - REIInfusionCategory(EntryStack icon) { - ICON = icon; + @Override + public @NotNull ResourceLocation getIdentifier() { + return InfusionRecipe.ID; } @Override - public @NotNull CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.INFUSION; + public @NotNull String getCategoryName() { + return LangUtil.translate(EndBlocks.INFUSION_PEDESTAL.getDescriptionId()); } - + @Override - public @NotNull Component getTitle() { - return new TranslatableComponent(EndBlocks.INFUSION_PEDESTAL.getDescriptionId()); + public @NotNull EntryStack getLogo() { + return REIPlugin.INFUSION_RITUAL; } - + @Override - public @NotNull EntryStack getIcon() { - return ICON; + 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.getOutputEntries(); - if (inputEntries.size() < 9) { - List newList = new ArrayList(9); - newList.addAll(inputEntries); - for (int i = inputEntries.size(); i < 9; i++) { - newList.add(EntryIngredient.empty()); - } - inputEntries = newList; - } + List> inputEntries = display.getInputEntries(); + List> outputEntries = display.getResultingEntries(); 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()); @@ -71,23 +65,17 @@ public class REIInfusionCategory implements TransferDisplayCategory 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 18e91a7a..d8411bc9 100644 --- a/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIInfusionDisplay.java @@ -1,49 +1,68 @@ package ru.betterend.integration.rei; -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.item.crafting.Recipe; -import org.jetbrains.annotations.NotNull; -import ru.betterend.recipe.builders.InfusionRecipe; - import java.util.Collections; +import java.util.List; import java.util.Optional; -public class REIInfusionDisplay extends BasicDisplay implements SimpleGridMenuDisplay { +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 net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.AbstractContainerMenu; +import net.minecraft.world.item.crafting.Recipe; +import ru.betterend.recipe.builders.AlloyingRecipe; +import ru.betterend.recipe.builders.InfusionRecipe; + +public class REIInfusionDisplay implements TransferRecipeDisplay { + 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() { return this.time; } - + @Override - public @NotNull Optional getDisplayLocation() { + public @NotNull Optional getRecipeLocation() { return Optional.ofNullable(recipe).map(Recipe::getId); } @Override - public CategoryIdentifier getCategoryIdentifier() { - return REIPlugin.INFUSION; + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); } - // @Override - // public @NotNull List> getRequiredEntries() { - // return this.input; - // } + @Override + public @NotNull ResourceLocation getRecipeCategory() { + return AlloyingRecipe.ID; + } + + @Override + public @NotNull List> getRequiredEntries() { + return this.input; + } @Override public int getWidth() { @@ -55,8 +74,8 @@ public class REIInfusionDisplay extends BasicDisplay implements SimpleGridMenuDi 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 507b9308..e05fd55d 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,19 +1,19 @@ 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.client.plugins.REIClientPlugin; -import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; -import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; -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.EntryIngredients; -import me.shedaniel.rei.api.common.util.EntryStacks; -import me.shedaniel.rei.plugin.common.DefaultPlugin; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.api.plugins.REIPluginV0; +import me.shedaniel.rei.plugin.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.item.crafting.RecipeType; import net.minecraft.world.level.block.Blocks; import ru.bclib.blocks.BaseFurnaceBlock; import ru.betterend.BetterEnd; @@ -23,77 +23,67 @@ import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; +@Environment(EnvType.CLIENT) +public class REIPlugin implements REIPluginV0 { -//https://github.com/shedaniel/RoughlyEnoughItems/blob/6.x-1.17/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/DefaultClientPlugin.java -public class REIPlugin implements REIClientPlugin { public final static ResourceLocation PLUGIN_ID = BetterEnd.makeID("rei_plugin"); - public final static CategoryIdentifier ALLOYING_FUEL = CategoryIdentifier.of(BetterEnd.MOD_ID, "alloying_fuel"); - public final static CategoryIdentifier ALLOYING = CategoryIdentifier.of(BetterEnd.MOD_ID, AlloyingRecipe.GROUP); - public final static CategoryIdentifier SMITHING = CategoryIdentifier.of(BetterEnd.MOD_ID, AnvilRecipe.ID.getPath()); - public final static CategoryIdentifier INFUSION = CategoryIdentifier.of(BetterEnd.MOD_ID, InfusionRecipe.GROUP); + 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; - private EntryStack END_STONE_SMELTER; - private EntryStack INFUSION_RITUAL; - private EntryStack[] ANVILS; - private EntryStack[] FURNACES; - - 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]); - } + 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[] FURNACES; + public final static EntryStack[] ANVILS; @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); - + public ResourceLocation getPluginIdentifier() { + return PLUGIN_ID; + } + + @Override + public void registerRecipeDisplays(RecipeHelper recipeHelper) { + recipeHelper.registerRecipes(ALLOYING, AlloyingRecipe.class, REIAlloyingDisplay::new); + recipeHelper.registerRecipes(ALLOYING, BlastingRecipe.class, REIAlloyingDisplay::new); + recipeHelper.registerRecipes(SMITHING, AnvilRecipe.class, REIAnvilDisplay::new); + recipeHelper.registerRecipes(INFUSION, InfusionRecipe.class, 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)); + recipeHelper.registerDisplay(new REIAlloyingFuelDisplay(EntryStack.create(item), time)); } }); } - + @Override - public void registerCategories(CategoryRegistry registry) { - init(); + 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); - registry.add( + recipeHelper.registerWorkingStations(DefaultPlugin.SMELTING, FURNACES); + recipeHelper.registerWorkingStations(DefaultPlugin.FUEL, FURNACES); + } + + @Override + public void registerPluginCategories(RecipeHelper recipeHelper) { + recipeHelper.registerCategories( new REIAlloyingFuelCategory(), - new REIAlloyingCategory(END_STONE_SMELTER), - new REIInfusionCategory(INFUSION_RITUAL), - new REIAnvilCategory(ANVILS) - ); + new REIAlloyingCategory(), + 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() + .filter(EndAnvilBlock.class::isInstance).collect(Collectors.toList()))); + anvils.add(0, EntryStack.create(Blocks.ANVIL)); + ANVILS = anvils.toArray(new EntryStack[0]); + FURNACES = Lists.newArrayList(EntryStack.ofItems(EndBlocks.getModBlocks().stream() + .filter(BaseFurnaceBlock.class::isInstance).collect(Collectors.toList()))) + .toArray(new EntryStack[0]); } } diff --git a/src/main/java/ru/betterend/interfaces/AnvilScreenHandlerExtended.java b/src/main/java/ru/betterend/interfaces/AnvilScreenHandlerExtended.java index 33a02de5..9146ab8e 100644 --- a/src/main/java/ru/betterend/interfaces/AnvilScreenHandlerExtended.java +++ b/src/main/java/ru/betterend/interfaces/AnvilScreenHandlerExtended.java @@ -1,16 +1,14 @@ package ru.betterend.interfaces; -import ru.betterend.recipe.builders.AnvilRecipe; - import java.util.List; +import ru.betterend.recipe.builders.AnvilRecipe; + public interface AnvilScreenHandlerExtended { void be_updateCurrentRecipe(AnvilRecipe recipe); - AnvilRecipe be_getCurrentRecipe(); - List be_getRecipes(); - + default void be_nextRecipe() { List recipes = be_getRecipes(); if (recipes.size() < 2) return; @@ -21,7 +19,7 @@ public interface AnvilScreenHandlerExtended { } be_updateCurrentRecipe(recipes.get(i)); } - + default void be_previousRecipe() { List recipes = be_getRecipes(); if (recipes.size() < 2) return; diff --git a/src/main/java/ru/betterend/interfaces/BetterEndRecipe.java b/src/main/java/ru/betterend/interfaces/BetterEndRecipe.java index d75eeaae..9f939661 100644 --- a/src/main/java/ru/betterend/interfaces/BetterEndRecipe.java +++ b/src/main/java/ru/betterend/interfaces/BetterEndRecipe.java @@ -1,4 +1,3 @@ package ru.betterend.interfaces; -public interface BetterEndRecipe { -} +public interface BetterEndRecipe {} diff --git a/src/main/java/ru/betterend/interfaces/FallFlyingItem.java b/src/main/java/ru/betterend/interfaces/FallFlyingItem.java index ea1451f2..e75888d7 100644 --- a/src/main/java/ru/betterend/interfaces/FallFlyingItem.java +++ b/src/main/java/ru/betterend/interfaces/FallFlyingItem.java @@ -4,6 +4,5 @@ import net.minecraft.resources.ResourceLocation; public interface FallFlyingItem { ResourceLocation getModelTexture(); - double getMovementFactor(); } diff --git a/src/main/java/ru/betterend/interfaces/IBiomeList.java b/src/main/java/ru/betterend/interfaces/IBiomeList.java index a1a1047f..4dbbfde4 100644 --- a/src/main/java/ru/betterend/interfaces/IBiomeList.java +++ b/src/main/java/ru/betterend/interfaces/IBiomeList.java @@ -1,10 +1,10 @@ package ru.betterend.interfaces; +import java.util.List; + import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; -import java.util.List; - public interface IBiomeList { public List> getBiomes(); } diff --git a/src/main/java/ru/betterend/interfaces/ISlime.java b/src/main/java/ru/betterend/interfaces/ISlime.java index af7cb878..7df19bc6 100644 --- a/src/main/java/ru/betterend/interfaces/ISlime.java +++ b/src/main/java/ru/betterend/interfaces/ISlime.java @@ -1,9 +1,5 @@ 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/interfaces/ISpetialItem.java b/src/main/java/ru/betterend/interfaces/ISpetialItem.java new file mode 100644 index 00000000..ef19bc36 --- /dev/null +++ b/src/main/java/ru/betterend/interfaces/ISpetialItem.java @@ -0,0 +1,7 @@ +package ru.betterend.interfaces; + +public interface ISpetialItem { + public int getStackSize(); + + public boolean canPlaceOnWater(); +} diff --git a/src/main/java/ru/betterend/interfaces/TeleportingEntity.java b/src/main/java/ru/betterend/interfaces/TeleportingEntity.java index 40b20dda..cfd23f30 100644 --- a/src/main/java/ru/betterend/interfaces/TeleportingEntity.java +++ b/src/main/java/ru/betterend/interfaces/TeleportingEntity.java @@ -4,8 +4,6 @@ import net.minecraft.core.BlockPos; public interface TeleportingEntity { void be_setExitPos(BlockPos pos); - void be_resetExitPos(); - boolean be_canTeleport(); } diff --git a/src/main/java/ru/betterend/item/ArmoredElytra.java b/src/main/java/ru/betterend/item/ArmoredElytra.java index 1e163318..b1953792 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, id) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); + (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); } } diff --git a/src/main/java/ru/betterend/item/CrystaliteBoots.java b/src/main/java/ru/betterend/item/CrystaliteBoots.java index ee7b032f..1b84601e 100644 --- a/src/main/java/ru/betterend/item/CrystaliteBoots.java +++ b/src/main/java/ru/betterend/item/CrystaliteBoots.java @@ -1,5 +1,9 @@ package ru.betterend.item; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.network.chat.Component; @@ -11,13 +15,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; -import org.jetbrains.annotations.Nullable; import ru.betterend.effects.EndStatusEffects; import ru.betterend.interfaces.MobEffectApplier; import ru.betterend.registry.EndItems; -import java.util.List; - public class CrystaliteBoots extends CrystaliteArmor implements MobEffectApplier { public CrystaliteBoots() { diff --git a/src/main/java/ru/betterend/item/CrystaliteChestplate.java b/src/main/java/ru/betterend/item/CrystaliteChestplate.java index 023269bb..920b3706 100644 --- a/src/main/java/ru/betterend/item/CrystaliteChestplate.java +++ b/src/main/java/ru/betterend/item/CrystaliteChestplate.java @@ -1,5 +1,9 @@ package ru.betterend.item; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.network.chat.Component; @@ -11,13 +15,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Rarity; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; -import org.jetbrains.annotations.Nullable; import ru.betterend.effects.EndStatusEffects; import ru.betterend.interfaces.MobEffectApplier; import ru.betterend.registry.EndItems; -import java.util.List; - public class CrystaliteChestplate extends CrystaliteArmor implements MobEffectApplier { public CrystaliteChestplate() { diff --git a/src/main/java/ru/betterend/item/CrystaliteElytra.java b/src/main/java/ru/betterend/item/CrystaliteElytra.java index a8995c5a..489eaf3f 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, i) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); + (itemStack, clientLevel, livingEntity) -> ElytraItem.isFlyEnabled(itemStack) ? 0.0F : 1.0F); } } diff --git a/src/main/java/ru/betterend/item/CrystaliteHelmet.java b/src/main/java/ru/betterend/item/CrystaliteHelmet.java index a9889445..ec297001 100644 --- a/src/main/java/ru/betterend/item/CrystaliteHelmet.java +++ b/src/main/java/ru/betterend/item/CrystaliteHelmet.java @@ -1,13 +1,13 @@ package ru.betterend.item; +import java.util.UUID; + import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.item.Rarity; import ru.betterend.registry.EndAttributes; import ru.betterend.registry.EndItems; -import java.util.UUID; - public class CrystaliteHelmet extends CrystaliteArmor { public CrystaliteHelmet() { diff --git a/src/main/java/ru/betterend/item/CrystaliteLeggings.java b/src/main/java/ru/betterend/item/CrystaliteLeggings.java index f6b2ac77..4c8d0613 100644 --- a/src/main/java/ru/betterend/item/CrystaliteLeggings.java +++ b/src/main/java/ru/betterend/item/CrystaliteLeggings.java @@ -1,13 +1,13 @@ package ru.betterend.item; +import java.util.UUID; + import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.Rarity; import ru.betterend.registry.EndItems; -import java.util.UUID; - public class CrystaliteLeggings extends CrystaliteArmor { public CrystaliteLeggings() { diff --git a/src/main/java/ru/betterend/item/EnchantedItem.java b/src/main/java/ru/betterend/item/EnchantedItem.java index 814b9644..d210c855 100644 --- a/src/main/java/ru/betterend/item/EnchantedItem.java +++ b/src/main/java/ru/betterend/item/EnchantedItem.java @@ -1,7 +1,5 @@ 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; @@ -27,7 +25,6 @@ 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 b0173781..9b8b4d04 100644 --- a/src/main/java/ru/betterend/item/EndAnvilItem.java +++ b/src/main/java/ru/betterend/item/EndAnvilItem.java @@ -1,7 +1,5 @@ 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; @@ -27,14 +25,11 @@ public class EndAnvilItem extends BaseAnvilItem { BlockState blockState = super.getPlacementState(blockPlaceContext); ItemStack stack = blockPlaceContext.getItemInHand(); int durability = stack.getOrCreateTag().getInt(DURABILITY); - if (blockState != null) { - blockState = blockState.setValue(((EndAnvilBlock) blockState.getBlock()).getDurability(), durability); - } + blockState = blockState.setValue(((EndAnvilBlock) blockState.getBlock()).getDurability(), durability); return blockState; } @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/EndArmorItem.java b/src/main/java/ru/betterend/item/EndArmorItem.java index 40752e88..1f4bf969 100644 --- a/src/main/java/ru/betterend/item/EndArmorItem.java +++ b/src/main/java/ru/betterend/item/EndArmorItem.java @@ -1,7 +1,10 @@ package ru.betterend.item; +import java.util.UUID; + import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; + import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.ai.attributes.AttributeModifier; @@ -10,11 +13,9 @@ import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import ru.bclib.client.models.ItemModelProvider; -import java.util.UUID; - public class EndArmorItem extends ArmorItem implements ItemModelProvider { - protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[]{ + protected static final UUID[] ARMOR_MODIFIER_UUID_PER_SLOT = new UUID[] { UUID.fromString("845DB27C-C624-495F-8C9F-6020A9A58B6B"), UUID.fromString("D8499B04-0E66-4726-AB29-64469D734E0D"), UUID.fromString("9F3D476D-C118-4544-8365-64846904B48E"), diff --git a/src/main/java/ru/betterend/item/EndBucketItem.java b/src/main/java/ru/betterend/item/EndBucketItem.java index 3886a75e..7d7a729a 100644 --- a/src/main/java/ru/betterend/item/EndBucketItem.java +++ b/src/main/java/ru/betterend/item/EndBucketItem.java @@ -1,14 +1,13 @@ 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.item.FishBucketItem; import net.minecraft.world.level.material.Fluids; import ru.bclib.client.models.ItemModelProvider; import ru.betterend.registry.EndItems; -public class EndBucketItem extends MobBucketItem implements ItemModelProvider { +public class EndBucketItem extends FishBucketItem implements ItemModelProvider { public EndBucketItem(EntityType type) { - super(type, Fluids.WATER, SoundEvents.BUCKET_EMPTY, EndItems.makeEndItemSettings().stacksTo(1)); + super(type, Fluids.WATER, EndItems.makeEndItemSettings().stacksTo(1)); } } diff --git a/src/main/java/ru/betterend/item/GuideBookItem.java b/src/main/java/ru/betterend/item/GuideBookItem.java index da0384a4..3e7348c4 100644 --- a/src/main/java/ru/betterend/item/GuideBookItem.java +++ b/src/main/java/ru/betterend/item/GuideBookItem.java @@ -1,5 +1,7 @@ package ru.betterend.item; +import java.util.List; + import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -17,30 +19,27 @@ import ru.betterend.registry.EndItems; import ru.betterend.util.LangUtil; import vazkii.patchouli.api.PatchouliAPI; -import java.util.List; - public class GuideBookItem extends ModelProviderItem { public final static ResourceLocation BOOK_ID = BetterEnd.makeID("guidebook"); public static final Item GUIDE_BOOK = EndItems.registerEndItem(BOOK_ID, new GuideBookItem()); - - public static void register() { - } - + + public static void register() {} + public GuideBookItem() { super(EndItems.makeEndItemSettings().stacksTo(1)); } + + @Override + public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { + if (!world.isClientSide && user instanceof ServerPlayer) { + PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); + return InteractionResultHolder.success(user.getItemInHand(hand)); + } + return InteractionResultHolder.consume(user.getItemInHand(hand)); + } - @Override - public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { - if (!world.isClientSide && user instanceof ServerPlayer) { - PatchouliAPI.get().openBookGUI((ServerPlayer) user, BOOK_ID); - return InteractionResultHolder.success(user.getItemInHand(hand)); - } - return InteractionResultHolder.consume(user.getItemInHand(hand)); - } - - @Override - public void appendHoverText(ItemStack stack, Level world, List tooltip, TooltipFlag context) { - tooltip.add(LangUtil.getText("book.betterend", "subtitle").withStyle(ChatFormatting.DARK_PURPLE, ChatFormatting.ITALIC)); - } + @Override + public void appendHoverText(ItemStack stack, Level world, List tooltip, TooltipFlag context) { + tooltip.add(LangUtil.getText("book.betterend", "subtitle").withStyle(ChatFormatting.DARK_PURPLE, ChatFormatting.ITALIC)); + } } diff --git a/src/main/java/ru/betterend/item/material/EndArmorMaterial.java b/src/main/java/ru/betterend/item/material/EndArmorMaterial.java index 1ff8c95c..13358a76 100644 --- a/src/main/java/ru/betterend/item/material/EndArmorMaterial.java +++ b/src/main/java/ru/betterend/item/material/EndArmorMaterial.java @@ -1,5 +1,7 @@ package ru.betterend.item.material; +import java.util.function.Supplier; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.sounds.SoundEvent; @@ -11,23 +13,21 @@ import net.minecraft.world.item.crafting.Ingredient; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.function.Supplier; - public enum EndArmorMaterial implements ArmorMaterial { - THALLASIUM("thallasium", 17, new int[]{1, 4, 5, 2}, 12, SoundEvents.ARMOR_EQUIP_IRON, 0.0F, 0.0F, () -> { + THALLASIUM("thallasium", 17, new int[] { 1, 4, 5, 2 }, 12, SoundEvents.ARMOR_EQUIP_IRON, 0.0F, 0.0F, () -> { return Ingredient.of(EndBlocks.THALLASIUM.ingot); }), - TERMINITE("terminite", 26, new int[]{3, 6, 7, 3}, 14, SoundEvents.ARMOR_EQUIP_IRON, 1.0F, 0.05F, () -> { + TERMINITE("terminite", 26, new int[] { 3, 6, 7, 3 }, 14, SoundEvents.ARMOR_EQUIP_IRON, 1.0F, 0.05F, () -> { return Ingredient.of(EndBlocks.TERMINITE.ingot); }), - AETERNIUM("aeternium", 40, new int[]{4, 7, 9, 4}, 18, SoundEvents.ARMOR_EQUIP_NETHERITE, 3.5F, 0.2F, () -> { + AETERNIUM("aeternium", 40, new int[] { 4, 7, 9, 4 }, 18, SoundEvents.ARMOR_EQUIP_NETHERITE, 3.5F, 0.2F, () -> { return Ingredient.of(EndItems.AETERNIUM_INGOT); }), - CRYSTALITE("crystalite", 30, new int[]{3, 6, 8, 3}, 24, SoundEvents.ARMOR_EQUIP_DIAMOND, 1.2F, 0.1F, () -> { + CRYSTALITE("crystalite", 30, new int[] { 3, 6, 8, 3 }, 24, SoundEvents.ARMOR_EQUIP_DIAMOND, 1.2F, 0.1F, () -> { return Ingredient.of(EndBlocks.TERMINITE.ingot); }); - private static final int[] BASE_DURABILITY = new int[]{13, 15, 16, 11}; + private static final int[] BASE_DURABILITY = new int[] { 13, 15, 16, 11 }; private final String name; private final int durabilityMultiplier; private final int[] protectionAmounts; @@ -36,11 +36,11 @@ public enum EndArmorMaterial implements ArmorMaterial { private final float toughness; private final float knockbackResistance; private final LazyLoadedValue repairIngredient; - + private EndArmorMaterial(String name, int durabilityMultiplier, int[] protectionAmounts, int enchantability, - SoundEvent equipSound, float toughness, float knockbackResistance, - Supplier repairIngredient) { - + SoundEvent equipSound, float toughness, float knockbackResistance, + Supplier repairIngredient) { + this.name = name; this.durabilityMultiplier = durabilityMultiplier; this.protectionAmounts = protectionAmounts; diff --git a/src/main/java/ru/betterend/item/material/EndToolMaterial.java b/src/main/java/ru/betterend/item/material/EndToolMaterial.java index fa17936b..9c0197ae 100644 --- a/src/main/java/ru/betterend/item/material/EndToolMaterial.java +++ b/src/main/java/ru/betterend/item/material/EndToolMaterial.java @@ -1,13 +1,13 @@ package ru.betterend.item.material; +import java.util.function.Supplier; + import net.minecraft.util.LazyLoadedValue; import net.minecraft.world.item.Tier; import net.minecraft.world.item.crafting.Ingredient; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.function.Supplier; - public enum EndToolMaterial implements Tier { THALLASIUM(2, 320, 7.0F, 1.5F, 12, () -> { return Ingredient.of(EndBlocks.THALLASIUM.ingot); @@ -25,9 +25,9 @@ public enum EndToolMaterial implements Tier { private final int miningLevel; private final int enchantability; private final LazyLoadedValue repairIngredient; - + private EndToolMaterial(int miningLevel, int durability, float miningSpeed, float attackDamage, int enchantability, - Supplier repairIngredient) { + Supplier repairIngredient) { this.durability = durability; this.miningSpeed = miningSpeed; diff --git a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java index 7b6fa214..d5b5c1a0 100644 --- a/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java +++ b/src/main/java/ru/betterend/item/model/ArmoredElytraModel.java @@ -1,14 +1,9 @@ package ru.betterend.item.model; 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; @@ -17,26 +12,12 @@ public class ArmoredElytraModel extends AgeableListModel private final ModelPart rightWing; private final ModelPart leftWing; - public static LayerDefinition getTexturedModelData() { - MeshDefinition modelData = new MeshDefinition(); - PartDefinition modelPartData = modelData.getRoot(); - modelPartData.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create() - .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() - .texOffs(22, 0) - .addBox(0.0f, 0.0f, 0.0f, 10.0f, 20.0f, 2.0f), - PartPose.ZERO); - - return LayerDefinition.create(modelData, 64, 32); - } - - public ArmoredElytraModel(ModelPart modelPart) { - leftWing = modelPart.getChild(PartNames.LEFT_WING); - rightWing = modelPart.getChild(PartNames.RIGHT_WING); + 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); } protected Iterable headParts() { @@ -61,8 +42,7 @@ public class ArmoredElytraModel extends AgeableListModel } rotX = coef * 0.34906584F + (1.0F - coef) * rotX; rotZ = coef * -1.5707964F + (1.0F - coef) * rotZ; - } - else if (livingEntity.isCrouching()) { + } else if (livingEntity.isCrouching()) { rotX = 0.6981317F; rotZ = -0.7853982F; rotY = 0.08726646F; @@ -79,8 +59,7 @@ public class ArmoredElytraModel extends AgeableListModel leftWing.xRot = abstractClientPlayer.elytraRotX; leftWing.yRot = abstractClientPlayer.elytraRotY; leftWing.zRot = abstractClientPlayer.elytraRotZ; - } - else { + } else { leftWing.xRot = rotX; leftWing.zRot = rotZ; leftWing.yRot = rotY; diff --git a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java index ee0bf6eb..b631ad7e 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteArmorProvider.java @@ -1,8 +1,14 @@ package ru.betterend.item.model; +import org.jetbrains.annotations.NotNull; +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.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; @@ -10,42 +16,38 @@ import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; 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 ArmorRenderingRegistry.ModelProvider, ArmorRenderingRegistry.TextureProvider { - //TODO: find new registry +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 = 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 + 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 CrystaliteLeggingsModel LEGGINGS_MODEL = new CrystaliteLeggingsModel(1.0F); + private final static CrystaliteBootsModel BOOTS_MODEL = new CrystaliteBootsModel(1.0F); + + @Override public @NotNull ResourceLocation getArmorTexture(LivingEntity entity, ItemStack stack, EquipmentSlot slot, - boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { + boolean secondLayer, @Nullable String suffix, ResourceLocation defaultTexture) { if (!isStackValid(stack)) return defaultTexture; if (secondLayer) return SECOND_LAYER; return FIRST_LAYER; } - //@Override + @Override public @NotNull HumanoidModel getArmorModel(LivingEntity entity, ItemStack stack, - EquipmentSlot slot, HumanoidModel defaultModel) { + EquipmentSlot slot, HumanoidModel defaultModel) { if (!isStackValid(stack)) return defaultModel; - switch (slot) { + switch(slot) { case HEAD: { return HELMET_MODEL; } case CHEST: { if (entity instanceof AbstractClientPlayer && - ((AbstractClientPlayer) entity).getModelName().equals("slim")) { + ((AbstractClientPlayer) entity).getModelName().equals("slim")) { CHEST_MODEL_SLIM.copyPropertiesTo(defaultModel); return CHEST_MODEL_SLIM; } @@ -64,7 +66,7 @@ public class CrystaliteArmorProvider implements ArmorRenderingRegistry.ModelProv } } } - + public Iterable getRenderedItems() { return Lists.newArrayList( EndItems.CRYSTALITE_HELMET, @@ -73,7 +75,7 @@ public class CrystaliteArmorProvider implements ArmorRenderingRegistry.ModelProv EndItems.CRYSTALITE_LEGGINGS, EndItems.CRYSTALITE_BOOTS); } - + private boolean isStackValid(ItemStack stack) { return stack.getItem() instanceof CrystaliteArmor; } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java index 5458e891..d1a37fde 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteBootsModel.java @@ -1,67 +1,29 @@ package ru.betterend.item.model; +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.CubeDeformation; -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.world.entity.LivingEntity; -import ru.betterend.registry.EndEntitiesRenders; - -import java.util.Collections; 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(); - - // 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() - .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() - .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); + + 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 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); - - leftBoot = modelPart.getChild("leftBoot"); - rightBoot = modelPart.getChild("rightBoot"); - } - + @Override public void copyPropertiesTo(HumanoidModel bipedEntityModel) { super.copyPropertiesTo(bipedEntityModel); @@ -73,7 +35,7 @@ public class CrystaliteBootsModel extends HumanoidModel { protected Iterable headParts() { return Collections::emptyIterator; } - + @Override protected Iterable bodyParts() { return Lists.newArrayList(leftBoot, rightBoot); diff --git a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java index f784da8f..1942f9d6 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteChestplateModel.java @@ -1,133 +1,73 @@ package ru.betterend.item.model; +import java.util.Collections; + 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.CubeDeformation; -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.world.entity.HumanoidArm; import net.minecraft.world.entity.LivingEntity; -import ru.betterend.registry.EndEntitiesRenders; - -import java.util.Collections; public class CrystaliteChestplateModel extends HumanoidModel { public ModelPart leftShoulder; public ModelPart rightShoulder; private final boolean thinArms; - - 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(); - - // 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() - .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() - .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() - .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() - .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() - .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); - } - - final ModelPart localBody; - - public static CrystaliteChestplateModel createRegularModel(EntityModelSet entityModelSet) { - return new CrystaliteChestplateModel(entityModelSet == null ? getRegularTexturedModelData().bakeRoot() : entityModelSet.bakeLayer(EndEntitiesRenders.CRYSTALITE_CHESTPLATE), false); - } - - 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) { - super(modelPart, RenderType::entityTranslucent); + + public CrystaliteChestplateModel(float scale, boolean thinArms) { + super(RenderType::entityTranslucent, scale, 0.0F, 64, 48); this.thinArms = thinArms; - localBody = modelPart.getChild(PartNames.BODY); - leftShoulder = modelPart.getChild("leftShoulder"); - rightShoulder = modelPart.getChild("rightShoulder"); + 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); + 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); + } 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); + } } - + @Override public void copyPropertiesTo(HumanoidModel bipedEntityModel) { super.copyPropertiesTo(bipedEntityModel); this.leftShoulder.copyFrom(leftArm); this.rightShoulder.copyFrom(rightArm); } - + @Override protected Iterable headParts() { return Collections::emptyIterator; } - + @Override protected Iterable bodyParts() { - return Lists.newArrayList(localBody, leftShoulder, rightShoulder); + return Lists.newArrayList(body, leftShoulder, rightShoulder); } - + @Override public void translateToHand(HumanoidArm arm, PoseStack matrices) { ModelPart modelPart = this.getArm(arm); if (this.thinArms) { - float f = 0.5F * (float) (arm == HumanoidArm.RIGHT ? 1 : -1); + float f = 0.5F * (float)(arm == HumanoidArm.RIGHT ? 1 : -1); modelPart.x += f; modelPart.translateAndRotate(matrices); modelPart.x -= f; - } - else { + } else { modelPart.translateAndRotate(matrices); } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java index 474980c9..3513c2f4 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteHelmetModel.java @@ -1,71 +1,33 @@ package ru.betterend.item.model; -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.CubeDeformation; -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.world.entity.LivingEntity; -import ru.betterend.registry.EndEntitiesRenders; - import java.util.Collections; +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.ModelPart; +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(); - - // 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() - .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); + 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); } - - 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); - - myHat = modelPart.getChild(PartNames.HAT); - } - + @Override protected Iterable headParts() { return Collections::emptyIterator; } - + @Override protected Iterable bodyParts() { - return Lists.newArrayList(myHat); + return Lists.newArrayList(hat); } } diff --git a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java index 0f1a743d..54772ebd 100644 --- a/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java +++ b/src/main/java/ru/betterend/item/model/CrystaliteLeggingsModel.java @@ -1,81 +1,36 @@ package ru.betterend.item.model; -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.CubeDeformation; -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.world.entity.LivingEntity; -import ru.betterend.registry.EndEntitiesRenders; - import java.util.Collections; +import com.google.common.collect.Lists; + +import net.minecraft.client.model.HumanoidModel; +import net.minecraft.client.model.geom.ModelPart; +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(); - // 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() - .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() - .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() - .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); - } - - final ModelPart myBody; - 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); - - myBody = modelPart.getChild(PartNames.BODY); - myLeftLeg = modelPart.getChild(PartNames.LEFT_LEG); - myRightLeg = modelPart.getChild(PartNames.RIGHT_LEG); + 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); } @Override protected Iterable headParts() { return Collections::emptyIterator; } - + @Override protected Iterable bodyParts() { - return Lists.newArrayList(myBody, myRightLeg, myLeftLeg); + return Lists.newArrayList(body, rightLeg, leftLeg); } } diff --git a/src/main/java/ru/betterend/item/tool/EndHammerItem.java b/src/main/java/ru/betterend/item/tool/EndHammerItem.java index 5f1e11c0..fa990cf9 100644 --- a/src/main/java/ru/betterend/item/tool/EndHammerItem.java +++ b/src/main/java/ru/betterend/item/tool/EndHammerItem.java @@ -1,16 +1,17 @@ package ru.betterend.item.tool; +import java.util.UUID; + import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.ImmutableMultimap.Builder; 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; 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; @@ -27,20 +28,17 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.material.Material; -import ru.bclib.api.TagAPI; import ru.bclib.client.models.ItemModelProvider; import ru.bclib.client.models.ModelsHelper; - -import java.util.UUID; +import ru.betterend.registry.EndTags; public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, ItemModelProvider { public final static UUID ATTACK_KNOCKBACK_MODIFIER_ID = Mth.createInsecureUUID(ThreadLocalRandom.current()); - + private final Multimap attributeModifiers; public EndHammerItem(Tier material, float attackDamage, float attackSpeed, double knockback, Properties 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); + super(attackDamage, attackSpeed, material, Sets.newHashSet(), settings); Builder builder = ImmutableMultimap.builder(); builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Weapon modifier", attackDamage + material.getAttackDamageBonus(), AttributeModifier.Operation.ADDITION)); @@ -52,17 +50,17 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, I @Override public boolean canAttackBlock(BlockState state, Level world, BlockPos pos, Player miner) { return state.getMaterial().equals(Material.STONE) || - state.getMaterial().equals(Material.GLASS) || - state.is(Blocks.DIAMOND_BLOCK) || - state.is(Blocks.EMERALD_BLOCK) || - state.is(Blocks.LAPIS_BLOCK) || - state.is(Blocks.REDSTONE_BLOCK); + state.getMaterial().equals(Material.GLASS) || + state.is(Blocks.DIAMOND_BLOCK) || + state.is(Blocks.EMERALD_BLOCK) || + state.is(Blocks.LAPIS_BLOCK) || + state.is(Blocks.REDSTONE_BLOCK); } @Override public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) { stack.hurtAndBreak(1, attacker, ((entity) -> entity.broadcastBreakEvent(EquipmentSlot.MAINHAND))); - + return true; } @@ -84,26 +82,25 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, I float mult; if (state.is(Blocks.DIAMOND_BLOCK) || state.is(Blocks.EMERALD_BLOCK) || state.is(Blocks.LAPIS_BLOCK) || state.is(Blocks.REDSTONE_BLOCK)) { mult = this.getTier().getSpeed(); - } - else { + } else { mult = this.getTier().getSpeed() / 2.0F; } return Math.max(mult, 1.0F); } return 1.0F; } - + @Override public float getMiningSpeedMultiplier(Tag tag, BlockState state, ItemStack stack, LivingEntity user) { - if (tag.equals(TagAPI.HAMMERS)) { + if (tag.equals(EndTags.HAMMERS)) { return this.getDestroySpeed(stack, state); } return 1.0F; } - + @Override public int getMiningLevel(Tag tag, BlockState state, ItemStack stack, LivingEntity user) { - if (tag.equals(TagAPI.HAMMERS)) { + if (tag.equals(EndTags.HAMMERS)) { return this.getTier().getLevel(); } return 0; @@ -134,9 +131,8 @@ public class EndHammerItem extends DiggerItem implements DynamicAttributeTool, I public Multimap getDefaultAttributeModifiers(EquipmentSlot slot) { return slot == EquipmentSlot.MAINHAND ? this.attributeModifiers : super.getDefaultAttributeModifiers(slot); } - + @Override - @Environment(EnvType.CLIENT) public BlockModel getItemModel(ResourceLocation resourceLocation) { return ModelsHelper.createHandheldItem(resourceLocation); } diff --git a/src/main/java/ru/betterend/item/tool/EndPickaxe.java b/src/main/java/ru/betterend/item/tool/EndPickaxe.java deleted file mode 100644 index bf8494fa..00000000 --- a/src/main/java/ru/betterend/item/tool/EndPickaxe.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.betterend.item.tool; - -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Tier; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; -import ru.bclib.items.tool.BasePickaxeItem; - -public class EndPickaxe extends BasePickaxeItem { - public EndPickaxe(Tier material, int attackDamage, float attackSpeed, Properties settings) { - super(material, attackDamage, attackSpeed, settings); - } - - @Override - public float getDestroySpeed(ItemStack stack, BlockState state) { - if (state.is(Blocks.END_STONE) && this.getTier().getLevel() > 2) { - return this.speed * 3; - } - return super.getDestroySpeed(stack, state); - } -} diff --git a/src/main/java/ru/betterend/minigTools.txt b/src/main/java/ru/betterend/minigTools.txt deleted file mode 100644 index 28523ccc..00000000 --- a/src/main/java/ru/betterend/minigTools.txt +++ /dev/null @@ -1,593 +0,0 @@ -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/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java b/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java index 9c94ed93..296a013e 100644 --- a/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java +++ b/src/main/java/ru/betterend/mixin/client/AbstractSoundInstanceAccessor.java @@ -1,9 +1,10 @@ package ru.betterend.mixin.client; -import net.minecraft.client.resources.sounds.AbstractSoundInstance; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; +import net.minecraft.client.resources.sounds.AbstractSoundInstance; + @Mixin(AbstractSoundInstance.class) public interface AbstractSoundInstanceAccessor { @Accessor("volume") diff --git a/src/main/java/ru/betterend/mixin/client/AnvilScreenMixin.java b/src/main/java/ru/betterend/mixin/client/AnvilScreenMixin.java index a629fb99..2efb8696 100644 --- a/src/main/java/ru/betterend/mixin/client/AnvilScreenMixin.java +++ b/src/main/java/ru/betterend/mixin/client/AnvilScreenMixin.java @@ -1,7 +1,16 @@ package ru.betterend.mixin.client; +import java.util.List; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import com.google.common.collect.Lists; import com.mojang.blaze3d.vertex.PoseStack; + import net.minecraft.client.gui.components.AbstractWidget; import net.minecraft.client.gui.components.Button; import net.minecraft.client.gui.components.EditBox; @@ -14,70 +23,61 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.AnvilMenu; import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.interfaces.AnvilScreenHandlerExtended; -import java.util.List; - @Mixin(AnvilScreen.class) public class AnvilScreenMixin extends ItemCombinerScreen { @Shadow private EditBox name; - + private final List be_buttons = Lists.newArrayList(); - + public AnvilScreenMixin(AnvilMenu handler, Inventory playerInventory, Component title, - ResourceLocation texture) { + ResourceLocation texture) { super(handler, playerInventory, title, texture); } @Inject(method = "subInit", at = @At("TAIL")) protected void be_subInit(CallbackInfo info) { int x = (width - imageWidth) / 2; - int y = (height - imageHeight) / 2; + int y = (height - imageHeight) / 2; be_buttons.clear(); - be_buttons.add(new Button(x + 8, y + 45, 15, 20, new TextComponent("<"), b -> be_previousRecipe())); + be_buttons.add(new Button(x + 8, y + 45, 15, 20, new TextComponent("<"), b -> be_previousRecipe())); be_buttons.add(new Button(x + 154, y + 45, 15, 20, new TextComponent(">"), b -> be_nextRecipe())); } - + @Inject(method = "renderFg", at = @At("TAIL")) protected void be_renderForeground(PoseStack matrices, int mouseX, int mouseY, float delta, CallbackInfo info) { be_buttons.forEach(button -> { button.render(matrices, mouseX, mouseY, delta); }); } - + @Inject(method = "slotChanged", at = @At("HEAD"), cancellable = true) public void be_onSlotUpdate(AbstractContainerMenu handler, int slotId, ItemStack stack, CallbackInfo info) { AnvilScreenHandlerExtended anvilHandler = (AnvilScreenHandlerExtended) handler; if (anvilHandler.be_getCurrentRecipe() != null) { if (anvilHandler.be_getRecipes().size() > 1) { be_buttons.forEach(button -> button.visible = true); - } - else { + } else { be_buttons.forEach(button -> button.visible = false); } name.setValue(""); info.cancel(); - } - else { + } else { be_buttons.forEach(button -> button.visible = false); } } - + private void be_nextRecipe() { ((AnvilScreenHandlerExtended) menu).be_nextRecipe(); } - + private void be_previousRecipe() { ((AnvilScreenHandlerExtended) menu).be_previousRecipe(); } - + @Override public boolean mouseClicked(double mouseX, double mouseY, int button) { if (minecraft != null) { diff --git a/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java b/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java index 4f61d259..d3e11b1a 100644 --- a/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ArmorStandRendererMixin.java @@ -1,25 +1,26 @@ 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 abstract class ArmorStandRendererMixin extends LivingEntityRenderer { - public ArmorStandRendererMixin(EntityRendererProvider.Context context, ArmorStandArmorModel entityModel, float f) { - super(context, entityModel, f); + public ArmorStandRendererMixin(EntityRenderDispatcher entityRenderDispatcher, ArmorStandArmorModel entityModel, float f) { + super(entityRenderDispatcher, entityModel, f); } @Inject(method = "*", at = @At("TAIL")) - public void be_addCustomLayer(EntityRendererProvider.Context context, CallbackInfo ci) { - addLayer(new ArmoredElytraLayer<>(this, context.getModelSet())); + public void be_addCustomLayer(EntityRenderDispatcher entityRenderDispatcher, CallbackInfo info) { + addLayer(new ArmoredElytraLayer<>(this)); } } diff --git a/src/main/java/ru/betterend/mixin/client/BiomeColorsMixin.java b/src/main/java/ru/betterend/mixin/client/BiomeColorsMixin.java index cce33d52..e15ed5fe 100644 --- a/src/main/java/ru/betterend/mixin/client/BiomeColorsMixin.java +++ b/src/main/java/ru/betterend/mixin/client/BiomeColorsMixin.java @@ -1,5 +1,12 @@ package ru.betterend.mixin.client; +import java.awt.Point; + +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.fabricmc.loader.api.FabricLoader; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.BiomeColors; @@ -7,27 +14,18 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.BlockAndTintGetter; -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.ColorUtil; -import ru.bclib.util.MHelper; import ru.betterend.client.ClientOptions; import ru.betterend.registry.EndBlocks; -import java.awt.Point; -import java.util.Arrays; -import java.util.Comparator; - @Mixin(BiomeColors.class) public class BiomeColorsMixin { private static final int POISON_COLOR = ColorUtil.color(92, 160, 78); private static final int STREAM_COLOR = ColorUtil.color(105, 213, 244); private static final Point[] OFFSETS; private static final boolean HAS_SODIUM; - + @Inject(method = "getAverageWaterColor", at = @At("RETURN"), cancellable = true) private static void be_getWaterColor(BlockAndTintGetter world, BlockPos pos, CallbackInfoReturnable info) { if (ClientOptions.useSulfurWaterColor()) { @@ -38,25 +36,32 @@ public class BiomeColorsMixin { mut.setX(pos.getX() + OFFSETS[i].x); mut.setZ(pos.getZ() + OFFSETS[i].y); if ((view.getBlockState(mut).is(EndBlocks.BRIMSTONE))) { - info.setReturnValue(i < 4 ? POISON_COLOR : STREAM_COLOR); + info.setReturnValue(i < 16 ? STREAM_COLOR : POISON_COLOR); + info.cancel(); return; } } } } - + static { HAS_SODIUM = FabricLoader.getInstance().isModLoaded("sodium"); - - int index = 0; + OFFSETS = new Point[20]; - for (int x = -2; x < 3; x++) { - for (int z = -2; z < 3; z++) { - if ((x != 0 || z != 0) && (Math.abs(x) != 2 || Math.abs(z) != 2)) { - OFFSETS[index++] = new Point(x, z); - } - } + for (int i = 0; i < 3; i++) { + int p = i - 1; + OFFSETS[i] = new Point(p, -2); + OFFSETS[i + 3] = new Point(p, 2); + OFFSETS[i + 6] = new Point(-2, p); + OFFSETS[i + 9] = new Point(2, p); + } + + for (int i = 0; i < 4; i++) { + int inner = i + 16; + Direction dir = BlocksHelper.HORIZONTAL[i]; + OFFSETS[inner] = new Point(dir.getStepX(), dir.getStepZ()); + dir = BlocksHelper.HORIZONTAL[(i + 1) & 3]; + OFFSETS[i + 12] = new Point(OFFSETS[inner].x + dir.getStepX(), OFFSETS[inner].y + dir.getStepZ()); } - Arrays.sort(OFFSETS, Comparator.comparingInt(pos -> MHelper.sqr(pos.x) + MHelper.sqr(pos.y))); } } diff --git a/src/main/java/ru/betterend/mixin/client/CapeLayerMixin.java b/src/main/java/ru/betterend/mixin/client/CapeLayerMixin.java index 22a68c0e..3e0e5dd5 100644 --- a/src/main/java/ru/betterend/mixin/client/CapeLayerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/CapeLayerMixin.java @@ -1,15 +1,17 @@ package ru.betterend.mixin.client; +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 com.mojang.blaze3d.vertex.PoseStack; + import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.layers.CapeLayer; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ItemStack; -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 ru.betterend.item.ArmoredElytra; @Mixin(CapeLayer.class) diff --git a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java index 2829daa8..6acaf8e9 100644 --- a/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ClientPlayNetworkHandlerMixin.java @@ -1,23 +1,23 @@ package ru.betterend.mixin.client; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.network.protocol.PacketUtils; import net.minecraft.network.protocol.game.ClientboundOpenSignEditorPacket; import net.minecraft.world.level.block.entity.BlockEntity; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.bclib.blockentities.BaseSignBlockEntity; import ru.bclib.client.gui.BlockSignEditScreen; @Mixin(ClientPacketListener.class) -public class ClientPlayNetworkHandlerMixin { - @Final +public class ClientPlayNetworkHandlerMixin +{ @Shadow private Minecraft minecraft; diff --git a/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java b/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java index 38f5bbb6..4fd3d635 100644 --- a/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ClientRecipeBookMixin.java @@ -1,12 +1,13 @@ package ru.betterend.mixin.client; -import net.minecraft.client.ClientRecipeBook; -import net.minecraft.client.RecipeBookCategories; -import net.minecraft.world.item.crafting.Recipe; 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.client.ClientRecipeBook; +import net.minecraft.client.RecipeBookCategories; +import net.minecraft.world.item.crafting.Recipe; import ru.betterend.interfaces.BetterEndRecipe; @Mixin(ClientRecipeBook.class) diff --git a/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java b/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java new file mode 100644 index 00000000..484b3a65 --- /dev/null +++ b/src/main/java/ru/betterend/mixin/client/ContextGsonAccessor.java @@ -0,0 +1,14 @@ +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 f922d7b7..cc034cd5 100644 --- a/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/HumanoidMobRendererMixin.java @@ -1,25 +1,26 @@ 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) public abstract class HumanoidMobRendererMixin> extends MobRenderer { - public HumanoidMobRendererMixin(EntityRendererProvider.Context context, M entityModel, float f) { - super(context, entityModel, f); + public HumanoidMobRendererMixin(EntityRenderDispatcher entityRenderDispatcher, M entityModel, float f) { + super(entityRenderDispatcher, entityModel, f); } - @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())); + @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)); } } diff --git a/src/main/java/ru/betterend/mixin/client/ItemStackMixin.java b/src/main/java/ru/betterend/mixin/client/ItemStackMixin.java index dd0ffad9..d5f52a97 100644 --- a/src/main/java/ru/betterend/mixin/client/ItemStackMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ItemStackMixin.java @@ -1,17 +1,18 @@ package ru.betterend.mixin.client; +import java.util.List; + +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.network.chat.Component; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; -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.betterend.events.ItemTooltipCallback; -import java.util.List; - @Mixin(ItemStack.class) public class ItemStackMixin { @Inject(method = "getTooltipLines", at = @At("RETURN")) diff --git a/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java b/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java index a631bb40..49badc32 100644 --- a/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/LocalPlayerMixin.java @@ -1,6 +1,15 @@ 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; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import com.mojang.authlib.GameProfile; + import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.player.AbstractClientPlayer; @@ -9,13 +18,6 @@ import net.minecraft.network.protocol.game.ServerboundPlayerCommandPacket; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ElytraItem; import net.minecraft.world.item.ItemStack; -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; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.interfaces.FallFlyingItem; @Mixin(LocalPlayer.class) diff --git a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java index 065f18ba..81e2e2e4 100644 --- a/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MinecraftClientMixin.java @@ -1,5 +1,13 @@ 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; +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.client.Minecraft; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.item.ItemColors; @@ -13,13 +21,6 @@ import net.minecraft.core.Registry; import net.minecraft.sounds.Music; import net.minecraft.sounds.Musics; import net.minecraft.world.level.Level; -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; -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.interfaces.IColorProvider; import ru.bclib.util.MHelper; @@ -27,14 +28,14 @@ import ru.bclib.util.MHelper; public class MinecraftClientMixin { @Shadow public LocalPlayer player; - + @Shadow public Screen screen; @Final @Shadow public Gui gui; - + @Shadow public ClientLevel level; @@ -45,7 +46,7 @@ public class MinecraftClientMixin { @Final @Shadow private ItemColors itemColors; - + @Inject(method = "*", at = @At("TAIL")) private void be_onInit(GameConfig args, CallbackInfo info) { Registry.BLOCK.forEach(block -> { @@ -56,7 +57,7 @@ public class MinecraftClientMixin { } }); } - + @Inject(method = "getSituationalMusic", at = @At("HEAD"), cancellable = true) private void be_getEndMusic(CallbackInfoReturnable info) { if (!(this.screen instanceof WinScreen) && this.player != null) { diff --git a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java index adba0f1a..4c65b28b 100644 --- a/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java +++ b/src/main/java/ru/betterend/mixin/client/ModelLoaderMixin.java @@ -1,10 +1,11 @@ package ru.betterend.mixin.client; -import net.minecraft.client.resources.model.ModelBakery; -import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.ModifyVariable; + +import net.minecraft.client.resources.model.ModelBakery; +import net.minecraft.resources.ResourceLocation; import ru.betterend.world.generator.GeneratorOptions; @Mixin(ModelBakery.class) diff --git a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java index 8c631b07..7af64b12 100644 --- a/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java +++ b/src/main/java/ru/betterend/mixin/client/MusicTrackerMixin.java @@ -1,5 +1,14 @@ package ru.betterend.mixin.client; +import java.util.Random; + +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import net.minecraft.client.Minecraft; import net.minecraft.client.resources.sounds.AbstractSoundInstance; import net.minecraft.client.resources.sounds.SoundInstance; @@ -7,16 +16,8 @@ import net.minecraft.client.sounds.MusicManager; import net.minecraft.sounds.Music; import net.minecraft.util.Mth; import net.minecraft.world.level.Level; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.client.ClientOptions; -import java.util.Random; - @Mixin(MusicManager.class) public abstract class MusicTrackerMixin { @Final @@ -26,17 +27,17 @@ public abstract class MusicTrackerMixin { @Final @Shadow private Random random; - + @Shadow private SoundInstance currentMusic; - + @Shadow private int nextSongDelay; - + private static float volume = 1; private static float srcVolume = 0; private static long time; - + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) public void be_onTick(CallbackInfo info) { if (ClientOptions.blendBiomeMusic()) { @@ -79,19 +80,19 @@ public abstract class MusicTrackerMixin { } } } - + private boolean be_isInEnd() { return minecraft.level != null && minecraft.level.dimension().equals(Level.END); } - + private boolean be_shouldChangeSound(Music musicSound) { return currentMusic != null && !musicSound.getEvent().getLocation().equals(this.currentMusic.getLocation()) && musicSound.replaceCurrentMusic(); } - + private boolean be_checkNullSound(Music musicSound) { return musicSound != null && musicSound.getEvent() != null; } - + @Shadow public abstract void startPlaying(Music type); } diff --git a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java index 8c92033c..d435dd52 100644 --- a/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/PlayerRendererMixin.java @@ -1,25 +1,26 @@ 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) public abstract class PlayerRendererMixin extends LivingEntityRenderer> { - public PlayerRendererMixin(EntityRendererProvider.Context context, PlayerModel entityModel, float f) { - super(context, entityModel, f); + public PlayerRendererMixin(EntityRenderDispatcher entityRenderDispatcher, PlayerModel entityModel, float f) { + super(entityRenderDispatcher, entityModel, f); } - @Inject(method = "*", at = @At("TAIL")) - public void be_addCustomLayer(EntityRendererProvider.Context context, boolean bl, CallbackInfo ci) { - addLayer(new ArmoredElytraLayer<>(this, context.getModelSet())); + @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)); } } diff --git a/src/main/java/ru/betterend/mixin/client/LevelRendererMixin.java b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java similarity index 80% rename from src/main/java/ru/betterend/mixin/client/LevelRendererMixin.java rename to src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java index a49d25da..b24d3517 100644 --- a/src/main/java/ru/betterend/mixin/client/LevelRendererMixin.java +++ b/src/main/java/ru/betterend/mixin/client/WorldRendererMixin.java @@ -1,439 +1,427 @@ -package ru.betterend.mixin.client; - -import com.mojang.blaze3d.platform.GlStateManager; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.BufferBuilder; -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.PoseStack; -import com.mojang.blaze3d.vertex.Tesselator; -import com.mojang.blaze3d.vertex.VertexBuffer; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.math.Matrix4f; -import com.mojang.math.Quaternion; -import com.mojang.math.Vector3f; -import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.client.Minecraft; -import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.DimensionSpecialEffects; -import net.minecraft.client.renderer.FogRenderer; -import net.minecraft.client.renderer.GameRenderer; -import net.minecraft.client.renderer.LevelRenderer; -import net.minecraft.client.renderer.RenderBuffers; -import net.minecraft.client.renderer.texture.TextureManager; -import net.minecraft.resources.ResourceLocation; -import org.lwjgl.opengl.GL11; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import ru.bclib.util.BackgroundInfo; -import ru.bclib.util.MHelper; -import ru.betterend.BetterEnd; -import ru.betterend.client.ClientOptions; - -import java.util.Random; - -@Mixin(LevelRenderer.class) -public class LevelRendererMixin { - private static final ResourceLocation NEBULA_1 = BetterEnd.makeID("textures/sky/nebula_2.png"); - private static final ResourceLocation NEBULA_2 = BetterEnd.makeID("textures/sky/nebula_3.png"); - private static final ResourceLocation HORIZON = BetterEnd.makeID("textures/sky/nebula_1.png"); - private static final ResourceLocation STARS = BetterEnd.makeID("textures/sky/stars.png"); - private static final ResourceLocation FOG = BetterEnd.makeID("textures/sky/fog.png"); - - private static VertexBuffer stars1; - private static VertexBuffer stars2; - private static VertexBuffer stars3; - private static VertexBuffer stars4; - private static VertexBuffer nebulas1; - private static VertexBuffer nebulas2; - private static VertexBuffer horizon; - private static VertexBuffer fog; - private static Vector3f axis1; - private static Vector3f axis2; - private static Vector3f axis3; - private static Vector3f axis4; - private static float time; - private static float time2; - private static float time3; - private static float blind02; - private static float blind06; - private static boolean directOpenGL = false; - - @Shadow - @Final - private Minecraft minecraft; - - @Shadow - @Final - private TextureManager textureManager; - - @Shadow - private ClientLevel level; - - @Shadow - private int ticks; - - @Inject(method = "*", at = @At("TAIL")) - private void be_onInit(Minecraft client, RenderBuffers bufferBuilders, CallbackInfo info) { - be_initStars(); - Random random = new Random(131); - axis1 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); - axis2 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); - axis3 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); - axis4 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); - axis1.normalize(); - axis2.normalize(); - axis3.normalize(); - axis4.normalize(); - - directOpenGL = FabricLoader.getInstance().isModLoaded("optifabric") || FabricLoader.getInstance().isModLoaded("immersive_portals"); - } - - @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) - private void be_renderBetterEndSky(PoseStack matrices, Matrix4f matrix4f, float tickDelta, Runnable runnable, CallbackInfo info) { - if (ClientOptions.isCustomSky() && minecraft.level.effects().skyType() == DimensionSpecialEffects.SkyType.END) { - runnable.run(); - - time = (ticks % 360000) * 0.000017453292F; - time2 = time * 2; - time3 = time * 3; - - FogRenderer.levelFogColor(); - RenderSystem.enableTexture(); - - if (directOpenGL) { - GL11.glEnable(GL11.GL_ALPHA_TEST); - GL11.glAlphaFunc(516, 0.0F); - GL11.glEnable(GL11.GL_BLEND); - RenderSystem.depthMask(false); - } - else { - RenderSystem.enableBlend(); - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - } - - float blindA = 1F - BackgroundInfo.blindness; - blind02 = blindA * 0.2F; - blind06 = blindA * 0.6F; - - if (blindA > 0) { - matrices.pushPose(); - matrices.mulPose(new Quaternion(0, time, 0, false)); - RenderSystem.setShaderTexture(0, HORIZON); - 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)); - RenderSystem.setShaderTexture(0, NEBULA_1); - 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)); - RenderSystem.setShaderTexture(0, NEBULA_2); - be_renderBuffer(matrices, matrix4f, nebulas2, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); - matrices.popPose(); - - RenderSystem.setShaderTexture(0, STARS); - - matrices.pushPose(); - matrices.mulPose(axis3.rotation(time)); - 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, matrix4f, stars4, DefaultVertexFormat.POSITION_TEX, 1F, 1F, 1F, blind06); - matrices.popPose(); - } - - float a = (BackgroundInfo.fogDensity - 1F); - if (a > 0) { - if (a > 1) a = 1; - RenderSystem.setShaderTexture(0, FOG); - be_renderBuffer(matrices, matrix4f, fog, DefaultVertexFormat.POSITION_TEX, BackgroundInfo.fogColorRed, BackgroundInfo.fogColorGreen, BackgroundInfo.fogColorBlue, a); - } - - RenderSystem.disableTexture(); - - if (blindA > 0) { - matrices.pushPose(); - matrices.mulPose(axis1.rotation(time3)); - be_renderBuffer(matrices, matrix4f, stars1, DefaultVertexFormat.POSITION, 1, 1, 1, blind06); - matrices.popPose(); - - matrices.pushPose(); - matrices.mulPose(axis2.rotation(time2)); - 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, Matrix4f matrix4f, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) { - RenderSystem.setShaderColor(r, g, b, a); - if (format == DefaultVertexFormat.POSITION) { - buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionShader()); - } - else { - buffer.drawWithShader(matrices.last().pose(), matrix4f, GameRenderer.getPositionTexShader()); - } - } - - private void be_initStars() { - BufferBuilder buffer = Tesselator.getInstance().getBuilder(); - stars1 = be_buildBufferStars(buffer, stars1, 0.1, 0.30, 3500, 41315); - stars2 = be_buildBufferStars(buffer, stars2, 0.1, 0.35, 2000, 35151); - stars3 = be_buildBufferUVStars(buffer, stars3, 0.4, 1.2, 1000, 61354); - stars4 = be_buildBufferUVStars(buffer, stars4, 0.4, 1.2, 1000, 61355); - nebulas1 = be_buildBufferFarFog(buffer, nebulas1, 40, 60, 30, 11515); - nebulas2 = be_buildBufferFarFog(buffer, nebulas2, 40, 60, 10, 14151); - horizon = be_buildBufferHorizon(buffer, horizon); - fog = be_buildBufferFog(buffer, fog); - } - - private VertexBuffer be_buildBufferStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { - if (buffer != null) { - buffer.close(); - } - - //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); - - return buffer; - } - - private VertexBuffer be_buildBufferUVStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { - if (buffer != null) { - buffer.close(); - } - - // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); - buffer = new VertexBuffer(); - be_makeUVStars(bufferBuilder, minSize, maxSize, count, seed); - bufferBuilder.end(); - buffer.upload(bufferBuilder); - - return buffer; - } - - private VertexBuffer be_buildBufferFarFog(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { - if (buffer != null) { - buffer.close(); - } - - // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); - buffer = new VertexBuffer(); - be_makeFarFog(bufferBuilder, minSize, maxSize, count, seed); - bufferBuilder.end(); - buffer.upload(bufferBuilder); - - return buffer; - } - - private VertexBuffer be_buildBufferHorizon(BufferBuilder bufferBuilder, VertexBuffer buffer) { - if (buffer != null) { - buffer.close(); - } - - // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); - buffer = new VertexBuffer(); - be_makeCylinder(bufferBuilder, 16, 50, 100); - bufferBuilder.end(); - buffer.upload(bufferBuilder); - - return buffer; - } - - private VertexBuffer be_buildBufferFog(BufferBuilder bufferBuilder, VertexBuffer buffer) { - if (buffer != null) { - buffer.close(); - } - - // buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); - buffer = new VertexBuffer(); - be_makeCylinder(bufferBuilder, 16, 50, 70); - bufferBuilder.end(); - buffer.upload(bufferBuilder); - - return buffer; - } - - private void be_makeStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { - Random random = new Random(seed); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION); - - for (int i = 0; i < count; ++i) { - double posX = random.nextDouble() * 2.0 - 1.0; - double posY = random.nextDouble() * 2.0 - 1.0; - double posZ = random.nextDouble() * 2.0 - 1.0; - double size = MHelper.randRange(minSize, maxSize, random); - double length = posX * posX + posY * posY + posZ * posZ; - if (length < 1.0 && length > 0.001) { - length = 1.0 / Math.sqrt(length); - posX *= length; - posY *= length; - posZ *= length; - double j = posX * 100.0; - double k = posY * 100.0; - double l = posZ * 100.0; - double m = Math.atan2(posX, posZ); - double n = Math.sin(m); - double o = Math.cos(m); - double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); - double q = Math.sin(p); - double r = Math.cos(p); - double s = random.nextDouble() * Math.PI * 2.0; - double t = Math.sin(s); - double u = Math.cos(s); - - for (int v = 0; v < 4; ++v) { - double x = (double) ((v & 2) - 1) * size; - double y = (double) ((v + 1 & 2) - 1) * size; - double aa = x * u - y * t; - double ab = y * u + x * t; - double ad = aa * q + 0.0 * r; - double ae = 0.0 * q - aa * r; - double af = ae * n - ab * o; - double ah = ab * n + ae * o; - buffer.vertex(j + af, k + ad, l + ah).endVertex(); - } - } - } - } - - private void be_makeUVStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { - Random random = new Random(seed); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - - for (int i = 0; i < count; ++i) { - double posX = random.nextDouble() * 2.0 - 1.0; - double posY = random.nextDouble() * 2.0 - 1.0; - double posZ = random.nextDouble() * 2.0 - 1.0; - double size = MHelper.randRange(minSize, maxSize, random); - double length = posX * posX + posY * posY + posZ * posZ; - if (length < 1.0 && length > 0.001) { - length = 1.0 / Math.sqrt(length); - posX *= length; - posY *= length; - posZ *= length; - double j = posX * 100.0; - double k = posY * 100.0; - double l = posZ * 100.0; - double m = Math.atan2(posX, posZ); - double n = Math.sin(m); - double o = Math.cos(m); - double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); - double q = Math.sin(p); - double r = Math.cos(p); - double s = random.nextDouble() * Math.PI * 2.0; - double t = Math.sin(s); - double u = Math.cos(s); - - int pos = 0; - float minV = random.nextInt(4) / 4F; - for (int v = 0; v < 4; ++v) { - double x = (double) ((v & 2) - 1) * size; - double y = (double) ((v + 1 & 2) - 1) * size; - double aa = x * u - y * t; - double ab = y * u + x * t; - double ad = aa * q + 0.0 * r; - double ae = 0.0 * q - aa * r; - double af = ae * n - ab * o; - double ah = ab * n + ae * o; - float texU = (pos >> 1) & 1; - float texV = (((pos + 1) >> 1) & 1) / 4F + minV; - pos++; - buffer.vertex(j + af, k + ad, l + ah).uv(texU, texV).endVertex(); - } - } - } - } - - private void be_makeFarFog(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { - Random random = new Random(seed); - buffer.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX); - - for (int i = 0; i < count; ++i) { - double posX = random.nextDouble() * 2.0 - 1.0; - double posY = random.nextDouble() - 0.5; - double posZ = random.nextDouble() * 2.0 - 1.0; - double size = MHelper.randRange(minSize, maxSize, random); - double length = posX * posX + posY * posY + posZ * posZ; - double distance = 2.0; - double delta = 1.0 / count; - if (length < 1.0 && length > 0.001) { - length = distance / Math.sqrt(length); - size *= distance; - distance -= delta; - posX *= length; - posY *= length; - posZ *= length; - double j = posX * 100.0; - double k = posY * 100.0; - double l = posZ * 100.0; - double m = Math.atan2(posX, posZ); - double n = Math.sin(m); - double o = Math.cos(m); - double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); - double q = Math.sin(p); - double r = Math.cos(p); - double s = random.nextDouble() * Math.PI * 2.0; - double t = Math.sin(s); - double u = Math.cos(s); - - int pos = 0; - for (int v = 0; v < 4; ++v) { - double x = (double) ((v & 2) - 1) * size; - double y = (double) ((v + 1 & 2) - 1) * size; - double aa = x * u - y * t; - double ab = y * u + x * t; - double ad = aa * q + 0.0 * r; - double ae = 0.0 * q - aa * r; - double af = ae * n - ab * o; - double ah = ab * n + ae * o; - float texU = (pos >> 1) & 1; - float texV = ((pos + 1) >> 1) & 1; - pos++; - buffer.vertex(j + af, k + ad, l + ah).uv(texU, texV).endVertex(); - } - } - } - } - - private void be_makeCylinder(BufferBuilder buffer, int segments, double height, double radius) { - 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; - double px1 = Math.sin(a1) * radius; - double pz1 = Math.cos(a1) * radius; - double px2 = Math.sin(a2) * radius; - double pz2 = Math.cos(a2) * radius; - - float u0 = (float) i / (float) segments; - float u1 = (float) (i + 1) / (float) segments; - - buffer.vertex(px1, -height, pz1).uv(u0, 0).endVertex(); - buffer.vertex(px1, height, pz1).uv(u0, 1).endVertex(); - buffer.vertex(px2, height, pz2).uv(u1, 1).endVertex(); - buffer.vertex(px2, -height, pz2).uv(u1, 0).endVertex(); - } - } -} +package ru.betterend.mixin.client; + +import java.util.Random; + +import org.lwjgl.opengl.GL11; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexBuffer; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; + +import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.DimensionSpecialEffects; +import net.minecraft.client.renderer.FogRenderer; +import net.minecraft.client.renderer.LevelRenderer; +import net.minecraft.client.renderer.RenderBuffers; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.resources.ResourceLocation; +import ru.bclib.util.BackgroundInfo; +import ru.bclib.util.MHelper; +import ru.betterend.BetterEnd; +import ru.betterend.client.ClientOptions; + +@Mixin(LevelRenderer.class) +public class WorldRendererMixin { + private static final ResourceLocation NEBULA_1 = BetterEnd.makeID("textures/sky/nebula_2.png"); + private static final ResourceLocation NEBULA_2 = BetterEnd.makeID("textures/sky/nebula_3.png"); + private static final ResourceLocation HORIZON = BetterEnd.makeID("textures/sky/nebula_1.png"); + private static final ResourceLocation STARS = BetterEnd.makeID("textures/sky/stars.png"); + private static final ResourceLocation FOG = BetterEnd.makeID("textures/sky/fog.png"); + + private static VertexBuffer stars1; + private static VertexBuffer stars2; + private static VertexBuffer stars3; + private static VertexBuffer stars4; + private static VertexBuffer nebulas1; + private static VertexBuffer nebulas2; + private static VertexBuffer horizon; + private static VertexBuffer fog; + private static Vector3f axis1; + private static Vector3f axis2; + private static Vector3f axis3; + private static Vector3f axis4; + private static float time; + private static float time2; + private static float time3; + private static float blind02; + private static float blind06; + private static boolean directOpenGL = false; + + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + @Final + private TextureManager textureManager; + + @Shadow + private ClientLevel level; + + @Shadow + private int ticks; + + @Inject(method = "*", at = @At("TAIL")) + private void be_onInit(Minecraft client, RenderBuffers bufferBuilders, CallbackInfo info) { + be_initStars(); + Random random = new Random(131); + axis1 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); + axis2 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); + axis3 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); + axis4 = new Vector3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); + axis1.normalize(); + axis2.normalize(); + axis3.normalize(); + axis4.normalize(); + + directOpenGL = FabricLoader.getInstance().isModLoaded("optifabric") || FabricLoader.getInstance().isModLoaded("immersive_portals"); + } + + @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) + private void be_renderBetterEndSky(PoseStack matrices, float tickDelta, CallbackInfo info) { + if (ClientOptions.isCustomSky() && minecraft.level.effects().skyType() == DimensionSpecialEffects.SkyType.END) { + time = (ticks % 360000) * 0.000017453292F; + time2 = time * 2; + time3 = time * 3; + + FogRenderer.levelFogColor(); + RenderSystem.enableTexture(); + + if (directOpenGL) { + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(516, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + RenderSystem.depthMask(false); + } + else { + RenderSystem.enableAlphaTest(); + RenderSystem.alphaFunc(516, 0.0F); + RenderSystem.enableBlend(); + } + + float blindA = 1F - BackgroundInfo.blindness; + blind02 = blindA * 0.2F; + blind06 = blindA * 0.6F; + + if (blindA > 0) { + matrices.pushPose(); + matrices.mulPose(new Quaternion(0, time, 0, false)); + 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); + 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); + be_renderBuffer(matrices, nebulas2, DefaultVertexFormat.POSITION_TEX, 0.77F, 0.31F, 0.73F, blind02); + matrices.popPose(); + + textureManager.bind(STARS); + + matrices.pushPose(); + matrices.mulPose(axis3.rotation(time)); + be_renderBuffer(matrices, 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); + matrices.popPose(); + } + + float a = (BackgroundInfo.fogDensity - 1F); + if (a > 0) { + if (a > 1) a = 1; + textureManager.bind(FOG); + be_renderBuffer(matrices, fog, DefaultVertexFormat.POSITION_TEX, BackgroundInfo.fogColorRed, BackgroundInfo.fogColorGreen, BackgroundInfo.fogColorBlue, a); + } + + RenderSystem.disableTexture(); + + if (blindA > 0) { + matrices.pushPose(); + matrices.mulPose(axis1.rotation(time3)); + be_renderBuffer(matrices, 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); + matrices.popPose(); + } + + RenderSystem.enableTexture(); + RenderSystem.depthMask(true); + + info.cancel(); + } + } + + private void be_renderBuffer(PoseStack matrices, VertexBuffer buffer, VertexFormat format, float r, float g, float b, float a) { + RenderSystem.color4f(r, g, b, a); + buffer.bind(); + format.setupBufferState(0L); + buffer.draw(matrices.last().pose(), 7); + VertexBuffer.unbind(); + format.clearBufferState(); + } + + private void be_initStars() { + BufferBuilder buffer = Tesselator.getInstance().getBuilder(); + stars1 = be_buildBufferStars(buffer, stars1, 0.1, 0.30, 3500, 41315); + stars2 = be_buildBufferStars(buffer, stars2, 0.1, 0.35, 2000, 35151); + stars3 = be_buildBufferUVStars(buffer, stars3, 0.4, 1.2, 1000, 61354); + stars4 = be_buildBufferUVStars(buffer, stars4, 0.4, 1.2, 1000, 61355); + nebulas1 = be_buildBufferFarFog(buffer, nebulas1, 40, 60, 30, 11515); + nebulas2 = be_buildBufferFarFog(buffer, nebulas2, 40, 60, 10, 14151); + horizon = be_buildBufferHorizon(buffer, horizon); + fog = be_buildBufferFog(buffer, fog); + } + + private VertexBuffer be_buildBufferStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { + if (buffer != null) { + buffer.close(); + } + + buffer = new VertexBuffer(DefaultVertexFormat.POSITION); + be_makeStars(bufferBuilder, minSize, maxSize, count, seed); + bufferBuilder.end(); + buffer.upload(bufferBuilder); + + return buffer; + } + + private VertexBuffer be_buildBufferUVStars(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { + if (buffer != null) { + buffer.close(); + } + + buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + be_makeUVStars(bufferBuilder, minSize, maxSize, count, seed); + bufferBuilder.end(); + buffer.upload(bufferBuilder); + + return buffer; + } + + private VertexBuffer be_buildBufferFarFog(BufferBuilder bufferBuilder, VertexBuffer buffer, double minSize, double maxSize, int count, long seed) { + if (buffer != null) { + buffer.close(); + } + + buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + be_makeFarFog(bufferBuilder, minSize, maxSize, count, seed); + bufferBuilder.end(); + buffer.upload(bufferBuilder); + + return buffer; + } + + private VertexBuffer be_buildBufferHorizon(BufferBuilder bufferBuilder, VertexBuffer buffer) { + if (buffer != null) { + buffer.close(); + } + + buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + be_makeCylinder(bufferBuilder, 16, 50, 100); + bufferBuilder.end(); + buffer.upload(bufferBuilder); + + return buffer; + } + + private VertexBuffer be_buildBufferFog(BufferBuilder bufferBuilder, VertexBuffer buffer) { + if (buffer != null) { + buffer.close(); + } + + buffer = new VertexBuffer(DefaultVertexFormat.POSITION_TEX); + be_makeCylinder(bufferBuilder, 16, 50, 70); + bufferBuilder.end(); + buffer.upload(bufferBuilder); + + return buffer; + } + + private void be_makeStars(BufferBuilder buffer, double minSize, double maxSize, int count, long seed) { + Random random = new Random(seed); + buffer.begin(7, DefaultVertexFormat.POSITION); + + for (int i = 0; i < count; ++i) { + double posX = random.nextDouble() * 2.0 - 1.0; + double posY = random.nextDouble() * 2.0 - 1.0; + double posZ = random.nextDouble() * 2.0 - 1.0; + double size = MHelper.randRange(minSize, maxSize, random); + double length = posX * posX + posY * posY + posZ * posZ; + if (length < 1.0 && length > 0.001) { + length = 1.0 / Math.sqrt(length); + posX *= length; + posY *= length; + posZ *= length; + double j = posX * 100.0; + double k = posY * 100.0; + double l = posZ * 100.0; + double m = Math.atan2(posX, posZ); + double n = Math.sin(m); + double o = Math.cos(m); + double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); + double q = Math.sin(p); + double r = Math.cos(p); + double s = random.nextDouble() * Math.PI * 2.0; + double t = Math.sin(s); + double u = Math.cos(s); + + for (int v = 0; v < 4; ++v) { + double x = (double) ((v & 2) - 1) * size; + double y = (double) ((v + 1 & 2) - 1) * size; + double aa = x * u - y * t; + double ab = y * u + x * t; + double ad = aa * q + 0.0 * r; + double ae = 0.0 * q - aa * r; + double af = ae * n - ab * o; + double ah = ab * n + ae * o; + buffer.vertex(j + af, k + ad, l + ah).endVertex(); + } + } + } + } + + 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); + + for (int i = 0; i < count; ++i) { + double posX = random.nextDouble() * 2.0 - 1.0; + double posY = random.nextDouble() * 2.0 - 1.0; + double posZ = random.nextDouble() * 2.0 - 1.0; + double size = MHelper.randRange(minSize, maxSize, random); + double length = posX * posX + posY * posY + posZ * posZ; + if (length < 1.0 && length > 0.001) { + length = 1.0 / Math.sqrt(length); + posX *= length; + posY *= length; + posZ *= length; + double j = posX * 100.0; + double k = posY * 100.0; + double l = posZ * 100.0; + double m = Math.atan2(posX, posZ); + double n = Math.sin(m); + double o = Math.cos(m); + double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); + double q = Math.sin(p); + double r = Math.cos(p); + double s = random.nextDouble() * Math.PI * 2.0; + double t = Math.sin(s); + double u = Math.cos(s); + + int pos = 0; + float minV = random.nextInt(4) / 4F; + for (int v = 0; v < 4; ++v) { + double x = (double) ((v & 2) - 1) * size; + double y = (double) ((v + 1 & 2) - 1) * size; + double aa = x * u - y * t; + double ab = y * u + x * t; + double ad = aa * q + 0.0 * r; + double ae = 0.0 * q - aa * r; + double af = ae * n - ab * o; + double ah = ab * n + ae * o; + float texU = (pos >> 1) & 1; + float texV = (((pos + 1) >> 1) & 1) / 4F + minV; + pos ++; + buffer.vertex(j + af, k + ad, l + ah).uv(texU, texV).endVertex(); + } + } + } + } + + 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); + + for (int i = 0; i < count; ++i) { + double posX = random.nextDouble() * 2.0 - 1.0; + double posY = random.nextDouble() - 0.5; + double posZ = random.nextDouble() * 2.0 - 1.0; + double size = MHelper.randRange(minSize, maxSize, random); + double length = posX * posX + posY * posY + posZ * posZ; + double distance = 2.0; + double delta = 1.0 / count; + if (length < 1.0 && length > 0.001) { + length = distance / Math.sqrt(length); + size *= distance; + distance -= delta; + posX *= length; + posY *= length; + posZ *= length; + double j = posX * 100.0; + double k = posY * 100.0; + double l = posZ * 100.0; + double m = Math.atan2(posX, posZ); + double n = Math.sin(m); + double o = Math.cos(m); + double p = Math.atan2(Math.sqrt(posX * posX + posZ * posZ), posY); + double q = Math.sin(p); + double r = Math.cos(p); + double s = random.nextDouble() * Math.PI * 2.0; + double t = Math.sin(s); + double u = Math.cos(s); + + int pos = 0; + for (int v = 0; v < 4; ++v) { + double x = (double) ((v & 2) - 1) * size; + double y = (double) ((v + 1 & 2) - 1) * size; + double aa = x * u - y * t; + double ab = y * u + x * t; + double ad = aa * q + 0.0 * r; + double ae = 0.0 * q - aa * r; + double af = ae * n - ab * o; + double ah = ab * n + ae * o; + float texU = (pos >> 1) & 1; + float texV = ((pos + 1) >> 1) & 1; + pos ++; + buffer.vertex(j + af, k + ad, l + ah).uv(texU, texV).endVertex(); + } + } + } + } + + private void be_makeCylinder(BufferBuilder buffer, int segments, double height, double radius) { + buffer.begin(7, 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; + double px1 = Math.sin(a1) * radius; + double pz1 = Math.cos(a1) * radius; + double px2 = Math.sin(a2) * radius; + double pz2 = Math.cos(a2) * radius; + + float u0 = (float) i / (float) segments; + float u1 = (float) (i + 1) / (float) segments; + + buffer.vertex(px1, -height, pz1).uv(u0, 0).endVertex(); + buffer.vertex(px1, height, pz1).uv(u0, 1).endVertex(); + buffer.vertex(px2, height, pz2).uv(u1, 1).endVertex(); + buffer.vertex(px2, -height, pz2).uv(u1, 0).endVertex(); + } + } +} diff --git a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java index f4f8eb75..41683dec 100644 --- a/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java +++ b/src/main/java/ru/betterend/mixin/common/AnvilMenuMixin.java @@ -1,5 +1,16 @@ package ru.betterend.mixin.common; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.tags.BlockTags; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; @@ -12,20 +23,10 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -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.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.interfaces.AnvilScreenHandlerExtended; import ru.betterend.recipe.builders.AnvilRecipe; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - @Mixin(AnvilMenu.class) public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilScreenHandlerExtended { private List be_recipes = Collections.emptyList(); @@ -48,49 +49,46 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc return 1; }, 1); anvilLevel.set(level); - } - else { + } else { anvilLevel.set(1); } } - + @Shadow public abstract void createResult(); - + @Inject(method = "mayPickup", at = @At("HEAD"), cancellable = true) protected void be_canTakeOutput(Player player, boolean present, CallbackInfoReturnable info) { if (be_currentRecipe != null) { info.setReturnValue(be_currentRecipe.checkHammerDurability(inputSlots, player)); } } - + @Inject(method = "onTake", at = @At("HEAD"), cancellable = true) - protected void be_onTakeOutput(Player player, ItemStack stack, CallbackInfo info) { + protected void be_onTakeOutput(Player player, ItemStack stack, CallbackInfoReturnable info) { if (be_currentRecipe != null) { inputSlots.getItem(0).shrink(be_currentRecipe.getInputCount()); stack = be_currentRecipe.craft(inputSlots, player); slotsChanged(inputSlots); access.execute((world, blockPos) -> { BlockState anvilState = world.getBlockState(blockPos); - if (!player.getAbilities().instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { + if (!player.abilities.instabuild && anvilState.is(BlockTags.ANVIL) && player.getRandom().nextDouble() < 0.1) { BlockState landingState = EndAnvilBlock.applyDamage(anvilState); if (landingState == null) { world.removeBlock(blockPos, false); world.levelEvent(1029, blockPos, 0); - } - else { + } else { world.setBlock(blockPos, landingState, 2); world.levelEvent(1030, blockPos, 0); } - } - else { + } else { world.levelEvent(1030, blockPos, 0); } }); - info.cancel(); + info.setReturnValue(stack); } } - + @Inject(method = "createResult", at = @At("HEAD"), cancellable = true) public void be_updateOutput(CallbackInfo info) { RecipeManager recipeManager = this.player.level.getRecipeManager(); @@ -105,50 +103,48 @@ public abstract class AnvilMenuMixin extends ItemCombinerMenu implements AnvilSc } be_updateResult(); info.cancel(); - } - else { + } else { be_currentRecipe = null; } } } - + @Inject(method = "setItemName", at = @At("HEAD"), cancellable = true) public void be_setNewItemName(String string, CallbackInfo info) { if (be_currentRecipe != null) { info.cancel(); } } - + @Override public boolean clickMenuButton(Player player, int id) { if (id == 0) { be_previousRecipe(); return true; - } - else if (id == 1) { + } else if (id == 1) { be_nextRecipe(); return true; } return super.clickMenuButton(player, id); } - + private void be_updateResult() { if (be_currentRecipe == null) return; resultSlots.setItem(0, be_currentRecipe.assemble(inputSlots)); broadcastChanges(); } - + @Override public void be_updateCurrentRecipe(AnvilRecipe recipe) { this.be_currentRecipe = recipe; be_updateResult(); } - + @Override public AnvilRecipe be_getCurrentRecipe() { return be_currentRecipe; } - + @Override public List be_getRecipes() { return be_recipes; diff --git a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java b/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java index 8298551f..eb1f962b 100644 --- a/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java +++ b/src/main/java/ru/betterend/mixin/common/BiomeGenerationSettingsAccessor.java @@ -1,25 +1,26 @@ package ru.betterend.mixin.common; +import java.util.List; +import java.util.function.Supplier; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.List; -import java.util.function.Supplier; @Mixin(BiomeGenerationSettings.class) public interface BiomeGenerationSettingsAccessor { @Accessor("features") List>>> be_getFeatures(); - + @Accessor("features") void be_setFeatures(List>>> features); - + @Accessor("structureStarts") List>> be_getStructures(); - + @Accessor("structureStarts") void be_setStructures(List>> structures); } diff --git a/src/main/java/ru/betterend/mixin/common/BlockBehaviourMixin.java b/src/main/java/ru/betterend/mixin/common/BlockBehaviourMixin.java index 760d6ef1..ebc0c0bd 100644 --- a/src/main/java/ru/betterend/mixin/common/BlockBehaviourMixin.java +++ b/src/main/java/ru/betterend/mixin/common/BlockBehaviourMixin.java @@ -1,6 +1,14 @@ package ru.betterend.mixin.common; +import java.util.List; + +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 com.google.common.collect.Lists; + import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -11,15 +19,9 @@ import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.parameters.LootContextParams; -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.MHelper; import ru.betterend.item.tool.EndHammerItem; -import java.util.List; - @Mixin(BlockBehaviour.class) public abstract class BlockBehaviourMixin { @Inject(method = "getDrops", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java index 3ce40d02..dcd4bc58 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusFlowerBlockMixin.java @@ -1,5 +1,16 @@ package ru.betterend.mixin.common; +import java.util.Random; + +import org.jetbrains.annotations.Nullable; +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; +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.Direction; import net.minecraft.server.level.ServerLevel; @@ -15,27 +26,17 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; -import org.jetbrains.annotations.Nullable; -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; -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.TagAPI; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.VanillaBlockProperties; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; -import java.util.Random; - @Mixin(value = ChorusFlowerBlock.class, priority = 100) public abstract class ChorusFlowerBlockMixin extends Block { private static final VoxelShape SHAPE_FULL = Block.box(0, 0, 0, 16, 16, 16); private static final VoxelShape SHAPE_HALF = Block.box(0, 0, 0, 16, 4, 16); - + public ChorusFlowerBlockMixin(Properties settings) { super(settings); } @@ -43,7 +44,7 @@ public abstract class ChorusFlowerBlockMixin extends Block { @Final @Shadow private ChorusPlantBlock plant; - + @Inject(method = "canSurvive", at = @At("HEAD"), cancellable = true) private void be_canSurvive(BlockState state, LevelReader world, BlockPos pos, CallbackInfoReturnable info) { if (world.getBlockState(pos.below()).is(EndBlocks.CHORUS_NYLIUM)) { @@ -51,7 +52,7 @@ public abstract class ChorusFlowerBlockMixin extends Block { info.cancel(); } } - + @Inject(method = "randomTick", at = @At("HEAD"), cancellable = true) private void be_randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random, CallbackInfo info) { if (world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { @@ -71,7 +72,7 @@ public abstract class ChorusFlowerBlockMixin extends Block { } } } - + @Inject(method = "generatePlant", at = @At("RETURN"), cancellable = true) private static void be_generatePlant(LevelAccessor world, BlockPos pos, Random random, int size, CallbackInfo info) { BlockState state = world.getBlockState(pos); @@ -79,20 +80,16 @@ public abstract class ChorusFlowerBlockMixin extends Block { BlocksHelper.setWithoutUpdate(world, pos, state.setValue(VanillaBlockProperties.ROOTS, true)); } } - + @Shadow - private static boolean allNeighborsEmpty(LevelReader world, BlockPos pos, @Nullable Direction exceptDirection) { - return false; - } - + private static boolean allNeighborsEmpty(LevelReader world, BlockPos pos, @Nullable Direction exceptDirection) { return false; } + @Shadow - private void placeGrownFlower(Level world, BlockPos pos, int age) { - } - + private void placeGrownFlower(Level world, BlockPos pos, int age) {} + @Shadow - private void placeDeadFlower(Level world, BlockPos pos) { - } - + private void placeDeadFlower(Level world, BlockPos pos) {} + @Override public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { if (GeneratorOptions.changeChorusPlant()) { diff --git a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java index 161df5cc..43427483 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusPlantBlockMixin.java @@ -1,5 +1,11 @@ package ru.betterend.mixin.common; +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.Direction; import net.minecraft.world.item.context.BlockPlaceContext; @@ -14,11 +20,6 @@ import net.minecraft.world.level.block.state.BlockBehaviour; 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; -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.TagAPI; import ru.betterend.blocks.VanillaBlockProperties; import ru.betterend.registry.EndBlocks; @@ -36,7 +37,7 @@ public abstract class ChorusPlantBlockMixin extends Block { this.registerDefaultState(this.defaultBlockState().setValue(VanillaBlockProperties.ROOTS, false)); } } - + @Inject(method = "createBlockStateDefinition", at = @At("TAIL")) private void be_createBlockStateDefinition(StateDefinition.Builder builder, CallbackInfo info) { GeneratorOptions.init(); @@ -45,7 +46,7 @@ public abstract class ChorusPlantBlockMixin extends Block { } } - @Inject(method = "getStateForPlacement(Lnet/minecraft/world/item/context/BlockPlaceContext;)Lnet/minecraft/world/level/block/state/BlockState;", at = @At("RETURN"), cancellable = true) + @Inject(method = "getStateForPlacement", at = @At("RETURN"), cancellable = true) private void be_getStateForPlacement(BlockPlaceContext ctx, CallbackInfoReturnable info) { BlockPos pos = ctx.getClickedPos(); Level world = ctx.getLevel(); @@ -60,7 +61,7 @@ public abstract class ChorusPlantBlockMixin extends Block { info.cancel(); } } - + @Inject(method = "Lnet/minecraft/world/level/block/ChorusPlantBlock;getStateForPlacement" + "(Lnet/minecraft/world/level/BlockGetter;Lnet/minecraft/core/BlockPos;)" + "Lnet/minecraft/world/level/block/state/BlockState;", @@ -85,7 +86,7 @@ public abstract class ChorusPlantBlockMixin extends Block { } } } - + @Inject(method = "canSurvive", at = @At("HEAD"), cancellable = true) private void be_canSurvive(BlockState state, LevelReader world, BlockPos pos, CallbackInfoReturnable info) { BlockState down = world.getBlockState(pos.below()); @@ -94,7 +95,7 @@ public abstract class ChorusPlantBlockMixin extends Block { info.cancel(); } } - + @Inject(method = "updateShape", at = @At("RETURN"), cancellable = true) private void be_updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom, CallbackInfoReturnable info) { BlockState plant = info.getReturnValue(); diff --git a/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java index 61974050..044538ce 100644 --- a/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChorusPlantFeatureMixin.java @@ -1,33 +1,31 @@ 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(FeaturePlaceContext featureConfig, CallbackInfoReturnable info) { - final Random random = featureConfig.random(); - final BlockPos blockPos = featureConfig.origin(); - final WorldGenLevel structureWorldAccess = featureConfig.level(); + private void be_place(WorldGenLevel structureWorldAccess, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration defaultFeatureConfig, CallbackInfoReturnable info) { 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/ChunkBiomeContainerMixin.java b/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java index 1cd6d74f..4ff99959 100644 --- a/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ChunkBiomeContainerMixin.java @@ -1,19 +1,20 @@ package ru.betterend.mixin.common; +import java.lang.reflect.Field; + +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + import net.minecraft.core.BlockPos; import net.minecraft.util.BitStorage; import net.minecraft.util.Mth; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkBiomeContainer; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import ru.betterend.BetterEnd; import ru.betterend.integration.Integrations; import ru.betterend.interfaces.IBiomeArray; -import java.lang.reflect.Field; - @Mixin(ChunkBiomeContainer.class) public class ChunkBiomeContainerMixin implements IBiomeArray { @Final @@ -26,7 +27,11 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { @Final @Shadow - private static int HORIZONTAL_MASK; + public static int HORIZONTAL_MASK; + + @Final + @Shadow + public static int VERTICAL_MASK; @Override public void be_setBiome(Biome biome, BlockPos pos) { @@ -34,7 +39,7 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { int biomeY = pos.getY() >> 2; int biomeZ = pos.getZ() >> 2; int index = be_getArrayIndex(biomeX, biomeY, biomeZ); - + if (Integrations.hasHydrogen()) { try { ChunkBiomeContainer self = (ChunkBiomeContainer) (Object) this; @@ -69,38 +74,31 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { } return; } - + 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 - this.quartMinY, 0, this.quartHeight); + int j = Mth.clamp(biomeY, 0, VERTICAL_MASK); int k = biomeZ & HORIZONTAL_MASK; return j << WIDTH_BITS + WIDTH_BITS | k << WIDTH_BITS | i; } - + private Field be_getField(String name) throws Exception { Field field = ChunkBiomeContainer.class.getDeclaredField(name); field.setAccessible(true); return field; } - + private BitStorage be_getHydrogenStorage(ChunkBiomeContainer container) throws Exception { return (BitStorage) be_getField("intArray").get(container); } - + private Biome[] be_getHydrogenPalette(ChunkBiomeContainer container) throws Exception { return (Biome[]) be_getField("palette").get(container); } - + private int be_getHydrogenPaletteIndex(Biome biome, Biome[] palette) { int index = -1; for (int i = 0; i < palette.length; i++) { @@ -111,11 +109,11 @@ public class ChunkBiomeContainerMixin implements IBiomeArray { } return index; } - + private void be_setHydrogenPalette(ChunkBiomeContainer container, Biome[] palette) throws Exception { be_getField("palette").set(container, palette); } - + private void be_setHydrogenStorage(ChunkBiomeContainer container, BitStorage storage) throws Exception { be_getField("intArray").set(container, storage); } diff --git a/src/main/java/ru/betterend/mixin/common/ComposterBlockAccessor.java b/src/main/java/ru/betterend/mixin/common/ComposterBlockAccessor.java index c0bc899e..1d754b20 100644 --- a/src/main/java/ru/betterend/mixin/common/ComposterBlockAccessor.java +++ b/src/main/java/ru/betterend/mixin/common/ComposterBlockAccessor.java @@ -1,9 +1,10 @@ package ru.betterend.mixin.common; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.block.ComposterBlock; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(ComposterBlock.class) public interface ComposterBlockAccessor { diff --git a/src/main/java/ru/betterend/mixin/common/CraftingMenuMixin.java b/src/main/java/ru/betterend/mixin/common/CraftingMenuMixin.java index 48e81bf2..11c7f94e 100644 --- a/src/main/java/ru/betterend/mixin/common/CraftingMenuMixin.java +++ b/src/main/java/ru/betterend/mixin/common/CraftingMenuMixin.java @@ -1,9 +1,5 @@ package ru.betterend.mixin.common; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.inventory.ContainerLevelAccess; -import net.minecraft.world.inventory.CraftingMenu; -import net.minecraft.world.level.block.CraftingTableBlock; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -11,6 +7,11 @@ 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.world.entity.player.Player; +import net.minecraft.world.inventory.ContainerLevelAccess; +import net.minecraft.world.inventory.CraftingMenu; +import net.minecraft.world.level.block.CraftingTableBlock; + @Mixin(CraftingMenu.class) public abstract class CraftingMenuMixin { @Final diff --git a/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java b/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java index 24520f25..5e0ac980 100644 --- a/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/DimensionTypeMixin.java @@ -1,15 +1,16 @@ package ru.betterend.mixin.common; +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.Registry; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; -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.betterend.world.generator.BetterEndBiomeSource; import ru.betterend.world.generator.GeneratorOptions; @@ -20,7 +21,7 @@ public class DimensionTypeMixin { info.setReturnValue(new NoiseBasedChunkGenerator(new BetterEndBiomeSource(biomeRegistry, seed), seed, () -> chunkGeneratorSettingsRegistry.getOrThrow(NoiseGeneratorSettings.END))); } - + @Inject(method = "createDragonFight", at = @At("HEAD"), cancellable = true) private void be_hasEnderDragonFight(CallbackInfoReturnable info) { if (!GeneratorOptions.hasDragonFights()) { diff --git a/src/main/java/ru/betterend/mixin/common/EnchantmentMenuMixin.java b/src/main/java/ru/betterend/mixin/common/EnchantmentMenuMixin.java index 6a4c95e0..3848fb27 100644 --- a/src/main/java/ru/betterend/mixin/common/EnchantmentMenuMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EnchantmentMenuMixin.java @@ -1,5 +1,15 @@ package ru.betterend.mixin.common; +import java.util.List; +import java.util.Random; + +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import net.minecraft.core.Registry; import net.minecraft.world.Container; import net.minecraft.world.inventory.AbstractContainerMenu; @@ -10,17 +20,8 @@ import net.minecraft.world.inventory.MenuType; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentInstance; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.bclib.api.TagAPI; -import java.util.List; -import java.util.Random; - @Mixin(EnchantmentMenu.class) public abstract class EnchantmentMenuMixin extends AbstractContainerMenu { @Final diff --git a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java index 6a53bc32..e91f8949 100644 --- a/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndCityFeatureMixin.java @@ -1,32 +1,32 @@ package ru.betterend.mixin.common; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +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.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; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.EndCityFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; 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, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, LevelHeightAccessor levelHeightAccessor, CallbackInfoReturnable info) { + private void be_isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long l, WorldgenRandom chunkRandom, int i, int j, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration defaultFeatureConfig, CallbackInfoReturnable info) { if (GeneratorOptions.useNewGenerator()) { int chance = GeneratorOptions.getEndCityFailChance(); if (chance == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); + info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); info.cancel(); } - else if (chunkRandom.nextInt(chance) == 0) { - info.setReturnValue(getYPositionForFeature(pos, chunkGenerator, levelHeightAccessor) >= 60); + else if (chunkRandom.nextInt(chance) == 0){ + info.setReturnValue(getYPositionForFeature(i, j, chunkGenerator) >= 60); info.cancel(); } else { @@ -35,9 +35,9 @@ public class EndCityFeatureMixin { } } } - + @Shadow - private static int getYPositionForFeature(ChunkPos pos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { + private static int getYPositionForFeature(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { return 0; } } diff --git a/src/main/java/ru/betterend/mixin/common/EndDragonFightMixin.java b/src/main/java/ru/betterend/mixin/common/EndDragonFightMixin.java index 0ac42423..a4dc5b6a 100644 --- a/src/main/java/ru/betterend/mixin/common/EndDragonFightMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndDragonFightMixin.java @@ -1,6 +1,17 @@ package ru.betterend.mixin.common; +import java.util.List; + +import org.apache.logging.log4j.Logger; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -10,18 +21,9 @@ import net.minecraft.world.level.block.state.pattern.BlockPattern; import net.minecraft.world.level.dimension.end.DragonRespawnAnimation; import net.minecraft.world.level.dimension.end.EndDragonFight; import net.minecraft.world.phys.AABB; -import org.apache.logging.log4j.Logger; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.bclib.util.BlocksHelper; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; - @Mixin(EndDragonFight.class) public class EndDragonFightMixin { @Shadow @@ -43,12 +45,10 @@ public class EndDragonFightMixin { } @Shadow - private void spawnExitPortal(boolean bl) { - } + private void spawnExitPortal(boolean bl) {} @Shadow - private void respawnDragon(List list) { - } + private void respawnDragon(List list) {} @Inject(method = "tryRespawn", at = @At("HEAD"), cancellable = true) private void be_tryRespawnDragon(CallbackInfo info) { @@ -72,8 +72,8 @@ public class EndDragonFightMixin { BlockPos center = GeneratorOptions.getPortalPos().above(5); for (Direction dir : BlocksHelper.HORIZONTAL) { BlockPos central = center.relative(dir, 4); - List crystalList = level.getEntitiesOfClass(EndCrystal.class, new AABB(central.below(255).south().west(), central.above(255).north().east())); - + List crystalList = level.getEntitiesOfClass(EndCrystal.class, new AABB(central.below(10).south().west(), central.above(10).north().east())); + int count = crystalList.size(); for (int n = 0; n < count; n++) { EndCrystal crystal = crystalList.get(n); @@ -83,7 +83,7 @@ public class EndDragonFightMixin { n--; } } - + if (crystalList.isEmpty()) { info.cancel(); return; diff --git a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java index bb88dcc2..20c73a27 100644 --- a/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndPodiumFeatureMixin.java @@ -1,16 +1,7 @@ package ru.betterend.mixin.common; -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 java.util.Random; + import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -18,45 +9,50 @@ 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 @Shadow private boolean active; - + @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void be_place(FeaturePlaceContext featurePlaceContext, CallbackInfoReturnable info) { + private void be_place(WorldGenLevel world, ChunkGenerator generator, Random random, BlockPos blockPos, NoneFeatureConfiguration config, CallbackInfoReturnable info) { if (!GeneratorOptions.hasPortal()) { info.setReturnValue(false); info.cancel(); } else if (GeneratorOptions.replacePortal()) { - Random random = featurePlaceContext.random(); - WorldGenLevel world = featurePlaceContext.level(); - BlockPos blockPos = be_updatePos(featurePlaceContext.origin(), world); + blockPos = be_updatePos(blockPos, world); StructureTemplate structure = StructureHelper.readStructure(BetterEnd.makeID(active ? "portal/end_portal_active" : "portal/end_portal_inactive")); - Vec3i size = structure.getSize(); + BlockPos size = structure.getSize(); blockPos = blockPos.offset(-(size.getX() >> 1), -1, -(size.getZ() >> 1)); - structure.placeInWorld(world, blockPos, blockPos, new StructurePlaceSettings(), random, 2); + structure.placeInWorldChunk(world, blockPos, new StructurePlaceSettings(), random); info.setReturnValue(true); info.cancel(); } } - + @ModifyVariable(method = "place", ordinal = 0, at = @At("HEAD")) - 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_setPosOnGround(BlockPos blockPos, WorldGenLevel world) { + return be_updatePos(blockPos, world); } - + private BlockPos be_updatePos(BlockPos blockPos, WorldGenLevel world) { if (GeneratorOptions.useNewGenerator()) { BlockPos pos = GeneratorOptions.getPortalPos(); diff --git a/src/main/java/ru/betterend/mixin/common/EndSpikeMixin.java b/src/main/java/ru/betterend/mixin/common/EndSpikeMixin.java index d29bc07c..94361158 100644 --- a/src/main/java/ru/betterend/mixin/common/EndSpikeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EndSpikeMixin.java @@ -1,13 +1,14 @@ package ru.betterend.mixin.common; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.level.levelgen.feature.SpikeFeature.EndSpike; 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; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.levelgen.feature.SpikeFeature.EndSpike; import ru.bclib.api.WorldDataAPI; import ru.betterend.BetterEnd; import ru.betterend.world.generator.GeneratorOptions; @@ -30,12 +31,12 @@ public class EndSpikeMixin { info.setReturnValue(maxY); } } - + @Shadow public int getCenterX() { return 0; } - + @Shadow public int getCenterZ() { return 0; diff --git a/src/main/java/ru/betterend/mixin/common/EnderManMixin.java b/src/main/java/ru/betterend/mixin/common/EnderManMixin.java index dc5f1424..4102fef9 100644 --- a/src/main/java/ru/betterend/mixin/common/EnderManMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EnderManMixin.java @@ -1,13 +1,14 @@ package ru.betterend.mixin.common; +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.world.entity.EquipmentSlot; import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.enchantment.EnchantmentHelper; -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.betterend.effects.EndEnchantments; import ru.betterend.effects.EndStatusEffects; diff --git a/src/main/java/ru/betterend/mixin/common/EntityMixin.java b/src/main/java/ru/betterend/mixin/common/EntityMixin.java index cb37e312..4f9372b8 100644 --- a/src/main/java/ru/betterend/mixin/common/EntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/EntityMixin.java @@ -1,5 +1,12 @@ package ru.betterend.mixin.common; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; @@ -7,48 +14,37 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.level.Level; import net.minecraft.world.level.portal.PortalInfo; import net.minecraft.world.phys.Vec3; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.betterend.interfaces.TeleportingEntity; @Mixin(Entity.class) public abstract class EntityMixin implements TeleportingEntity { @Shadow - private float yRot; + public float yRot; @Shadow - private float xRot; - + public float xRot; + @Shadow + public boolean removed; @Shadow public Level level; - + @Final @Shadow public abstract void unRide(); - + @Shadow public abstract Vec3 getDeltaMovement(); - + @Shadow public abstract EntityType getType(); - + @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 (!isRemoved() && be_canTeleport() && level instanceof ServerLevel) { + if (!removed && be_canTeleport() && level instanceof ServerLevel) { unRide(); level.getProfiler().push("changeDimension"); level.getProfiler().push("reposition"); @@ -58,14 +54,11 @@ 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.getXRot()); + entity.moveTo(teleportTarget.pos.x, teleportTarget.pos.y, teleportTarget.pos.z, teleportTarget.yRot, entity.xRot); entity.setDeltaMovement(teleportTarget.speed); - //TODO: check if this works as intended in 1.17 - - destination.addDuringTeleport(entity); + destination.addFromAnotherDimension(entity); } - - this.removeAfterChangingDimensions(); + removed = true; level.getProfiler().pop(); ((ServerLevel) level).resetEmptyTime(); destination.resetEmptyTime(); @@ -75,7 +68,7 @@ public abstract class EntityMixin implements TeleportingEntity { } } } - + @Inject(method = "findDimensionEntryPoint", at = @At("HEAD"), cancellable = true) protected void be_findDimensionEntryPoint(ServerLevel destination, CallbackInfoReturnable info) { if (be_canTeleport()) { diff --git a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java index c78eda16..b4e430d6 100644 --- a/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java +++ b/src/main/java/ru/betterend/mixin/common/LivingEntityMixin.java @@ -1,5 +1,16 @@ package ru.betterend.mixin.common; +import java.util.Collection; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.At.Shift; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageSource; @@ -21,22 +32,11 @@ 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 org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.betterend.BetterEnd; import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.interfaces.MobEffectApplier; import ru.betterend.item.CrystaliteArmor; import ru.betterend.registry.EndAttributes; -import java.util.Collection; - @Mixin(LivingEntity.class) public abstract class LivingEntityMixin extends Entity { @@ -89,13 +89,8 @@ public abstract class LivingEntityMixin extends Entity { @Inject(method = "canBeAffected", at = @At("HEAD"), cancellable = true) public void be_canBeAffected(MobEffectInstance mobEffectInstance, CallbackInfoReturnable info) { - 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 been registered."); + if (mobEffectInstance.getEffect() == MobEffects.BLINDNESS && getAttributes().getValue(EndAttributes.BLINDNESS_RESISTANCE) > 0.0) { + info.setReturnValue(false); } } @@ -103,9 +98,9 @@ public abstract class LivingEntityMixin extends Entity { public void be_hurt(DamageSource source, float amount, CallbackInfoReturnable info) { this.lastAttacker = source.getEntity(); } - - @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) { + + @ModifyArg(method = "hurt", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(FDD)V")) + private float be_increaseKnockback(float value, double x, double z) { if (lastAttacker != null && lastAttacker instanceof LivingEntity) { LivingEntity attacker = (LivingEntity) lastAttacker; value += this.be_getKnockback(attacker.getMainHandItem().getItem()); @@ -125,12 +120,10 @@ public abstract class LivingEntityMixin extends Entity { livingEntity -> livingEntity.broadcastBreakEvent(EquipmentSlot.CHEST)); } isFlying = true; - } - else { + } else { isFlying = false; } - } - else { + } else { isFlying = false; } setSharedFlag(7, isFlying); @@ -151,9 +144,9 @@ public abstract class LivingEntityMixin extends Entity { Vec3 lookAngle = getLookAngle(); double d = 0.08D; - float rotX = getXRot() * 0.017453292F; + float rotX = xRot * 0.017453292F; double k = Math.sqrt(lookAngle.x * lookAngle.x + lookAngle.z * lookAngle.z); - double l = moveDelta.horizontalDistance(); + double l = Math.sqrt(getHorizontalDistanceSqr(moveDelta)); double lookLen = lookAngle.length(); float n = Mth.cos(rotX); n = (float) (n * n * Math.min(1.0D, lookLen / 0.4D)); @@ -179,7 +172,7 @@ public abstract class LivingEntityMixin extends Entity { move(MoverType.SELF, moveDelta); if (!level.isClientSide) { if (horizontalCollision) { - coef = moveDelta.horizontalDistance(); + coef = Math.sqrt(getHorizontalDistanceSqr(moveDelta)); double r = l - coef; float dmg = (float) (r * 10.0D - 3.0D); if (dmg > 0.0F) { diff --git a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java index a425eaa0..1c3d5f0a 100644 --- a/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/MinecraftServerMixin.java @@ -1,5 +1,15 @@ package ru.betterend.mixin.common; +import java.util.Map; + +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; +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.resources.ResourceKey; import net.minecraft.server.MinecraftServer; import net.minecraft.server.ServerResources; @@ -9,32 +19,23 @@ import net.minecraft.server.players.PlayerList; import net.minecraft.world.level.Level; import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WorldData; -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; -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.betterend.world.generator.GeneratorOptions; -import java.util.Map; - @Mixin(MinecraftServer.class) -public abstract class MinecraftServerMixin { +public class MinecraftServerMixin { @Shadow private ServerResources resources; - + @Final @Shadow private Map, ServerLevel> levels; - + @Final @Shadow protected WorldData worldData; - + @Inject(method = "overworld", at = @At(value = "HEAD"), cancellable = true) - private void be_overworld(CallbackInfoReturnable info) { + private final void be_overworld(CallbackInfoReturnable info) { if (GeneratorOptions.swapOverworldToEnd()) { ServerLevel world = levels.get(Level.END); if (world == null) { @@ -44,9 +45,9 @@ public abstract class MinecraftServerMixin { info.cancel(); } } - + @Inject(method = "createLevels", at = @At(value = "TAIL")) - private void be_createLevels(ChunkProgressListener worldGenerationProgressListener, CallbackInfo info) { + private final void be_createLevels(ChunkProgressListener worldGenerationProgressListener, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd()) { ServerLevel world = levels.get(Level.END); if (world == null) { @@ -56,24 +57,20 @@ public abstract 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); + setInitialSpawn(world, serverWorldProperties, generatorOptions.generateBonusChest(), bl, true); } } - - @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, CallbackInfo info) { + private static void be_setInitialSpawn(ServerLevel world, ServerLevelData serverWorldProperties, boolean bonusChest, boolean debugWorld, boolean bl, 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/MonsterMixin.java b/src/main/java/ru/betterend/mixin/common/MonsterMixin.java index 403f11e0..b2d77c7c 100644 --- a/src/main/java/ru/betterend/mixin/common/MonsterMixin.java +++ b/src/main/java/ru/betterend/mixin/common/MonsterMixin.java @@ -1,5 +1,13 @@ package ru.betterend.mixin.common; +import java.util.List; +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.entity.EntityType; import net.minecraft.world.entity.MobSpawnType; @@ -7,13 +15,6 @@ import net.minecraft.world.entity.monster.EnderMan; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.phys.AABB; -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 java.util.List; -import java.util.Random; @Mixin(Monster.class) public class MonsterMixin { @@ -22,9 +23,7 @@ public class MonsterMixin { boolean canSpawn = info.getReturnValue(); if (canSpawn && spawnReason == MobSpawnType.NATURAL && type == EntityType.ENDERMAN) { AABB box = new AABB(pos).inflate(16); - List entities = serverWorldAccess.getEntitiesOfClass(EnderMan.class, box, (entity) -> { - return true; - }); + List entities = serverWorldAccess.getEntitiesOfClass(EnderMan.class, box, (entity) -> { return true; }); info.setReturnValue(entities.size() < 6); } } diff --git a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java index e03b2975..8d59913e 100644 --- a/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java +++ b/src/main/java/ru/betterend/mixin/common/NoiseBasedChunkGeneratorMixin.java @@ -1,38 +1,39 @@ package ru.betterend.mixin.common; -import net.minecraft.world.level.biome.BiomeSource; -import net.minecraft.world.level.chunk.ChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; -import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; -import net.minecraft.world.level.levelgen.StructureSettings; +import java.util.function.Supplier; + 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; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.world.level.biome.BiomeSource; +import net.minecraft.world.level.chunk.ChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseBasedChunkGenerator; +import net.minecraft.world.level.levelgen.NoiseGeneratorSettings; +import net.minecraft.world.level.levelgen.StructureSettings; import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.TerrainGenerator; -import java.util.function.Supplier; - @Mixin(NoiseBasedChunkGenerator.class) public abstract class NoiseBasedChunkGeneratorMixin extends ChunkGenerator { @Final @Shadow protected Supplier settings; - + public NoiseBasedChunkGeneratorMixin(BiomeSource populationSource, BiomeSource biomeSource, StructureSettings structuresConfig, long worldSeed) { super(populationSource, biomeSource, structuresConfig, worldSeed); } - + @Inject(method = "(Lnet/minecraft/world/level/biome/BiomeSource;Lnet/minecraft/world/level/biome/BiomeSource;JLjava/util/function/Supplier;)V", at = @At("TAIL")) private void beOnInit(BiomeSource populationSource, BiomeSource biomeSource, long seed, Supplier settings, CallbackInfo info) { TerrainGenerator.initNoise(seed); } - - @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) { + + @Inject(method = "fillNoiseColumn([DII)V", at = @At("HEAD"), cancellable = true, allow = 2) + private void be_fillNoiseColumn(double[] buffer, int x, int z, 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/PlayerAdvancementsMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java index 61042c36..6ddf6f04 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerAdvancementsMixin.java @@ -1,21 +1,22 @@ package ru.betterend.mixin.common; -import net.minecraft.advancements.Advancement; -import net.minecraft.server.PlayerAdvancements; -import net.minecraft.server.level.ServerPlayer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.advancements.Advancement; +import net.minecraft.server.PlayerAdvancements; +import net.minecraft.server.level.ServerPlayer; import ru.betterend.events.PlayerAdvancementsCallback; @Mixin(PlayerAdvancements.class) public abstract class PlayerAdvancementsMixin { @Shadow private ServerPlayer player; - + @Inject(method = "award", at = @At( value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementRewards;grant(Lnet/minecraft/server/level/ServerPlayer;)V", diff --git a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java index 03ac97f4..408fb3fa 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerListMixin.java @@ -1,8 +1,23 @@ package ru.betterend.mixin.common; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import org.apache.logging.log4j.Logger; +import org.jetbrains.annotations.Nullable; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + import com.mojang.authlib.GameProfile; import com.mojang.serialization.DataResult; import com.mojang.serialization.Dynamic; + import io.netty.buffer.Unpooled; import net.minecraft.ChatFormatting; import net.minecraft.Util; @@ -41,22 +56,8 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.storage.LevelData; -import org.apache.logging.log4j.Logger; -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; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import ru.betterend.world.generator.GeneratorOptions; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.UUID; - @Mixin(PlayerList.class) public class PlayerListMixin { @Final @@ -83,19 +84,19 @@ public class PlayerListMixin { private Map playersByUUID; @Inject(method = "placeNewPlayer", at = @At(value = "HEAD"), cancellable = true) - public void be_placeNewPlayer(Connection connection, ServerPlayer serverPlayer, CallbackInfo info) { + public void be_placeNewPlayer(Connection connection, ServerPlayer player, CallbackInfo info) { if (GeneratorOptions.swapOverworldToEnd()) { - GameProfile gameProfile = serverPlayer.getGameProfile(); + GameProfile gameProfile = player.getGameProfile(); GameProfileCache userCache = this.server.getProfileCache(); - Optional gameProfile2 = userCache.get(gameProfile.getId()); - String string = gameProfile2.isPresent() ? gameProfile2.get().getName() : gameProfile.getName(); + GameProfile gameProfile2 = userCache.get(gameProfile.getId()); + String string = gameProfile2 == null ? gameProfile.getName() : gameProfile2.getName(); userCache.add(gameProfile); - CompoundTag compoundTag = this.load(serverPlayer); + CompoundTag compoundTag = this.load(player); ResourceKey var23; if (compoundTag != null) { DataResult> var10000 = DimensionType.parseLegacy(new Dynamic(NbtOps.INSTANCE, compoundTag.get("Dimension"))); Logger var10001 = LOGGER; - Objects.requireNonNull(var10001); + var10001.getClass(); var23 = (ResourceKey) var10000.resultOrPartial(var10001::error).orElse(Level.END); } else { @@ -103,95 +104,81 @@ public class PlayerListMixin { } ResourceKey registryKey = var23; - ServerLevel serverLevel = this.server.getLevel(registryKey); - ServerLevel serverLevel3; - if (serverLevel == null) { + ServerLevel serverWorld = this.server.getLevel(registryKey); + ServerLevel serverWorld3; + if (serverWorld == null) { LOGGER.warn("Unknown respawn dimension {}, defaulting to overworld", registryKey); - serverLevel3 = this.server.overworld(); + serverWorld3 = this.server.overworld(); } else { - serverLevel3 = serverLevel; + serverWorld3 = serverWorld; } - serverPlayer.setLevel(serverLevel3); - //serverPlayer.gameMode.setLevel((ServerLevel) serverPlayer.level); + player.setLevel(serverWorld3); + player.gameMode.setLevel((ServerLevel) player.level); String string2 = "local"; if (connection.getRemoteAddress() != null) { string2 = connection.getRemoteAddress().toString(); } - 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(); + 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(); boolean bl = gameRules.getBoolean(GameRules.RULE_DO_IMMEDIATE_RESPAWN); boolean bl2 = gameRules.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO); - 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); + 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); this.server.invalidateStatus(); TranslatableComponent mutableText2; - if (serverPlayer.getGameProfile().getName().equalsIgnoreCase(string)) { - mutableText2 = new TranslatableComponent("multiplayer.player.joined", - new Object[]{serverPlayer.getDisplayName()}); + 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[]{serverPlayer.getDisplayName(), string}); + mutableText2 = new TranslatableComponent("multiplayer.player.joined.renamed", new Object[] { player.getDisplayName(), string }); } this.broadcastMessage(mutableText2.withStyle(ChatFormatting.YELLOW), ChatType.SYSTEM, Util.NIL_UUID); - 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})); + 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 })); - for (ServerPlayer player : this.players) { - serverPlayer.connection.send(new ClientboundPlayerInfoPacket(ClientboundPlayerInfoPacket.Action.ADD_PLAYER, - new ServerPlayer[]{(ServerPlayer) player})); + 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) })); } - serverLevel3.addNewPlayer(serverPlayer); - this.server.getCustomBossEvents().onPlayerConnect(serverPlayer); - this.sendLevelInfo(serverPlayer, serverLevel3); + serverWorld3.addNewPlayer(player); + this.server.getCustomBossEvents().onPlayerConnect(player); + this.sendLevelInfo(player, serverWorld3); if (!this.server.getResourcePack().isEmpty()) { - serverPlayer.sendTexturePack(this.server.getResourcePack(), this.server.getResourcePackHash(), - this.server.isResourcePackRequired(), this.server.getResourcePackPrompt()); + player.sendTexturePack(this.server.getResourcePack(), this.server.getResourcePackHash()); } - for (MobEffectInstance statusEffectInstance : serverPlayer.getActiveEffects()) { - serverPlayNetworkHandler - .send(new ClientboundUpdateMobEffectPacket(serverPlayer.getId(), statusEffectInstance)); + Iterator var24 = player.getActiveEffects().iterator(); + + while (var24.hasNext()) { + MobEffectInstance statusEffectInstance = (MobEffectInstance) var24.next(); + serverPlayNetworkHandler.send(new ClientboundUpdateMobEffectPacket(player.getId(), statusEffectInstance)); } if (compoundTag != null && compoundTag.contains("RootVehicle", 10)) { CompoundTag compoundTag2 = compoundTag.getCompound("RootVehicle"); - Entity entity = EntityType.loadEntityRecursive(compoundTag2.getCompound("Entity"), serverLevel3, - (vehicle) -> { - return !serverLevel3.addWithUUID(vehicle) ? null : vehicle; - }); + Entity entity = EntityType.loadEntityRecursive(compoundTag2.getCompound("Entity"), serverWorld3, (vehicle) -> { + return !serverWorld3.addWithUUID(vehicle) ? null : vehicle; + }); if (entity != null) { UUID uUID2; if (compoundTag2.hasUUID("Attach")) { @@ -204,7 +191,7 @@ public class PlayerListMixin { Iterator var21; Entity entity3; if (entity.getUUID().equals(uUID2)) { - serverPlayer.startRiding(entity, true); + player.startRiding(entity, true); } else { var21 = entity.getIndirectPassengers().iterator(); @@ -212,26 +199,26 @@ public class PlayerListMixin { while (var21.hasNext()) { entity3 = (Entity) var21.next(); if (entity3.getUUID().equals(uUID2)) { - serverPlayer.startRiding(entity3, true); + player.startRiding(entity3, true); break; } } } - if (!serverPlayer.isPassenger()) { + if (!player.isPassenger()) { LOGGER.warn("Couldn't reattach entity to player"); - entity.discard(); + serverWorld3.despawn(entity); var21 = entity.getIndirectPassengers().iterator(); while (var21.hasNext()) { entity3 = (Entity) var21.next(); - entity3.discard(); + serverWorld3.despawn(entity3); } } } } - serverPlayer.initInventoryMenu(); + player.initMenu(); info.cancel(); } } @@ -241,41 +228,31 @@ 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) { - } + public void sendPlayerPermissionLevel(ServerPlayer player) {} @Shadow public int getPlayerCount() { return 0; } - @Shadow - public int getMaxPlayers() { - return 0; - } - @Shadow public MinecraftServer getServer() { return null; } @Shadow - protected void updateEntireScoreboard(ServerScoreboard scoreboard, ServerPlayer player) { - } + protected void updateEntireScoreboard(ServerScoreboard scoreboard, ServerPlayer player) {} @Shadow - public void broadcastMessage(Component message, ChatType type, UUID senderUuid) { - } + public void broadcastMessage(Component message, ChatType type, UUID senderUuid) {} @Shadow - public void broadcastAll(Packet packet) { - } + public void broadcastAll(Packet packet) {} @Shadow - public void sendLevelInfo(ServerPlayer player, ServerLevel world) { - } + public void sendLevelInfo(ServerPlayer player, ServerLevel world) {} } diff --git a/src/main/java/ru/betterend/mixin/common/PlayerMixin.java b/src/main/java/ru/betterend/mixin/common/PlayerMixin.java index 64ffafc3..e8ee2a4c 100644 --- a/src/main/java/ru/betterend/mixin/common/PlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/PlayerMixin.java @@ -1,5 +1,12 @@ package ru.betterend.mixin.common; +import java.util.Optional; + +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.core.Direction; import net.minecraft.server.level.ServerLevel; @@ -13,10 +20,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.Vec3; -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.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.util.BlocksHelper; @@ -24,8 +27,6 @@ import ru.bclib.util.MHelper; import ru.betterend.interfaces.FallFlyingItem; import ru.betterend.registry.EndBlocks; -import java.util.Optional; - @Mixin(Player.class) public abstract class PlayerMixin extends LivingEntity { @@ -66,7 +67,7 @@ public abstract class PlayerMixin extends LivingEntity { horizontal = BlocksHelper.makeHorizontal(); } MHelper.shuffle(horizontal, world.getRandom()); - for (Direction dir : horizontal) { + for (Direction dir: horizontal) { BlockPos p = pos.relative(dir); BlockState state2 = world.getBlockState(p); if (!state2.getMaterial().blocksMotion() && state2.getCollisionShape(world, pos).isEmpty()) { diff --git a/src/main/java/ru/betterend/mixin/common/PotionBrewingAccessor.java b/src/main/java/ru/betterend/mixin/common/PotionBrewingAccessor.java index d863d6cb..49366687 100644 --- a/src/main/java/ru/betterend/mixin/common/PotionBrewingAccessor.java +++ b/src/main/java/ru/betterend/mixin/common/PotionBrewingAccessor.java @@ -1,10 +1,11 @@ package ru.betterend.mixin.common; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + import net.minecraft.world.item.Item; import net.minecraft.world.item.alchemy.Potion; import net.minecraft.world.item.alchemy.PotionBrewing; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Invoker; @Mixin(PotionBrewing.class) public interface PotionBrewingAccessor { diff --git a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java index d9c184da..ce71752f 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerLevelMixin.java @@ -1,5 +1,16 @@ package ru.betterend.mixin.common; +import java.util.List; +import java.util.concurrent.Executor; +import java.util.function.Supplier; + +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.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -16,36 +27,26 @@ import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.WritableLevelData; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import ru.bclib.api.BiomeAPI; import ru.betterend.BetterEnd; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBlocks; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; -import java.util.concurrent.Executor; -import java.util.function.Supplier; - @Mixin(ServerLevel.class) public abstract class ServerLevelMixin extends Level { private static String be_lastWorld = null; - + protected ServerLevelMixin(WritableLevelData writableLevelData, ResourceKey resourceKey, DimensionType dimensionType, Supplier supplier, boolean bl, boolean bl2, long l) { super(writableLevelData, resourceKey, dimensionType, supplier, bl, bl2, l); } - + @Inject(method = "*", at = @At("TAIL")) private void be_onServerWorldInit(MinecraftServer server, Executor workerExecutor, LevelStorageSource.LevelStorageAccess session, ServerLevelData properties, ResourceKey registryKey, DimensionType dimensionType, ChunkProgressListener worldGenerationProgressListener, ChunkGenerator chunkGenerator, boolean debugWorld, long l, List list, boolean bl, CallbackInfo info) { if (be_lastWorld != null && be_lastWorld.equals(session.getLevelId())) { return; } - + be_lastWorld = session.getLevelId(); ServerLevel world = ServerLevel.class.cast(this); EndBiomes.onWorldLoad(world.getSeed()); @@ -60,13 +61,13 @@ public abstract class ServerLevelMixin extends Level { } } } - + @ModifyArg( - method = "tickChunk", - at = @At( - value = "INVOKE", - target = "Lnet/minecraft/server/level/ServerLevel;setBlockAndUpdate(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)Z" - ) + method = "tickChunk", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/level/ServerLevel;setBlockAndUpdate(Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;)Z" + ) ) private BlockState be_modifyTickState(BlockPos pos, BlockState state) { if (state.is(Blocks.ICE)) { diff --git a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java index 9095fb5f..1f85de89 100644 --- a/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/ServerPlayerMixin.java @@ -1,6 +1,15 @@ package ru.betterend.mixin.common; +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; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + import com.mojang.authlib.GameProfile; + import net.minecraft.core.BlockPos; import net.minecraft.network.protocol.game.ClientboundChangeDifficultyPacket; import net.minecraft.network.protocol.game.ClientboundLevelEventPacket; @@ -21,13 +30,6 @@ import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.portal.PortalInfo; import net.minecraft.world.level.storage.LevelData; import net.minecraft.world.phys.Vec3; -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; -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.betterend.interfaces.TeleportingEntity; import ru.betterend.world.generator.GeneratorOptions; @@ -67,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(), getYRot(), getXRot())); + info.setReturnValue(new PortalInfo(new Vec3(exitPos.getX() + 0.5, exitPos.getY(), exitPos.getZ() + 0.5), getDeltaMovement(), yRot, xRot)); } } @@ -79,25 +81,25 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt LevelData worldProperties = destination.getLevelData(); ServerPlayer player = ServerPlayer.class.cast(this); connection.send(new ClientboundRespawnPacket(destination.dimensionType(), destination.dimension(), BiomeManager.obfuscateSeed(destination.getSeed()), - gameMode.getGameModeForPlayer(), gameMode.getPreviousGameModeForPlayer(), destination.isDebug(), destination.isFlat(), true)); + gameMode.getGameModeForPlayer(),gameMode.getPreviousGameModeForPlayer(), destination.isDebug(), destination.isFlat(), true)); connection.send(new ClientboundChangeDifficultyPacket(worldProperties.getDifficulty(), worldProperties.isDifficultyLocked())); PlayerList playerManager = server.getPlayerList(); playerManager.sendPlayerPermissionLevel(player); - serverWorld.removePlayerImmediately(player, RemovalReason.CHANGED_DIMENSION); - unsetRemoved(); + serverWorld.removePlayerImmediately(player); + removed = false; PortalInfo teleportTarget = findDimensionEntryPoint(destination); if (teleportTarget != null) { serverWorld.getProfiler().push("moving"); serverWorld.getProfiler().pop(); serverWorld.getProfiler().push("placing"); - this.level = destination; + setLevel(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(getAbilities())); + connection.send(new ClientboundPlayerAbilitiesPacket(abilities)); playerManager.sendLevelInfo(player, destination); playerManager.sendAllPlayerInfo(player); @@ -130,7 +132,7 @@ public abstract class ServerPlayerMixin extends Player implements TeleportingEnt } @Shadow - public abstract ServerLevel getLevel(); + 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 deleted file mode 100644 index 22b95808..00000000 --- a/src/main/java/ru/betterend/mixin/common/ShuffelingListMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -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; - -@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/mixin/common/SlimeMixin.java b/src/main/java/ru/betterend/mixin/common/SlimeMixin.java index b57d2c19..5d5ba94f 100644 --- a/src/main/java/ru/betterend/mixin/common/SlimeMixin.java +++ b/src/main/java/ru/betterend/mixin/common/SlimeMixin.java @@ -1,30 +1,18 @@ package ru.betterend.mixin.common; -import net.minecraft.world.entity.Entity; -import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.monster.Slime; -import net.minecraft.world.level.Level; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.world.entity.monster.Slime; import ru.betterend.interfaces.ISlime; @Mixin(Slime.class) -public abstract class SlimeMixin extends Entity implements ISlime { - public SlimeMixin(EntityType entityType, Level level) { - super(entityType, level); - } - +public class SlimeMixin implements ISlime { @Shadow - protected void setSize(int size, boolean heal) { - } - + protected void setSize(int size, boolean heal) {} + @Override 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/mixin/common/SpikeFeatureMixin.java b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java index 80f3eefa..58b3001e 100644 --- a/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java +++ b/src/main/java/ru/betterend/mixin/common/SpikeFeatureMixin.java @@ -1,39 +1,40 @@ package ru.betterend.mixin.common; -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.block.Blocks; -import net.minecraft.world.level.block.IronBarsBlock; -import net.minecraft.world.level.block.state.BlockState; -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 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.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.BlockPos.MutableBlockPos; +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.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 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) - private void be_place(FeaturePlaceContext featurePlaceContext, CallbackInfoReturnable info) { + private void be_place(WorldGenLevel structureWorldAccess, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, SpikeConfiguration endSpikeFeatureConfig, CallbackInfoReturnable info) { if (!GeneratorOptions.hasPillars()) { info.setReturnValue(false); } @@ -45,7 +46,7 @@ public class SpikeFeatureMixin { int z = spike.getCenterZ(); int radius = spike.getRadius(); int minY = 0; - + long lx = (long) x; long lz = (long) z; if (lx * lx + lz * lz < 10000) { @@ -61,25 +62,25 @@ public class SpikeFeatureMixin { else { minY = world.getChunk(x >> 4, z >> 4).getHeight(Types.WORLD_SURFACE, x & 15, z); } - + GeneratorOptions.setDirectSpikeHeight(); int maxY = minY + spike.getHeight() - 64; - + if (GeneratorOptions.replacePillars() && be_radiusInRange(radius)) { radius--; StructureTemplate base = StructureHelper.readStructure(BetterEnd.makeID("pillars/pillar_base_" + radius)); StructureTemplate top = StructureHelper.readStructure(BetterEnd.makeID("pillars/pillar_top_" + radius + (spike.isGuarded() ? "_cage" : ""))); - Vec3i side = base.getSize(); + BlockPos 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(); BlockPos pos2 = new BlockPos(x - (side.getX() >> 1), maxY, z - (side.getZ() >> 1)); maxY = pos2.getY(); - + StructurePlaceSettings data = new StructurePlaceSettings(); - base.placeInWorld(world, pos1, pos1, data, random, 2); - top.placeInWorld(world, pos2, pos2, data, random, 2); - + base.placeInWorldChunk(world, pos1, data, random); + top.placeInWorldChunk(world, pos2, data, random); + int r2 = radius * radius + 1; MutableBlockPos mut = new MutableBlockPos(); for (int px = -radius; px <= radius; px++) { @@ -128,13 +129,13 @@ public class SpikeFeatureMixin { mut.setZ(z); mut.setY(maxY); BlocksHelper.setWithoutUpdate(world, mut, Blocks.BEDROCK); - + EndCrystal crystal = EntityType.END_CRYSTAL.create(world.getLevel()); crystal.setBeamTarget(config.getCrystalBeamTarget()); crystal.setInvulnerable(config.isCrystalInvulnerable()); crystal.moveTo(x + 0.5D, maxY + 1, z + 0.5D, random.nextFloat() * 360.0F, 0.0F); world.addFreshEntity(crystal); - + if (spike.isGuarded()) { for (int px = -2; px <= 2; ++px) { boolean bl = Mth.abs(px) == 2; @@ -156,7 +157,7 @@ public class SpikeFeatureMixin { info.cancel(); } - + private boolean be_radiusInRange(int radius) { return radius > 1 && radius < 6; } diff --git a/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java b/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java index fd6b15d4..da2c05e6 100644 --- a/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java +++ b/src/main/java/ru/betterend/mixin/common/WeightedBiomePickerMixin.java @@ -1,35 +1,37 @@ package ru.betterend.mixin.common; +import java.util.List; + +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 com.google.common.collect.Lists; + import net.fabricmc.fabric.impl.biome.InternalBiomeData; import net.fabricmc.fabric.impl.biome.WeightedBiomePicker; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biomes; -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 ru.betterend.interfaces.IBiomeList; -import java.util.List; - @Mixin(value = WeightedBiomePicker.class, remap = false) public class WeightedBiomePickerMixin implements IBiomeList { private final List> biomes = Lists.newArrayList(); - + @Inject(method = "addBiome", at = @At("TAIL")) private void be_addBiome(final ResourceKey biome, final double weight, CallbackInfo info) { if (be_isCorrectPicker(WeightedBiomePicker.class.cast(this))) { biomes.add(biome); } } - + @Override public List> getBiomes() { return biomes; } - + private boolean be_isCorrectPicker(WeightedBiomePicker picker) { return picker == InternalBiomeData.getEndBiomesMap().get(Biomes.SMALL_END_ISLANDS) || picker == InternalBiomeData.getEndBarrensMap().get(Biomes.END_BARRENS); } diff --git a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java b/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java deleted file mode 100644 index c275b531..00000000 --- a/src/main/java/ru/betterend/mixin/common/WorldGenRegionMixin.java +++ /dev/null @@ -1,30 +0,0 @@ -package ru.betterend.mixin.common; - -import net.minecraft.core.BlockPos; -import net.minecraft.core.SectionPos; -import net.minecraft.server.level.WorldGenRegion; -import net.minecraft.world.level.ChunkPos; -import net.minecraft.world.level.levelgen.feature.SpikeFeature; -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; -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.util.MHelper; - -@Mixin(WorldGenRegion.class) -public class WorldGenRegionMixin { - @Final - @Shadow - private ChunkPos center; - - @Inject(method = "ensureCanWrite", at = @At("HEAD"), cancellable = true) - private void be_alterBlockCheck(BlockPos blockPos, CallbackInfoReturnable info) { - int x = blockPos.getX() >> 4; - int z = blockPos.getZ() >> 4; - WorldGenRegion region = (WorldGenRegion) (Object) this; - info.setReturnValue(Math.abs(x - center.x) < 2 && Math.abs(z - center.z) < 2); - } -} diff --git a/src/main/java/ru/betterend/noise/OpenSimplexNoise.java b/src/main/java/ru/betterend/noise/OpenSimplexNoise.java index bf281185..3389bfbc 100644 --- a/src/main/java/ru/betterend/noise/OpenSimplexNoise.java +++ b/src/main/java/ru/betterend/noise/OpenSimplexNoise.java @@ -3,7 +3,7 @@ package ru.betterend.noise; /* * OpenSimplex Noise in Java. * by Kurt Spencer - * + * * v1.1 (October 5, 2014) * - Added 2D and 4D implementations. * - Proper gradient sets for all dimensions, from a @@ -16,7 +16,7 @@ package ru.betterend.noise; * will be the same when ported to other languages. */ -public final class OpenSimplexNoise { +public 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; @@ -132,45 +132,40 @@ public final class OpenSimplexNoise { if (inSum <= 1) { // We're inside the triangle (2-Simplex) at (0,0) double zins = 1 - inSum; if (zins > xins || zins > yins) { // (0,0) is one of the closest two - // triangular vertices + // triangular vertices if (xins > yins) { xsv_ext = xsb + 1; ysv_ext = ysb - 1; dx_ext = dx0 - 1; dy_ext = dy0 + 1; - } - else { + } else { xsv_ext = xsb - 1; ysv_ext = ysb + 1; dx_ext = dx0 + 1; dy_ext = dy0 - 1; } - } - else { // (1,0) and (0,1) are the closest two vertices. + } else { // (1,0) and (0,1) are the closest two vertices. xsv_ext = xsb + 1; ysv_ext = ysb + 1; dx_ext = dx0 - 1 - 2 * SQUISH_CONSTANT_2D; dy_ext = dy0 - 1 - 2 * SQUISH_CONSTANT_2D; } - } - else { // We're inside the triangle (2-Simplex) at (1,1) + } else { // We're inside the triangle (2-Simplex) at (1,1) double zins = 2 - inSum; if (zins < xins || zins < yins) { // (0,0) is one of the closest two - // triangular vertices + // triangular vertices if (xins > yins) { xsv_ext = xsb + 2; ysv_ext = ysb + 0; dx_ext = dx0 - 2 - 2 * SQUISH_CONSTANT_2D; dy_ext = dy0 + 0 - 2 * SQUISH_CONSTANT_2D; - } - else { + } else { xsv_ext = xsb + 0; ysv_ext = ysb + 2; dx_ext = dx0 + 0 - 2 * SQUISH_CONSTANT_2D; dy_ext = dy0 - 2 - 2 * SQUISH_CONSTANT_2D; } - } - else { // (1,0) and (0,1) are the closest two vertices. + } else { // (1,0) and (0,1) are the closest two vertices. dx_ext = dx0; dy_ext = dy0; xsv_ext = xsb; @@ -254,8 +249,7 @@ public final class OpenSimplexNoise { if (aScore >= bScore && zins > bScore) { bScore = zins; bPoint = 0x04; - } - else if (aScore < bScore && zins > aScore) { + } else if (aScore < bScore && zins > aScore) { aScore = zins; aPoint = 0x04; } @@ -266,21 +260,20 @@ public final class OpenSimplexNoise { // (0,0,0) double wins = 1 - inSum; if (wins > aScore || wins > bScore) { // (0,0,0) is one of the - // closest two tetrahedral - // vertices. + // closest two tetrahedral + // vertices. byte c = (bScore > aScore ? bPoint : aPoint); // Our other - // closest - // vertex is the - // closest out - // of a and b. + // closest + // vertex is the + // closest out + // of a and b. if ((c & 0x01) == 0) { xsv_ext0 = xsb - 1; xsv_ext1 = xsb; dx_ext0 = dx0 + 1; dx_ext1 = dx0; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb + 1; dx_ext0 = dx_ext1 = dx0 - 1; } @@ -291,13 +284,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) == 0) { ysv_ext1 -= 1; dy_ext1 += 1; - } - else { + } else { ysv_ext0 -= 1; dy_ext0 += 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb + 1; dy_ext0 = dy_ext1 = dy0 - 1; } @@ -307,25 +298,22 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb - 1; dz_ext0 = dz0; dz_ext1 = dz0 + 1; - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb + 1; dz_ext0 = dz_ext1 = dz0 - 1; } - } - else { // (0,0,0) is not one of the closest two tetrahedral - // vertices. + } else { // (0,0,0) is not one of the closest two tetrahedral + // vertices. byte c = (byte) (aPoint | bPoint); // Our two extra vertices are - // determined by the closest - // two. + // determined by the closest + // two. if ((c & 0x01) == 0) { xsv_ext0 = xsb; xsv_ext1 = xsb - 1; dx_ext0 = dx0 - 2 * SQUISH_CONSTANT_3D; dx_ext1 = dx0 + 1 - SQUISH_CONSTANT_3D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb + 1; dx_ext0 = dx0 - 1 - 2 * SQUISH_CONSTANT_3D; dx_ext1 = dx0 - 1 - SQUISH_CONSTANT_3D; @@ -336,8 +324,7 @@ public final class OpenSimplexNoise { ysv_ext1 = ysb - 1; dy_ext0 = dy0 - 2 * SQUISH_CONSTANT_3D; dy_ext1 = dy0 + 1 - SQUISH_CONSTANT_3D; - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb + 1; dy_ext0 = dy0 - 1 - 2 * SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 1 - SQUISH_CONSTANT_3D; @@ -348,8 +335,7 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb - 1; dz_ext0 = dz0 - 2 * SQUISH_CONSTANT_3D; dz_ext1 = dz0 + 1 - SQUISH_CONSTANT_3D; - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb + 1; dz_ext0 = dz0 - 1 - 2 * SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 1 - SQUISH_CONSTANT_3D; @@ -392,9 +378,8 @@ public final class OpenSimplexNoise { attn3 *= attn3; value += attn3 * attn3 * extrapolate(xsb + 0, ysb + 0, zsb + 1, dx3, dy3, dz3); } - } - else if (inSum >= 2) { // We're inside the tetrahedron (3-Simplex) at - // (1,1,1) + } else if (inSum >= 2) { // We're inside the tetrahedron (3-Simplex) at + // (1,1,1) // Determine which two tetrahedral vertices are the closest, out of // (1,1,0), (1,0,1), (0,1,1) but not (1,1,1). @@ -405,8 +390,7 @@ public final class OpenSimplexNoise { if (aScore <= bScore && zins < bScore) { bScore = zins; bPoint = 0x03; - } - else if (aScore > bScore && zins < aScore) { + } else if (aScore > bScore && zins < aScore) { aScore = zins; aPoint = 0x03; } @@ -417,21 +401,20 @@ public final class OpenSimplexNoise { // (1,1,1) double wins = 3 - inSum; if (wins < aScore || wins < bScore) { // (1,1,1) is one of the - // closest two tetrahedral - // vertices. + // closest two tetrahedral + // vertices. byte c = (bScore < aScore ? bPoint : aPoint); // Our other - // closest - // vertex is the - // closest out - // of a and b. + // closest + // vertex is the + // closest out + // of a and b. if ((c & 0x01) != 0) { xsv_ext0 = xsb + 2; xsv_ext1 = xsb + 1; dx_ext0 = dx0 - 2 - 3 * SQUISH_CONSTANT_3D; dx_ext1 = dx0 - 1 - 3 * SQUISH_CONSTANT_3D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb; dx_ext0 = dx_ext1 = dx0 - 3 * SQUISH_CONSTANT_3D; } @@ -442,13 +425,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) != 0) { ysv_ext1 += 1; dy_ext1 -= 1; - } - else { + } else { ysv_ext0 += 1; dy_ext0 -= 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb; dy_ext0 = dy_ext1 = dy0 - 3 * SQUISH_CONSTANT_3D; } @@ -458,25 +439,22 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb + 2; dz_ext0 = dz0 - 1 - 3 * SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 2 - 3 * SQUISH_CONSTANT_3D; - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb; dz_ext0 = dz_ext1 = dz0 - 3 * SQUISH_CONSTANT_3D; } - } - else { // (1,1,1) is not one of the closest two tetrahedral - // vertices. + } else { // (1,1,1) is not one of the closest two tetrahedral + // vertices. byte c = (byte) (aPoint & bPoint); // Our two extra vertices are - // determined by the closest - // two. + // determined by the closest + // two. if ((c & 0x01) != 0) { xsv_ext0 = xsb + 1; xsv_ext1 = xsb + 2; dx_ext0 = dx0 - 1 - SQUISH_CONSTANT_3D; dx_ext1 = dx0 - 2 - 2 * SQUISH_CONSTANT_3D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb; dx_ext0 = dx0 - SQUISH_CONSTANT_3D; dx_ext1 = dx0 - 2 * SQUISH_CONSTANT_3D; @@ -487,8 +465,7 @@ public final class OpenSimplexNoise { ysv_ext1 = ysb + 2; dy_ext0 = dy0 - 1 - SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 2 - 2 * SQUISH_CONSTANT_3D; - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb; dy_ext0 = dy0 - SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 2 * SQUISH_CONSTANT_3D; @@ -499,8 +476,7 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb + 2; dz_ext0 = dz0 - 1 - SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 2 - 2 * SQUISH_CONSTANT_3D; - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb; dz_ext0 = dz0 - SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 2 * SQUISH_CONSTANT_3D; @@ -546,9 +522,8 @@ public final class OpenSimplexNoise { attn0 *= attn0; value += attn0 * attn0 * extrapolate(xsb + 1, ysb + 1, zsb + 1, dx0, dy0, dz0); } - } - else { // We're inside the octahedron (Rectified 3-Simplex) in - // between. + } else { // We're inside the octahedron (Rectified 3-Simplex) in + // between. double aScore; byte aPoint; boolean aIsFurtherSide; @@ -562,8 +537,7 @@ public final class OpenSimplexNoise { aScore = p1 - 1; aPoint = 0x03; aIsFurtherSide = true; - } - else { + } else { aScore = 1 - p1; aPoint = 0x04; aIsFurtherSide = false; @@ -575,8 +549,7 @@ public final class OpenSimplexNoise { bScore = p2 - 1; bPoint = 0x05; bIsFurtherSide = true; - } - else { + } else { bScore = 1 - p2; bPoint = 0x02; bIsFurtherSide = false; @@ -591,21 +564,18 @@ public final class OpenSimplexNoise { aScore = score; aPoint = 0x06; aIsFurtherSide = true; - } - else if (aScore > bScore && bScore < score) { + } else if (aScore > bScore && bScore < score) { bScore = score; bPoint = 0x06; bIsFurtherSide = true; } - } - else { + } else { double score = 1 - p3; if (aScore <= bScore && aScore < score) { aScore = score; aPoint = 0x01; aIsFurtherSide = false; - } - else if (aScore > bScore && bScore < score) { + } else if (aScore > bScore && bScore < score) { bScore = score; bPoint = 0x01; bIsFurtherSide = false; @@ -634,16 +604,14 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb + 2; ysv_ext1 = ysb; zsv_ext1 = zsb; - } - else if ((c & 0x02) != 0) { + } else if ((c & 0x02) != 0) { dx_ext1 = dx0 - 2 * SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 2 - 2 * SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 2 * SQUISH_CONSTANT_3D; xsv_ext1 = xsb; ysv_ext1 = ysb + 2; zsv_ext1 = zsb; - } - else { + } else { dx_ext1 = dx0 - 2 * SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 2 * SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 2 - 2 * SQUISH_CONSTANT_3D; @@ -651,8 +619,7 @@ public final class OpenSimplexNoise { ysv_ext1 = ysb; zsv_ext1 = zsb + 2; } - } - else {// Both closest points on (0,0,0) side + } else {// Both closest points on (0,0,0) side // One of the two extra points is (0,0,0) dx_ext0 = dx0; @@ -671,16 +638,14 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb - 1; ysv_ext1 = ysb + 1; zsv_ext1 = zsb + 1; - } - else if ((c & 0x02) == 0) { + } else if ((c & 0x02) == 0) { dx_ext1 = dx0 - 1 - SQUISH_CONSTANT_3D; dy_ext1 = dy0 + 1 - SQUISH_CONSTANT_3D; dz_ext1 = dz0 - 1 - SQUISH_CONSTANT_3D; xsv_ext1 = xsb + 1; ysv_ext1 = ysb - 1; zsv_ext1 = zsb + 1; - } - else { + } else { dx_ext1 = dx0 - 1 - SQUISH_CONSTANT_3D; dy_ext1 = dy0 - 1 - SQUISH_CONSTANT_3D; dz_ext1 = dz0 + 1 - SQUISH_CONSTANT_3D; @@ -689,14 +654,12 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb - 1; } } - } - else { // One point on (0,0,0) side, one point on (1,1,1) side + } else { // One point on (0,0,0) side, one point on (1,1,1) side byte c1, c2; if (aIsFurtherSide) { c1 = aPoint; c2 = bPoint; - } - else { + } else { c1 = bPoint; c2 = aPoint; } @@ -709,16 +672,14 @@ public final class OpenSimplexNoise { xsv_ext0 = xsb - 1; ysv_ext0 = ysb + 1; zsv_ext0 = zsb + 1; - } - else if ((c1 & 0x02) == 0) { + } else if ((c1 & 0x02) == 0) { dx_ext0 = dx0 - 1 - SQUISH_CONSTANT_3D; dy_ext0 = dy0 + 1 - SQUISH_CONSTANT_3D; dz_ext0 = dz0 - 1 - SQUISH_CONSTANT_3D; xsv_ext0 = xsb + 1; ysv_ext0 = ysb - 1; zsv_ext0 = zsb + 1; - } - else { + } else { dx_ext0 = dx0 - 1 - SQUISH_CONSTANT_3D; dy_ext0 = dy0 - 1 - SQUISH_CONSTANT_3D; dz_ext0 = dz0 + 1 - SQUISH_CONSTANT_3D; @@ -737,12 +698,10 @@ public final class OpenSimplexNoise { if ((c2 & 0x01) != 0) { dx_ext1 -= 2; xsv_ext1 += 2; - } - else if ((c2 & 0x02) != 0) { + } else if ((c2 & 0x02) != 0) { dy_ext1 -= 2; ysv_ext1 += 2; - } - else { + } else { dz_ext1 -= 2; zsv_ext1 += 2; } @@ -879,7 +838,7 @@ public final class OpenSimplexNoise { double value = 0; if (inSum <= 1) { // We're inside the pentachoron (4-Simplex) at - // (0,0,0,0) + // (0,0,0,0) // Determine which two of (0,0,0,1), (0,0,1,0), (0,1,0,0), (1,0,0,0) // are closest. @@ -890,16 +849,14 @@ public final class OpenSimplexNoise { if (aScore >= bScore && zins > bScore) { bScore = zins; bPoint = 0x04; - } - else if (aScore < bScore && zins > aScore) { + } else if (aScore < bScore && zins > aScore) { aScore = zins; aPoint = 0x04; } if (aScore >= bScore && wins > bScore) { bScore = wins; bPoint = 0x08; - } - else if (aScore < bScore && wins > aScore) { + } else if (aScore < bScore && wins > aScore) { aScore = wins; aPoint = 0x08; } @@ -910,20 +867,19 @@ public final class OpenSimplexNoise { // (0,0,0,0) double uins = 1 - inSum; if (uins > aScore || uins > bScore) { // (0,0,0,0) is one of the - // closest two pentachoron - // vertices. + // closest two pentachoron + // vertices. byte c = (bScore > aScore ? bPoint : aPoint); // Our other - // closest - // vertex is the - // closest out - // of a and b. + // closest + // vertex is the + // closest out + // of a and b. if ((c & 0x01) == 0) { xsv_ext0 = xsb - 1; xsv_ext1 = xsv_ext2 = xsb; dx_ext0 = dx0 + 1; dx_ext1 = dx_ext2 = dx0; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsv_ext2 = xsb + 1; dx_ext0 = dx_ext1 = dx_ext2 = dx0 - 1; } @@ -934,13 +890,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) == 0x01) { ysv_ext0 -= 1; dy_ext0 += 1; - } - else { + } else { ysv_ext1 -= 1; dy_ext1 += 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysv_ext2 = ysb + 1; dy_ext0 = dy_ext1 = dy_ext2 = dy0 - 1; } @@ -952,18 +906,15 @@ public final class OpenSimplexNoise { if ((c & 0x03) == 0x03) { zsv_ext0 -= 1; dz_ext0 += 1; - } - else { + } else { zsv_ext1 -= 1; dz_ext1 += 1; } - } - else { + } else { zsv_ext2 -= 1; dz_ext2 += 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsv_ext2 = zsb + 1; dz_ext0 = dz_ext1 = dz_ext2 = dz0 - 1; } @@ -973,17 +924,15 @@ public final class OpenSimplexNoise { wsv_ext2 = wsb - 1; dw_ext0 = dw_ext1 = dw0; dw_ext2 = dw0 + 1; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsv_ext2 = wsb + 1; dw_ext0 = dw_ext1 = dw_ext2 = dw0 - 1; } - } - else { // (0,0,0,0) is not one of the closest two pentachoron - // vertices. + } else { // (0,0,0,0) is not one of the closest two pentachoron + // vertices. byte c = (byte) (aPoint | bPoint); // Our three extra vertices - // are determined by the - // closest two. + // are determined by the + // closest two. if ((c & 0x01) == 0) { xsv_ext0 = xsv_ext2 = xsb; @@ -991,8 +940,7 @@ public final class OpenSimplexNoise { dx_ext0 = dx0 - 2 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 + 1 - SQUISH_CONSTANT_4D; dx_ext2 = dx0 - SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsv_ext2 = xsb + 1; dx_ext0 = dx0 - 1 - 2 * SQUISH_CONSTANT_4D; dx_ext1 = dx_ext2 = dx0 - 1 - SQUISH_CONSTANT_4D; @@ -1005,13 +953,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) == 0x01) { ysv_ext1 -= 1; dy_ext1 += 1; - } - else { + } else { ysv_ext2 -= 1; dy_ext2 += 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysv_ext2 = ysb + 1; dy_ext0 = dy0 - 1 - 2 * SQUISH_CONSTANT_4D; dy_ext1 = dy_ext2 = dy0 - 1 - SQUISH_CONSTANT_4D; @@ -1024,13 +970,11 @@ public final class OpenSimplexNoise { if ((c & 0x03) == 0x03) { zsv_ext1 -= 1; dz_ext1 += 1; - } - else { + } else { zsv_ext2 -= 1; dz_ext2 += 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsv_ext2 = zsb + 1; dz_ext0 = dz0 - 1 - 2 * SQUISH_CONSTANT_4D; dz_ext1 = dz_ext2 = dz0 - 1 - SQUISH_CONSTANT_4D; @@ -1042,8 +986,7 @@ public final class OpenSimplexNoise { dw_ext0 = dw0 - 2 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 - SQUISH_CONSTANT_4D; dw_ext2 = dw0 + 1 - SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsv_ext2 = wsb + 1; dw_ext0 = dw0 - 1 - 2 * SQUISH_CONSTANT_4D; dw_ext1 = dw_ext2 = dw0 - 1 - SQUISH_CONSTANT_4D; @@ -1100,12 +1043,11 @@ public final class OpenSimplexNoise { attn4 *= attn4; value += attn4 * attn4 * extrapolate(xsb + 0, ysb + 0, zsb + 0, wsb + 1, dx4, dy4, dz4, dw4); } - } - else if (inSum >= 3) { // We're inside the pentachoron (4-Simplex) at - // (1,1,1,1) - // Determine which two of (1,1,1,0), - // (1,1,0,1), (1,0,1,1), (0,1,1,1) - // are closest. + } else if (inSum >= 3) { // We're inside the pentachoron (4-Simplex) at + // (1,1,1,1) + // Determine which two of (1,1,1,0), + // (1,1,0,1), (1,0,1,1), (0,1,1,1) + // are closest. byte aPoint = 0x0E; double aScore = xins; byte bPoint = 0x0D; @@ -1113,16 +1055,14 @@ public final class OpenSimplexNoise { if (aScore <= bScore && zins < bScore) { bScore = zins; bPoint = 0x0B; - } - else if (aScore > bScore && zins < aScore) { + } else if (aScore > bScore && zins < aScore) { aScore = zins; aPoint = 0x0B; } if (aScore <= bScore && wins < bScore) { bScore = wins; bPoint = 0x07; - } - else if (aScore > bScore && wins < aScore) { + } else if (aScore > bScore && wins < aScore) { aScore = wins; aPoint = 0x07; } @@ -1133,21 +1073,20 @@ public final class OpenSimplexNoise { // (0,0,0,0) double uins = 4 - inSum; if (uins < aScore || uins < bScore) { // (1,1,1,1) is one of the - // closest two pentachoron - // vertices. + // closest two pentachoron + // vertices. byte c = (bScore < aScore ? bPoint : aPoint); // Our other - // closest - // vertex is the - // closest out - // of a and b. + // closest + // vertex is the + // closest out + // of a and b. if ((c & 0x01) != 0) { xsv_ext0 = xsb + 2; xsv_ext1 = xsv_ext2 = xsb + 1; dx_ext0 = dx0 - 2 - 4 * SQUISH_CONSTANT_4D; dx_ext1 = dx_ext2 = dx0 - 1 - 4 * SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsv_ext2 = xsb; dx_ext0 = dx_ext1 = dx_ext2 = dx0 - 4 * SQUISH_CONSTANT_4D; } @@ -1158,13 +1097,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) != 0) { ysv_ext1 += 1; dy_ext1 -= 1; - } - else { + } else { ysv_ext0 += 1; dy_ext0 -= 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysv_ext2 = ysb; dy_ext0 = dy_ext1 = dy_ext2 = dy0 - 4 * SQUISH_CONSTANT_4D; } @@ -1176,18 +1113,15 @@ public final class OpenSimplexNoise { if ((c & 0x03) == 0) { zsv_ext0 += 1; dz_ext0 -= 1; - } - else { + } else { zsv_ext1 += 1; dz_ext1 -= 1; } - } - else { + } else { zsv_ext2 += 1; dz_ext2 -= 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsv_ext2 = zsb; dz_ext0 = dz_ext1 = dz_ext2 = dz0 - 4 * SQUISH_CONSTANT_4D; } @@ -1197,17 +1131,15 @@ public final class OpenSimplexNoise { wsv_ext2 = wsb + 2; dw_ext0 = dw_ext1 = dw0 - 1 - 4 * SQUISH_CONSTANT_4D; dw_ext2 = dw0 - 2 - 4 * SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsv_ext2 = wsb; dw_ext0 = dw_ext1 = dw_ext2 = dw0 - 4 * SQUISH_CONSTANT_4D; } - } - else { // (1,1,1,1) is not one of the closest two pentachoron - // vertices. + } else { // (1,1,1,1) is not one of the closest two pentachoron + // vertices. byte c = (byte) (aPoint & bPoint); // Our three extra vertices - // are determined by the - // closest two. + // are determined by the + // closest two. if ((c & 0x01) != 0) { xsv_ext0 = xsv_ext2 = xsb + 1; @@ -1215,8 +1147,7 @@ public final class OpenSimplexNoise { dx_ext0 = dx0 - 1 - 2 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 - 2 - 3 * SQUISH_CONSTANT_4D; dx_ext2 = dx0 - 1 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsv_ext2 = xsb; dx_ext0 = dx0 - 2 * SQUISH_CONSTANT_4D; dx_ext1 = dx_ext2 = dx0 - 3 * SQUISH_CONSTANT_4D; @@ -1229,13 +1160,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) != 0) { ysv_ext2 += 1; dy_ext2 -= 1; - } - else { + } else { ysv_ext1 += 1; dy_ext1 -= 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysv_ext2 = ysb; dy_ext0 = dy0 - 2 * SQUISH_CONSTANT_4D; dy_ext1 = dy_ext2 = dy0 - 3 * SQUISH_CONSTANT_4D; @@ -1248,13 +1177,11 @@ public final class OpenSimplexNoise { if ((c & 0x03) != 0) { zsv_ext2 += 1; dz_ext2 -= 1; - } - else { + } else { zsv_ext1 += 1; dz_ext1 -= 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsv_ext2 = zsb; dz_ext0 = dz0 - 2 * SQUISH_CONSTANT_4D; dz_ext1 = dz_ext2 = dz0 - 3 * SQUISH_CONSTANT_4D; @@ -1266,8 +1193,7 @@ public final class OpenSimplexNoise { dw_ext0 = dw0 - 1 - 2 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 - 1 - 3 * SQUISH_CONSTANT_4D; dw_ext2 = dw0 - 2 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsv_ext2 = wsb; dw_ext0 = dw0 - 2 * SQUISH_CONSTANT_4D; dw_ext1 = dw_ext2 = dw0 - 3 * SQUISH_CONSTANT_4D; @@ -1328,9 +1254,8 @@ public final class OpenSimplexNoise { attn0 *= attn0; value += attn0 * attn0 * extrapolate(xsb + 1, ysb + 1, zsb + 1, wsb + 1, dx0, dy0, dz0, dw0); } - } - else if (inSum <= 2) { // We're inside the first dispentachoron - // (Rectified 4-Simplex) + } else if (inSum <= 2) { // We're inside the first dispentachoron + // (Rectified 4-Simplex) double aScore; byte aPoint; boolean aIsBiggerSide = true; @@ -1342,8 +1267,7 @@ public final class OpenSimplexNoise { if (xins + yins > zins + wins) { aScore = xins + yins; aPoint = 0x03; - } - else { + } else { aScore = zins + wins; aPoint = 0x0C; } @@ -1352,8 +1276,7 @@ public final class OpenSimplexNoise { if (xins + zins > yins + wins) { bScore = xins + zins; bPoint = 0x05; - } - else { + } else { bScore = yins + wins; bPoint = 0x0A; } @@ -1365,19 +1288,16 @@ public final class OpenSimplexNoise { if (aScore >= bScore && score > bScore) { bScore = score; bPoint = 0x09; - } - else if (aScore < bScore && score > aScore) { + } else if (aScore < bScore && score > aScore) { aScore = score; aPoint = 0x09; } - } - else { + } else { double score = yins + zins; if (aScore >= bScore && score > bScore) { bScore = score; bPoint = 0x06; - } - else if (aScore < bScore && score > aScore) { + } else if (aScore < bScore && score > aScore) { aScore = score; aPoint = 0x06; } @@ -1389,8 +1309,7 @@ public final class OpenSimplexNoise { bScore = p1; bPoint = 0x01; bIsBiggerSide = false; - } - else if (aScore < bScore && p1 > aScore) { + } else if (aScore < bScore && p1 > aScore) { aScore = p1; aPoint = 0x01; aIsBiggerSide = false; @@ -1402,8 +1321,7 @@ public final class OpenSimplexNoise { bScore = p2; bPoint = 0x02; bIsBiggerSide = false; - } - else if (aScore < bScore && p2 > aScore) { + } else if (aScore < bScore && p2 > aScore) { aScore = p2; aPoint = 0x02; aIsBiggerSide = false; @@ -1415,8 +1333,7 @@ public final class OpenSimplexNoise { bScore = p3; bPoint = 0x04; bIsBiggerSide = false; - } - else if (aScore < bScore && p3 > aScore) { + } else if (aScore < bScore && p3 > aScore) { aScore = p3; aPoint = 0x04; aIsBiggerSide = false; @@ -1428,8 +1345,7 @@ public final class OpenSimplexNoise { bScore = p4; bPoint = 0x08; bIsBiggerSide = false; - } - else if (aScore < bScore && p4 > aScore) { + } else if (aScore < bScore && p4 > aScore) { aScore = p4; aPoint = 0x08; aIsBiggerSide = false; @@ -1446,8 +1362,7 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb - 1; dx_ext0 = dx0 - 3 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 + 1 - 2 * SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb + 1; dx_ext0 = dx0 - 1 - 3 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 - 1 - 2 * SQUISH_CONSTANT_4D; @@ -1458,8 +1373,7 @@ public final class OpenSimplexNoise { ysv_ext1 = ysb - 1; dy_ext0 = dy0 - 3 * SQUISH_CONSTANT_4D; dy_ext1 = dy0 + 1 - 2 * SQUISH_CONSTANT_4D; - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb + 1; dy_ext0 = dy0 - 1 - 3 * SQUISH_CONSTANT_4D; dy_ext1 = dy0 - 1 - 2 * SQUISH_CONSTANT_4D; @@ -1470,8 +1384,7 @@ public final class OpenSimplexNoise { zsv_ext1 = zsb - 1; dz_ext0 = dz0 - 3 * SQUISH_CONSTANT_4D; dz_ext1 = dz0 + 1 - 2 * SQUISH_CONSTANT_4D; - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb + 1; dz_ext0 = dz0 - 1 - 3 * SQUISH_CONSTANT_4D; dz_ext1 = dz0 - 1 - 2 * SQUISH_CONSTANT_4D; @@ -1482,8 +1395,7 @@ public final class OpenSimplexNoise { wsv_ext1 = wsb - 1; dw_ext0 = dw0 - 3 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 + 1 - 2 * SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsb + 1; dw_ext0 = dw0 - 1 - 3 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 - 1 - 2 * SQUISH_CONSTANT_4D; @@ -1501,23 +1413,19 @@ public final class OpenSimplexNoise { if ((c2 & 0x01) != 0) { xsv_ext2 += 2; dx_ext2 -= 2; - } - else if ((c2 & 0x02) != 0) { + } else if ((c2 & 0x02) != 0) { ysv_ext2 += 2; dy_ext2 -= 2; - } - else if ((c2 & 0x04) != 0) { + } else if ((c2 & 0x04) != 0) { zsv_ext2 += 2; dz_ext2 -= 2; - } - else { + } else { wsv_ext2 += 2; dw_ext2 -= 2; } - } - else { // Both closest points on the smaller side - // One of the two extra points is (0,0,0,0) + } else { // Both closest points on the smaller side + // One of the two extra points is (0,0,0,0) xsv_ext2 = xsb; ysv_ext2 = ysb; zsv_ext2 = zsb; @@ -1535,8 +1443,7 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb; dx_ext0 = dx0 + 1 - SQUISH_CONSTANT_4D; dx_ext1 = dx0 - SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb + 1; dx_ext0 = dx_ext1 = dx0 - 1 - SQUISH_CONSTANT_4D; } @@ -1547,13 +1454,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) == 0x01) { ysv_ext0 -= 1; dy_ext0 += 1; - } - else { + } else { ysv_ext1 -= 1; dy_ext1 += 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb + 1; dy_ext0 = dy_ext1 = dy0 - 1 - SQUISH_CONSTANT_4D; } @@ -1564,13 +1469,11 @@ public final class OpenSimplexNoise { if ((c & 0x03) == 0x03) { zsv_ext0 -= 1; dz_ext0 += 1; - } - else { + } else { zsv_ext1 -= 1; dz_ext1 += 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb + 1; dz_ext0 = dz_ext1 = dz0 - 1 - SQUISH_CONSTANT_4D; } @@ -1580,21 +1483,18 @@ public final class OpenSimplexNoise { wsv_ext1 = wsb - 1; dw_ext0 = dw0 - SQUISH_CONSTANT_4D; dw_ext1 = dw0 + 1 - SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsb + 1; dw_ext0 = dw_ext1 = dw0 - 1 - SQUISH_CONSTANT_4D; } } - } - else { // One point on each "side" + } else { // One point on each "side" byte c1, c2; if (aIsBiggerSide) { c1 = aPoint; c2 = bPoint; - } - else { + } else { c1 = bPoint; c2 = aPoint; } @@ -1606,8 +1506,7 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb; dx_ext0 = dx0 + 1 - SQUISH_CONSTANT_4D; dx_ext1 = dx0 - SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb + 1; dx_ext0 = dx_ext1 = dx0 - 1 - SQUISH_CONSTANT_4D; } @@ -1618,13 +1517,11 @@ public final class OpenSimplexNoise { if ((c1 & 0x01) == 0x01) { ysv_ext0 -= 1; dy_ext0 += 1; - } - else { + } else { ysv_ext1 -= 1; dy_ext1 += 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb + 1; dy_ext0 = dy_ext1 = dy0 - 1 - SQUISH_CONSTANT_4D; } @@ -1635,13 +1532,11 @@ public final class OpenSimplexNoise { if ((c1 & 0x03) == 0x03) { zsv_ext0 -= 1; dz_ext0 += 1; - } - else { + } else { zsv_ext1 -= 1; dz_ext1 += 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb + 1; dz_ext0 = dz_ext1 = dz0 - 1 - SQUISH_CONSTANT_4D; } @@ -1651,8 +1546,7 @@ public final class OpenSimplexNoise { wsv_ext1 = wsb - 1; dw_ext0 = dw0 - SQUISH_CONSTANT_4D; dw_ext1 = dw0 + 1 - SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsb + 1; dw_ext0 = dw_ext1 = dw0 - 1 - SQUISH_CONSTANT_4D; } @@ -1670,16 +1564,13 @@ public final class OpenSimplexNoise { if ((c2 & 0x01) != 0) { xsv_ext2 += 2; dx_ext2 -= 2; - } - else if ((c2 & 0x02) != 0) { + } else if ((c2 & 0x02) != 0) { ysv_ext2 += 2; dy_ext2 -= 2; - } - else if ((c2 & 0x04) != 0) { + } else if ((c2 & 0x04) != 0) { zsv_ext2 += 2; dz_ext2 -= 2; - } - else { + } else { wsv_ext2 += 2; dw_ext2 -= 2; } @@ -1794,8 +1685,7 @@ public final class OpenSimplexNoise { attn10 *= attn10; value += attn10 * attn10 * extrapolate(xsb + 0, ysb + 0, zsb + 1, wsb + 1, dx10, dy10, dz10, dw10); } - } - else { // We're inside the second dispentachoron (Rectified 4-Simplex) + } else { // We're inside the second dispentachoron (Rectified 4-Simplex) double aScore; byte aPoint; boolean aIsBiggerSide = true; @@ -1807,8 +1697,7 @@ public final class OpenSimplexNoise { if (xins + yins < zins + wins) { aScore = xins + yins; aPoint = 0x0C; - } - else { + } else { aScore = zins + wins; aPoint = 0x03; } @@ -1817,8 +1706,7 @@ public final class OpenSimplexNoise { if (xins + zins < yins + wins) { bScore = xins + zins; bPoint = 0x0A; - } - else { + } else { bScore = yins + wins; bPoint = 0x05; } @@ -1830,19 +1718,16 @@ public final class OpenSimplexNoise { if (aScore <= bScore && score < bScore) { bScore = score; bPoint = 0x06; - } - else if (aScore > bScore && score < aScore) { + } else if (aScore > bScore && score < aScore) { aScore = score; aPoint = 0x06; } - } - else { + } else { double score = yins + zins; if (aScore <= bScore && score < bScore) { bScore = score; bPoint = 0x09; - } - else if (aScore > bScore && score < aScore) { + } else if (aScore > bScore && score < aScore) { aScore = score; aPoint = 0x09; } @@ -1854,8 +1739,7 @@ public final class OpenSimplexNoise { bScore = p1; bPoint = 0x0E; bIsBiggerSide = false; - } - else if (aScore > bScore && p1 < aScore) { + } else if (aScore > bScore && p1 < aScore) { aScore = p1; aPoint = 0x0E; aIsBiggerSide = false; @@ -1867,8 +1751,7 @@ public final class OpenSimplexNoise { bScore = p2; bPoint = 0x0D; bIsBiggerSide = false; - } - else if (aScore > bScore && p2 < aScore) { + } else if (aScore > bScore && p2 < aScore) { aScore = p2; aPoint = 0x0D; aIsBiggerSide = false; @@ -1880,8 +1763,7 @@ public final class OpenSimplexNoise { bScore = p3; bPoint = 0x0B; bIsBiggerSide = false; - } - else if (aScore > bScore && p3 < aScore) { + } else if (aScore > bScore && p3 < aScore) { aScore = p3; aPoint = 0x0B; aIsBiggerSide = false; @@ -1893,8 +1775,7 @@ public final class OpenSimplexNoise { bScore = p4; bPoint = 0x07; bIsBiggerSide = false; - } - else if (aScore > bScore && p4 < aScore) { + } else if (aScore > bScore && p4 < aScore) { aScore = p4; aPoint = 0x07; aIsBiggerSide = false; @@ -1926,20 +1807,17 @@ public final class OpenSimplexNoise { dx_ext0 -= 1; xsv_ext1 += 2; dx_ext1 -= 2; - } - else if ((c1 & 0x02) != 0) { + } else if ((c1 & 0x02) != 0) { ysv_ext0 += 1; dy_ext0 -= 1; ysv_ext1 += 2; dy_ext1 -= 2; - } - else if ((c1 & 0x04) != 0) { + } else if ((c1 & 0x04) != 0) { zsv_ext0 += 1; dz_ext0 -= 1; zsv_ext1 += 2; dz_ext1 -= 2; - } - else { + } else { wsv_ext0 += 1; dw_ext0 -= 1; wsv_ext1 += 2; @@ -1959,22 +1837,18 @@ public final class OpenSimplexNoise { if ((c2 & 0x01) == 0) { xsv_ext2 -= 2; dx_ext2 += 2; - } - else if ((c2 & 0x02) == 0) { + } else if ((c2 & 0x02) == 0) { ysv_ext2 -= 2; dy_ext2 += 2; - } - else if ((c2 & 0x04) == 0) { + } else if ((c2 & 0x04) == 0) { zsv_ext2 -= 2; dz_ext2 += 2; - } - else { + } else { wsv_ext2 -= 2; dw_ext2 += 2; } - } - else { // Both closest points on the smaller side - // One of the two extra points is (1,1,1,1) + } else { // Both closest points on the smaller side + // One of the two extra points is (1,1,1,1) xsv_ext2 = xsb + 1; ysv_ext2 = ysb + 1; zsv_ext2 = zsb + 1; @@ -1992,8 +1866,7 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb + 1; dx_ext0 = dx0 - 2 - 3 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 - 1 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb; dx_ext0 = dx_ext1 = dx0 - 3 * SQUISH_CONSTANT_4D; } @@ -2004,13 +1877,11 @@ public final class OpenSimplexNoise { if ((c & 0x01) == 0) { ysv_ext0 += 1; dy_ext0 -= 1; - } - else { + } else { ysv_ext1 += 1; dy_ext1 -= 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb; dy_ext0 = dy_ext1 = dy0 - 3 * SQUISH_CONSTANT_4D; } @@ -2021,13 +1892,11 @@ public final class OpenSimplexNoise { if ((c & 0x03) == 0) { zsv_ext0 += 1; dz_ext0 -= 1; - } - else { + } else { zsv_ext1 += 1; dz_ext1 -= 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb; dz_ext0 = dz_ext1 = dz0 - 3 * SQUISH_CONSTANT_4D; } @@ -2037,20 +1906,17 @@ public final class OpenSimplexNoise { wsv_ext1 = wsb + 2; dw_ext0 = dw0 - 1 - 3 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 - 2 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsb; dw_ext0 = dw_ext1 = dw0 - 3 * SQUISH_CONSTANT_4D; } } - } - else { // One point on each "side" + } else { // One point on each "side" byte c1, c2; if (aIsBiggerSide) { c1 = aPoint; c2 = bPoint; - } - else { + } else { c1 = bPoint; c2 = aPoint; } @@ -2062,8 +1928,7 @@ public final class OpenSimplexNoise { xsv_ext1 = xsb + 1; dx_ext0 = dx0 - 2 - 3 * SQUISH_CONSTANT_4D; dx_ext1 = dx0 - 1 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { xsv_ext0 = xsv_ext1 = xsb; dx_ext0 = dx_ext1 = dx0 - 3 * SQUISH_CONSTANT_4D; } @@ -2074,13 +1939,11 @@ public final class OpenSimplexNoise { if ((c1 & 0x01) == 0) { ysv_ext0 += 1; dy_ext0 -= 1; - } - else { + } else { ysv_ext1 += 1; dy_ext1 -= 1; } - } - else { + } else { ysv_ext0 = ysv_ext1 = ysb; dy_ext0 = dy_ext1 = dy0 - 3 * SQUISH_CONSTANT_4D; } @@ -2091,13 +1954,11 @@ public final class OpenSimplexNoise { if ((c1 & 0x03) == 0) { zsv_ext0 += 1; dz_ext0 -= 1; - } - else { + } else { zsv_ext1 += 1; dz_ext1 -= 1; } - } - else { + } else { zsv_ext0 = zsv_ext1 = zsb; dz_ext0 = dz_ext1 = dz0 - 3 * SQUISH_CONSTANT_4D; } @@ -2107,8 +1968,7 @@ public final class OpenSimplexNoise { wsv_ext1 = wsb + 2; dw_ext0 = dw0 - 1 - 3 * SQUISH_CONSTANT_4D; dw_ext1 = dw0 - 2 - 3 * SQUISH_CONSTANT_4D; - } - else { + } else { wsv_ext0 = wsv_ext1 = wsb; dw_ext0 = dw_ext1 = dw0 - 3 * SQUISH_CONSTANT_4D; } @@ -2126,16 +1986,13 @@ public final class OpenSimplexNoise { if ((c2 & 0x01) == 0) { xsv_ext2 -= 2; dx_ext2 += 2; - } - else if ((c2 & 0x02) == 0) { + } else if ((c2 & 0x02) == 0) { ysv_ext2 -= 2; dy_ext2 += 2; - } - else if ((c2 & 0x04) == 0) { + } else if ((c2 & 0x04) == 0) { zsv_ext2 -= 2; dz_ext2 += 2; - } - else { + } else { wsv_ext2 -= 2; dw_ext2 += 2; } @@ -2302,21 +2159,21 @@ public final class OpenSimplexNoise { // Gradients for 2D. They approximate the directions to the // vertices of an octagon from the center. - private static byte[] gradients2D = new byte[]{5, 2, 2, 5, -5, 2, -2, 5, 5, -2, 2, -5, -5, -2, -2, -5,}; + private static byte[] gradients2D = new byte[] { 5, 2, 2, 5, -5, 2, -2, 5, 5, -2, 2, -5, -5, -2, -2, -5, }; // Gradients for 3D. They approximate the directions to the // vertices of a rhombicuboctahedron from the center, skewed so // that the triangular and square facets can be inscribed inside // circles of the same radius. - private static byte[] gradients3D = new byte[]{-11, 4, 4, -4, 11, 4, -4, 4, 11, 11, 4, 4, 4, 11, 4, 4, 4, 11, -11, + private static byte[] gradients3D = new byte[] { -11, 4, 4, -4, 11, 4, -4, 4, 11, 11, 4, 4, 4, 11, 4, 4, 4, 11, -11, -4, 4, -4, -11, 4, -4, -4, 11, 11, -4, 4, 4, -11, 4, 4, -4, 11, -11, 4, -4, -4, 11, -4, -4, 4, -11, 11, 4, - -4, 4, 11, -4, 4, 4, -11, -11, -4, -4, -4, -11, -4, -4, -4, -11, 11, -4, -4, 4, -11, -4, 4, -4, -11,}; + -4, 4, 11, -4, 4, 4, -11, -11, -4, -4, -4, -11, -4, -4, -4, -11, 11, -4, -4, 4, -11, -4, 4, -4, -11, }; // Gradients for 4D. They approximate the directions to the // vertices of a disprismatotesseractihexadecachoron from the center, // skewed so that the tetrahedral and cubic facets can be inscribed inside // spheres of the same radius. - private static byte[] gradients4D = new byte[]{3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, -3, 1, 1, 1, -1, 3, + private static byte[] gradients4D = new byte[] { 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 3, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, 1, -1, 1, 1, 3, 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, 1, 1, -1, 1, 3, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, 1, -1, -1, 1, 3, 3, 1, -1, 1, 1, 3, -1, 1, 1, 1, -3, 1, 1, 1, -1, 3, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, 1, 1, -1, -1, 3, -3, -1, -1, 1, -1, @@ -2324,5 +2181,5 @@ public final class OpenSimplexNoise { -1, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, 3, -1, 1, -1, 1, -3, 1, -1, 1, -1, 3, -1, 1, -1, 1, -3, -3, -1, 1, -1, -1, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, 3, 1, -1, -1, 1, 3, -1, -1, 1, 1, -3, -1, 1, 1, -1, -3, -3, 1, -1, -1, -1, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, 3, -1, -1, -1, 1, -3, -1, -1, 1, -1, -3, -1, 1, -1, - -1, -3, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3,}; + -1, -3, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, -1, -1, -1, -1, -3, }; } \ No newline at end of file diff --git a/src/main/java/ru/betterend/particle/FireflyParticle.java b/src/main/java/ru/betterend/particle/FireflyParticle.java index bf331531..64624178 100644 --- a/src/main/java/ru/betterend/particle/FireflyParticle.java +++ b/src/main/java/ru/betterend/particle/FireflyParticle.java @@ -19,7 +19,7 @@ public class FireflyParticle extends SimpleAnimatedParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected FireflyParticle(ClientLevel world, double x, double y, double z, SpriteSet sprites, double r, double g, double b) { super(world, x, y, z, sprites, 0); setSprite(sprites.get(random)); @@ -28,16 +28,16 @@ public class FireflyParticle extends SimpleAnimatedParticle { this.setFadeColor(15916745); this.setSpriteFromAge(sprites); this.setAlpha(0); - + preVX = random.nextGaussian() * 0.02; preVY = random.nextGaussian() * 0.02; preVZ = random.nextGaussian() * 0.02; - + nextVX = random.nextGaussian() * 0.02; nextVY = random.nextGaussian() * 0.02; nextVZ = random.nextGaussian() * 0.02; } - + @Override public void tick() { int ticks = this.age & 31; @@ -50,18 +50,18 @@ public class FireflyParticle extends SimpleAnimatedParticle { nextVZ = random.nextGaussian() * 0.02; } double delta = (double) ticks / 31.0; - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + if (this.age <= 60) { this.setAlpha(this.age / 60F); } else if (this.age > lifetime - 60) { this.setAlpha((lifetime - this.age) / 60F); } - + super.tick(); } diff --git a/src/main/java/ru/betterend/particle/InfusionParticle.java b/src/main/java/ru/betterend/particle/InfusionParticle.java index b9dbbc7b..8bdac965 100644 --- a/src/main/java/ru/betterend/particle/InfusionParticle.java +++ b/src/main/java/ru/betterend/particle/InfusionParticle.java @@ -10,7 +10,7 @@ import net.minecraft.client.particle.SpriteSet; import net.minecraft.client.particle.TextureSheetParticle; public class InfusionParticle extends TextureSheetParticle { - + private final SpriteSet spriteProvider; public InfusionParticle(ClientLevel clientWorld, double x, double y, double z, double velocityX, double velocityY, double velocityZ, float[] palette, SpriteSet spriteProvider) { @@ -30,7 +30,7 @@ public class InfusionParticle extends TextureSheetParticle { public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; } - + @Override public void tick() { this.xo = this.x; @@ -38,8 +38,7 @@ public class InfusionParticle extends TextureSheetParticle { this.zo = this.z; if (this.age++ >= this.lifetime) { this.remove(); - } - else { + } else { this.setSpriteFromAge(spriteProvider); double velocityX = 2.0D * this.xd * this.random.nextDouble(); double velocityY = 3.0D * this.yd * this.random.nextDouble(); @@ -51,11 +50,11 @@ public class InfusionParticle extends TextureSheetParticle { @Environment(EnvType.CLIENT) public static class InfusionFactory implements ParticleProvider { private final SpriteSet spriteProvider; - + public InfusionFactory(SpriteSet spriteProvider) { this.spriteProvider = spriteProvider; } - + public Particle createParticle(InfusionParticleType particleType, ClientLevel clientWorld, double d, double e, double f, double g, double h, double i) { return new InfusionParticle(clientWorld, d, e, f, g, h, i, particleType.getPalette(), this.spriteProvider); } diff --git a/src/main/java/ru/betterend/particle/InfusionParticleType.java b/src/main/java/ru/betterend/particle/InfusionParticleType.java index 6b0d1080..672f3ab9 100644 --- a/src/main/java/ru/betterend/particle/InfusionParticleType.java +++ b/src/main/java/ru/betterend/particle/InfusionParticleType.java @@ -3,6 +3,7 @@ package ru.betterend.particle; import com.mojang.brigadier.StringReader; import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.serialization.Codec; + import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.commands.arguments.item.ItemInput; @@ -16,10 +17,11 @@ 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 -> new InfusionParticleType(EndParticles.INFUSION, itemStack), - infusionParticleType -> infusionParticleType.itemStack); - + public static final Codec CODEC = ItemStack.CODEC.xmap(itemStack -> { + return new InfusionParticleType(EndParticles.INFUSION, itemStack); + }, infusionParticleType -> { + return infusionParticleType.itemStack; + }); public static final ParticleOptions.Deserializer PARAMETERS_FACTORY = new ParticleOptions.Deserializer() { public InfusionParticleType fromCommand(ParticleType particleType, StringReader stringReader) throws CommandSyntaxException { stringReader.expect(' '); @@ -32,20 +34,20 @@ public class InfusionParticleType extends ParticleType imp return new InfusionParticleType(particleType, packetByteBuf.readItem()); } }; - - private final ParticleType type; - private final ItemStack itemStack; - + + private ParticleType type; + private ItemStack itemStack; + public InfusionParticleType(ParticleType particleType, ItemStack stack) { super(true, PARAMETERS_FACTORY); this.type = particleType; this.itemStack = stack; } - + public InfusionParticleType(ItemStack stack) { this(EndParticles.INFUSION, stack); } - + @Environment(EnvType.CLIENT) public float[] getPalette() { int color = ColorUtil.extractColor(itemStack.getItem()); diff --git a/src/main/java/ru/betterend/particle/ParticleBlackSpore.java b/src/main/java/ru/betterend/particle/ParticleBlackSpore.java index 21de4ecc..9278a0c7 100644 --- a/src/main/java/ru/betterend/particle/ParticleBlackSpore.java +++ b/src/main/java/ru/betterend/particle/ParticleBlackSpore.java @@ -20,25 +20,25 @@ public class ParticleBlackSpore extends SimpleAnimatedParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected ParticleBlackSpore(ClientLevel world, double x, double y, double z, double r, double g, double b, SpriteSet sprites) { super(world, x, y, z, sprites, 0); setSprite(sprites.get(random)); - + this.lifetime = MHelper.randRange(30, 60, random); this.quadSize = MHelper.randRange(0.05F, 0.15F, random); this.setColor(1, 1, 1); this.setAlpha(0); - + preVX = random.nextGaussian() * 0.015; preVY = 0; preVZ = random.nextGaussian() * 0.015; - + nextVX = random.nextGaussian() * 0.015; nextVY = random.nextFloat() * 0.02 + 0.01; nextVZ = random.nextGaussian() * 0.015; } - + @Override public void tick() { int ticks = this.age & 15; @@ -51,25 +51,25 @@ public class ParticleBlackSpore extends SimpleAnimatedParticle { nextVZ = random.nextGaussian() * 0.015; } double delta = (double) ticks / 15.0; - + if (this.age <= 15) { this.setAlpha(this.age / 15F); } else if (this.age >= this.lifetime - 15) { this.setAlpha((this.lifetime - this.age) / 15F); } - + if (this.age >= this.lifetime) { this.remove(); } - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/particle/ParticleGeyser.java b/src/main/java/ru/betterend/particle/ParticleGeyser.java index 4fc4476d..4c7cb531 100644 --- a/src/main/java/ru/betterend/particle/ParticleGeyser.java +++ b/src/main/java/ru/betterend/particle/ParticleGeyser.java @@ -17,7 +17,7 @@ public class ParticleGeyser extends TextureSheetParticle { private MutableBlockPos mut = new MutableBlockPos(); private boolean changeDir = false; private boolean check = true; - + protected ParticleGeyser(ClientLevel world, double x, double y, double z, double vx, double vy, double vz, SpriteSet sprites) { super(world, x, y, z, vx, vy, vz); pickSprite(sprites); @@ -27,10 +27,10 @@ public class ParticleGeyser extends TextureSheetParticle { this.zd = vz; this.yo = y - 0.125; } - + @Override public void tick() { - + if (this.yo == this.y || this.age > this.lifetime) { this.remove(); } @@ -38,10 +38,10 @@ public class ParticleGeyser extends TextureSheetParticle { if (this.age >= this.lifetime - 200) { this.setAlpha((this.lifetime - this.age) / 200F); } - + this.quadSize += 0.005F; this.yd = 0.125; - + if (changeDir) { changeDir = false; check = false; @@ -56,7 +56,7 @@ public class ParticleGeyser extends TextureSheetParticle { } super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java b/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java index 2afd97e8..8edea37a 100644 --- a/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java +++ b/src/main/java/ru/betterend/particle/ParticleGlowingSphere.java @@ -20,7 +20,7 @@ public class ParticleGlowingSphere extends SimpleAnimatedParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected ParticleGlowingSphere(ClientLevel world, double x, double y, double z, SpriteSet sprites, double r, double g, double b) { super(world, x, y, z, sprites, 0); setSprite(sprites.get(random)); @@ -28,19 +28,19 @@ public class ParticleGlowingSphere extends SimpleAnimatedParticle { this.quadSize = MHelper.randRange(0.05F, 0.15F, random); this.setFadeColor(15916745); this.setSpriteFromAge(sprites); - + preVX = random.nextGaussian() * 0.02; preVY = random.nextGaussian() * 0.02; preVZ = random.nextGaussian() * 0.02; - + nextVX = random.nextGaussian() * 0.02; nextVY = random.nextGaussian() * 0.02; nextVZ = random.nextGaussian() * 0.02; } - + @Override public void tick() { - ticks++; + ticks ++; if (ticks > 30) { preVX = nextVX; preVY = nextVY; @@ -51,11 +51,11 @@ public class ParticleGlowingSphere extends SimpleAnimatedParticle { ticks = 0; } double delta = (double) ticks / 30.0; - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } diff --git a/src/main/java/ru/betterend/particle/ParticleJungleSpore.java b/src/main/java/ru/betterend/particle/ParticleJungleSpore.java index 309f398d..25e3e916 100644 --- a/src/main/java/ru/betterend/particle/ParticleJungleSpore.java +++ b/src/main/java/ru/betterend/particle/ParticleJungleSpore.java @@ -12,7 +12,7 @@ import ru.bclib.util.MHelper; @Environment(EnvType.CLIENT) public class ParticleJungleSpore extends SimpleAnimatedParticle { - + protected ParticleJungleSpore(ClientLevel world, double x, double y, double z, SpriteSet sprites, double r, double g, double b) { super(world, x, y, z, sprites, 0); setSprite(sprites.get(random)); @@ -22,11 +22,11 @@ public class ParticleJungleSpore extends SimpleAnimatedParticle { this.setSpriteFromAge(sprites); this.setAlpha(0); } - + @Override public void tick() { super.tick(); - + int ticks = this.age % 30; if (ticks == 0) { this.xd = random.nextGaussian() * 0.02; @@ -34,7 +34,7 @@ public class ParticleJungleSpore extends SimpleAnimatedParticle { this.zd = random.nextGaussian() * 0.02; ticks = 0; } - + if (this.age <= 30) { float delta = ticks / 30F; this.setAlpha(delta); @@ -48,7 +48,7 @@ public class ParticleJungleSpore extends SimpleAnimatedParticle { else { this.setAlpha(1); } - + this.yd -= 0.001F; this.xd *= 0.99F; this.zd *= 0.99F; diff --git a/src/main/java/ru/betterend/particle/ParticleSnowflake.java b/src/main/java/ru/betterend/particle/ParticleSnowflake.java index b9724a87..e5f2d921 100644 --- a/src/main/java/ru/betterend/particle/ParticleSnowflake.java +++ b/src/main/java/ru/betterend/particle/ParticleSnowflake.java @@ -21,27 +21,27 @@ public class ParticleSnowflake extends TextureSheetParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected ParticleSnowflake(ClientLevel world, double x, double y, double z, double r, double g, double b, SpriteSet sprites) { super(world, x, y, z, r, g, b); pickSprite(sprites); - + this.lifetime = MHelper.randRange(150, 300, random); this.quadSize = MHelper.randRange(0.05F, 0.2F, random); this.setAlpha(0F); - + preVX = random.nextGaussian() * 0.015; preVY = random.nextGaussian() * 0.015; preVZ = random.nextGaussian() * 0.015; - + nextVX = random.nextGaussian() * 0.015; nextVY = random.nextGaussian() * 0.015; nextVZ = random.nextGaussian() * 0.015; } - + @Override public void tick() { - ticks++; + ticks ++; if (ticks > 200) { preVX = nextVX; preVY = nextVY; @@ -55,25 +55,25 @@ public class ParticleSnowflake extends TextureSheetParticle { ticks = 0; } double delta = (double) ticks / 200.0; - + if (this.age <= 40) { this.setAlpha(this.age / 40F); } else if (this.age >= this.lifetime - 40) { this.setAlpha((this.lifetime - this.age) / 40F); } - + if (this.age >= this.lifetime) { this.remove(); } - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/particle/ParticleSulphur.java b/src/main/java/ru/betterend/particle/ParticleSulphur.java index 2fcf0d47..049dbe97 100644 --- a/src/main/java/ru/betterend/particle/ParticleSulphur.java +++ b/src/main/java/ru/betterend/particle/ParticleSulphur.java @@ -21,28 +21,28 @@ public class ParticleSulphur extends TextureSheetParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected ParticleSulphur(ClientLevel world, double x, double y, double z, double r, double g, double b, SpriteSet sprites) { super(world, x, y, z, r, g, b); pickSprite(sprites); - + this.lifetime = MHelper.randRange(150, 300, random); this.quadSize = MHelper.randRange(0.05F, 0.15F, random); this.setColor(1, 1, 1); this.setAlpha(0); - + preVX = random.nextGaussian() * 0.015; preVY = random.nextGaussian() * 0.015; preVZ = random.nextGaussian() * 0.015; - + nextVX = random.nextGaussian() * 0.015; nextVY = random.nextGaussian() * 0.015; nextVZ = random.nextGaussian() * 0.015; } - + @Override public void tick() { - ticks++; + ticks ++; if (ticks > 200) { preVX = nextVX; preVY = nextVY; @@ -56,25 +56,25 @@ public class ParticleSulphur extends TextureSheetParticle { ticks = 0; } double delta = (double) ticks / 200.0; - + if (this.age <= 40) { this.setAlpha(this.age / 40F); } else if (this.age >= this.lifetime - 40) { this.setAlpha((this.lifetime - this.age) / 40F); } - + if (this.age >= this.lifetime) { this.remove(); } - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java b/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java index 0cd51137..7bcb882d 100644 --- a/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java +++ b/src/main/java/ru/betterend/particle/ParticleTenaneaPetal.java @@ -19,18 +19,18 @@ import ru.betterend.registry.EndBlocks; @Environment(EnvType.CLIENT) public class ParticleTenaneaPetal extends TextureSheetParticle { private static BlockColor provider; - + private double preVX; private double preVY; private double preVZ; private double nextVX; private double nextVY; private double nextVZ; - + protected ParticleTenaneaPetal(ClientLevel world, double x, double y, double z, double r, double g, double b, SpriteSet sprites) { super(world, x, y, z, r, g, b); pickSprite(sprites); - + if (provider == null) { IColorProvider block = (IColorProvider) EndBlocks.TENANEA_FLOWERS; provider = block.getProvider(); @@ -39,15 +39,15 @@ public class ParticleTenaneaPetal extends TextureSheetParticle { this.rCol = ((color >> 16) & 255) / 255F; this.gCol = ((color >> 8) & 255) / 255F; this.bCol = ((color) & 255) / 255F; - + this.lifetime = MHelper.randRange(120, 200, random); this.quadSize = MHelper.randRange(0.05F, 0.15F, random); this.setAlpha(0); - + preVX = 0; preVY = 0; preVZ = 0; - + nextVX = random.nextGaussian() * 0.02; nextVY = -random.nextDouble() * 0.02 - 0.02; nextVZ = random.nextGaussian() * 0.02; @@ -57,7 +57,7 @@ public class ParticleTenaneaPetal extends TextureSheetParticle { public int getLightColor(float tint) { return 15728880; } - + @Override public void tick() { int ticks = this.age & 63; @@ -70,25 +70,25 @@ public class ParticleTenaneaPetal extends TextureSheetParticle { nextVZ = random.nextGaussian() * 0.02; } double delta = (double) ticks / 63.0; - + if (this.age <= 40) { this.setAlpha(this.age / 40F); } else if (this.age >= this.lifetime - 40) { this.setAlpha((this.lifetime - this.age) / 40F); } - + if (this.age >= this.lifetime) { this.remove(); } - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/particle/PaticlePortalSphere.java b/src/main/java/ru/betterend/particle/PaticlePortalSphere.java index 65fc17af..1d0afdd7 100644 --- a/src/main/java/ru/betterend/particle/PaticlePortalSphere.java +++ b/src/main/java/ru/betterend/particle/PaticlePortalSphere.java @@ -19,7 +19,7 @@ public class PaticlePortalSphere extends SimpleAnimatedParticle { private double nextVX; private double nextVY; private double nextVZ; - + public PaticlePortalSphere(ClientLevel world, double x, double y, double z, SpriteSet spriteProvider) { super(world, x, y, z, spriteProvider, 0); setSprite(spriteProvider.get(random)); @@ -28,16 +28,16 @@ public class PaticlePortalSphere extends SimpleAnimatedParticle { this.setColor(0xFEBBD5); this.setFadeColor(0xBBFEE4); this.setSpriteFromAge(spriteProvider); - + preVX = random.nextGaussian() * 0.02; preVY = random.nextGaussian() * 0.02; preVZ = random.nextGaussian() * 0.02; - + nextVX = random.nextGaussian() * 0.02; nextVY = random.nextGaussian() * 0.02; nextVZ = random.nextGaussian() * 0.02; } - + @Override public void tick() { ticks++; @@ -51,11 +51,11 @@ public class PaticlePortalSphere extends SimpleAnimatedParticle { ticks = 0; } double delta = (double) ticks / 30.0; - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } diff --git a/src/main/java/ru/betterend/particle/SmaragdantParticle.java b/src/main/java/ru/betterend/particle/SmaragdantParticle.java index d58d88cb..38a3ad71 100644 --- a/src/main/java/ru/betterend/particle/SmaragdantParticle.java +++ b/src/main/java/ru/betterend/particle/SmaragdantParticle.java @@ -20,25 +20,25 @@ public class SmaragdantParticle extends SimpleAnimatedParticle { private double nextVX; private double nextVY; private double nextVZ; - + protected SmaragdantParticle(ClientLevel world, double x, double y, double z, double r, double g, double b, SpriteSet sprites) { super(world, x, y, z, sprites, 0); setSprite(sprites.get(random)); - + this.lifetime = MHelper.randRange(60, 120, random); this.quadSize = MHelper.randRange(0.05F, 0.15F, random); this.setColor(1, 1, 1); this.setAlpha(0); - + preVX = random.nextGaussian() * 0.01; preVY = random.nextGaussian() * 0.01; preVZ = random.nextGaussian() * 0.01; - + nextVX = random.nextGaussian() * 0.01; nextVY = random.nextGaussian() * 0.01; nextVZ = random.nextGaussian() * 0.01; } - + @Override public void tick() { int ticks = this.age & 31; @@ -51,25 +51,25 @@ public class SmaragdantParticle extends SimpleAnimatedParticle { nextVZ = random.nextGaussian() * 0.015; } double delta = (double) ticks / 31.0; - + if (this.age <= 31) { this.setAlpha(this.age / 31F); } else if (this.age >= this.lifetime - 31) { this.setAlpha((this.lifetime - this.age) / 31F); } - + if (this.age >= this.lifetime) { this.remove(); } - + this.xd = Mth.lerp(delta, preVX, nextVX); this.yd = Mth.lerp(delta, preVY, nextVY); this.zd = Mth.lerp(delta, preVZ, nextVZ); - + super.tick(); } - + @Override public ParticleRenderType getRenderType() { return ParticleRenderType.PARTICLE_SHEET_TRANSLUCENT; diff --git a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java index b4f5aefe..9d6dfc88 100644 --- a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java +++ b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java @@ -5,48 +5,42 @@ import net.minecraft.world.level.block.Blocks; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import ru.betterend.registry.EndTags; public class AlloyingRecipes { public static void register() { AlloyingRecipe.Builder.create("additional_iron") - .setInput(EndTags.ALLOYING_IRON, EndTags.ALLOYING_IRON) - .setOutput(Items.IRON_INGOT, 3) - .setExpiriense(2.1F) - .build(); + .setInput(Blocks.IRON_ORE, Blocks.IRON_ORE) + .setOutput(Items.IRON_INGOT, 3) + .setExpiriense(2.1F) + .build(); AlloyingRecipe.Builder.create("additional_gold") - .setInput(EndTags.ALLOYING_GOLD, EndTags.ALLOYING_GOLD) - .setOutput(Items.GOLD_INGOT, 3) - .setExpiriense(3F) - .build(); - AlloyingRecipe.Builder.create("additional_copper") - .setInput(EndTags.ALLOYING_COPPER, EndTags.ALLOYING_COPPER) - .setOutput(Items.COPPER_INGOT, 3) - .setExpiriense(3F) - .build(); + .setInput(Blocks.GOLD_ORE, Blocks.GOLD_ORE) + .setOutput(Items.GOLD_INGOT, 3) + .setExpiriense(3F) + .build(); AlloyingRecipe.Builder.create("additional_netherite") - .setInput(Blocks.ANCIENT_DEBRIS, Blocks.ANCIENT_DEBRIS) - .setOutput(Items.NETHERITE_SCRAP, 3) - .setExpiriense(6F) - .setSmeltTime(1000) - .build(); + .setInput(Blocks.ANCIENT_DEBRIS, Blocks.ANCIENT_DEBRIS) + .setOutput(Items.NETHERITE_SCRAP, 3) + .setExpiriense(6F) + .setSmeltTime(1000) + .build(); AlloyingRecipe.Builder.create("terminite_ingot") - .setInput(Items.IRON_INGOT, EndItems.ENDER_DUST) - .setOutput(EndBlocks.TERMINITE.ingot, 1) - .setExpiriense(2.5F) - .setSmeltTime(450) - .build(); + .setInput(Items.IRON_INGOT, EndItems.ENDER_DUST) + .setOutput(EndBlocks.TERMINITE.ingot, 1) + .setExpiriense(2.5F) + .setSmeltTime(450) + .build(); AlloyingRecipe.Builder.create("aeternium_ingot") - .setInput(EndBlocks.TERMINITE.ingot, Items.NETHERITE_INGOT) - .setOutput(EndItems.AETERNIUM_INGOT, 1) - .setExpiriense(4.5F) - .setSmeltTime(850) - .build(); + .setInput(EndBlocks.TERMINITE.ingot, Items.NETHERITE_INGOT) + .setOutput(EndItems.AETERNIUM_INGOT, 1) + .setExpiriense(4.5F) + .setSmeltTime(850) + .build(); AlloyingRecipe.Builder.create("terminite_ingot_thallasium") - .setInput(EndBlocks.THALLASIUM.ingot, EndItems.ENDER_DUST) - .setOutput(EndBlocks.TERMINITE.ingot, 1) - .setExpiriense(2.5F) - .setSmeltTime(450) - .build(); + .setInput(EndBlocks.THALLASIUM.ingot, EndItems.ENDER_DUST) + .setOutput(EndBlocks.TERMINITE.ingot, 1) + .setExpiriense(2.5F) + .setSmeltTime(450) + .build(); } } diff --git a/src/main/java/ru/betterend/recipe/AnvilRecipes.java b/src/main/java/ru/betterend/recipe/AnvilRecipes.java index 197eac88..c6c09ead 100644 --- a/src/main/java/ru/betterend/recipe/AnvilRecipes.java +++ b/src/main/java/ru/betterend/recipe/AnvilRecipes.java @@ -8,67 +8,67 @@ import ru.betterend.registry.EndItems; public class AnvilRecipes { public static void register() { AnvilRecipe.Builder.create("ender_pearl_to_dust") - .setInput(Items.ENDER_PEARL) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(4) - .setDamage(5) - .build(); + .setInput(Items.ENDER_PEARL) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(4) + .setDamage(5) + .build(); AnvilRecipe.Builder.create("ender_shard_to_dust") - .setInput(EndItems.ENDER_SHARD) - .setOutput(EndItems.ENDER_DUST) - .setToolLevel(0) - .setDamage(3) - .build(); - + .setInput(EndItems.ENDER_SHARD) + .setOutput(EndItems.ENDER_DUST) + .setToolLevel(0) + .setDamage(3) + .build(); + int anvilLevel = EndToolMaterial.AETERNIUM.getLevel(); AnvilRecipe.Builder.create("aeternium_axe_head") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_AXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_AXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_pickaxe_head") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_PICKAXE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_shovel_head") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SHOVEL_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_hoe_head") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HOE_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HOE_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_hammer_head") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_HAMMER_HEAD) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_sword_blade") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_SWORD_BLADE) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_SWORD_BLADE) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); AnvilRecipe.Builder.create("aeternium_forged_plate") - .setInput(EndItems.AETERNIUM_INGOT) - .setOutput(EndItems.AETERNIUM_FORGED_PLATE) - .setAnvilLevel(anvilLevel) - .setToolLevel(4) - .setDamage(6) - .build(); + .setInput(EndItems.AETERNIUM_INGOT) + .setOutput(EndItems.AETERNIUM_FORGED_PLATE) + .setAnvilLevel(anvilLevel) + .setToolLevel(4) + .setDamage(6) + .build(); } } diff --git a/src/main/java/ru/betterend/recipe/CraftingRecipes.java b/src/main/java/ru/betterend/recipe/CraftingRecipes.java index 1e619222..121b2aeb 100644 --- a/src/main/java/ru/betterend/recipe/CraftingRecipes.java +++ b/src/main/java/ru/betterend/recipe/CraftingRecipes.java @@ -198,24 +198,24 @@ public class CraftingRecipes { GridRecipe.make(BetterEnd.MOD_ID, "filalux_lantern", EndBlocks.FILALUX_LANTERN).checkConfig(Configs.RECIPE_CONFIG).setShape("###", "###", "###").addMaterial('#', EndBlocks.FILALUX).build(); GridRecipe.make(BetterEnd.MOD_ID, "silk_moth_hive", EndBlocks.SILK_MOTH_HIVE) - .checkConfig(Configs.RECIPE_CONFIG).setShape("#L#", "LML", "#L#") - .addMaterial('#', EndBlocks.TENANEA.planks) - .addMaterial('L', EndBlocks.TENANEA_LEAVES) - .addMaterial('M', EndItems.SILK_MOTH_MATRIX) - .build(); - + .checkConfig(Configs.RECIPE_CONFIG).setShape("#L#", "LML", "#L#") + .addMaterial('#', EndBlocks.TENANEA.planks) + .addMaterial('L', EndBlocks.TENANEA_LEAVES) + .addMaterial('M', EndItems.SILK_MOTH_MATRIX) + .build(); + GridRecipe.make(BetterEnd.MOD_ID, "cave_pumpkin_pie", EndItems.CAVE_PUMPKIN_PIE) - .checkConfig(Configs.RECIPE_CONFIG) - .setShape("SBS", "BPB", "SBS") - .addMaterial('P', EndBlocks.CAVE_PUMPKIN) - .addMaterial('B', EndItems.BLOSSOM_BERRY, EndItems.SHADOW_BERRY_RAW).addMaterial('S', Items.SUGAR).build(); - + .checkConfig(Configs.RECIPE_CONFIG) + .setShape("SBS", "BPB", "SBS") + .addMaterial('P', EndBlocks.CAVE_PUMPKIN) + .addMaterial('B', EndItems.BLOSSOM_BERRY, EndItems.SHADOW_BERRY_RAW).addMaterial('S', Items.SUGAR).build(); + GridRecipe.make(BetterEnd.MOD_ID, "cave_pumpkin_seeds", EndBlocks.CAVE_PUMPKIN_SEED) - .checkConfig(Configs.RECIPE_CONFIG) - .setOutputCount(4) - .setList("#") - .addMaterial('#', EndBlocks.CAVE_PUMPKIN) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setOutputCount(4) + .setList("#") + .addMaterial('#', EndBlocks.CAVE_PUMPKIN) + .build(); GridRecipe.make(BetterEnd.MOD_ID, "neon_cactus_block", EndBlocks.NEON_CACTUS_BLOCK).checkConfig(Configs.RECIPE_CONFIG).setShape("##", "##").addMaterial('#', EndBlocks.NEON_CACTUS).build(); GridRecipe.make(BetterEnd.MOD_ID, "neon_cactus_block_slab", EndBlocks.NEON_CACTUS_BLOCK_SLAB).checkConfig(Configs.RECIPE_CONFIG).setShape("###").setOutputCount(6).addMaterial('#', EndBlocks.NEON_CACTUS_BLOCK).build(); diff --git a/src/main/java/ru/betterend/recipe/InfusionRecipes.java b/src/main/java/ru/betterend/recipe/InfusionRecipes.java index 7b3463d6..b4de0b54 100644 --- a/src/main/java/ru/betterend/recipe/InfusionRecipes.java +++ b/src/main/java/ru/betterend/recipe/InfusionRecipes.java @@ -14,598 +14,598 @@ import ru.betterend.registry.EndItems; public class InfusionRecipes { public static void register() { InfusionRecipe.Builder.create("runed_flavolite") - .setInput(EndBlocks.FLAVOLITE.polished) - .setOutput(EndBlocks.FLAVOLITE_RUNED) - .addCatalyst(0, EndItems.CRYSTAL_SHARDS) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(100) - .build(); - + .setInput(EndBlocks.FLAVOLITE.polished) + .setOutput(EndBlocks.FLAVOLITE_RUNED) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(100) + .build(); + InfusionRecipe.Builder.create("eternal_crystal") - .setInput(Items.END_CRYSTAL) - .setOutput(EndItems.ETERNAL_CRYSTAL) - .addCatalyst(0, EndItems.CRYSTAL_SHARDS) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .addCatalyst(1, EndItems.ENDER_SHARD) - .addCatalyst(3, EndItems.ENDER_SHARD) - .addCatalyst(5, EndItems.ENDER_SHARD) - .addCatalyst(7, EndItems.ENDER_SHARD) - .setTime(250) - .build(); - + .setInput(Items.END_CRYSTAL) + .setOutput(EndItems.ETERNAL_CRYSTAL) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .addCatalyst(1, EndItems.ENDER_SHARD) + .addCatalyst(3, EndItems.ENDER_SHARD) + .addCatalyst(5, EndItems.ENDER_SHARD) + .addCatalyst(7, EndItems.ENDER_SHARD) + .setTime(250) + .build(); + InfusionRecipe.Builder.create("crystalite_helmet") - .setInput(EndBlocks.TERMINITE.helmet) - .setOutput(EndItems.CRYSTALITE_HELMET) - .addCatalyst(0, EndItems.AMBER_GEM) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(150) - .build(); + .setInput(EndBlocks.TERMINITE.helmet) + .setOutput(EndItems.CRYSTALITE_HELMET) + .addCatalyst(0, EndItems.AMBER_GEM) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(150) + .build(); InfusionRecipe.Builder.create("crystalite_chestplate") - .setInput(EndBlocks.TERMINITE.chestplate) - .setOutput(EndItems.CRYSTALITE_CHESTPLATE) - .addCatalyst(0, EndItems.AMBER_GEM) - .addCatalyst(1, EndItems.CRYSTAL_SHARDS) - .addCatalyst(3, EndItems.CRYSTAL_SHARDS) - .addCatalyst(5, EndItems.CRYSTAL_SHARDS) - .addCatalyst(7, EndItems.CRYSTAL_SHARDS) - .setTime(300) - .build(); + .setInput(EndBlocks.TERMINITE.chestplate) + .setOutput(EndItems.CRYSTALITE_CHESTPLATE) + .addCatalyst(0, EndItems.AMBER_GEM) + .addCatalyst(1, EndItems.CRYSTAL_SHARDS) + .addCatalyst(3, EndItems.CRYSTAL_SHARDS) + .addCatalyst(5, EndItems.CRYSTAL_SHARDS) + .addCatalyst(7, EndItems.CRYSTAL_SHARDS) + .setTime(300) + .build(); InfusionRecipe.Builder.create("crystalite_leggings") - .setInput(EndBlocks.TERMINITE.leggings) - .setOutput(EndItems.CRYSTALITE_LEGGINGS) - .addCatalyst(0, EndItems.AMBER_GEM) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(225) - .build(); + .setInput(EndBlocks.TERMINITE.leggings) + .setOutput(EndItems.CRYSTALITE_LEGGINGS) + .addCatalyst(0, EndItems.AMBER_GEM) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(225) + .build(); InfusionRecipe.Builder.create("crystalite_boots") - .setInput(EndBlocks.TERMINITE.boots) - .setOutput(EndItems.CRYSTALITE_BOOTS) - .addCatalyst(0, EndItems.AMBER_GEM) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(150) - .build(); + .setInput(EndBlocks.TERMINITE.boots) + .setOutput(EndItems.CRYSTALITE_BOOTS) + .addCatalyst(0, EndItems.AMBER_GEM) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(150) + .build(); InfusionRecipe.Builder.create("crystalite_elytra") - .setInput(Items.ELYTRA) - .setOutput(EndItems.CRYSTALITE_ELYTRA) - .addCatalyst(0, EndItems.AMBER_GEM) - .addCatalyst(1, EndItems.CRYSTAL_SHARDS) - .addCatalyst(2, EndItems.ENCHANTED_MEMBRANE) - .addCatalyst(3, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.ENCHANTED_MEMBRANE) - .addCatalyst(5, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.ENCHANTED_MEMBRANE) - .addCatalyst(7, EndItems.CRYSTAL_SHARDS) - .setTime(500) - .build(); - + .setInput(Items.ELYTRA) + .setOutput(EndItems.CRYSTALITE_ELYTRA) + .addCatalyst(0, EndItems.AMBER_GEM) + .addCatalyst(1, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.ENCHANTED_MEMBRANE) + .addCatalyst(3, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.ENCHANTED_MEMBRANE) + .addCatalyst(5, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.ENCHANTED_MEMBRANE) + .addCatalyst(7, EndItems.CRYSTAL_SHARDS) + .setTime(500) + .build(); + InfusionRecipe.Builder.create("enchanted_petal") - .setInput(EndItems.HYDRALUX_PETAL) - .setOutput(EndItems.ENCHANTED_PETAL) - .addCatalyst(0, EndItems.CRYSTAL_SHARDS) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(75) - .build(); + .setInput(EndItems.HYDRALUX_PETAL) + .setOutput(EndItems.ENCHANTED_PETAL) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(75) + .build(); InfusionRecipe.Builder.create("enchanted_membrane") - .setInput(Items.PHANTOM_MEMBRANE) - .setOutput(EndItems.ENCHANTED_MEMBRANE) - .addCatalyst(0, EndItems.CRYSTAL_SHARDS) - .addCatalyst(2, EndItems.CRYSTAL_SHARDS) - .addCatalyst(4, EndItems.CRYSTAL_SHARDS) - .addCatalyst(6, EndItems.CRYSTAL_SHARDS) - .setTime(75) - .build(); + .setInput(Items.PHANTOM_MEMBRANE) + .setOutput(EndItems.ENCHANTED_MEMBRANE) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) + .setTime(75) + .build(); InfusionRecipe.Builder.create("protection_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.ALL_DAMAGE_PROTECTION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(4, Items.TURTLE_HELMET) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.ALL_DAMAGE_PROTECTION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(4, Items.TURTLE_HELMET) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("fire_protection_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FIRE_PROTECTION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.BLAZE_ROD) - .addCatalyst(4, Items.BLAZE_ROD) - .addCatalyst(6, Items.BLAZE_ROD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FIRE_PROTECTION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.BLAZE_ROD) + .addCatalyst(4, Items.BLAZE_ROD) + .addCatalyst(6, Items.BLAZE_ROD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("feather_falling_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FALL_PROTECTION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.FEATHER) - .addCatalyst(4, Items.FEATHER) - .addCatalyst(6, Items.FEATHER) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FALL_PROTECTION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.FEATHER) + .addCatalyst(4, Items.FEATHER) + .addCatalyst(6, Items.FEATHER) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("blast_protection_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.BLAST_PROTECTION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.OBSIDIAN) - .addCatalyst(4, Blocks.OBSIDIAN) - .addCatalyst(6, Blocks.OBSIDIAN) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.BLAST_PROTECTION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.OBSIDIAN) + .addCatalyst(4, Blocks.OBSIDIAN) + .addCatalyst(6, Blocks.OBSIDIAN) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("projectile_protection_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.PROJECTILE_PROTECTION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.SCUTE) - .addCatalyst(4, Items.SHIELD) - .addCatalyst(6, Items.SCUTE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.PROJECTILE_PROTECTION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.SCUTE) + .addCatalyst(4, Items.SHIELD) + .addCatalyst(6, Items.SCUTE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("respiration_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.RESPIRATION, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.NAUTILUS_SHELL) - .addCatalyst(4, Items.NAUTILUS_SHELL) - .addCatalyst(6, Items.NAUTILUS_SHELL) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.RESPIRATION, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.NAUTILUS_SHELL) + .addCatalyst(4, Items.NAUTILUS_SHELL) + .addCatalyst(6, Items.NAUTILUS_SHELL) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("aqua_affinity_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.AQUA_AFFINITY, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.PRISMARINE_CRYSTALS) - .addCatalyst(4, Items.PRISMARINE_CRYSTALS) - .addCatalyst(6, Items.PRISMARINE_CRYSTALS) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.AQUA_AFFINITY, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.PRISMARINE_CRYSTALS) + .addCatalyst(4, Items.PRISMARINE_CRYSTALS) + .addCatalyst(6, Items.PRISMARINE_CRYSTALS) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("thorns_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.THORNS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.CACTUS) - .addCatalyst(4, Blocks.CACTUS) - .addCatalyst(6, Blocks.CACTUS) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.THORNS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.CACTUS) + .addCatalyst(4, Blocks.CACTUS) + .addCatalyst(6, Blocks.CACTUS) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("depth_strider_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.DEPTH_STRIDER, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.LILY_PAD) - .addCatalyst(4, EndBlocks.END_LILY_SEED) - .addCatalyst(6, Blocks.LILY_PAD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.DEPTH_STRIDER, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.LILY_PAD) + .addCatalyst(4, EndBlocks.END_LILY_SEED) + .addCatalyst(6, Blocks.LILY_PAD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("frost_walker_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FROST_WALKER, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(4, EndBlocks.ANCIENT_EMERALD_ICE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FROST_WALKER, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(4, EndBlocks.ANCIENT_EMERALD_ICE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("soul_speed_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.SOUL_SPEED, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) - .addCatalyst(4, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) - .addCatalyst(6, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.SOUL_SPEED, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) + .addCatalyst(4, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) + .addCatalyst(6, Blocks.SOUL_SAND, Blocks.SOUL_SOIL) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("sharpness_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.SHARPNESS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(4, Items.NETHERITE_SCRAP) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.SHARPNESS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(4, Items.NETHERITE_SCRAP) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("smite_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.SMITE, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.SUNFLOWER) - .addCatalyst(4, Items.GOLD_INGOT) - .addCatalyst(6, Blocks.SUNFLOWER) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.SMITE, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.SUNFLOWER) + .addCatalyst(4, Items.GOLD_INGOT) + .addCatalyst(6, Blocks.SUNFLOWER) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("bane_of_arthropods_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.BANE_OF_ARTHROPODS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.FERMENTED_SPIDER_EYE) - .addCatalyst(4, Items.IRON_INGOT) - .addCatalyst(6, Items.FERMENTED_SPIDER_EYE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.BANE_OF_ARTHROPODS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.FERMENTED_SPIDER_EYE) + .addCatalyst(4, Items.IRON_INGOT) + .addCatalyst(6, Items.FERMENTED_SPIDER_EYE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("knockback_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.KNOCKBACK, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.REDSTONE) - .addCatalyst(4, Blocks.PISTON) - .addCatalyst(6, Items.REDSTONE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.KNOCKBACK, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.REDSTONE) + .addCatalyst(4, Blocks.PISTON) + .addCatalyst(6, Items.REDSTONE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("fire_aspect_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FIRE_ASPECT, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.BLAZE_POWDER) - .addCatalyst(4, Items.MAGMA_CREAM) - .addCatalyst(6, Items.BLAZE_POWDER) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FIRE_ASPECT, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.BLAZE_POWDER) + .addCatalyst(4, Items.MAGMA_CREAM) + .addCatalyst(6, Items.BLAZE_POWDER) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("looting_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.MOB_LOOTING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.EMERALD) - .addCatalyst(4, Items.GOLD_INGOT) - .addCatalyst(6, Items.EMERALD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.MOB_LOOTING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.EMERALD) + .addCatalyst(4, Items.GOLD_INGOT) + .addCatalyst(6, Items.EMERALD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("sweeping_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.SWEEPING_EDGE, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.GOLDEN_SWORD) - .addCatalyst(4, Items.IRON_SWORD) - .addCatalyst(6, Items.GOLDEN_SWORD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.SWEEPING_EDGE, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.GOLDEN_SWORD) + .addCatalyst(4, Items.IRON_SWORD) + .addCatalyst(6, Items.GOLDEN_SWORD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("efficiency_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.BLOCK_EFFICIENCY, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, EndItems.AMBER_GEM) - .addCatalyst(4, EndItems.AMBER_GEM) - .addCatalyst(6, EndItems.AMBER_GEM) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.BLOCK_EFFICIENCY, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, EndItems.AMBER_GEM) + .addCatalyst(4, EndItems.AMBER_GEM) + .addCatalyst(6, EndItems.AMBER_GEM) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("silk_touch_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.SILK_TOUCH, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Blocks.COBWEB) - .addCatalyst(4, EndItems.ETERNAL_CRYSTAL) - .addCatalyst(6, Blocks.COBWEB) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.SILK_TOUCH, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Blocks.COBWEB) + .addCatalyst(4, EndItems.ETERNAL_CRYSTAL) + .addCatalyst(6, Blocks.COBWEB) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); InfusionRecipe.Builder.create("unbreaking_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.UNBREAKING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.DIAMOND) - .addCatalyst(4, Items.DIAMOND) - .addCatalyst(6, Items.DIAMOND) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.UNBREAKING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.DIAMOND) + .addCatalyst(4, Items.DIAMOND) + .addCatalyst(6, Items.DIAMOND) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("fortune_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.BLOCK_FORTUNE, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.EMERALD) - .addCatalyst(4, Items.RABBIT_FOOT) - .addCatalyst(6, Items.EMERALD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.BLOCK_FORTUNE, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.EMERALD) + .addCatalyst(4, Items.RABBIT_FOOT) + .addCatalyst(6, Items.EMERALD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("power_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.POWER_ARROWS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, EndItems.AMBER_GEM) - .addCatalyst(4, Items.DIAMOND_SWORD) - .addCatalyst(6, EndItems.AMBER_GEM) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.POWER_ARROWS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, EndItems.AMBER_GEM) + .addCatalyst(4, Items.DIAMOND_SWORD) + .addCatalyst(6, EndItems.AMBER_GEM) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("punch_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.PUNCH_ARROWS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.POPPED_CHORUS_FRUIT) - .addCatalyst(4, Items.SPECTRAL_ARROW) - .addCatalyst(6, Items.POPPED_CHORUS_FRUIT) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.PUNCH_ARROWS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.POPPED_CHORUS_FRUIT) + .addCatalyst(4, Items.SPECTRAL_ARROW) + .addCatalyst(6, Items.POPPED_CHORUS_FRUIT) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("flame_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FLAMING_ARROWS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.BLAZE_POWDER) - .addCatalyst(4, Items.SPECTRAL_ARROW) - .addCatalyst(6, Items.BLAZE_POWDER) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FLAMING_ARROWS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.BLAZE_POWDER) + .addCatalyst(4, Items.SPECTRAL_ARROW) + .addCatalyst(6, Items.BLAZE_POWDER) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("infinity_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.INFINITY_ARROWS, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.SPECTRAL_ARROW) - .addCatalyst(4, EndItems.ETERNAL_CRYSTAL) - .addCatalyst(6, Items.SPECTRAL_ARROW) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.INFINITY_ARROWS, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.SPECTRAL_ARROW) + .addCatalyst(4, EndItems.ETERNAL_CRYSTAL) + .addCatalyst(6, Items.SPECTRAL_ARROW) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); InfusionRecipe.Builder.create("luck_of_sea_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FISHING_LUCK, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.EMERALD) - .addCatalyst(4, Items.FISHING_ROD) - .addCatalyst(6, Items.EMERALD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FISHING_LUCK, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.EMERALD) + .addCatalyst(4, Items.FISHING_ROD) + .addCatalyst(6, Items.EMERALD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("lure_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.FISHING_SPEED, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.GOLD_NUGGET) - .addCatalyst(4, Items.FISHING_ROD) - .addCatalyst(6, Items.GOLD_NUGGET) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.FISHING_SPEED, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.GOLD_NUGGET) + .addCatalyst(4, Items.FISHING_ROD) + .addCatalyst(6, Items.GOLD_NUGGET) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("loyalty_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.LOYALTY, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.ENDER_EYE) - .addCatalyst(4, Items.HEART_OF_THE_SEA) - .addCatalyst(6, Items.ENDER_EYE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.LOYALTY, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.ENDER_EYE) + .addCatalyst(4, Items.HEART_OF_THE_SEA) + .addCatalyst(6, Items.ENDER_EYE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); InfusionRecipe.Builder.create("impaling_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.IMPALING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.PRISMARINE_SHARD) - .addCatalyst(4, Items.IRON_SWORD) - .addCatalyst(6, Items.PRISMARINE_SHARD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.IMPALING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.PRISMARINE_SHARD) + .addCatalyst(4, Items.IRON_SWORD) + .addCatalyst(6, Items.PRISMARINE_SHARD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("riptide_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.RIPTIDE, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.LEAD) - .addCatalyst(4, Items.HEART_OF_THE_SEA) - .addCatalyst(6, Items.LEAD) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.RIPTIDE, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.LEAD) + .addCatalyst(4, Items.HEART_OF_THE_SEA) + .addCatalyst(6, Items.LEAD) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); InfusionRecipe.Builder.create("channeling_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.CHANNELING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.CHAIN) - .addCatalyst(4, Items.HEART_OF_THE_SEA) - .addCatalyst(6, Items.CHAIN) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.CHANNELING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.CHAIN) + .addCatalyst(4, Items.HEART_OF_THE_SEA) + .addCatalyst(6, Items.CHAIN) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); InfusionRecipe.Builder.create("multishot_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.MULTISHOT, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.ARROW) - .addCatalyst(4, Items.SPECTRAL_ARROW) - .addCatalyst(6, Items.ARROW) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.MULTISHOT, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.ARROW) + .addCatalyst(4, Items.SPECTRAL_ARROW) + .addCatalyst(6, Items.ARROW) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("quick_charge_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.QUICK_CHARGE, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.QUARTZ) - .addCatalyst(4, Items.GLOWSTONE_DUST) - .addCatalyst(6, Items.QUARTZ) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.QUICK_CHARGE, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.QUARTZ) + .addCatalyst(4, Items.GLOWSTONE_DUST) + .addCatalyst(6, Items.QUARTZ) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("piercing_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.PIERCING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.GLOWSTONE_DUST) - .addCatalyst(4, Items.SPECTRAL_ARROW) - .addCatalyst(6, Items.GLOWSTONE_DUST) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(300) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.PIERCING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.GLOWSTONE_DUST) + .addCatalyst(4, Items.SPECTRAL_ARROW) + .addCatalyst(6, Items.GLOWSTONE_DUST) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(300) + .build(); InfusionRecipe.Builder.create("mending_book") - .setInput(Items.BOOK) - .setOutput(createEnchantedBook(Enchantments.MENDING, 1)) - .addCatalyst(0, EndItems.ENCHANTED_PETAL) - .addCatalyst(2, Items.EXPERIENCE_BOTTLE) - .addCatalyst(4, Blocks.ANVIL) - .addCatalyst(6, Items.EXPERIENCE_BOTTLE) - .addCatalyst(1, Items.LAPIS_LAZULI) - .addCatalyst(3, Items.LAPIS_LAZULI) - .addCatalyst(5, Items.LAPIS_LAZULI) - .addCatalyst(7, Items.LAPIS_LAZULI) - .setGroup("enchantment") - .setTime(375) - .build(); + .setInput(Items.BOOK) + .setOutput(createEnchantedBook(Enchantments.MENDING, 1)) + .addCatalyst(0, EndItems.ENCHANTED_PETAL) + .addCatalyst(2, Items.EXPERIENCE_BOTTLE) + .addCatalyst(4, Blocks.ANVIL) + .addCatalyst(6, Items.EXPERIENCE_BOTTLE) + .addCatalyst(1, Items.LAPIS_LAZULI) + .addCatalyst(3, Items.LAPIS_LAZULI) + .addCatalyst(5, Items.LAPIS_LAZULI) + .addCatalyst(7, Items.LAPIS_LAZULI) + .setGroup("enchantment") + .setTime(375) + .build(); } - + private static ItemStack createEnchantedBook(Enchantment enchantment, int level) { ItemStack book = new ItemStack(Items.ENCHANTED_BOOK); EnchantedBookItem.addEnchantment(book, new EnchantmentInstance(enchantment, level)); diff --git a/src/main/java/ru/betterend/recipe/SmithingRecipes.java b/src/main/java/ru/betterend/recipe/SmithingRecipes.java index 4a4cc075..5c8e82b6 100644 --- a/src/main/java/ru/betterend/recipe/SmithingRecipes.java +++ b/src/main/java/ru/betterend/recipe/SmithingRecipes.java @@ -8,102 +8,102 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; public class SmithingRecipes { - + public static void register() { SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_sword_handle") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_SWORD_HANDLE) - .setBase(EndBlocks.TERMINITE.ingot) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); - + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_SWORD_HANDLE) + .setBase(EndBlocks.TERMINITE.ingot) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_sword") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_SWORD) - .setBase(EndItems.AETERNIUM_SWORD_BLADE) - .setAddition(EndItems.AETERNIUM_SWORD_HANDLE) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_SWORD) + .setBase(EndItems.AETERNIUM_SWORD_BLADE) + .setAddition(EndItems.AETERNIUM_SWORD_HANDLE) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_pickaxe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_PICKAXE) - .setBase(EndItems.AETERNIUM_PICKAXE_HEAD) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_PICKAXE) + .setBase(EndItems.AETERNIUM_PICKAXE_HEAD) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_axe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_AXE) - .setBase(EndItems.AETERNIUM_AXE_HEAD) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_AXE) + .setBase(EndItems.AETERNIUM_AXE_HEAD) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_shovel") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_SHOVEL) - .setBase(EndItems.AETERNIUM_SHOVEL_HEAD) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_SHOVEL) + .setBase(EndItems.AETERNIUM_SHOVEL_HEAD) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_hoe") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_HOE) - .setBase(EndItems.AETERNIUM_HOE_HEAD) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_HOE) + .setBase(EndItems.AETERNIUM_HOE_HEAD) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_hammer") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_HAMMER) - .setBase(EndItems.AETERNIUM_HAMMER_HEAD) - .setAddition(EndItems.LEATHER_WRAPPED_STICK) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_HAMMER) + .setBase(EndItems.AETERNIUM_HAMMER_HEAD) + .setAddition(EndItems.LEATHER_WRAPPED_STICK) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "netherite_hammer") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.NETHERITE_HAMMER) - .setBase(EndItems.DIAMOND_HAMMER) - .setAddition(Items.NETHERITE_INGOT) - .build(); - + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.NETHERITE_HAMMER) + .setBase(EndItems.DIAMOND_HAMMER) + .setAddition(Items.NETHERITE_INGOT) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_helmet") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_HELMET) - .setBase(EndBlocks.TERMINITE.helmet) - .setAddition(EndItems.AETERNIUM_FORGED_PLATE) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_HELMET) + .setBase(EndBlocks.TERMINITE.helmet) + .setAddition(EndItems.AETERNIUM_FORGED_PLATE) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_chestplate") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_CHESTPLATE) - .setBase(EndBlocks.TERMINITE.chestplate) - .setAddition(EndItems.AETERNIUM_FORGED_PLATE) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_CHESTPLATE) + .setBase(EndBlocks.TERMINITE.chestplate) + .setAddition(EndItems.AETERNIUM_FORGED_PLATE) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_leggings") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_LEGGINGS) - .setBase(EndBlocks.TERMINITE.leggings) - .setAddition(EndItems.AETERNIUM_FORGED_PLATE) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_LEGGINGS) + .setBase(EndBlocks.TERMINITE.leggings) + .setAddition(EndItems.AETERNIUM_FORGED_PLATE) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "aeternium_boots") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.AETERNIUM_BOOTS) - .setBase(EndBlocks.TERMINITE.boots) - .setAddition(EndItems.AETERNIUM_FORGED_PLATE) - .build(); - + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.AETERNIUM_BOOTS) + .setBase(EndBlocks.TERMINITE.boots) + .setAddition(EndItems.AETERNIUM_FORGED_PLATE) + .build(); + SmithingTableRecipe.create(BetterEnd.MOD_ID, "thallasium_anvil_updrade") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndBlocks.TERMINITE.anvilBlock) - .setBase(EndBlocks.THALLASIUM.anvilBlock) - .setAddition(EndBlocks.TERMINITE.block) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndBlocks.TERMINITE.anvilBlock) + .setBase(EndBlocks.THALLASIUM.anvilBlock) + .setAddition(EndBlocks.TERMINITE.block) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "terminite_anvil_updrade") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndBlocks.AETERNIUM_ANVIL) - .setBase(EndBlocks.TERMINITE.anvilBlock) - .setAddition(EndItems.AETERNIUM_INGOT) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndBlocks.AETERNIUM_ANVIL) + .setBase(EndBlocks.TERMINITE.anvilBlock) + .setAddition(EndItems.AETERNIUM_INGOT) + .build(); SmithingTableRecipe.create(BetterEnd.MOD_ID, "armored_elytra") - .checkConfig(Configs.RECIPE_CONFIG) - .setResult(EndItems.ARMORED_ELYTRA) - .setBase(Items.ELYTRA) - .setAddition(EndItems.AETERNIUM_INGOT) - .build(); + .checkConfig(Configs.RECIPE_CONFIG) + .setResult(EndItems.ARMORED_ELYTRA) + .setBase(Items.ELYTRA) + .setAddition(EndItems.AETERNIUM_INGOT) + .build(); } } diff --git a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java index db042ffb..98e79b2c 100644 --- a/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AlloyingRecipe.java @@ -2,7 +2,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; @@ -28,10 +28,12 @@ import ru.betterend.util.ItemUtil; import ru.betterend.util.RecipeHelper; 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); + protected final RecipeType type; protected final ResourceLocation id; protected final Ingredient primaryInput; @@ -40,7 +42,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { protected final String group; protected final float experience; protected final int smeltTime; - + public AlloyingRecipe(ResourceLocation id, String group, Ingredient primaryInput, Ingredient secondaryInput, ItemStack output, float experience, int smeltTime) { this.group = group; this.id = id; @@ -51,11 +53,11 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { this.smeltTime = smeltTime; this.type = TYPE; } - + public float getExperience() { return this.experience; } - + public int getSmeltTime() { return this.smeltTime; } @@ -65,14 +67,14 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { NonNullList defaultedList = NonNullList.create(); defaultedList.add(primaryInput); defaultedList.add(secondaryInput); - + return defaultedList; } @Override public boolean matches(Container inv, Level world) { return this.primaryInput.test(inv.getItem(0)) && this.secondaryInput.test(inv.getItem(1)) || - this.primaryInput.test(inv.getItem(1)) && this.secondaryInput.test(inv.getItem(0)); + this.primaryInput.test(inv.getItem(1)) && this.secondaryInput.test(inv.getItem(0)); } @Override @@ -104,22 +106,22 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { public RecipeType getType() { return this.type; } - + @Override @Environment(EnvType.CLIENT) public String getGroup() { return this.group; } - + @Environment(EnvType.CLIENT) public ItemStack getToastSymbol() { return new ItemStack(EndBlocks.END_STONE_SMELTER); } - + public static class Builder { private final static Builder INSTANCE = new Builder(); private static boolean exist; - + public static Builder create(ResourceLocation id) { INSTANCE.id = id; INSTANCE.group = String.format("%s_%s", GROUP, id); @@ -129,14 +131,14 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { INSTANCE.experience = 0.0F; INSTANCE.smeltTime = 350; exist = Configs.RECIPE_CONFIG.getBoolean("alloying", id.getPath(), true); - + return INSTANCE; } - + public static Builder create(String id) { return create(BetterEnd.makeID(id)); } - + private ResourceLocation id; private Ingredient primaryInput; private Ingredient secondaryInput; @@ -145,15 +147,14 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { private float experience; private int smeltTime; private boolean alright = true; - - private Builder() { - } - + + private Builder() {} + public Builder setGroup(String group) { this.group = group; return this; } - + public Builder setPrimaryInput(ItemLike... inputs) { for (ItemLike item : inputs) { this.alright &= RecipeHelper.exists(item); @@ -161,7 +162,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { this.primaryInput = Ingredient.of(inputs); return this; } - + public Builder setSecondaryInput(ItemLike... inputs) { for (ItemLike item : inputs) { this.alright &= RecipeHelper.exists(item); @@ -169,56 +170,56 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { this.secondaryInput = Ingredient.of(inputs); return this; } - + public Builder setPrimaryInput(Tag input) { this.primaryInput = Ingredient.of(input); return this; } - + public Builder setSecondaryInput(Tag input) { this.secondaryInput = Ingredient.of(input); return this; } - + public Builder setInput(ItemLike primaryInput, ItemLike secondaryInput) { this.setPrimaryInput(primaryInput); this.setSecondaryInput(secondaryInput); return this; } - + public Builder setInput(Tag primaryInput, Tag secondaryInput) { this.setPrimaryInput(primaryInput); this.setSecondaryInput(secondaryInput); return this; } - + public Builder setOutput(ItemLike output, int amount) { this.alright &= RecipeHelper.exists(output); this.output = new ItemStack(output, amount); return this; } - + public Builder setExpiriense(float amount) { this.experience = amount; return this; } - + public Builder setSmeltTime(int time) { this.smeltTime = time; return this; } - + public void build() { if (exist) { if (primaryInput == null) { BetterEnd.LOGGER.warning("Primary input for Alloying recipe can't be 'null', recipe {} will be ignored!", id); return; } - if (secondaryInput == null) { + if(secondaryInput == null) { BetterEnd.LOGGER.warning("Secondary input for Alloying can't be 'null', recipe {} will be ignored!", id); return; } - if (output == null) { + if(output == null) { BetterEnd.LOGGER.warning("Output for Alloying can't be 'null', recipe {} will be ignored!", id); return; } @@ -234,7 +235,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { } } } - + public static class Serializer implements RecipeSerializer { @Override public AlloyingRecipe fromJson(ResourceLocation id, JsonObject json) { @@ -249,7 +250,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { } float experience = GsonHelper.getAsFloat(json, "experience", 0.0F); int smeltTime = GsonHelper.getAsInt(json, "smelttime", 350); - + return new AlloyingRecipe(id, group, primaryInput, secondaryInput, output, experience, smeltTime); } @@ -261,7 +262,7 @@ public class AlloyingRecipe implements Recipe, BetterEndRecipe { ItemStack output = packetBuffer.readItem(); float experience = packetBuffer.readFloat(); int smeltTime = packetBuffer.readVarInt(); - + return new AlloyingRecipe(id, group, primary, secondary, output, experience, smeltTime); } diff --git a/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java b/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java index 431c8f06..2a9ed475 100644 --- a/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/AnvilRecipe.java @@ -1,12 +1,12 @@ package ru.betterend.recipe.builders; +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; @@ -23,22 +23,21 @@ 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 ru.bclib.api.TagAPI; import ru.bclib.recipes.BCLRecipeManager; import ru.betterend.BetterEnd; import ru.betterend.config.Configs; import ru.betterend.interfaces.BetterEndRecipe; +import ru.betterend.registry.EndTags; import ru.betterend.util.ItemUtil; import ru.betterend.util.RecipeHelper; -import java.util.Objects; - public class AnvilRecipe implements Recipe, BetterEndRecipe { + public final static String GROUP = "smithing"; 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); - + private final ResourceLocation id; private final Ingredient input; private final ItemStack output; @@ -46,7 +45,7 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { private final int toolLevel; private final int anvilLevel; private final int inputCount; - + public AnvilRecipe(ResourceLocation identifier, Ingredient input, ItemStack output, int inputCount, int toolLevel, int anvilLevel, int damage) { this.id = identifier; this.input = input; @@ -66,22 +65,23 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { public ItemStack getResultItem() { return this.output; } - + @Override public boolean matches(Container craftingInventory, Level world) { return this.matches(craftingInventory); } - + @Override public ItemStack assemble(Container craftingInventory) { return this.output.copy(); } - + public ItemStack craft(Container craftingInventory, Player player) { if (!player.isCreative()) { if (!checkHammerDurability(craftingInventory, player)) return ItemStack.EMPTY; ItemStack hammer = craftingInventory.getItem(1); - hammer.hurtAndBreak(this.damage, player, entity -> entity.broadcastBreakEvent((InteractionHand) null)); + hammer.hurtAndBreak(this.damage, player, entity -> + entity.broadcastBreakEvent((InteractionHand) null)); } return this.assemble(craftingInventory); } @@ -92,20 +92,20 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { int damage = hammer.getDamageValue() + this.damage; return damage < hammer.getMaxDamage(); } - + public boolean matches(Container craftingInventory) { ItemStack hammer = craftingInventory.getItem(1); - if (hammer.isEmpty() || !TagAPI.HAMMERS.contains(hammer.getItem())) { + if (hammer.isEmpty() || !EndTags.HAMMERS.contains(hammer.getItem())) { return false; } ItemStack material = craftingInventory.getItem(0); int materialCount = material.getCount(); int level = ((TieredItem) hammer.getItem()).getTier().getLevel(); return this.input.test(craftingInventory.getItem(0)) && - materialCount >= this.inputCount && - level >= this.toolLevel; + materialCount >= this.inputCount && + level >= this.toolLevel; } - + public int getDamage() { return this.damage; } @@ -121,10 +121,10 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { @Override public NonNullList getIngredients() { NonNullList defaultedList = NonNullList.create(); - defaultedList.add(Ingredient.of(TagAPI.HAMMERS.getValues().stream().filter(hammer -> + defaultedList.add(Ingredient.of(EndTags.HAMMERS.getValues().stream().filter(hammer -> ((TieredItem) hammer).getTier().getLevel() >= toolLevel).map(ItemStack::new))); defaultedList.add(input); - + return defaultedList; } @@ -143,7 +143,7 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { public RecipeType getType() { return TYPE; } - + @Override public boolean isSpecial() { return true; @@ -169,11 +169,11 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { public static class Builder { private final static Builder INSTANCE = new Builder(); - + public static Builder create(String id) { return create(BetterEnd.makeID(id)); } - + public static Builder create(ResourceLocation id) { INSTANCE.id = id; INSTANCE.input = null; @@ -183,10 +183,10 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { INSTANCE.anvilLevel = 1; INSTANCE.damage = 1; INSTANCE.alright = true; - + return INSTANCE; } - + private ResourceLocation id; private Ingredient input; private ItemStack output; @@ -195,21 +195,20 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { private int anvilLevel = 1; private int damage = 1; private boolean alright; - - private Builder() { - } - + + private Builder() {} + public Builder setInput(ItemLike... inputItems) { this.alright &= RecipeHelper.exists(inputItems); this.setInput(Ingredient.of(inputItems)); return this; } - + public Builder setInput(Tag inputTag) { this.setInput(Ingredient.of(inputTag)); return this; } - + public Builder setInput(Ingredient ingredient) { this.input = ingredient; return this; @@ -219,17 +218,17 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { this.inputCount = count; return this; } - + public Builder setOutput(ItemLike output) { return this.setOutput(output, 1); } - + public Builder setOutput(ItemLike output, int amount) { this.alright &= RecipeHelper.exists(output); this.output = new ItemStack(output, amount); return this; } - + public Builder setToolLevel(int level) { this.toolLevel = level; return this; @@ -239,19 +238,19 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { this.anvilLevel = level; return this; } - + public Builder setDamage(int damage) { this.damage = damage; return this; } - + public void build() { if (Configs.RECIPE_CONFIG.getBoolean("anvil", id.getPath(), true)) { if (input == null) { BetterEnd.LOGGER.warning("Input for Anvil recipe can't be 'null', recipe {} will be ignored!", id); return; } - if (output == null) { + if(output == null) { BetterEnd.LOGGER.warning("Output for Anvil recipe can't be 'null', recipe {} will be ignored!", id); return; } @@ -277,21 +276,11 @@ 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); int damage = GsonHelper.getAsInt(json, "damage", 1); - + return new AnvilRecipe(id, input, output, inputCount, toolLevel, anvilLevel, damage); } @@ -303,7 +292,7 @@ public class AnvilRecipe implements Recipe, BetterEndRecipe { int toolLevel = packetBuffer.readVarInt(); int anvilLevel = packetBuffer.readVarInt(); int damage = packetBuffer.readVarInt(); - + return new AnvilRecipe(id, input, output, inputCount, toolLevel, anvilLevel, damage); } diff --git a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java index 4ebdfb40..b05b2f37 100644 --- a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java @@ -1,12 +1,12 @@ package ru.betterend.recipe.builders; +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.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.util.GsonHelper; @@ -24,24 +24,24 @@ import ru.betterend.interfaces.BetterEndRecipe; import ru.betterend.rituals.InfusionRitual; import ru.betterend.util.ItemUtil; -import java.util.Arrays; - 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); + private final ResourceLocation id; private final Ingredient[] catalysts; private Ingredient input; private ItemStack output; private int time = 1; private String group; - + private InfusionRecipe(ResourceLocation id) { this(id, null, null); } - + private InfusionRecipe(ResourceLocation id, Ingredient input, ItemStack output) { this.id = id; this.input = input; @@ -49,7 +49,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { this.catalysts = new Ingredient[8]; Arrays.fill(catalysts, Ingredient.EMPTY); } - + public int getInfusionTime() { return this.time; } @@ -73,7 +73,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { public boolean canCraftInDimensions(int width, int height) { return true; } - + @Override public NonNullList getIngredients() { NonNullList defaultedList = NonNullList.create(); @@ -91,7 +91,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { public ResourceLocation getId() { return this.id; } - + @Override @Environment(EnvType.CLIENT) public String getGroup() { @@ -107,24 +107,24 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { public RecipeType getType() { return TYPE; } - + public static class Builder { private final static Builder INSTANCE = new Builder(); private static boolean exist; - + public static Builder create(String id) { return create(BetterEnd.makeID(id)); } - + public static Builder create(ResourceLocation id) { INSTANCE.id = id; INSTANCE.input = null; INSTANCE.output = null; INSTANCE.time = 1; exist = Configs.RECIPE_CONFIG.getBoolean("infusion", id.getPath(), true); - + Arrays.fill(INSTANCE.catalysts, Ingredient.EMPTY); - + return INSTANCE; } @@ -134,44 +134,44 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { private ItemStack output; private String group; private int time = 1; - + private Builder() { Arrays.fill(catalysts, Ingredient.EMPTY); } - + public Builder setGroup(String group) { this.group = group; return this; } - + public Builder setInput(ItemLike input) { this.input = Ingredient.of(input); return this; } - + public Builder setOutput(ItemLike output) { this.output = new ItemStack(output); this.output.setCount(1); return this; } - + public Builder setOutput(ItemStack output) { this.output = output; this.output.setCount(1); return this; } - + public Builder setTime(int time) { this.time = time; return this; } - + public Builder addCatalyst(int slot, ItemLike... items) { if (slot > 7) return this; this.catalysts[slot] = Ingredient.of(items); return this; } - + public void build() { if (exist) { if (input == null) { @@ -198,7 +198,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { } } } - + public static class Serializer implements RecipeSerializer { @Override public InfusionRecipe fromJson(ResourceLocation id, JsonObject json) { @@ -209,19 +209,9 @@ 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); - + JsonObject catalysts = GsonHelper.getAsJsonObject(json, "catalysts"); ItemStack catalyst = ItemUtil.fromStackString(GsonHelper.getAsString(catalysts, "north", "")); recipe.catalysts[0] = (catalyst != null && !catalyst.isEmpty()) ? Ingredient.of(catalyst.getItem()) : Ingredient.EMPTY; @@ -239,7 +229,7 @@ public class InfusionRecipe implements Recipe, BetterEndRecipe { recipe.catalysts[6] = (catalyst != null && !catalyst.isEmpty()) ? Ingredient.of(catalyst.getItem()) : Ingredient.EMPTY; catalyst = ItemUtil.fromStackString(GsonHelper.getAsString(catalysts, "north_west", "")); recipe.catalysts[7] = (catalyst != null && !catalyst.isEmpty()) ? Ingredient.of(catalyst.getItem()) : Ingredient.EMPTY; - + return recipe; } diff --git a/src/main/java/ru/betterend/registry/EndBiomes.java b/src/main/java/ru/betterend/registry/EndBiomes.java index 69c9abae..b39fd679 100644 --- a/src/main/java/ru/betterend/registry/EndBiomes.java +++ b/src/main/java/ru/betterend/registry/EndBiomes.java @@ -1,10 +1,17 @@ package ru.betterend.registry; +import java.io.InputStream; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.gson.JsonElement; import com.google.gson.JsonObject; + import net.fabricmc.fabric.impl.biome.InternalBiomeData; import net.fabricmc.fabric.impl.biome.WeightedBiomePicker; import net.minecraft.core.Registry; @@ -53,32 +60,27 @@ import ru.betterend.world.biome.land.UmbrellaJungleBiome; import ru.betterend.world.generator.BiomeType; import ru.betterend.world.generator.GeneratorOptions; -import java.io.InputStream; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - 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(); - + public static final BiomePicker LAND_BIOMES = new BiomePicker(); public static final BiomePicker VOID_BIOMES = new BiomePicker(); public static final BiomePicker CAVE_BIOMES = new BiomePicker(); public static final List SUBBIOMES = Lists.newArrayList(); private static final JsonObject EMPTY_JSON = new JsonObject(); private static BiomeMap caveBiomeMap; - + // Vanilla Land public static final EndBiome END = registerBiome(Biomes.THE_END, BiomeType.LAND, 1F); public static final EndBiome END_MIDLANDS = registerSubBiome(Biomes.END_MIDLANDS, END, 0.5F); public static final EndBiome END_HIGHLANDS = registerSubBiome(Biomes.END_HIGHLANDS, END, 0.5F); - + // Vanilla Void public static final EndBiome END_BARRENS = registerBiome(Biomes.END_BARRENS, BiomeType.VOID, 1F); public static final EndBiome SMALL_END_ISLANDS = registerBiome(Biomes.SMALL_END_ISLANDS, BiomeType.VOID, 1); - + // Better End Land public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new FoggyMushroomlandBiome(), BiomeType.LAND); public static final EndBiome CHORUS_FOREST = registerBiome(new ChorusForestBiome(), BiomeType.LAND); @@ -97,10 +99,10 @@ public class EndBiomes { public static final EndBiome DRY_SHRUBLAND = registerBiome(new DryShrublandBiome(), BiomeType.LAND); public static final EndBiome LANTERN_WOODS = registerBiome(new LanternWoodsBiome(), BiomeType.LAND); public static final EndBiome NEON_OASIS = registerSubBiome(new NeonOasisBiome(), DUST_WASTELANDS); - + // Better End Void public static final EndBiome ICE_STARFIELD = registerBiome(new BiomeIceStarfield(), BiomeType.VOID); - + // Better End Caves public static final EndCaveBiome EMPTY_END_CAVE = registerCaveBiome(new EmptyEndCaveBiome()); public static final EndCaveBiome EMPTY_SMARAGDANT_CAVE = registerCaveBiome(new EmptySmaragdantCaveBiome()); @@ -108,28 +110,28 @@ public class EndBiomes { public static final EndCaveBiome EMPTY_AURORA_CAVE = registerCaveBiome(new EmptyAuroraCaveBiome()); public static final EndCaveBiome LUSH_AURORA_CAVE = registerCaveBiome(new LushAuroraCaveBiome()); public static final EndCaveBiome JADE_CAVE = registerCaveBiome(new JadeCaveBiome()); - + public static void register() { CAVE_BIOMES.rebuild(); } - + public static void onWorldLoad(long seed) { if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) { caveBiomeMap = new BiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES); } } - + public static void mutateRegistry(Registry biomeRegistry) { LAND_BIOMES.clearMutables(); VOID_BIOMES.clearMutables(); CAVE_BIOMES.clearMutables(); - + if (FABRIC_VOID.isEmpty()) { loadFabricAPIBiomes(); } - + Map configs = Maps.newHashMap(); - + biomeRegistry.forEach((biome) -> { if (biome.getBiomeCategory() == BiomeCategory.THEEND) { ResourceLocation id = biomeRegistry.getKey(biome); @@ -159,7 +161,7 @@ public class EndBiomes { else { LAND_BIOMES.addBiomeMutable(endBiome); } - BiomeAPI.registerBiome(endBiome); + ID_MAP.put(id, endBiome); } } } @@ -170,30 +172,30 @@ public class EndBiomes { } }); Configs.BIOME_CONFIG.saveChanges(); - + rebuildPicker(LAND_BIOMES, biomeRegistry); rebuildPicker(VOID_BIOMES, biomeRegistry); rebuildPicker(CAVE_BIOMES, biomeRegistry); - + SUBBIOMES.forEach((endBiome) -> { endBiome.updateActualBiomes(biomeRegistry); }); } - + private static void rebuildPicker(BiomePicker picker, Registry biomeRegistry) { picker.rebuild(); picker.getBiomes().forEach((endBiome) -> { endBiome.updateActualBiomes(biomeRegistry); }); } - + private static void loadFabricAPIBiomes() { List> biomes = Lists.newArrayList(); biomes.addAll(getBiomes(InternalBiomeData.getEndBiomesMap().get(Biomes.SMALL_END_ISLANDS))); biomes.addAll(getBiomes(InternalBiomeData.getEndBarrensMap().get(Biomes.END_BARRENS))); biomes.forEach((key) -> FABRIC_VOID.add(key.location())); FABRIC_VOID.removeIf(id -> id.getNamespace().equals("endplus")); - + if (BCLib.isDevEnvironment()) { System.out.println("=================================="); System.out.println("Added void biomes from Fabric API:"); @@ -203,12 +205,12 @@ public class EndBiomes { System.out.println("=================================="); } } - + private static List> getBiomes(WeightedBiomePicker picker) { IBiomeList biomeList = (IBiomeList) (Object) picker; return biomeList == null ? Collections.emptyList() : biomeList.getBiomes(); } - + private static JsonObject loadJsonConfig(String namespace) { InputStream inputstream = EndBiomes.class.getResourceAsStream("/data/" + namespace + "/end_biome_properties.json"); if (inputstream != null) { @@ -218,26 +220,24 @@ public class EndBiomes { return EMPTY_JSON; } } - + /** * Registers new {@link EndBiome} and adds it to picker, can be used to add existing mod biomes into the End. - * - * @param biome - {@link Biome} instance - * @param type - {@link BiomeType} + * @param biome - {@link Biome} instance + * @param type - {@link BiomeType} * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ public static EndBiome registerBiome(Biome biome, BiomeType type, float genChance) { return registerBiome(biome, type, 1, genChance); } - + /** * Registers new {@link EndBiome} and adds it to picker, can be used to add existing mod biomes into the End. - * - * @param biome - {@link Biome} instance - * @param type - {@link BiomeType} + * @param biome - {@link Biome} instance + * @param type - {@link BiomeType} * @param fogDensity - density of fog (def: 1F) [0.0F - Infinity] - * @param genChance - generation chance [0.0F - Infinity] + * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ public static EndBiome registerBiome(Biome biome, BiomeType type, float fogDensity, float genChance) { @@ -247,26 +247,24 @@ public class EndBiomes { } return endBiome; } - + /** * Registers new {@link EndBiome} from existed {@link Biome} and put as a sub-biome into selected parent. - * - * @param biome - {@link Biome} instance - * @param parent - {@link EndBiome} to be linked with + * @param biome - {@link Biome} instance + * @param parent - {@link EndBiome} to be linked with * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float genChance, boolean hasCaves) { return registerSubBiome(biome, parent, 1, genChance, hasCaves); } - + /** * Registers new {@link EndBiome} from existed {@link Biome} and put as a sub-biome into selected parent. - * - * @param biome - {@link Biome} instance - * @param parent - {@link EndBiome} to be linked with + * @param biome - {@link Biome} instance + * @param parent - {@link EndBiome} to be linked with * @param fogDensity - density of fog (def: 1F) [0.0F - Infinity] - * @param genChance - generation chance [0.0F - Infinity] + * @param genChance - generation chance [0.0F - Infinity] * @return registered {@link EndBiome} */ public static EndBiome registerSubBiome(Biome biome, EndBiome parent, float fogDensity, float genChance, boolean hasCaves) { @@ -276,15 +274,14 @@ public class EndBiomes { parent.addSubBiome(endBiome); SUBBIOMES.add(endBiome); SUBBIOMES_UNMUTABLES.add(endBiome.getID()); - BiomeAPI.registerBiome(endBiome); + ID_MAP.put(endBiome.getID(), endBiome); } return endBiome; } - + /** * Put existing {@link EndBiome} as a sub-biome into selected parent. - * - * @param biome - {@link EndBiome} instance + * @param biome - {@link EndBiome} instance * @param parent - {@link EndBiome} to be linked with * @return registered {@link EndBiome} */ @@ -294,22 +291,23 @@ 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; } - + /** * Registers {@link EndBiome} and adds it into worldgen. - * * @param biome - {@link EndBiome} instance - * @param type - {@link BiomeType} + * @param type - {@link BiomeType} * @return registered {@link EndBiome} */ public static EndBiome registerBiome(EndBiome biome, BiomeType type) { 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); } @@ -319,10 +317,9 @@ public class EndBiomes { } return biome; } - + /** * Put integration sub-biome {@link EndBiome} into subbiomes list and registers it. - * * @param biome - {@link EndBiome} instance * @return registered {@link EndBiome} */ @@ -331,34 +328,34 @@ 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; } - + /** * Link integration sub-biome with parent. - * - * @param biome - {@link EndBiome} instance + * @param biome - {@link EndBiome} instance * @param parent - {@link ResourceLocation} parent id */ public static void addSubBiomeIntegration(EndBiome biome, ResourceLocation parent) { if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { - BCLBiome parentBiome = BiomeAPI.getBiome(parent); + EndBiome parentBiome = ID_MAP.get(parent); if (parentBiome != null && !parentBiome.containsSubBiome(biome)) { parentBiome.addSubBiome(biome); } } } - + public static EndBiome registerBiome(ResourceKey key, BiomeType type, float genChance) { return registerBiome(BuiltinRegistries.BIOME.get(key), type, genChance); } - + public static EndBiome registerSubBiome(ResourceKey key, EndBiome parent, float genChance) { return registerSubBiome(BuiltinRegistries.BIOME.get(key), parent, genChance, true); } - + private static void addToPicker(EndBiome biome, BiomeType type) { if (type == BiomeType.LAND) { LAND_BIOMES.addBiome(biome); @@ -367,16 +364,21 @@ public class EndBiomes { VOID_BIOMES.addBiome(biome); } } - + public static EndCaveBiome registerCaveBiome(EndCaveBiome biome) { if (Configs.BIOME_CONFIG.getBoolean(biome.getID(), "enabled", true)) { BiomeAPI.registerBiome(biome); CAVE_BIOMES.addBiome(biome); + ID_MAP.put(biome.getID(), biome); } return biome; } - + 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/registry/EndBlockEntities.java b/src/main/java/ru/betterend/registry/EndBlockEntities.java index 13e90bdf..93535912 100644 --- a/src/main/java/ru/betterend/registry/EndBlockEntities.java +++ b/src/main/java/ru/betterend/registry/EndBlockEntities.java @@ -1,6 +1,5 @@ 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; @@ -16,25 +15,22 @@ import ru.betterend.blocks.entities.PedestalBlockEntity; public class EndBlockEntities { public final static BlockEntityType END_STONE_SMELTER = registerBlockEntity(EndStoneSmelter.ID, - FabricBlockEntityTypeBuilder.create(EndStoneSmelterBlockEntity::new, EndBlocks.END_STONE_SMELTER)); + BlockEntityType.Builder.of(EndStoneSmelterBlockEntity::new, EndBlocks.END_STONE_SMELTER)); public final static BlockEntityType PEDESTAL = registerBlockEntity("pedestal", - FabricBlockEntityTypeBuilder.create(PedestalBlockEntity::new, getPedestals())); + BlockEntityType.Builder.of(PedestalBlockEntity::new, getPedestals())); public final static BlockEntityType ETERNAL_PEDESTAL = registerBlockEntity("eternal_pedestal", - FabricBlockEntityTypeBuilder.create(EternalPedestalEntity::new, EndBlocks.ETERNAL_PEDESTAL)); + BlockEntityType.Builder.of(EternalPedestalEntity::new, EndBlocks.ETERNAL_PEDESTAL)); public final static BlockEntityType INFUSION_PEDESTAL = registerBlockEntity("infusion_pedestal", - FabricBlockEntityTypeBuilder.create(InfusionPedestalEntity::new, EndBlocks.INFUSION_PEDESTAL)); + BlockEntityType.Builder.of(InfusionPedestalEntity::new, EndBlocks.INFUSION_PEDESTAL)); public final static BlockEntityType HYDROTHERMAL_VENT = registerBlockEntity("hydrother_malvent", - FabricBlockEntityTypeBuilder.create(BlockEntityHydrothermalVent::new, EndBlocks.HYDROTHERMAL_VENT)); + BlockEntityType.Builder.of(BlockEntityHydrothermalVent::new, EndBlocks.HYDROTHERMAL_VENT)); - public static BlockEntityType registerBlockEntity(String id, FabricBlockEntityTypeBuilder builder) { + public static BlockEntityType registerBlockEntity(String id, BlockEntityType.Builder 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() { - } - + + public static void register() {} + static Block[] getPedestals() { return EndBlocks.getModBlocks().stream() .filter(block -> block instanceof PedestalBlock && !((PedestalBlock) block).hasUniqueEntity()) diff --git a/src/main/java/ru/betterend/registry/EndBlocks.java b/src/main/java/ru/betterend/registry/EndBlocks.java index 3ca054ca..246e9ba9 100644 --- a/src/main/java/ru/betterend/registry/EndBlocks.java +++ b/src/main/java/ru/betterend/registry/EndBlocks.java @@ -1,5 +1,10 @@ package ru.betterend.registry; +import java.util.List; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.BlockItem; @@ -7,7 +12,6 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.material.MaterialColor; -import org.jetbrains.annotations.NotNull; import ru.bclib.blocks.BaseBarrelBlock; import ru.bclib.blocks.BaseChestBlock; import ru.bclib.blocks.BaseCropBlock; @@ -25,107 +29,7 @@ import ru.bclib.blocks.StalactiteBlock; import ru.bclib.registry.BaseBlockEntities; import ru.bclib.registry.BlocksRegistry; import ru.betterend.BetterEnd; -import ru.betterend.blocks.AeterniumAnvil; -import ru.betterend.blocks.AeterniumBlock; -import ru.betterend.blocks.AmaranitaCapBlock; -import ru.betterend.blocks.AmaranitaHymenophoreBlock; -import ru.betterend.blocks.AmaranitaStemBlock; -import ru.betterend.blocks.AmberBlock; -import ru.betterend.blocks.AncientEmeraldIceBlock; -import ru.betterend.blocks.AuroraCrystalBlock; -import ru.betterend.blocks.BlueVineBlock; -import ru.betterend.blocks.BlueVineLanternBlock; -import ru.betterend.blocks.BlueVineSeedBlock; -import ru.betterend.blocks.BoluxMushroomBlock; -import ru.betterend.blocks.BrimstoneBlock; -import ru.betterend.blocks.BubbleCoralBlock; -import ru.betterend.blocks.BulbVineBlock; -import ru.betterend.blocks.BulbVineLanternBlock; -import ru.betterend.blocks.BulbVineLanternColoredBlock; -import ru.betterend.blocks.BulbVineSeedBlock; -import ru.betterend.blocks.CavePumpkinBlock; -import ru.betterend.blocks.CavePumpkinVineBlock; -import ru.betterend.blocks.ChandelierBlock; -import ru.betterend.blocks.CharcoalBlock; -import ru.betterend.blocks.CharniaBlock; -import ru.betterend.blocks.ChorusGrassBlock; -import ru.betterend.blocks.DenseEmeraldIceBlock; -import ru.betterend.blocks.DenseSnowBlock; -import ru.betterend.blocks.DragonTreeSaplingBlock; -import ru.betterend.blocks.EmeraldIceBlock; -import ru.betterend.blocks.EndLilyBlock; -import ru.betterend.blocks.EndLilySeedBlock; -import ru.betterend.blocks.EndLotusFlowerBlock; -import ru.betterend.blocks.EndLotusLeafBlock; -import ru.betterend.blocks.EndLotusSeedBlock; -import ru.betterend.blocks.EndLotusStemBlock; -import ru.betterend.blocks.EndPortalBlock; -import ru.betterend.blocks.EndStoneSmelter; -import ru.betterend.blocks.EnderBlock; -import ru.betterend.blocks.EndstoneDustBlock; -import ru.betterend.blocks.EternalPedestal; -import ru.betterend.blocks.FilaluxBlock; -import ru.betterend.blocks.FilaluxLanternBlock; -import ru.betterend.blocks.FilaluxWingsBlock; -import ru.betterend.blocks.FlamaeaBlock; -import ru.betterend.blocks.GlowingHymenophoreBlock; -import ru.betterend.blocks.GlowingMossBlock; -import ru.betterend.blocks.GlowingPillarLuminophorBlock; -import ru.betterend.blocks.GlowingPillarRootsBlock; -import ru.betterend.blocks.GlowingPillarSeedBlock; -import ru.betterend.blocks.HelixTreeLeavesBlock; -import ru.betterend.blocks.HelixTreeSaplingBlock; -import ru.betterend.blocks.HydraluxBlock; -import ru.betterend.blocks.HydraluxPetalBlock; -import ru.betterend.blocks.HydraluxPetalColoredBlock; -import ru.betterend.blocks.HydraluxSaplingBlock; -import ru.betterend.blocks.HydrothermalVentBlock; -import ru.betterend.blocks.InfusionPedestal; -import ru.betterend.blocks.JellyshroomCapBlock; -import ru.betterend.blocks.LacugroveSaplingBlock; -import ru.betterend.blocks.LanceleafBlock; -import ru.betterend.blocks.LanceleafSeedBlock; -import ru.betterend.blocks.LargeAmaranitaBlock; -import ru.betterend.blocks.LucerniaSaplingBlock; -import ru.betterend.blocks.LumecornBlock; -import ru.betterend.blocks.LumecornSeedBlock; -import ru.betterend.blocks.MengerSpongeBlock; -import ru.betterend.blocks.MengerSpongeWetBlock; -import ru.betterend.blocks.MissingTileBlock; -import ru.betterend.blocks.MossyDragonBoneBlock; -import ru.betterend.blocks.MossyGlowshroomCapBlock; -import ru.betterend.blocks.MossyGlowshroomSaplingBlock; -import ru.betterend.blocks.MossyObsidian; -import ru.betterend.blocks.MurkweedBlock; -import ru.betterend.blocks.NeedlegrassBlock; -import ru.betterend.blocks.NeonCactusBlock; -import ru.betterend.blocks.NeonCactusPlantBlock; -import ru.betterend.blocks.PedestalVanilla; -import ru.betterend.blocks.PondAnemoneBlock; -import ru.betterend.blocks.PythadendronSaplingBlock; -import ru.betterend.blocks.RespawnObeliskBlock; -import ru.betterend.blocks.RunedFlavolite; -import ru.betterend.blocks.ShadowBerryBlock; -import ru.betterend.blocks.ShadowGrassBlock; -import ru.betterend.blocks.SilkMothHiveBlock; -import ru.betterend.blocks.SilkMothNestBlock; -import ru.betterend.blocks.SmallAmaranitaBlock; -import ru.betterend.blocks.SmallJellyshroomBlock; -import ru.betterend.blocks.SmaragdantCrystalBlock; -import ru.betterend.blocks.SmaragdantCrystalShardBlock; -import ru.betterend.blocks.SulphurCrystalBlock; -import ru.betterend.blocks.TenaneaFlowersBlock; -import ru.betterend.blocks.TenaneaSaplingBlock; -import ru.betterend.blocks.TerrainPlantBlock; -import ru.betterend.blocks.TwistedUmbrellaMossBlock; -import ru.betterend.blocks.TwistedUmbrellaMossTallBlock; -import ru.betterend.blocks.UmbrellaMossBlock; -import ru.betterend.blocks.UmbrellaMossTallBlock; -import ru.betterend.blocks.UmbrellaTreeClusterBlock; -import ru.betterend.blocks.UmbrellaTreeClusterEmptyBlock; -import ru.betterend.blocks.UmbrellaTreeMembraneBlock; -import ru.betterend.blocks.UmbrellaTreeSaplingBlock; -import ru.betterend.blocks.VentBubbleColumnBlock; +import ru.betterend.blocks.*; import ru.betterend.blocks.basis.EndTerrainBlock; import ru.betterend.blocks.basis.EndTripleTerrain; import ru.betterend.blocks.basis.EndUnderwaterWallPlantBlock; @@ -143,9 +47,6 @@ import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.tab.CreativeTabs; -import java.util.List; -import java.util.stream.Collectors; - public class EndBlocks extends BlocksRegistry { // Terrain // public static final Block ENDSTONE_DUST = registerBlock("endstone_dust", new EndstoneDustBlock()); @@ -173,13 +74,13 @@ public class EndBlocks extends BlocksRegistry { public static final Block JUNGLE_MOSS_PATH = registerBlock("jungle_moss_path", new BasePathBlock(JUNGLE_MOSS)); public static final Block SANGNUM_PATH = registerBlock("sangnum_path", new BasePathBlock(SANGNUM)); public static final Block RUTISCUS_PATH = registerBlock("rutiscus_path", new BasePathBlock(RUTISCUS)); - + public static final Block MOSSY_OBSIDIAN = registerBlock("mossy_obsidian", new MossyObsidian()); public static final Block DRAGON_BONE_BLOCK = registerBlock("dragon_bone_block", new BaseRotatedPillarBlock(Blocks.BONE_BLOCK)); public static final Block DRAGON_BONE_STAIRS = registerBlock("dragon_bone_stairs", new BaseStairsBlock(DRAGON_BONE_BLOCK)); public static final Block DRAGON_BONE_SLAB = registerBlock("dragon_bone_slab", new BaseSlabBlock(DRAGON_BONE_BLOCK)); public static final Block MOSSY_DRAGON_BONE = registerBlock("mossy_dragon_bone", new MossyDragonBoneBlock()); - + // Rocks // public static final StoneMaterial FLAVOLITE = new StoneMaterial("flavolite", MaterialColor.SAND); public static final StoneMaterial VIOLECITE = new StoneMaterial("violecite", MaterialColor.COLOR_PURPLE); @@ -190,76 +91,76 @@ public class EndBlocks extends BlocksRegistry { public static final Block BRIMSTONE = registerBlock("brimstone", new BrimstoneBlock()); public static final Block SULPHUR_CRYSTAL = registerBlock("sulphur_crystal", new SulphurCrystalBlock()); public static final Block MISSING_TILE = registerBlock("missing_tile", new MissingTileBlock()); - + public static final Block FLAVOLITE_RUNED = registerBlock("flavolite_runed", new RunedFlavolite(false)); public static final Block FLAVOLITE_RUNED_ETERNAL = registerBlock("flavolite_runed_eternal", new RunedFlavolite(true)); - + public static final Block ANDESITE_PEDESTAL = registerBlock("andesite_pedestal", new PedestalVanilla(Blocks.ANDESITE)); public static final Block DIORITE_PEDESTAL = registerBlock("diorite_pedestal", new PedestalVanilla(Blocks.DIORITE)); public static final Block GRANITE_PEDESTAL = registerBlock("granite_pedestal", new PedestalVanilla(Blocks.GRANITE)); public static final Block QUARTZ_PEDESTAL = registerBlock("quartz_pedestal", new PedestalVanilla(Blocks.QUARTZ_BLOCK)); public static final Block PURPUR_PEDESTAL = registerBlock("purpur_pedestal", new PedestalVanilla(Blocks.PURPUR_BLOCK)); - + public static final Block HYDROTHERMAL_VENT = registerBlock("hydrothermal_vent", new HydrothermalVentBlock()); public static final Block VENT_BUBBLE_COLUMN = registerEndBlockOnly("vent_bubble_column", new VentBubbleColumnBlock()); - + public static final Block DENSE_SNOW = registerBlock("dense_snow", new DenseSnowBlock()); public static final Block EMERALD_ICE = registerBlock("emerald_ice", new EmeraldIceBlock()); public static final Block DENSE_EMERALD_ICE = registerBlock("dense_emerald_ice", new DenseEmeraldIceBlock()); public static final Block ANCIENT_EMERALD_ICE = registerBlock("ancient_emerald_ice", new AncientEmeraldIceBlock()); - + public static final Block END_STONE_STALACTITE = registerBlock("end_stone_stalactite", new StalactiteBlock(Blocks.END_STONE)); public static final Block END_STONE_STALACTITE_CAVEMOSS = registerBlock("end_stone_stalactite_cavemoss", new StalactiteBlock(CAVE_MOSS)); - + // Wooden Materials And Trees // public static final Block MOSSY_GLOWSHROOM_SAPLING = registerBlock("mossy_glowshroom_sapling", new MossyGlowshroomSaplingBlock()); public static final Block MOSSY_GLOWSHROOM_CAP = registerBlock("mossy_glowshroom_cap", new MossyGlowshroomCapBlock()); public static final Block MOSSY_GLOWSHROOM_HYMENOPHORE = registerBlock("mossy_glowshroom_hymenophore", new GlowingHymenophoreBlock()); public static final Block MOSSY_GLOWSHROOM_FUR = registerBlock("mossy_glowshroom_fur", new FurBlock(MOSSY_GLOWSHROOM_SAPLING, 15, 16, true)); public static final WoodenMaterial MOSSY_GLOWSHROOM = new WoodenMaterial("mossy_glowshroom", MaterialColor.COLOR_GRAY, MaterialColor.WOOD); - + public static final Block PYTHADENDRON_SAPLING = registerBlock("pythadendron_sapling", new PythadendronSaplingBlock()); public static final Block PYTHADENDRON_LEAVES = registerBlock("pythadendron_leaves", new BaseLeavesBlock(PYTHADENDRON_SAPLING, MaterialColor.COLOR_MAGENTA)); public static final WoodenMaterial PYTHADENDRON = new WoodenMaterial("pythadendron", MaterialColor.COLOR_MAGENTA, MaterialColor.COLOR_PURPLE); - + public static final Block END_LOTUS_SEED = registerBlock("end_lotus_seed", new EndLotusSeedBlock()); public static final Block END_LOTUS_STEM = registerBlock("end_lotus_stem", new EndLotusStemBlock()); public static final Block END_LOTUS_LEAF = registerEndBlockOnly("end_lotus_leaf", new EndLotusLeafBlock()); public static final Block END_LOTUS_FLOWER = registerEndBlockOnly("end_lotus_flower", new EndLotusFlowerBlock()); public static final WoodenMaterial END_LOTUS = new WoodenMaterial("end_lotus", MaterialColor.COLOR_LIGHT_BLUE, MaterialColor.COLOR_CYAN); - + public static final Block LACUGROVE_SAPLING = registerBlock("lacugrove_sapling", new LacugroveSaplingBlock()); public static final Block LACUGROVE_LEAVES = registerBlock("lacugrove_leaves", new BaseLeavesBlock(LACUGROVE_SAPLING, MaterialColor.COLOR_CYAN)); public static final WoodenMaterial LACUGROVE = new WoodenMaterial("lacugrove", MaterialColor.COLOR_BROWN, MaterialColor.COLOR_YELLOW); - + public static final Block DRAGON_TREE_SAPLING = registerBlock("dragon_tree_sapling", new DragonTreeSaplingBlock()); public static final Block DRAGON_TREE_LEAVES = registerBlock("dragon_tree_leaves", new BaseLeavesBlock(DRAGON_TREE_SAPLING, MaterialColor.COLOR_MAGENTA)); public static final WoodenMaterial DRAGON_TREE = new WoodenMaterial("dragon_tree", MaterialColor.COLOR_BLACK, MaterialColor.COLOR_MAGENTA); - + public static final Block TENANEA_SAPLING = registerBlock("tenanea_sapling", new TenaneaSaplingBlock()); public static final Block TENANEA_LEAVES = registerBlock("tenanea_leaves", new BaseLeavesBlock(TENANEA_SAPLING, MaterialColor.COLOR_PINK)); public static final Block TENANEA_FLOWERS = registerBlock("tenanea_flowers", new TenaneaFlowersBlock()); public static final Block TENANEA_OUTER_LEAVES = registerBlock("tenanea_outer_leaves", new FurBlock(TENANEA_SAPLING, 32)); public static final WoodenMaterial TENANEA = new WoodenMaterial("tenanea", MaterialColor.COLOR_BROWN, MaterialColor.COLOR_PINK); - + public static final Block HELIX_TREE_SAPLING = registerBlock("helix_tree_sapling", new HelixTreeSaplingBlock()); public static final Block HELIX_TREE_LEAVES = registerBlock("helix_tree_leaves", new HelixTreeLeavesBlock()); public static final WoodenMaterial HELIX_TREE = new WoodenMaterial("helix_tree", MaterialColor.COLOR_GRAY, MaterialColor.COLOR_ORANGE); - + public static final Block UMBRELLA_TREE_SAPLING = registerBlock("umbrella_tree_sapling", new UmbrellaTreeSaplingBlock()); public static final Block UMBRELLA_TREE_MEMBRANE = registerBlock("umbrella_tree_membrane", new UmbrellaTreeMembraneBlock()); public static final Block UMBRELLA_TREE_CLUSTER = registerBlock("umbrella_tree_cluster", new UmbrellaTreeClusterBlock()); public static final Block UMBRELLA_TREE_CLUSTER_EMPTY = registerBlock("umbrella_tree_cluster_empty", new UmbrellaTreeClusterEmptyBlock()); public static final WoodenMaterial UMBRELLA_TREE = new WoodenMaterial("umbrella_tree", MaterialColor.COLOR_BLUE, MaterialColor.COLOR_GREEN); - + public static final Block JELLYSHROOM_CAP_PURPLE = registerBlock("jellyshroom_cap_purple", new JellyshroomCapBlock(217, 142, 255, 164, 0, 255)); public static final WoodenMaterial JELLYSHROOM = new WoodenMaterial("jellyshroom", MaterialColor.COLOR_PURPLE, MaterialColor.COLOR_LIGHT_BLUE); - + public static final Block LUCERNIA_SAPLING = registerBlock("lucernia_sapling", new LucerniaSaplingBlock()); public static final Block LUCERNIA_LEAVES = registerBlock("lucernia_leaves", new BaseLeavesBlock(LUCERNIA_SAPLING, MaterialColor.COLOR_ORANGE)); public static final Block LUCERNIA_OUTER_LEAVES = registerBlock("lucernia_outer_leaves", new FurBlock(LUCERNIA_SAPLING, 32)); public static final WoodenMaterial LUCERNIA = new WoodenMaterial("lucernia", MaterialColor.COLOR_ORANGE, MaterialColor.COLOR_ORANGE); - + // Small Plants // public static final Block UMBRELLA_MOSS = registerBlock("umbrella_moss", new UmbrellaMossBlock()); public static final Block UMBRELLA_MOSS_TALL = registerBlock("umbrella_moss_tall", new UmbrellaMossTallBlock()); @@ -283,26 +184,26 @@ public class EndBlocks extends BlocksRegistry { public static final Block AERIDIUM = registerBlock("aeridium", new TerrainPlantBlock(RUTISCUS)); public static final Block LUTEBUS = registerBlock("lutebus", new TerrainPlantBlock(RUTISCUS)); public static final Block LAMELLARIUM = registerBlock("lamellarium", new TerrainPlantBlock(RUTISCUS)); - + public static final Block BLUE_VINE_SEED = registerBlock("blue_vine_seed", new BlueVineSeedBlock()); public static final Block BLUE_VINE = registerEndBlockOnly("blue_vine", new BlueVineBlock()); public static final Block BLUE_VINE_LANTERN = registerBlock("blue_vine_lantern", new BlueVineLanternBlock()); public static final Block BLUE_VINE_FUR = registerBlock("blue_vine_fur", new FurBlock(BLUE_VINE_SEED, 15, 3, false)); - + public static final Block LANCELEAF_SEED = registerBlock("lanceleaf_seed", new LanceleafSeedBlock()); public static final Block LANCELEAF = registerEndBlockOnly("lanceleaf", new LanceleafBlock()); - + public static final Block GLOWING_PILLAR_SEED = registerBlock("glowing_pillar_seed", new GlowingPillarSeedBlock()); public static final Block GLOWING_PILLAR_ROOTS = registerEndBlockOnly("glowing_pillar_roots", new GlowingPillarRootsBlock()); public static final Block GLOWING_PILLAR_LUMINOPHOR = registerBlock("glowing_pillar_luminophor", new GlowingPillarLuminophorBlock()); public static final Block GLOWING_PILLAR_LEAVES = registerBlock("glowing_pillar_leaves", new FurBlock(GLOWING_PILLAR_SEED, 15, 3, false)); - + public static final Block SMALL_JELLYSHROOM = registerBlock("small_jellyshroom", new SmallJellyshroomBlock()); public static final Block BOLUX_MUSHROOM = registerBlock("bolux_mushroom", new BoluxMushroomBlock()); - + public static final Block LUMECORN_SEED = registerBlock("lumecorn_seed", new LumecornSeedBlock()); public static final Block LUMECORN = registerEndBlockOnly("lumecorn", new LumecornBlock()); - + public static final Block SMALL_AMARANITA_MUSHROOM = registerBlock("small_amaranita_mushroom", new SmallAmaranitaBlock()); public static final Block LARGE_AMARANITA_MUSHROOM = registerEndBlockOnly("large_amaranita_mushroom", new LargeAmaranitaBlock()); public static final Block AMARANITA_STEM = registerBlock("amaranita_stem", new AmaranitaStemBlock()); @@ -311,12 +212,12 @@ public class EndBlocks extends BlocksRegistry { public static final Block AMARANITA_LANTERN = registerBlock("amaranita_lantern", new GlowingHymenophoreBlock()); public static final Block AMARANITA_FUR = registerBlock("amaranita_fur", new FurBlock(SMALL_AMARANITA_MUSHROOM, 15, 4, true)); public static final Block AMARANITA_CAP = registerBlock("amaranita_cap", new AmaranitaCapBlock()); - + public static final Block NEON_CACTUS = registerBlock("neon_cactus", new NeonCactusPlantBlock()); public static final Block NEON_CACTUS_BLOCK = registerBlock("neon_cactus_block", new NeonCactusBlock()); public static final Block NEON_CACTUS_BLOCK_STAIRS = registerBlock("neon_cactus_stairs", new BaseStairsBlock(NEON_CACTUS_BLOCK)); public static final Block NEON_CACTUS_BLOCK_SLAB = registerBlock("neon_cactus_slab", new BaseSlabBlock(NEON_CACTUS_BLOCK)); - + // Crops public static final Block SHADOW_BERRY = registerBlock("shadow_berry", new ShadowBerryBlock()); public static final Block BLOSSOM_BERRY = registerBlock("blossom_berry_seed", new BaseCropBlock(EndItems.BLOSSOM_BERRY, PINK_MOSS)); @@ -325,7 +226,7 @@ public class EndBlocks extends BlocksRegistry { //public static final Block PEARLBERRY = registerBlock("pearlberry_seed", new EndCropBlock(EndItems.BLOSSOM_BERRY, END_MOSS, END_MYCELIUM)); public static final Block CAVE_PUMPKIN_SEED = registerBlock("cave_pumpkin_seed", new CavePumpkinVineBlock()); public static final Block CAVE_PUMPKIN = registerBlock("cave_pumpkin", new CavePumpkinBlock()); - + // Water plants public static final Block BUBBLE_CORAL = registerBlock("bubble_coral", new BubbleCoralBlock()); public static final Block MENGER_SPONGE = registerBlock("menger_sponge", new MengerSpongeBlock()); @@ -336,24 +237,24 @@ public class EndBlocks extends BlocksRegistry { public static final Block CHARNIA_LIGHT_BLUE = registerBlock("charnia_light_blue", new CharniaBlock()); public static final Block CHARNIA_CYAN = registerBlock("charnia_cyan", new CharniaBlock()); public static final Block CHARNIA_GREEN = registerBlock("charnia_green", new CharniaBlock()); - + public static final Block END_LILY = registerEndBlockOnly("end_lily", new EndLilyBlock()); public static final Block END_LILY_SEED = registerBlock("end_lily_seed", new EndLilySeedBlock()); - - public static final Block HYDRALUX_SAPLING = registerBlock("hydralux_sapling", new HydraluxSaplingBlock()); + + public static final Block HYDRALUX_SAPLING = registerBlock("hydralux_sapling", new HydraluxSaplingBlock()); public static final Block HYDRALUX = registerEndBlockOnly("hydralux", new HydraluxBlock()); public static final Block HYDRALUX_PETAL_BLOCK = registerBlock("hydralux_petal_block", new HydraluxPetalBlock()); public static final ColoredMaterial HYDRALUX_PETAL_BLOCK_COLORED = new ColoredMaterial(HydraluxPetalColoredBlock::new, HYDRALUX_PETAL_BLOCK, true); - + public static final Block POND_ANEMONE = registerBlock("pond_anemone", new PondAnemoneBlock()); - + public static final Block FLAMAEA = registerBlock("flamaea", new FlamaeaBlock()); - + public static final Block CAVE_BUSH = registerBlock("cave_bush", new SimpleLeavesBlock(MaterialColor.COLOR_MAGENTA)); - + public static final Block MURKWEED = registerBlock("murkweed", new MurkweedBlock()); public static final Block NEEDLEGRASS = registerBlock("needlegrass", new NeedlegrassBlock()); - + // Wall Plants // public static final Block PURPLE_POLYPORE = registerBlock("purple_polypore", new EndWallMushroom(13)); public static final Block AURANT_POLYPORE = registerBlock("aurant_polypore", new EndWallMushroom(13)); @@ -364,7 +265,7 @@ public class EndBlocks extends BlocksRegistry { public static final Block BULB_MOSS = registerBlock("bulb_moss", new EndWallPlantBlock(12)); public static final Block JUNGLE_FERN = registerBlock("jungle_fern", new EndWallPlantBlock()); public static final Block RUSCUS = registerBlock("ruscus", new EndWallPlantBlock()); - + // Vines // public static final Block DENSE_VINE = registerBlock("dense_vine", new BaseVineBlock(15, true)); public static final Block TWISTED_VINE = registerBlock("twisted_vine", new BaseVineBlock()); @@ -376,30 +277,30 @@ public class EndBlocks extends BlocksRegistry { public static final Block FILALUX = registerBlock("filalux", new FilaluxBlock()); public static final Block FILALUX_WINGS = registerBlock("filalux_wings", new FilaluxWingsBlock()); public static final Block FILALUX_LANTERN = registerBlock("filalux_lantern", new FilaluxLanternBlock()); - + // Mob-Related public static final Block SILK_MOTH_NEST = registerBlock("silk_moth_nest", new SilkMothNestBlock()); public static final Block SILK_MOTH_HIVE = registerBlock("silk_moth_hive", new SilkMothHiveBlock()); - + // Ores // public static final Block ENDER_ORE = registerBlock("ender_ore", new BaseOreBlock(EndItems.ENDER_SHARD, 1, 3, 5)); public static final Block AMBER_ORE = registerBlock("amber_ore", new BaseOreBlock(EndItems.RAW_AMBER, 1, 2, 4)); - + // Materials // public static final MetalMaterial THALLASIUM = MetalMaterial.makeNormal("thallasium", MaterialColor.COLOR_BLUE, EndToolMaterial.THALLASIUM, EndArmorMaterial.THALLASIUM); public static final MetalMaterial TERMINITE = MetalMaterial.makeOreless("terminite", MaterialColor.WARPED_WART_BLOCK, 7F, 9F, EndToolMaterial.TERMINITE, EndArmorMaterial.TERMINITE); public static final Block AETERNIUM_BLOCK = registerBlock("aeternium_block", new AeterniumBlock()); public static final Block CHARCOAL_BLOCK = registerBlock("charcoal_block", new CharcoalBlock()); - + public static final Block ENDER_BLOCK = registerBlock("ender_block", new EnderBlock()); public static final Block AURORA_CRYSTAL = registerBlock("aurora_crystal", new AuroraCrystalBlock()); public static final Block AMBER_BLOCK = registerBlock("amber_block", new AmberBlock()); - public static final Block SMARAGDANT_CRYSTAL_SHARD = registerBlock("smaragdant_crystal_shard", new SmaragdantCrystalShardBlock()); public static final Block SMARAGDANT_CRYSTAL = registerBlock("smaragdant_crystal", new SmaragdantCrystalBlock()); public static final CrystalSubblocksMaterial SMARAGDANT_SUBBLOCKS = new CrystalSubblocksMaterial("smaragdant_crystal", SMARAGDANT_CRYSTAL); - + public static final Block SMARAGDANT_CRYSTAL_SHARD = registerBlock("smaragdant_crystal_shard", new SmaragdantCrystalShardBlock()); + public static final Block RESPAWN_OBELISK = registerBlock("respawn_obelisk", new RespawnObeliskBlock()); - + // Lanterns public static final Block ANDESITE_LANTERN = registerBlock("andesite_lantern", new StoneLanternBlock(Blocks.ANDESITE)); public static final Block DIORITE_LANTERN = registerBlock("diorite_lantern", new StoneLanternBlock(Blocks.DIORITE)); @@ -408,20 +309,20 @@ public class EndBlocks extends BlocksRegistry { public static final Block PURPUR_LANTERN = registerBlock("purpur_lantern", new StoneLanternBlock(Blocks.PURPUR_BLOCK)); public static final Block END_STONE_LANTERN = registerBlock("end_stone_lantern", new StoneLanternBlock(Blocks.END_STONE)); public static final Block BLACKSTONE_LANTERN = registerBlock("blackstone_lantern", new StoneLanternBlock(Blocks.BLACKSTONE)); - + public static final Block IRON_BULB_LANTERN = registerBlock("iron_bulb_lantern", new BulbVineLanternBlock()); public static final ColoredMaterial IRON_BULB_LANTERN_COLORED = new ColoredMaterial(BulbVineLanternColoredBlock::new, IRON_BULB_LANTERN, false); - + public static final Block IRON_CHANDELIER = EndBlocks.registerBlock("iron_chandelier", new ChandelierBlock(Blocks.GOLD_BLOCK)); public static final Block GOLD_CHANDELIER = EndBlocks.registerBlock("gold_chandelier", new ChandelierBlock(Blocks.GOLD_BLOCK)); - + // Blocks With Entity // public static final Block END_STONE_FURNACE = registerBlock("end_stone_furnace", new BaseFurnaceBlock(Blocks.END_STONE)); public static final Block END_STONE_SMELTER = registerBlock("end_stone_smelter", new EndStoneSmelter()); public static final Block ETERNAL_PEDESTAL = registerBlock("eternal_pedestal", new EternalPedestal()); public static final Block INFUSION_PEDESTAL = registerBlock("infusion_pedestal", new InfusionPedestal()); public static final Block AETERNIUM_ANVIL = registerBlock("aeternium_anvil", new AeterniumAnvil()); - + // Technical public static final Block END_PORTAL_BLOCK = registerEndBlockOnly("end_portal_block", new EndPortalBlock()); @@ -455,11 +356,11 @@ public class EndBlocks extends BlocksRegistry { getBlockRegistry().register(id, block); return block; } - + public static Block registerBlock(String name, Block block) { return registerBlock(BetterEnd.makeID(name), block); } - + public static Block registerEndBlockOnly(String name, Block block) { return getBlockRegistry().registerBlockOnly(name, block); } diff --git a/src/main/java/ru/betterend/registry/EndEntities.java b/src/main/java/ru/betterend/registry/EndEntities.java index 6cb84eaf..0dedbfac 100644 --- a/src/main/java/ru/betterend/registry/EndEntities.java +++ b/src/main/java/ru/betterend/registry/EndEntities.java @@ -8,7 +8,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType.EntityFactory; -import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.MobCategory; import net.minecraft.world.entity.ai.attributes.AttributeSupplier.Builder; import ru.bclib.util.ColorUtil; @@ -29,7 +29,7 @@ public class EndEntities { public static final EntityType SHADOW_WALKER = register("shadow_walker", MobCategory.MONSTER, 0.6F, 1.95F, ShadowWalkerEntity::new, ShadowWalkerEntity.createMobAttributes(), true, ColorUtil.color(30, 30, 30), ColorUtil.color(5, 5, 5)); public static final EntityType CUBOZOA = register("cubozoa", MobCategory.WATER_AMBIENT, 0.6F, 1F, CubozoaEntity::new, CubozoaEntity.createMobAttributes(), true, ColorUtil.color(151, 77, 181), ColorUtil.color(93, 176, 238)); public static final EntityType SILK_MOTH = register("silk_moth", MobCategory.AMBIENT, 0.6F, 0.6F, SilkMothEntity::new, SilkMothEntity.createMobAttributes(), true, ColorUtil.color(198, 138, 204), ColorUtil.color(242, 220, 236)); - + public static void register() { SpawnHelper.restrictionAir(DRAGONFLY, DragonflyEntity::canSpawn); SpawnHelper.restrictionLand(END_SLIME, EndSlimeEntity::canSpawn); @@ -38,7 +38,7 @@ public class EndEntities { SpawnHelper.restrictionWater(CUBOZOA, CubozoaEntity::canSpawn); SpawnHelper.restrictionAir(SILK_MOTH, SilkMothEntity::canSpawn); } - + protected static EntityType register(String name, MobCategory group, float width, float height, EntityFactory entity) { ResourceLocation id = BetterEnd.makeID(name); EntityType type = FabricEntityTypeBuilder.create(group, entity).dimensions(EntityDimensions.fixed(width, height)).build(); @@ -47,8 +47,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/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index f3fa3bb3..30384554 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -1,83 +1,32 @@ package ru.betterend.registry; -import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry; +import java.util.function.Function; + 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.DragonflyEntityModel; -import ru.betterend.entity.model.EndFishEntityModel; -import ru.betterend.entity.model.EndSlimeEntityModel; -import ru.betterend.entity.model.SilkMothEntityModel; 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.CrystaliteBootsModel; -import ru.betterend.item.model.CrystaliteChestplateModel; -import ru.betterend.item.model.CrystaliteHelmetModel; -import ru.betterend.item.model.CrystaliteLeggingsModel; public class EndEntitiesRenders { - - 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 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 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); - 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, 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); - 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); - EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_HELMET, CrystaliteHelmetModel::getTexturedModelData); - EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_LEGGINGS, CrystaliteLeggingsModel::getTexturedModelData); - EntityModelLayerRegistry.registerModelLayer(CRYSTALITE_BOOTS, CrystaliteBootsModel::getTexturedModelData); + 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); } - - 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 void register(EntityType type, Function> render) { + EntityRendererRegistry.INSTANCE.register(type, (entityRenderDispatcher, context) -> { + return render.apply(entityRenderDispatcher); }); } - - private static ModelLayerLocation registerMain(String id) { - return new ModelLayerLocation(new ResourceLocation(BetterEnd.MOD_ID, id), "main"); - } } diff --git a/src/main/java/ru/betterend/registry/EndFeatures.java b/src/main/java/ru/betterend/registry/EndFeatures.java index 295f4059..0983d21f 100644 --- a/src/main/java/ru/betterend/registry/EndFeatures.java +++ b/src/main/java/ru/betterend/registry/EndFeatures.java @@ -1,6 +1,10 @@ package ru.betterend.registry; +import java.util.List; +import java.util.function.Supplier; + import com.google.common.collect.Lists; + import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.Block; @@ -78,9 +82,6 @@ import ru.betterend.world.features.trees.TenaneaFeature; import ru.betterend.world.features.trees.UmbrellaTreeFeature; import ru.betterend.world.generator.GeneratorOptions; -import java.util.List; -import java.util.function.Supplier; - public class EndFeatures { // Trees // public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3); @@ -93,7 +94,7 @@ public class EndFeatures { public static final BCLFeature JELLYSHROOM = redisterVegetation("jellyshroom", new JellyshroomFeature(), 3); public static final BCLFeature GIGANTIC_AMARANITA = redisterVegetation("gigantic_amaranita", new GiganticAmaranitaFeature(), 1); public static final BCLFeature LUCERNIA = redisterVegetation("lucernia", new LucerniaFeature(), 3); - + // Bushes // public static final BCLFeature PYTHADENDRON_BUSH = redisterVegetation("pythadendron_bush", new BushFeature(EndBlocks.PYTHADENDRON_LEAVES, EndBlocks.PYTHADENDRON.bark), 4); public static final BCLFeature DRAGON_TREE_BUSH = redisterVegetation("dragon_tree_bush", new BushFeature(EndBlocks.DRAGON_TREE_LEAVES, EndBlocks.DRAGON_TREE.bark), 15); @@ -103,7 +104,7 @@ public class EndFeatures { public static final BCLFeature LUCERNIA_BUSH = redisterVegetation("lucernia_bush", new BushWithOuterFeature(EndBlocks.LUCERNIA_LEAVES, EndBlocks.LUCERNIA_OUTER_LEAVES, EndBlocks.LUCERNIA.bark), 10); public static final BCLFeature LUCERNIA_BUSH_RARE = redisterVegetation("lucernia_bush_rare", new BushWithOuterFeature(EndBlocks.LUCERNIA_LEAVES, EndBlocks.LUCERNIA_OUTER_LEAVES, EndBlocks.LUCERNIA.bark), 1); public static final BCLFeature NEON_CACTUS = redisterVegetation("neon_cactus", new NeonCactusFeature(), 2); - + // Plants // public static final BCLFeature UMBRELLA_MOSS = redisterVegetation("umbrella_moss", new DoublePlantFeature(EndBlocks.UMBRELLA_MOSS, EndBlocks.UMBRELLA_MOSS_TALL, 5), 5); public static final BCLFeature CREEPING_MOSS = redisterVegetation("creeping_moss", new SinglePlantFeature(EndBlocks.CREEPING_MOSS, 5), 5); @@ -141,16 +142,16 @@ public class EndFeatures { public static final BCLFeature CHORUS_MUSHROOM = redisterVegetation("chorus_mushroom", new SinglePlantFeature(EndBlocks.CHORUS_MUSHROOM, 5, 5), 1); public static final BCLFeature AMBER_ROOT = redisterVegetation("amber_root", new SinglePlantFeature(EndBlocks.AMBER_ROOT, 5, 5), 1); //public static final BCLFeature PEARLBERRY = redisterVegetation("pearlberry", new SinglePlantFeature(EndBlocks.PEARLBERRY, 5, 5), 1); - + // Vines // public static final BCLFeature DENSE_VINE = redisterVegetation("dense_vine", new VineFeature(EndBlocks.DENSE_VINE, 24), 3); public static final BCLFeature TWISTED_VINE = redisterVegetation("twisted_vine", new VineFeature(EndBlocks.TWISTED_VINE, 24), 3); public static final BCLFeature BULB_VINE = redisterVegetation("bulb_vine", new VineFeature(EndBlocks.BULB_VINE, 24), 5); public static final BCLFeature JUNGLE_VINE = redisterVegetation("jungle_vine", new VineFeature(EndBlocks.JUNGLE_VINE, 24), 5); - + // Ceil plants public static final BCLFeature SMALL_JELLYSHROOM_CEIL = redisterVegetation("small_jellyshroom_ceil", new SingleInvertedScatterFeature(EndBlocks.SMALL_JELLYSHROOM, 8), 8); - + // Wall Plants // public static final BCLFeature PURPLE_POLYPORE = redisterVegetation("purple_polypore", new WallPlantOnLogFeature(EndBlocks.PURPLE_POLYPORE, 3), 5); public static final BCLFeature AURANT_POLYPORE = redisterVegetation("aurant_polypore", new WallPlantOnLogFeature(EndBlocks.AURANT_POLYPORE, 3), 5); @@ -167,10 +168,10 @@ public class EndFeatures { public static final BCLFeature JUNGLE_FERN_WOOD = redisterVegetation("jungle_fern_wood", new WallPlantOnLogFeature(EndBlocks.JUNGLE_FERN, 3), 12); public static final BCLFeature RUSCUS = redisterVegetation("ruscus", new WallPlantFeature(EndBlocks.RUSCUS, 6), 10); public static final BCLFeature RUSCUS_WOOD = redisterVegetation("ruscus_wood", new WallPlantOnLogFeature(EndBlocks.RUSCUS, 6), 10); - + // Sky plants public static final BCLFeature FILALUX = redisterVegetation("filalux", new FilaluxFeature(), 1); - + // Water // public static final BCLFeature BUBBLE_CORAL = redisterVegetation("bubble_coral", new UnderwaterPlantFeature(EndBlocks.BUBBLE_CORAL, 6), 10); public static final BCLFeature BUBBLE_CORAL_RARE = redisterVegetation("bubble_coral_rare", new UnderwaterPlantFeature(EndBlocks.BUBBLE_CORAL, 3), 4); @@ -180,7 +181,7 @@ public class EndFeatures { public static final BCLFeature END_LOTUS_LEAF = redisterVegetation("end_lotus_leaf", new EndLotusLeafFeature(20), 25); public static final BCLFeature HYDRALUX = redisterVegetation("hydralux", new HydraluxFeature(5), 5); public static final BCLFeature POND_ANEMONE = redisterVegetation("pond_anemone", new UnderwaterPlantFeature(EndBlocks.POND_ANEMONE, 6), 10); - + public static final BCLFeature CHARNIA_RED = redisterVegetation("charnia_red", new CharniaFeature(EndBlocks.CHARNIA_RED), 10); public static final BCLFeature CHARNIA_PURPLE = redisterVegetation("charnia_purple", new CharniaFeature(EndBlocks.CHARNIA_PURPLE), 10); public static final BCLFeature CHARNIA_CYAN = redisterVegetation("charnia_cyan", new CharniaFeature(EndBlocks.CHARNIA_CYAN), 10); @@ -191,17 +192,17 @@ public class EndFeatures { public static final BCLFeature CHARNIA_RED_RARE = redisterVegetation("charnia_red_rare", new CharniaFeature(EndBlocks.CHARNIA_RED), 2); public static final BCLFeature BIOME_ISLAND = BCLFeature.makeFeatureConfigured(BetterEnd.makeID("overworld_island"), new BiomeIslandFeature()); public static final BCLFeature FLAMAEA = redisterVegetation("flamaea", new SinglePlantFeature(EndBlocks.FLAMAEA, 12, false, 5), 20); - + // Terrain // - public static final BCLFeature END_LAKE = registerLake("end_lake", new EndLakeFeature(), 4); - public static final BCLFeature END_LAKE_NORMAL = registerLake("end_lake_normal", new EndLakeFeature(), 20); - public static final BCLFeature END_LAKE_RARE = registerLake("end_lake_rare", new EndLakeFeature(), 40); - public static final BCLFeature DESERT_LAKE = registerLake("desert_lake", new DesertLakeFeature(), 8); + public static final BCLFeature END_LAKE= registerLake("end_lake", new EndLakeFeature(), 4); + public static final BCLFeature END_LAKE_NORMAL= registerLake("end_lake_normal", new EndLakeFeature(), 20); + public static final BCLFeature END_LAKE_RARE= registerLake("end_lake_rare", new EndLakeFeature(), 40); + public static final BCLFeature DESERT_LAKE= registerLake("desert_lake", new DesertLakeFeature(), 8); public static final BCLFeature ROUND_CAVE = registerRawGen("round_cave", new RoundCaveFeature(), 2); public static final BCLFeature SPIRE = registerRawGen("spire", new SpireFeature(), 2); public static final BCLFeature FLOATING_SPIRE = registerRawGen("floating_spire", new FloatingSpireFeature(), 8); public static final BCLFeature GEYSER = registerRawGen("geyser", new GeyserFeature(), 8); - public static final BCLFeature SULPHURIC_LAKE = registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8); + public static final BCLFeature SULPHURIC_LAKE= registerLake("sulphuric_lake", new SulphuricLakeFeature(), 8); public static final BCLFeature SULPHURIC_CAVE = BCLFeature.makeCountRawFeature(BetterEnd.makeID("sulphuric_cave"), new SulphuricCaveFeature(), 2); public static final BCLFeature ICE_STAR = registerRawGen("ice_star", new IceStarFeature(5, 15, 10, 25), 15); public static final BCLFeature ICE_STAR_SMALL = registerRawGen("ice_star_small", new IceStarFeature(3, 5, 7, 12), 8); @@ -211,20 +212,20 @@ public class EndFeatures { public static final BCLFeature OBSIDIAN_BOULDER = registerChanced("obsidian_boulder", new ObsidianBoulderFeature(), 10); public static final BCLFeature FALLEN_PILLAR = registerChanced("fallen_pillar", new FallenPillarFeature(), 20); public static final BCLFeature TUNEL_CAVE = BCLFeature.makeChunkFeature(BetterEnd.makeID("tunel_cave"), new TunelCaveFeature()); - + // Ores // - public static final BCLFeature THALLASIUM_ORE = registerOre("thallasium_ore", EndBlocks.THALLASIUM.ore, 24, 8, 0, 5, 128); - public static final BCLFeature ENDER_ORE = registerOre("ender_ore", EndBlocks.ENDER_ORE, 12, 4, 0, 5, 128); - public static final BCLFeature AMBER_ORE = registerOre("amber_ore", EndBlocks.AMBER_ORE, 24, 6, 0, 5, 128); + public static final BCLFeature THALLASIUM_ORE = registerOre("thallasium_ore", EndBlocks.THALLASIUM.ore, 12, 6, 0, 16, 128); + public static final BCLFeature ENDER_ORE = registerOre("ender_ore", EndBlocks.ENDER_ORE, 8, 3, 0, 16, 128); + public static final BCLFeature AMBER_ORE = registerOre("amber_ore", EndBlocks.AMBER_ORE, 12, 6, 0, 16, 128); public static final BCLFeature VIOLECITE_LAYER = registerLayer("violecite_layer", EndBlocks.VIOLECITE, 15, 16, 128, 8); public static final BCLFeature FLAVOLITE_LAYER = registerLayer("flavolite_layer", EndBlocks.FLAVOLITE, 12, 16, 128, 6); - + // Buildings public static final BCLFeature CRASHED_SHIP = registerChanced("crashed_ship", new CrashedShipFeature(), 500); - + // Mobs public static final BCLFeature SILK_MOTH_NEST = registerChanced("silk_moth_nest", new SilkMothNestFeature(), 2); - + // Caves public static final DefaultFeature SMARAGDANT_CRYSTAL = new SmaragdantCrystalFeature(); public static final DefaultFeature SMARAGDANT_CRYSTAL_SHARD = new SingleBlockFeature(EndBlocks.SMARAGDANT_CRYSTAL_SHARD); @@ -238,43 +239,42 @@ 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); } - + private static BCLFeature registerRawGen(String name, Feature feature, int chance) { return BCLFeature.makeRawGenFeature(BetterEnd.makeID(name), feature, chance); } - + private static BCLFeature registerLake(String name, Feature feature, int chance) { - //return BCLFeature.makeLakeFeature(BetterEnd.makeID(name), feature, chance); - return BCLFeature.makeRawGenFeature(BetterEnd.makeID(name), feature, chance); + return BCLFeature.makeLakeFeature(BetterEnd.makeID(name), feature, chance); } - + private static BCLFeature registerChanced(String name, Feature feature, int chance) { return BCLFeature.makeChansedFeature(BetterEnd.makeID(name), feature, chance); } - + private static BCLFeature registerOre(String name, Block blockOre, int veins, int veinSize, int offset, int minY, int maxY) { return BCLFeature.makeOreFeature(BetterEnd.makeID(name), blockOre, veins, veinSize, offset, minY, maxY); } - + private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) { OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY); ConfiguredFeature configured = layer.configured(FeatureConfiguration.NONE).decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count))); return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured); } - + private static BCLFeature registerLayer(String name, StoneMaterial material, float radius, int minY, int maxY, int count) { return registerLayer(name, material.stone, radius, minY, maxY, count); } - + public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List>>> features) { if (id.getNamespace().equals(BetterEnd.MOD_ID)) { return; } - + if (GeneratorOptions.removeChorusFromVanillaBiomes()) { if (id.getNamespace().equals("minecraft")) { String path = id.getPath(); @@ -290,38 +290,38 @@ public class EndFeatures { } } } - + addFeature(FLAVOLITE_LAYER, features); addFeature(THALLASIUM_ORE, features); addFeature(ENDER_ORE, features); addFeature(CRASHED_SHIP, features); - + BCLBiome bclbiome = BiomeAPI.getBiome(id); boolean hasCaves = bclbiome.getCustomData("has_caves", true); if (hasCaves && !EndBiomes.VOID_BIOMES.containsImmutable(id)) { addFeature(ROUND_CAVE, features); addFeature(TUNEL_CAVE, features); } - + BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature(); if (feature != null) { addFeature(feature, features); } } - + public static void addDefaultFeatures(BCLBiomeDef def) { def.addFeature(FLAVOLITE_LAYER); def.addFeature(THALLASIUM_ORE); def.addFeature(ENDER_ORE); def.addFeature(CRASHED_SHIP); - + boolean hasCaves = def.getCustomData("has_caves", true); if (hasCaves) { def.addFeature(ROUND_CAVE); def.addFeature(TUNEL_CAVE); } } - + private static void addFeature(BCLFeature feature, List>>> features) { int index = feature.getFeatureStep().ordinal(); if (features.size() > index) { @@ -337,7 +337,6 @@ public class EndFeatures { features.add(newFeature); } } - - public static void register() { - } + + public static void register() {} } diff --git a/src/main/java/ru/betterend/registry/EndItems.java b/src/main/java/ru/betterend/registry/EndItems.java index cbfd428a..f37b456a 100644 --- a/src/main/java/ru/betterend/registry/EndItems.java +++ b/src/main/java/ru/betterend/registry/EndItems.java @@ -1,5 +1,9 @@ package ru.betterend.registry; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + import net.fabricmc.fabric.api.item.v1.FabricItemSettings; import net.minecraft.resources.ResourceLocation; import net.minecraft.sounds.SoundEvent; @@ -7,7 +11,6 @@ import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.Mob; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.food.Foods; import net.minecraft.world.item.ArmorItem; @@ -16,10 +19,10 @@ import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; import net.minecraft.world.item.TieredItem; import net.minecraft.world.item.Tiers; -import org.jetbrains.annotations.NotNull; import ru.bclib.items.BaseArmorItem; import ru.bclib.items.tool.BaseAxeItem; import ru.bclib.items.tool.BaseHoeItem; +import ru.bclib.items.tool.BasePickaxeItem; import ru.bclib.items.tool.BaseShovelItem; import ru.bclib.items.tool.BaseSwordItem; import ru.bclib.registry.ItemsRegistry; @@ -37,11 +40,8 @@ import ru.betterend.item.EternalCrystalItem; import ru.betterend.item.material.EndArmorMaterial; import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.tool.EndHammerItem; -import ru.betterend.item.tool.EndPickaxe; import ru.betterend.tab.CreativeTabs; -import java.util.List; - public class EndItems extends ItemsRegistry { // Materials // public final static Item ENDER_DUST = registerEndItem("ender_dust"); @@ -71,7 +71,7 @@ public class EndItems extends ItemsRegistry { public final static Item MUSIC_DISC_GRASPING_AT_STARS = registerEndDisc("music_disc_grasping_at_stars", 0, EndSounds.RECORD_GRASPING_AT_STARS); public final static Item MUSIC_DISC_ENDSEEKER = registerEndDisc("music_disc_endseeker", 0, EndSounds.RECORD_ENDSEEKER); public final static Item MUSIC_DISC_EO_DRACONA = registerEndDisc("music_disc_eo_dracona", 0, EndSounds.RECORD_EO_DRACONA); - + // Armor // public static final Item AETERNIUM_HELMET = registerEndItem("aeternium_helmet", new BaseArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.HEAD, makeEndItemSettings().fireResistant())); public static final Item AETERNIUM_CHESTPLATE = registerEndItem("aeternium_chestplate", new BaseArmorItem(EndArmorMaterial.AETERNIUM, EquipmentSlot.CHEST, makeEndItemSettings().fireResistant())); @@ -87,11 +87,11 @@ public class EndItems extends ItemsRegistry { // Tools // public static final TieredItem AETERNIUM_SHOVEL = registerEndTool("aeternium_shovel", new BaseShovelItem(EndToolMaterial.AETERNIUM, 1.5F, -3.0F, makeEndItemSettings().fireResistant())); public static final TieredItem AETERNIUM_SWORD = registerEndTool("aeternium_sword", new BaseSwordItem(EndToolMaterial.AETERNIUM, 3, -2.4F, makeEndItemSettings().fireResistant())); - public static final TieredItem AETERNIUM_PICKAXE = registerEndTool("aeternium_pickaxe", new EndPickaxe(EndToolMaterial.AETERNIUM, 1, -2.8F, makeEndItemSettings().fireResistant())); + public static final TieredItem AETERNIUM_PICKAXE = registerEndTool("aeternium_pickaxe", new BasePickaxeItem(EndToolMaterial.AETERNIUM, 1, -2.8F, makeEndItemSettings().fireResistant())); public static final TieredItem AETERNIUM_AXE = registerEndTool("aeternium_axe", new BaseAxeItem(EndToolMaterial.AETERNIUM, 5.0F, -3.0F, makeEndItemSettings().fireResistant())); public static final TieredItem AETERNIUM_HOE = registerEndTool("aeternium_hoe", new BaseHoeItem(EndToolMaterial.AETERNIUM, -3, 0.0F, makeEndItemSettings().fireResistant())); public static final TieredItem AETERNIUM_HAMMER = registerEndTool("aeternium_hammer", new EndHammerItem(EndToolMaterial.AETERNIUM, 6.0F, -3.0F, 0.3D, makeEndItemSettings().fireResistant())); - + // Toolparts // public final static Item AETERNIUM_SHOVEL_HEAD = registerEndItem("aeternium_shovel_head"); public final static Item AETERNIUM_PICKAXE_HEAD = registerEndItem("aeternium_pickaxe_head"); @@ -106,14 +106,14 @@ public class EndItems extends ItemsRegistry { public static final TieredItem GOLDEN_HAMMER = registerEndTool("golden_hammer", new EndHammerItem(Tiers.GOLD, 4.5F, -3.4F, 0.3D, makeEndItemSettings())); public static final TieredItem DIAMOND_HAMMER = registerEndTool("diamond_hammer", new EndHammerItem(Tiers.DIAMOND, 5.5F, -3.1F, 0.2D, makeEndItemSettings())); public static final TieredItem NETHERITE_HAMMER = registerEndTool("netherite_hammer", new EndHammerItem(Tiers.NETHERITE, 5.0F, -3.0F, 0.2D, makeEndItemSettings().fireResistant())); - + // Food // public final static Item SHADOW_BERRY_RAW = registerEndFood("shadow_berry_raw", 4, 0.5F); public final static Item SHADOW_BERRY_COOKED = registerEndFood("shadow_berry_cooked", 6, 0.7F); public final static Item END_FISH_RAW = registerEndFood("end_fish_raw", Foods.SALMON); public final static Item END_FISH_COOKED = registerEndFood("end_fish_cooked", Foods.COOKED_SALMON); public final static Item BUCKET_END_FISH = registerEndItem("bucket_end_fish", new EndBucketItem(EndEntities.END_FISH)); - public final static Item BUCKET_CUBOZOA = registerEndItem("bucket_cubozoa", new EndBucketItem(EndEntities.CUBOZOA)); + public final static Item BUCKET_CUBOZOA = registerEndItem("bucket_cubozoa", new EndBucketItem(EndEntities.CUBOZOA)); public final static Item SWEET_BERRY_JELLY = registerEndFood("sweet_berry_jelly", 8, 0.7F); public final static Item SHADOW_BERRY_JELLY = registerEndFood("shadow_berry_jelly", 6, 0.8F, new MobEffectInstance(MobEffects.NIGHT_VISION, 400)); public final static Item BLOSSOM_BERRY_JELLY = registerEndFood("blossom_berry_jelly", 8, 0.7F); @@ -140,15 +140,15 @@ public class EndItems extends ItemsRegistry { public static Item registerEndDisc(String name, int power, SoundEvent sound) { return getItemRegistry().registerDisc(name, power, sound); } - + public static Item registerEndItem(String name) { return getItemRegistry().registerItem(name); } - + public static Item registerEndItem(String name, Item item) { return getItemRegistry().register(BetterEnd.makeID(name), item); } - + public static Item registerEndItem(ResourceLocation id, Item item) { if (item instanceof ArmorItem) { return registerEndArmor(id, item); @@ -159,7 +159,7 @@ public class EndItems extends ItemsRegistry { getItemRegistry().register(id, item); return item; } - + private static Item registerEndArmor(ResourceLocation itemId, Item item) { if (!Configs.ITEM_CONFIG.getBoolean("armor", itemId.getPath(), true)) { return item; @@ -167,34 +167,34 @@ public class EndItems extends ItemsRegistry { getItemRegistry().register(itemId, item); return item; } - + public static TieredItem registerEndTool(String name, TieredItem item) { if (!Configs.ITEM_CONFIG.getBoolean("tools", name, true)) { return item; } 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); } - + public static Item registerEndFood(String name, int hunger, float saturation, MobEffectInstance... effects) { return getItemRegistry().registerFood(name, hunger, saturation, effects); } - + public static Item registerEndFood(String name, FoodProperties foodComponent) { return getItemRegistry().registerFood(name, foodComponent); } - + public static Item registerEndDrink(String name) { return getItemRegistry().registerDrink(name); } - + public static Item registerEndDrink(String name, FoodProperties foodComponent) { return getItemRegistry().registerDrink(name, foodComponent); } - + public static Item registerEndDrink(String name, int hunger, float saturation) { return getItemRegistry().registerDrink(name, hunger, saturation); } diff --git a/src/main/java/ru/betterend/registry/EndModelProviders.java b/src/main/java/ru/betterend/registry/EndModelProviders.java index 3c7d2dd3..80952641 100644 --- a/src/main/java/ru/betterend/registry/EndModelProviders.java +++ b/src/main/java/ru/betterend/registry/EndModelProviders.java @@ -2,14 +2,14 @@ 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; -import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; @Environment(EnvType.CLIENT) 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()); diff --git a/src/main/java/ru/betterend/registry/EndParticles.java b/src/main/java/ru/betterend/registry/EndParticles.java index 0b8e1d49..2fb673a6 100644 --- a/src/main/java/ru/betterend/registry/EndParticles.java +++ b/src/main/java/ru/betterend/registry/EndParticles.java @@ -33,7 +33,7 @@ public class EndParticles { public static final SimpleParticleType JUNGLE_SPORE = register("jungle_spore"); public static final SimpleParticleType FIREFLY = register("firefly"); public static final SimpleParticleType SMARAGDANT = register("smaragdant_particle"); - + public static void register() { ParticleFactoryRegistry.getInstance().register(GLOWING_SPHERE, ParticleGlowingSphere.FactoryGlowingSphere::new); ParticleFactoryRegistry.getInstance().register(PORTAL_SPHERE, PaticlePortalSphere.FactoryPortalSphere::new); @@ -48,15 +48,15 @@ public class EndParticles { ParticleFactoryRegistry.getInstance().register(FIREFLY, FireflyParticle.FireflyParticleFactory::new); ParticleFactoryRegistry.getInstance().register(SMARAGDANT, SmaragdantParticle.SmaragdantParticleFactory::new); } - + private static SimpleParticleType register(String name) { return Registry.register(Registry.PARTICLE_TYPE, BetterEnd.makeID(name), FabricParticleTypes.simple()); } - + private static SimpleParticleType registerFar(String name) { return Registry.register(Registry.PARTICLE_TYPE, BetterEnd.makeID(name), FabricParticleTypes.simple(true)); } - + private static ParticleType register(String name, ParticleType type) { return Registry.register(Registry.PARTICLE_TYPE, BetterEnd.makeID(name), type); } diff --git a/src/main/java/ru/betterend/registry/EndPortals.java b/src/main/java/ru/betterend/registry/EndPortals.java index 221a7c63..e09d0ac2 100644 --- a/src/main/java/ru/betterend/registry/EndPortals.java +++ b/src/main/java/ru/betterend/registry/EndPortals.java @@ -1,7 +1,10 @@ package ru.betterend.registry; +import java.io.File; + import com.google.gson.JsonArray; import com.google.gson.JsonObject; + import net.fabricmc.loader.api.FabricLoader; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; @@ -12,22 +15,19 @@ import ru.bclib.util.JsonFactory; import ru.bclib.util.MHelper; import ru.betterend.BetterEnd; -import java.io.File; - public class EndPortals { public final static ResourceLocation OVERWORLD_ID = Level.OVERWORLD.location(); private static PortalInfo[] portals; - + public static void loadPortals() { File file = new File(FabricLoader.getInstance().getConfigDir().toString(), "betterend/portals.json"); JsonObject json; if (!file.exists()) { file.getParentFile().mkdirs(); json = makeDefault(file); - } - else { + } else { json = JsonFactory.getJsonObject(file); } if (!json.has("portals") || !json.get("portals").isJsonArray()) { @@ -43,11 +43,11 @@ public class EndPortals { portals[i] = new PortalInfo(array.get(i).getAsJsonObject()); } } - + public static int getCount() { return MHelper.max(portals.length - 1, 1); } - + public static ServerLevel getWorld(MinecraftServer server, int portalId) { if (portalId < 0 || portalId >= portals.length) { return server.overworld(); @@ -61,7 +61,7 @@ public class EndPortals { } return portals[portalId].dimension; } - + public static int getPortalIdByItem(ResourceLocation item) { for (int i = 0; i < portals.length; i++) { if (portals[i].item.equals(item)) { @@ -70,7 +70,6 @@ public class EndPortals { } return 0; } - public static int getPortalIdByWorld(ResourceLocation world) { for (int i = 0; i < portals.length; i++) { if (portals[i].dimension.equals(world)) { @@ -79,11 +78,11 @@ public class EndPortals { } return 0; } - + public static int getColor(int state) { return portals[state].color; } - + public static boolean isAvailableItem(ResourceLocation item) { for (PortalInfo portal : portals) { if (portal.item.equals(item)) { @@ -92,7 +91,7 @@ public class EndPortals { } return false; } - + private static JsonObject makeDefault(File file) { JsonObject jsonObject = new JsonObject(); JsonFactory.storeJson(file, jsonObject); @@ -102,33 +101,33 @@ public class EndPortals { JsonFactory.storeJson(file, jsonObject); return jsonObject; } - + private static PortalInfo makeDefault() { return new PortalInfo(new ResourceLocation("minecraft:overworld"), BetterEnd.makeID("eternal_crystal"), 255, 255, 255); } - + private static class PortalInfo { private final ResourceLocation dimension; private final ResourceLocation item; private final int color; private ServerLevel world; - + PortalInfo(JsonObject obj) { this( - new ResourceLocation(JsonFactory.getString(obj, "dimension", "minecraft:overworld")), - new ResourceLocation(JsonFactory.getString(obj, "item", "betterend:eternal_crystal")), - JsonFactory.getInt(obj, "colorRed", 255), - JsonFactory.getInt(obj, "colorGreen", 255), - JsonFactory.getInt(obj, "colorBlue", 255) + new ResourceLocation(JsonFactory.getString(obj, "dimension", "minecraft:overworld")), + new ResourceLocation(JsonFactory.getString(obj, "item", "betterend:eternal_crystal")), + JsonFactory.getInt(obj, "colorRed", 255), + JsonFactory.getInt(obj, "colorGreen", 255), + JsonFactory.getInt(obj, "colorBlue", 255) ); } - + PortalInfo(ResourceLocation dimension, ResourceLocation item, int r, int g, int b) { this.dimension = dimension; this.item = item; this.color = ColorUtil.color(r, g, b); } - + ServerLevel getWorld(MinecraftServer server) { if (world != null) { return world; @@ -141,7 +140,7 @@ public class EndPortals { } return server.overworld(); } - + JsonObject toJson() { JsonObject obj = new JsonObject(); obj.addProperty("dimension", dimension.toString()); diff --git a/src/main/java/ru/betterend/registry/EndSounds.java b/src/main/java/ru/betterend/registry/EndSounds.java index 825168a1..c0ecf7eb 100644 --- a/src/main/java/ru/betterend/registry/EndSounds.java +++ b/src/main/java/ru/betterend/registry/EndSounds.java @@ -11,7 +11,7 @@ public class EndSounds { public static final SoundEvent MUSIC_DARK = register("music", "dark"); public static final SoundEvent MUSIC_OPENSPACE = register("music", "openspace"); public static final SoundEvent MUSIC_CAVES = register("music", "caves"); - + // Ambient public static final SoundEvent AMBIENT_FOGGY_MUSHROOMLAND = register("ambient", "foggy_mushroomland"); public static final SoundEvent AMBIENT_CHORUS_FOREST = register("ambient", "chorus_forest"); @@ -23,23 +23,21 @@ public class EndSounds { public static final SoundEvent AMBIENT_UMBRELLA_JUNGLE = register("ambient", "umbrella_jungle"); public static final SoundEvent AMBIENT_GLOWING_GRASSLANDS = register("ambient", "glowing_grasslands"); public static final SoundEvent AMBIENT_CAVES = register("ambient", "caves"); - public static final SoundEvent AMBIENT_AMBER_LAND = register("ambient", "amber_land"); - + // Entity public static final SoundEvent ENTITY_DRAGONFLY = register("entity", "dragonfly"); public static final SoundEvent ENTITY_SHADOW_WALKER = register("entity", "shadow_walker"); public static final SoundEvent ENTITY_SHADOW_WALKER_DAMAGE = register("entity", "shadow_walker_damage"); public static final SoundEvent ENTITY_SHADOW_WALKER_DEATH = register("entity", "shadow_walker_death"); - + // Records public static final SoundEvent RECORD_STRANGE_AND_ALIEN = register("record", "strange_and_alien"); public static final SoundEvent RECORD_GRASPING_AT_STARS = register("record", "grasping_at_stars"); public static final SoundEvent RECORD_ENDSEEKER = register("record", "endseeker"); public static final SoundEvent RECORD_EO_DRACONA = register("record", "eo_dracona"); - - public static void register() { - } - + + public static void register() {} + private static SoundEvent register(String type, String id) { id = "betterend." + type + "." + id; return Registry.register(Registry.SOUND_EVENT, id, new SoundEvent(BetterEnd.makeID(id))); diff --git a/src/main/java/ru/betterend/registry/EndStructures.java b/src/main/java/ru/betterend/registry/EndStructures.java index fbea7076..c3ed2370 100644 --- a/src/main/java/ru/betterend/registry/EndStructures.java +++ b/src/main/java/ru/betterend/registry/EndStructures.java @@ -1,5 +1,8 @@ package ru.betterend.registry; +import java.util.Collection; +import java.util.function.Supplier; + import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.biome.Biome; @@ -22,9 +25,6 @@ import ru.betterend.world.structures.piece.NBTPiece; import ru.betterend.world.structures.piece.PaintedMountainPiece; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.Collection; -import java.util.function.Supplier; - public class EndStructures { public static final StructurePieceType VOXEL_PIECE = register("voxel", VoxelPiece::new); public static final StructurePieceType MOUNTAIN_PIECE = register("mountain_piece", CrystalMountainPiece::new); @@ -32,7 +32,7 @@ public class EndStructures { public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new); public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new); public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new); - + public static final EndStructureFeature GIANT_MOSSY_GLOWSHROOM = new EndStructureFeature("giant_mossy_glowshroom", new GiantMossyGlowshroomStructure(), Decoration.SURFACE_STRUCTURES, 16, 8); public static final EndStructureFeature MEGALAKE = new EndStructureFeature("megalake", new MegaLakeStructure(), Decoration.RAW_GENERATION, 4, 1); public static final EndStructureFeature MEGALAKE_SMALL = new EndStructureFeature("megalake_small", new MegaLakeSmallStructure(), Decoration.RAW_GENERATION, 4, 1); @@ -40,23 +40,20 @@ public class EndStructures { public static final EndStructureFeature PAINTED_MOUNTAIN = new EndStructureFeature("painted_mountain", new PaintedMountainStructure(), Decoration.RAW_GENERATION, 3, 2); public static final EndStructureFeature ETERNAL_PORTAL = new EndStructureFeature("eternal_portal", new EternalPortalStructure(), Decoration.SURFACE_STRUCTURES, 16, 6); public static final EndStructureFeature GIANT_ICE_STAR = new EndStructureFeature("giant_ice_star", new GiantIceStarStructure(), Decoration.SURFACE_STRUCTURES, 16, 8); - - public static void register() { - } - + + public static void register() {} + private static StructurePieceType register(String id, StructurePieceType pieceType) { return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType); } - + public static void registerBiomeStructures(ResourceLocation id, Biome biome, Collection>> structures) { if (!id.getPath().contains("mountain") && !id.getPath().contains("lake")) { addStructure(ETERNAL_PORTAL, structures); } } - + private static void addStructure(EndStructureFeature feature, Collection>> structures) { - structures.add(() -> { - return feature.getFeatureConfigured(); - }); + structures.add(() -> { return feature.getFeatureConfigured(); }); } } diff --git a/src/main/java/ru/betterend/registry/EndTags.java b/src/main/java/ru/betterend/registry/EndTags.java index 93bb51dc..7ce95c65 100644 --- a/src/main/java/ru/betterend/registry/EndTags.java +++ b/src/main/java/ru/betterend/registry/EndTags.java @@ -1,15 +1,22 @@ 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.item.Items; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.Block; @@ -27,20 +34,49 @@ import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.item.tool.EndHammerItem; import ru.betterend.mixin.common.ComposterBlockAccessor; -import java.util.List; - public class EndTags { // Table with common (c) tags: // https://fabricmc.net/wiki/tutorial:tags - + // Block Tags - 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 PEDESTALS = makeBlockTag("pedestal"); + public static final Tag.Named END_STONES = makeCommonBlockTag("end_stones"); + public static final Tag.Named DRAGON_IMMUNE = getMCBlockTag("dragon_immune"); + + // Item Tags + public final static Tag.Named HAMMERS = makeFabricItemTag("hammers"); - public static final Tag.Named ALLOYING_IRON = TagAPI.makeItemTag(BetterEnd.MOD_ID, "alloying_iron"); - public static final Tag.Named ALLOYING_GOLD = TagAPI.makeItemTag(BetterEnd.MOD_ID, "alloying_gold"); - public static final Tag.Named ALLOYING_COPPER = TagAPI.makeItemTag(BetterEnd.MOD_ID, "alloying_copper"); + 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 static void register() { TagAPI.addEndGround(EndBlocks.THALLASIUM.ore); TagAPI.addEndGround(EndBlocks.ENDSTONE_DUST); @@ -62,16 +98,14 @@ public class EndTags { else if (block instanceof PedestalBlock) { TagHelper.addTag(PEDESTALS, block); } - + Material mat = block.defaultBlockState().getMaterial(); if (mat.equals(Material.PLANT) || mat.equals(Material.REPLACEABLE_PLANT)) { 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(); EndItems.getModItems(BetterEnd.MOD_ID).forEach(item -> { if (item.isEdible()) { @@ -85,36 +119,32 @@ public class EndTags { hammers.add(item); } }); - ToolManagerImpl.tag(TagAPI.HAMMERS).register(new ModdedToolsVanillaBlocksToolHandler(hammers)); - + ToolManagerImpl.tag(HAMMERS).register(new ModdedToolsVanillaBlocksToolHandler(hammers)); + TagHelper.addTag( - TagAPI.GEN_TERRAIN, - EndBlocks.ENDER_ORE, - EndBlocks.FLAVOLITE.stone, - EndBlocks.VIOLECITE.stone, - EndBlocks.SULPHURIC_ROCK.stone, - EndBlocks.BRIMSTONE, - EndBlocks.VIRID_JADESTONE.stone, - EndBlocks.AZURE_JADESTONE.stone, - EndBlocks.SANDY_JADESTONE.stone + TagAPI.GEN_TERRAIN, + EndBlocks.ENDER_ORE, + EndBlocks.FLAVOLITE.stone, + EndBlocks.VIOLECITE.stone, + EndBlocks.SULPHURIC_ROCK.stone, + EndBlocks.BRIMSTONE, + EndBlocks.VIRID_JADESTONE.stone, + EndBlocks.AZURE_JADESTONE.stone, + EndBlocks.SANDY_JADESTONE.stone ); TagHelper.addTag(TagAPI.END_GROUND, EndBlocks.SULPHURIC_ROCK.stone, EndBlocks.BRIMSTONE); TagHelper.addTag(BlockTags.ANVIL, EndBlocks.AETERNIUM_ANVIL); TagHelper.addTag(BlockTags.BEACON_BASE_BLOCKS, EndBlocks.AETERNIUM_BLOCK); TagHelper.addTag(ItemTags.BEACON_PAYMENT_ITEMS, EndItems.AETERNIUM_INGOT); - TagHelper.addTag(TagAPI.DRAGON_IMMUNE, - EndBlocks.ENDER_ORE, - EndBlocks.ETERNAL_PEDESTAL, - EndBlocks.FLAVOLITE_RUNED_ETERNAL, - EndBlocks.FLAVOLITE_RUNED + TagHelper.addTag(EndTags.DRAGON_IMMUNE, + EndBlocks.ENDER_ORE, + EndBlocks.ETERNAL_PEDESTAL, + EndBlocks.FLAVOLITE_RUNED_ETERNAL, + EndBlocks.FLAVOLITE_RUNED ); TagHelper.addTag(TagAPI.IRON_INGOTS, EndBlocks.THALLASIUM.ingot); - - TagHelper.addTag(ALLOYING_IRON, Items.IRON_ORE, Items.DEEPSLATE_IRON_ORE, Items.RAW_IRON); - TagHelper.addTag(ALLOYING_GOLD, Items.GOLD_ORE, Items.DEEPSLATE_GOLD_ORE, Items.RAW_GOLD); - TagHelper.addTag(ALLOYING_COPPER, Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER); } - + public static void addTerrainTags(Registry biomeRegistry) { biomeRegistry.forEach((biome) -> { if (biome.getBiomeCategory() == BiomeCategory.THEEND) { diff --git a/src/main/java/ru/betterend/rituals/EternalRitual.java b/src/main/java/ru/betterend/rituals/EternalRitual.java index 78586e7a..1d7ebbdc 100644 --- a/src/main/java/ru/betterend/rituals/EternalRitual.java +++ b/src/main/java/ru/betterend/rituals/EternalRitual.java @@ -1,7 +1,17 @@ package ru.betterend.rituals; +import java.awt.Point; +import java.util.List; +import java.util.Objects; +import java.util.Random; +import java.util.Set; +import java.util.function.Predicate; + +import org.jetbrains.annotations.Nullable; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Registry; @@ -27,7 +37,6 @@ import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.material.Material; -import org.jetbrains.annotations.Nullable; import ru.bclib.blocks.BlockProperties; import ru.betterend.BetterEnd; import ru.betterend.blocks.EndPortalBlock; @@ -37,13 +46,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndPortals; -import java.awt.Point; -import java.util.List; -import java.util.Objects; -import java.util.Random; -import java.util.Set; -import java.util.function.Predicate; - public class EternalRitual { private final static Set STRUCTURE_MAP = Sets.newHashSet( new Point(-4, -5), new Point(-4, 5), new Point(-6, 0), @@ -123,8 +125,7 @@ public class EternalRitual { Item pItem = pedestal.getItem(0).getItem(); if (item == null) { item = pItem; - } - else if (!item.equals(pItem)) { + } else if (!item.equals(pItem)) { valid = false; } } @@ -162,12 +163,10 @@ public class EternalRitual { try { if (exit == null) { initPortal(worldId, portalId); - } - else { + } else { if (!worldId.equals(targetWorldId)) { initPortal(worldId, portalId); - } - else if (!checkFrame(targetWorld, exit.below())) { + } else if (!checkFrame(targetWorld, exit.below())) { Direction.Axis portalAxis = (Direction.Axis.X == axis) ? Direction.Axis.Z : Direction.Axis.X; generatePortal(targetWorld, exit, portalAxis, portalId); } @@ -176,8 +175,7 @@ public class EternalRitual { activatePortal(world, center, portalId); doEffects((ServerLevel) world, center); active = true; - } - catch (Exception ex) { + } catch (Exception ex) { BetterEnd.LOGGER.error("Create End portals error.", ex); removePortal(targetWorld, exit); removePortal(world, center); @@ -284,7 +282,7 @@ public class EternalRitual { private BlockPos findFrame(Level world, BlockPos.MutableBlockPos startPos) { List foundPos = findAllBlockPos(world, startPos, (SEARCH_RADIUS >> 4) + 1, FRAME, blockState -> blockState.is(FRAME) && !blockState.getValue(ACTIVE)); - for (BlockPos.MutableBlockPos testPos : foundPos) { + for(BlockPos.MutableBlockPos testPos : foundPos) { if (checkFrame(world, testPos)) { return testPos; } @@ -295,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().registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); + Registry registry = Objects.requireNonNull(server).registryAccess().dimensionTypes(); 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()); @@ -307,8 +305,7 @@ public class EternalRitual { if (checkIsAreaValid(targetWorld, basePos, portalAxis)) { generatePortal(targetWorld, basePos, portalAxis, portalId); return basePos.immutable(); - } - else { + } else { Direction direction = Direction.EAST; BlockPos.MutableBlockPos checkPos = basePos.mutable(); int radius = (int) ((SEARCH_RADIUS / multiplier) + 1); @@ -322,7 +319,7 @@ public class EternalRitual { if (ceil < 5) continue; checkPos.setY(ceil); while (checkPos.getY() >= 5) { - if (checkIsAreaValid(targetWorld, checkPos, portalAxis)) { + if(checkIsAreaValid(targetWorld, checkPos, portalAxis)) { generatePortal(targetWorld, checkPos, portalAxis, portalId); return checkPos.immutable(); } @@ -336,8 +333,7 @@ public class EternalRitual { } if (targetWorld.dimension() == Level.END) { Features.END_ISLAND.place(targetWorld, targetWorld.getChunkSource().getGenerator(), new Random(basePos.asLong()), basePos.below()); - } - else if (targetWorld.dimension() == Level.OVERWORLD) { + } else if (targetWorld.dimension() == Level.OVERWORLD) { basePos.setY(targetWorld.getChunk(basePos).getHeight(Heightmap.Types.WORLD_SURFACE, basePos.getX(), basePos.getZ()) + 1); } EndFeatures.BIOME_ISLAND.getFeatureConfigured().place(targetWorld, targetWorld.getChunkSource().getGenerator(), new Random(basePos.asLong()), basePos.below()); @@ -414,8 +410,7 @@ public class EternalRitual { checkPos = checkPos.east(8); if (this.hasPedestal(checkPos)) { this.center = initial.north(5).east(4); - } - else { + } else { this.center = initial.north(5).west(4); } return; @@ -426,8 +421,7 @@ public class EternalRitual { checkPos = checkPos.east(8); if (this.hasPedestal(checkPos)) { this.center = initial.south(5).east(4); - } - else { + } else { this.center = initial.south(5).west(4); } return; @@ -438,8 +432,7 @@ public class EternalRitual { checkPos = checkPos.south(8); if (this.hasPedestal(checkPos)) { this.center = initial.east(5).south(4); - } - else { + } else { this.center = initial.east(5).north(4); } return; @@ -450,8 +443,7 @@ public class EternalRitual { checkPos = checkPos.south(8); if (this.hasPedestal(checkPos)) { this.center = initial.west(5).south(4); - } - else { + } else { this.center = initial.west(5).north(4); } } @@ -468,8 +460,7 @@ public class EternalRitual { if (pedestal != null) { if (!pedestal.hasRitual()) { pedestal.linkRitual(this); - } - else { + } else { EternalRitual ritual = pedestal.getRitual(); if (!ritual.equals(this)) { pedestal.linkRitual(this); @@ -573,11 +564,12 @@ public class EternalRitual { } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block - * @param condition Predicate for test block states in the chunk section + * @param condition Predicate for test block states in the chunk section + * * @return Position of the first found block or null. */ @Nullable @@ -591,7 +583,7 @@ public class EternalRitual { if (section == null || !section.getStates().maybeHas(condition)) continue; for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { - for (int z = 0; z < 16; z++) { + for(int z = 0; z < 16; z++) { BlockState checkState = section.getBlockState(x, y, z); if (checkState.is(searchBlock)) { int worldX = (chunk.getPos().x << 4) + x; @@ -612,11 +604,12 @@ public class EternalRitual { } /** - * @param world World for search - * @param checkPos Start search position - * @param radius Search radius + * @param world World for search + * @param checkPos Start search position + * @param radius Search radius * @param searchBlock Target block - * @param condition Predicate for test block states in the chunk section + * @param condition Predicate for test block states in the chunk section + * * @return List of positions of the all found blocks or empty list. */ public static List findAllBlockPos(Level world, BlockPos.MutableBlockPos checkPos, int radius, Block searchBlock, Predicate condition) { @@ -630,7 +623,7 @@ public class EternalRitual { if (section == null || !section.getStates().maybeHas(condition)) continue; for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { - for (int z = 0; z < 16; z++) { + for(int z = 0; z < 16; z++) { BlockState checkState = section.getBlockState(x, y, z); if (checkState.is(searchBlock)) { int worldX = (chunk.getPos().x << 4) + x; diff --git a/src/main/java/ru/betterend/rituals/InfusionRitual.java b/src/main/java/ru/betterend/rituals/InfusionRitual.java index 45acdb5d..f240ec47 100644 --- a/src/main/java/ru/betterend/rituals/InfusionRitual.java +++ b/src/main/java/ru/betterend/rituals/InfusionRitual.java @@ -1,5 +1,9 @@ package ru.betterend.rituals; +import java.awt.Point; +import java.util.Arrays; +import java.util.Objects; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -7,6 +11,7 @@ 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; @@ -15,12 +20,8 @@ import ru.betterend.blocks.entities.PedestalBlockEntity; import ru.betterend.particle.InfusionParticleType; import ru.betterend.recipe.builders.InfusionRecipe; -import java.awt.Point; -import java.util.Arrays; -import java.util.Objects; - public class InfusionRitual implements Container { - private static final Point[] PEDESTALS_MAP = new Point[]{ + private static final Point[] PEDESTALS_MAP = new Point[] { new Point(0, 3), new Point(2, 2), new Point(3, 0), @@ -41,14 +42,14 @@ public class InfusionRitual implements Container { private final PedestalBlockEntity[] catalysts = new PedestalBlockEntity[8]; private final InfusionPedestalEntity input; - + public InfusionRitual(InfusionPedestalEntity pedestal, Level world, BlockPos pos) { this.input = pedestal; this.world = world; this.worldPos = pos; configure(); } - + public void configure() { if (world == null || worldPos == null || world.isClientSide) return; for (int i = 0; i < catalysts.length; i++) { @@ -57,13 +58,12 @@ public class InfusionRitual implements Container { BlockEntity catalystEntity = world.getBlockEntity(checkPos); if (catalystEntity instanceof PedestalBlockEntity) { catalysts[i] = (PedestalBlockEntity) catalystEntity; - } - else { + } else { catalysts[i] = null; } } } - + public boolean checkRecipe() { if (!isValid()) return false; InfusionRecipe recipe = world.getRecipeManager().getRecipeFor(InfusionRecipe.TYPE, this, world).orElse(null); @@ -71,8 +71,7 @@ public class InfusionRitual implements Container { if (recipe == null) { reset(); return false; - } - else if (activeRecipe == null || recipe.getInfusionTime() != time) { + } else if (activeRecipe == null || recipe.getInfusionTime() != time) { updateRecipe(recipe); } return true; @@ -95,14 +94,14 @@ public class InfusionRitual implements Container { time = activeRecipe != null ? activeRecipe.getInfusionTime() : 0; progress = 0; } - + public void reset() { activeRecipe = null; hasRecipe = false; resetTimer(); setChanged(); } - + public void tick() { if (isDirty) { configure(); @@ -114,8 +113,7 @@ public class InfusionRitual implements Container { clearContent(); input.setItem(0, activeRecipe.assemble(this)); reset(); - } - else { + } else { ServerLevel serverLevel = (ServerLevel) world; BlockPos target = worldPos.above(); double tx = target.getX() + 0.5; @@ -134,17 +132,17 @@ public class InfusionRitual implements Container { } } - + @Override public boolean canPlaceItem(int slot, ItemStack stack) { return isValid(); } - + public boolean isValid() { if (world == null || world.isClientSide || worldPos == null || input == null) return false; return Arrays.stream(catalysts).noneMatch(Objects::isNull); } - + public boolean hasRecipe() { return hasRecipe; } @@ -177,8 +175,7 @@ public class InfusionRitual implements Container { if (slot > 8) return ItemStack.EMPTY; if (slot == 0) { return input.getItem(0); - } - else { + } else { return catalysts[slot - 1].getItem(0); } } @@ -193,8 +190,7 @@ public class InfusionRitual implements Container { if (slot > 8) return ItemStack.EMPTY; if (slot == 0) { return input.removeItemNoUpdate(0); - } - else { + } else { return catalysts[slot - 1].removeItemNoUpdate(0); } } @@ -204,8 +200,7 @@ public class InfusionRitual implements Container { if (slot > 8) return; if (slot == 0) { input.setItem(0, stack); - } - else { + } else { catalysts[slot - 1].setItem(0, stack); } } @@ -226,7 +221,7 @@ public class InfusionRitual implements Container { public boolean stillValid(Player player) { return true; } - + public void fromTag(CompoundTag tag) { if (tag.contains("recipe")) { hasRecipe = tag.getBoolean("recipe"); diff --git a/src/main/java/ru/betterend/tab/CreativeTabs.java b/src/main/java/ru/betterend/tab/CreativeTabs.java index a42bc34c..fab36d20 100644 --- a/src/main/java/ru/betterend/tab/CreativeTabs.java +++ b/src/main/java/ru/betterend/tab/CreativeTabs.java @@ -1,5 +1,7 @@ package ru.betterend.tab; +import java.util.stream.Collectors; + import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder; import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; @@ -7,8 +9,6 @@ import ru.betterend.BetterEnd; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndItems; -import java.util.stream.Collectors; - public class CreativeTabs { public static final CreativeModeTab TAB_BLOCKS; public static final CreativeModeTab TAB_ITEMS; diff --git a/src/main/java/ru/betterend/util/BlockFixer.java b/src/main/java/ru/betterend/util/BlockFixer.java index 53bded10..9e9a0dcb 100644 --- a/src/main/java/ru/betterend/util/BlockFixer.java +++ b/src/main/java/ru/betterend/util/BlockFixer.java @@ -1,6 +1,9 @@ package ru.betterend.util; +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; @@ -16,198 +19,188 @@ import ru.betterend.blocks.BlueVineBlock; import ru.betterend.blocks.basis.FurBlock; import ru.betterend.registry.EndBlocks; -import java.util.Set; -import java.util.stream.IntStream; - 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) { - 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); - state = world.getBlockState(POS); - while (!state.canSurvive(world, POS)) { - state = state.getFluidState().isEmpty() ? AIR : WATER; - setWithoutUpdate(world, POS, state); + 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); - } - } - 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); - } - 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 { - while (state.getBlock() instanceof StalactiteBlock) { - setWithoutUpdate(world, POS, AIR); + 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.CAVE_PUMPKIN)) { - if (!world.getBlockState(POS.above()).is(EndBlocks.CAVE_PUMPKIN_SEED)) { - setWithoutUpdate(world, POS, AIR); + 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)) { + BlocksHelper.setWithoutUpdate(world, POS, AIR); + POS.setY(POS.getY() + 1); + state = world.getBlockState(POS); + } + } } - } - 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()); + 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) -> { - setWithoutUpdate(world, pos, AIR); - for (Direction dir : BlocksHelper.HORIZONTAL) { - BlockPos p = pos.relative(dir); + 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); } - } - 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(); + }); + 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()) { + // Vines + else if (state.getBlock() instanceof BaseVineBlock) { + while (world.getBlockState(POS).getBlock() instanceof BaseVineBlock) { + BlocksHelper.setWithoutUpdate(world, POS, AIR); 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; + // 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()); } } - 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); + 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); } } - // Double plants - if (state.getBlock() instanceof BaseDoublePlantBlock) { - setWithoutUpdate(world, POS, AIR); - POS.setY(POS.getY() + 1); - setWithoutUpdate(world, POS, AIR); - } - // Other blocks + // Blocks without support else { - setWithoutUpdate(world, POS, getAirOrFluid(state)); + // 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)); + } } } } } - }); - + } + doubleCheck.forEach((pos) -> { if (!world.getBlockState(pos).canSurvive(world, pos)) { - setWithoutUpdate(world, pos, AIR); + BlocksHelper.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/util/BonemealPlants.java b/src/main/java/ru/betterend/util/BonemealPlants.java index e0a9befb..b2a5cdf6 100644 --- a/src/main/java/ru/betterend/util/BonemealPlants.java +++ b/src/main/java/ru/betterend/util/BonemealPlants.java @@ -10,46 +10,46 @@ public class BonemealPlants { BonemealAPI.addLandGrass(EndBlocks.UMBRELLA_MOSS, EndBlocks.END_MOSS); BonemealAPI.addLandGrass(EndBlocks.CREEPING_MOSS, EndBlocks.END_MYCELIUM); BonemealAPI.addLandGrass(EndBlocks.UMBRELLA_MOSS, EndBlocks.END_MYCELIUM); - + BonemealAPI.addLandGrass(EndBlocks.CAVE_GRASS, EndBlocks.CAVE_MOSS); BonemealAPI.addLandGrass(EndBlocks.CHORUS_GRASS, EndBlocks.CHORUS_NYLIUM); BonemealAPI.addLandGrass(EndBlocks.CRYSTAL_GRASS, EndBlocks.CRYSTAL_MOSS); BonemealAPI.addLandGrass(EndBlocks.SHADOW_PLANT, EndBlocks.SHADOW_GRASS); BonemealAPI.addLandGrass(EndBlocks.BUSHY_GRASS, EndBlocks.PINK_MOSS); BonemealAPI.addLandGrass(EndBlocks.AMBER_GRASS, EndBlocks.AMBER_MOSS); - + BonemealAPI.addLandGrass(EndBlocks.JUNGLE_GRASS, EndBlocks.JUNGLE_MOSS); BonemealAPI.addLandGrass(EndBlocks.TWISTED_UMBRELLA_MOSS, EndBlocks.JUNGLE_MOSS); BonemealAPI.addLandGrass(EndBlocks.JUNGLE_MOSS, EndBlocks.SMALL_JELLYSHROOM, 0.1F); - + BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.BLOOMING_COOKSONIA, EndBlocks.END_MOSS); BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.VAIOLUSH_FERN, EndBlocks.END_MOSS); BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.FRACTURN, EndBlocks.END_MOSS); BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.SALTEAGO, EndBlocks.END_MOSS); - + BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.END_MOSS, EndBlocks.CREEPING_MOSS, 0.1F); BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.END_MOSS, EndBlocks.UMBRELLA_MOSS, 0.1F); BonemealAPI.addLandGrass(EndBiomes.GLOWING_GRASSLANDS.getID(), EndBlocks.END_MOSS, EndBlocks.TWISTED_UMBRELLA_MOSS, 0.1F); - + BonemealAPI.addLandGrass(EndBlocks.ORANGO, EndBlocks.RUTISCUS); BonemealAPI.addLandGrass(EndBlocks.RUTISCUS, EndBlocks.AERIDIUM, 0.2F); BonemealAPI.addLandGrass(EndBlocks.RUTISCUS, EndBlocks.LUTEBUS, 0.2F); BonemealAPI.addLandGrass(EndBlocks.RUTISCUS, EndBlocks.LAMELLARIUM); - + BonemealAPI.addLandGrass(EndBiomes.LANTERN_WOODS.getID(), EndBlocks.RUTISCUS, EndBlocks.AERIDIUM, 0.2F); BonemealAPI.addLandGrass(EndBiomes.LANTERN_WOODS.getID(), EndBlocks.LAMELLARIUM, EndBlocks.RUTISCUS); BonemealAPI.addLandGrass(EndBiomes.LANTERN_WOODS.getID(), EndBlocks.RUTISCUS, EndBlocks.BOLUX_MUSHROOM, 0.05F); - + BonemealAPI.addLandGrass(EndBlocks.GLOBULAGUS, EndBlocks.SANGNUM, EndBlocks.MOSSY_OBSIDIAN, EndBlocks.MOSSY_DRAGON_BONE); BonemealAPI.addLandGrass(EndBlocks.CLAWFERN, EndBlocks.SANGNUM, EndBlocks.MOSSY_OBSIDIAN, EndBlocks.MOSSY_DRAGON_BONE); BonemealAPI.addLandGrass(EndBlocks.SANGNUM, EndBlocks.SMALL_AMARANITA_MUSHROOM, 0.1F); BonemealAPI.addLandGrass(EndBlocks.MOSSY_OBSIDIAN, EndBlocks.SMALL_AMARANITA_MUSHROOM, 0.1F); BonemealAPI.addLandGrass(EndBlocks.MOSSY_DRAGON_BONE, EndBlocks.SMALL_AMARANITA_MUSHROOM, 0.1F); - + BonemealAPI.addLandGrass(EndBlocks.GLOBULAGUS, EndBlocks.MOSSY_DRAGON_BONE); BonemealAPI.addLandGrass(EndBlocks.CLAWFERN, EndBlocks.MOSSY_DRAGON_BONE); BonemealAPI.addLandGrass(EndBlocks.MOSSY_DRAGON_BONE, EndBlocks.SMALL_AMARANITA_MUSHROOM, 0.1F); - + BonemealAPI.addLandGrass(EndBlocks.GLOBULAGUS, EndBlocks.MOSSY_OBSIDIAN); BonemealAPI.addLandGrass(EndBlocks.CLAWFERN, EndBlocks.MOSSY_OBSIDIAN); BonemealAPI.addLandGrass(EndBlocks.MOSSY_OBSIDIAN, EndBlocks.SMALL_AMARANITA_MUSHROOM, 0.1F); diff --git a/src/main/java/ru/betterend/util/FeaturesHelper.java b/src/main/java/ru/betterend/util/FeaturesHelper.java index c14bdce8..d2b9658c 100644 --- a/src/main/java/ru/betterend/util/FeaturesHelper.java +++ b/src/main/java/ru/betterend/util/FeaturesHelper.java @@ -1,7 +1,13 @@ package ru.betterend.util; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.function.Supplier; + import com.google.common.collect.Lists; import com.google.common.collect.Sets; + import net.minecraft.core.Registry; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; @@ -10,11 +16,6 @@ import ru.betterend.mixin.common.BiomeGenerationSettingsAccessor; import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndStructures; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.function.Supplier; - public class FeaturesHelper { private static final Set INJECTED = Sets.newHashSet(); @@ -36,6 +37,6 @@ public class FeaturesHelper { accessor.be_setStructures(structures); INJECTED.add(biome); } - }); + }); } } \ No newline at end of file diff --git a/src/main/java/ru/betterend/util/ItemUtil.java b/src/main/java/ru/betterend/util/ItemUtil.java index c6c9bba1..20f57987 100644 --- a/src/main/java/ru/betterend/util/ItemUtil.java +++ b/src/main/java/ru/betterend/util/ItemUtil.java @@ -1,17 +1,19 @@ package ru.betterend.util; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import com.google.gson.JsonObject; + import net.minecraft.core.Registry; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import ru.betterend.BetterEnd; public class ItemUtil { - + public static String toStackString(@NotNull ItemStack stack) { try { if (stack == null) { @@ -19,13 +21,12 @@ public class ItemUtil { } Item item = stack.getItem(); return Registry.ITEM.getKey(item) + ":" + stack.getCount(); - } - catch (Exception ex) { + } catch (Exception ex) { BetterEnd.LOGGER.error("ItemStack serialization error!", ex); } return ""; } - + @Nullable public static ItemStack fromStackString(String stackString) { if (stackString == null || stackString.equals("")) { @@ -46,13 +47,12 @@ public class ItemUtil { return new IllegalStateException("Output item " + itemId + " does not exists!"); }); return new ItemStack(item, Integer.valueOf(parts[2])); - } - catch (Exception ex) { + } catch (Exception ex) { BetterEnd.LOGGER.error("ItemStack deserialization error!", ex); } return null; } - + @Nullable public static ItemStack fromJsonRecipe(JsonObject recipe) { try { @@ -65,8 +65,7 @@ public class ItemUtil { }); int count = GsonHelper.getAsInt(recipe, "count", 1); return new ItemStack(item, count); - } - catch (Exception ex) { + } catch (Exception ex) { BetterEnd.LOGGER.error("ItemStack deserialization error!", ex); } return null; diff --git a/src/main/java/ru/betterend/util/LangUtil.java b/src/main/java/ru/betterend/util/LangUtil.java index 534022c0..bc051bf8 100644 --- a/src/main/java/ru/betterend/util/LangUtil.java +++ b/src/main/java/ru/betterend/util/LangUtil.java @@ -5,33 +5,33 @@ import net.minecraft.network.chat.TranslatableComponent; public class LangUtil { public final static String CONFIG_ELEMENT = "configuration"; - + private String element; - + public LangUtil(String element) { this.element = element; } - + public void setElement(String key) { this.element = key; } - + public String getString(String key) { return getString(element, key); } - + public TranslatableComponent getText(String key) { return getText(element, key); } - + public static String translate(String key) { return I18n.get(key); } - + public static String getString(String element, String key) { return translate(String.format("%s.%s", element, key)); } - + public static TranslatableComponent getText(String element, String key) { return new TranslatableComponent(getString(element, key)); } diff --git a/src/main/java/ru/betterend/util/LootTableUtil.java b/src/main/java/ru/betterend/util/LootTableUtil.java index dab4cac4..1b8cb09d 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(UniformGenerator.between(0, 5)); + builder.setRolls(RandomValueBounds.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(UniformGenerator.between(0, 5)); + builder.setRolls(RandomValueBounds.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/util/RecipeHelper.java b/src/main/java/ru/betterend/util/RecipeHelper.java index 78c393e0..7b0f879e 100644 --- a/src/main/java/ru/betterend/util/RecipeHelper.java +++ b/src/main/java/ru/betterend/util/RecipeHelper.java @@ -8,12 +8,11 @@ public class RecipeHelper { public static boolean exists(ItemLike item) { if (item instanceof Block) { return Registry.BLOCK.getKey((Block) item) != Registry.BLOCK.getDefaultKey(); - } - else { + } else { return Registry.ITEM.getKey(item.asItem()) != Registry.ITEM.getDefaultKey(); } } - + public static boolean exists(ItemLike... items) { for (ItemLike item : items) { if (!exists(item)) { diff --git a/src/main/java/ru/betterend/util/ShuffelingListExtended.java b/src/main/java/ru/betterend/util/ShuffelingListExtended.java deleted file mode 100644 index a86ee5bf..00000000 --- a/src/main/java/ru/betterend/util/ShuffelingListExtended.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.betterend.util; - -public interface ShuffelingListExtended { - public boolean isEmpty(); - - public U getOne(); -} diff --git a/src/main/java/ru/betterend/util/SpawnHelper.java b/src/main/java/ru/betterend/util/SpawnHelper.java index 4aefd2eb..e42a688a 100644 --- a/src/main/java/ru/betterend/util/SpawnHelper.java +++ b/src/main/java/ru/betterend/util/SpawnHelper.java @@ -11,11 +11,11 @@ public class SpawnHelper { public static void restrictionAir(EntityType entity, SpawnPredicate predicate) { SpawnRestrictionAccessor.callRegister(entity, Type.NO_RESTRICTIONS, Types.MOTION_BLOCKING, predicate); } - + public static void restrictionLand(EntityType entity, SpawnPredicate predicate) { SpawnRestrictionAccessor.callRegister(entity, Type.ON_GROUND, Types.MOTION_BLOCKING, predicate); } - + public static void restrictionWater(EntityType entity, SpawnPredicate predicate) { SpawnRestrictionAccessor.callRegister(entity, Type.IN_WATER, Types.MOTION_BLOCKING, predicate); } diff --git a/src/main/java/ru/betterend/world/biome/EndBiome.java b/src/main/java/ru/betterend/world/biome/EndBiome.java index 8dd4a44d..e2c210b5 100644 --- a/src/main/java/ru/betterend/world/biome/EndBiome.java +++ b/src/main/java/ru/betterend/world/biome/EndBiome.java @@ -5,22 +5,14 @@ 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 def) { - super(updateDef(def)); - + public EndBiome(BCLBiomeDef definition) { + super(definition.loadConfigValues(Configs.BIOME_CONFIG)); } 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/biome/cave/EmptyAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java index fcec0818..7ab06f41 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyAuroraCaveBiome.java @@ -13,17 +13,17 @@ public class EmptyAuroraCaveBiome extends EndCaveBiome { .setPlantsColor(108, 25, 46) .setWaterAndFogColor(186, 77, 237) .setParticles(EndParticles.GLOWING_SPHERE, 0.001F)); - + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); - + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); } - + @Override public float getFloorDensity() { return 0.01F; } - + @Override public float getCeilDensity() { return 0.1F; diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java index c88e10e3..151e7475 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptyEndCaveBiome.java @@ -10,12 +10,12 @@ public class EmptyEndCaveBiome extends EndCaveBiome { this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE, 1); this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); } - + @Override public float getFloorDensity() { return 0.1F; } - + @Override public float getCeilDensity() { return 0.1F; diff --git a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java index 4924dacc..8fe0f4a8 100644 --- a/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/EmptySmaragdantCaveBiome.java @@ -13,18 +13,18 @@ public class EmptySmaragdantCaveBiome extends EndCaveBiome { .setPlantsColor(0, 131, 145) .setWaterAndFogColor(31, 167, 212) .setParticles(EndParticles.SMARAGDANT, 0.001F)); - + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); } - + @Override public float getFloorDensity() { return 0.1F; } - + @Override public float getCeilDensity() { return 0.1F; 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 27464e46..e25ea7db 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,9 @@ 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.entity.ai.behavior.WeightedList; import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; @@ -10,57 +12,56 @@ 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; public class EndCaveBiome extends EndBiome { - final private ShufflingList> floorFeatures = new ShufflingList<>(); - final private ShufflingList> ceilFeatures = new ShufflingList<>(); - + private WeightedList> floorFeatures = new WeightedList>(); + private WeightedList> ceilFeatures = new WeightedList>(); + public EndCaveBiome(BCLBiomeDef definition) { super(makeDef(definition)); } - + private static BCLBiomeDef makeDef(BCLBiomeDef definition) { BCLFeature feature = BCLFeature.makeChunkFeature( - BetterEnd.makeID(definition.getID().getPath() + "_cave_populator"), - new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(definition.getID())) + BetterEnd.makeID(definition.getID().getPath() + "_cave_populator"), + new CaveChunkPopulatorFeature(() -> (EndCaveBiome) BiomeAPI.getBiome(definition.getID())) ); definition.setCategory(BiomeCategory.NONE).addFeature(feature); definition.setMusic(EndSounds.MUSIC_CAVES); definition.setLoop(EndSounds.AMBIENT_CAVES); return definition; } - + public void addFloorFeature(Feature feature, int weight) { floorFeatures.add(feature, weight); } - + public void addCeilFeature(Feature feature, int weight) { ceilFeatures.add(feature, weight); } - - public Feature getFloorFeature() { - return ((ShuffelingListExtended>) floorFeatures).isEmpty() ? null : ((ShuffelingListExtended>) floorFeatures).getOne(); + + public Feature getFloorFeature(Random random) { + return floorFeatures.isEmpty() ? null : floorFeatures.getOne(random); } - - public Feature getCeilFeature() { - return ((ShuffelingListExtended>) ceilFeatures).isEmpty() ? null : ((ShuffelingListExtended>) ceilFeatures).getOne(); + + public Feature getCeilFeature(Random random) { + return ceilFeatures.isEmpty() ? null : ceilFeatures.getOne(random); } - + public float getFloorDensity() { return 0; } - + public float getCeilDensity() { return 0; } - + public BlockState getCeil(BlockPos pos) { return null; } - + public BlockState getWall(BlockPos pos) { return null; } diff --git a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java index 19252607..17c9b05e 100644 --- a/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/JadeCaveBiome.java @@ -12,18 +12,18 @@ public class JadeCaveBiome extends EndCaveBiome { private static final OpenSimplexNoise WALL_NOISE = new OpenSimplexNoise("jade_cave".hashCode()); private static final OpenSimplexNoise DEPTH_NOISE = new OpenSimplexNoise("depth_noise".hashCode()); private static final BlockState[] JADE = new BlockState[3]; - + public JadeCaveBiome() { super(new BCLBiomeDef(BetterEnd.makeID("jade_cave")) - .setFogColor(118, 150, 112) - .setFogDensity(2.0F) - .setWaterAndFogColor(95, 223, 255) + .setFogColor(118, 150, 112) + .setFogDensity(2.0F) + .setWaterAndFogColor(95, 223, 255) ); JADE[0] = EndBlocks.VIRID_JADESTONE.stone.defaultBlockState(); JADE[1] = EndBlocks.AZURE_JADESTONE.stone.defaultBlockState(); JADE[2] = EndBlocks.SANDY_JADESTONE.stone.defaultBlockState(); } - + @Override public BlockState getWall(BlockPos pos) { double depth = DEPTH_NOISE.eval(pos.getX() * 0.02, pos.getZ() * 0.02) * 0.2 + 0.5; diff --git a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java index 547d9ee2..0ac0206e 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushAuroraCaveBiome.java @@ -18,29 +18,29 @@ public class LushAuroraCaveBiome extends EndCaveBiome { .setWaterAndFogColor(186, 77, 237) .setParticles(EndParticles.GLOWING_SPHERE, 0.001F) .setSurface(EndBlocks.CAVE_MOSS)); - + this.addFloorFeature(EndFeatures.BIG_AURORA_CRYSTAL, 1); this.addFloorFeature(EndFeatures.CAVE_BUSH, 5); this.addFloorFeature(EndFeatures.CAVE_GRASS, 40); this.addFloorFeature(EndFeatures.END_STONE_STALAGMITE_CAVEMOSS, 5); - + this.addCeilFeature(EndFeatures.CAVE_BUSH, 1); this.addCeilFeature(EndFeatures.CAVE_PUMPKIN, 1); this.addCeilFeature(EndFeatures.RUBINEA, 3); this.addCeilFeature(EndFeatures.MAGNULA, 1); this.addCeilFeature(EndFeatures.END_STONE_STALACTITE_CAVEMOSS, 10); } - + @Override public float getFloorDensity() { return 0.2F; } - + @Override public float getCeilDensity() { return 0.1F; } - + @Override public BlockState getCeil(BlockPos pos) { return EndBlocks.CAVE_MOSS.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP); diff --git a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java index e91b4861..814ad4a6 100644 --- a/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java +++ b/src/main/java/ru/betterend/world/biome/cave/LushSmaragdantCaveBiome.java @@ -15,18 +15,18 @@ public class LushSmaragdantCaveBiome extends EndCaveBiome { .setWaterAndFogColor(31, 167, 212) .setParticles(EndParticles.SMARAGDANT, 0.001F) .setSurface(EndBlocks.CAVE_MOSS)); - + this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL, 1); this.addFloorFeature(EndFeatures.SMARAGDANT_CRYSTAL_SHARD, 20); - + this.addCeilFeature(EndFeatures.END_STONE_STALACTITE, 1); } - + @Override public float getFloorDensity() { return 0.1F; } - + @Override public float getCeilDensity() { return 0.1F; diff --git a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java index c172f5dc..63032057 100644 --- a/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java +++ b/src/main/java/ru/betterend/world/biome/land/AmberLandBiome.java @@ -19,7 +19,6 @@ public class AmberLandBiome extends EndBiome { .setPlantsColor(219, 115, 38) .setWaterAndFogColor(145, 108, 72) .setMusic(EndSounds.MUSIC_FOREST) - .setLoop(EndSounds.AMBIENT_AMBER_LAND) .setParticles(EndParticles.AMBER_SPHERE, 0.001F) .setSurface(EndBlocks.AMBER_MOSS) .addFeature(EndFeatures.AMBER_ORE) diff --git a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java index 8c57392e..b58474a3 100644 --- a/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java +++ b/src/main/java/ru/betterend/world/features/BiomeIslandFeature.java @@ -1,12 +1,14 @@ package ru.betterend.world.features; +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.biome.Biome; 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.level.chunk.ChunkGenerator; 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; @@ -27,16 +29,14 @@ public class BiomeIslandFeature extends DefaultFeature { private static BlockState underBlock = Blocks.DIRT.defaultBlockState(); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { Biome biome = world.getBiome(pos); SurfaceBuilderConfiguration surfaceConfig = biome.getGenerationSettings().getSurfaceBuilderConfig(); BlockState topMaterial = surfaceConfig.getTopMaterial(); if (BlocksHelper.isFluid(topMaterial)) { topBlock = ((SurfaceBuilderBaseConfiguration) surfaceConfig).getUnderwaterMaterial(); - } - else { + } else { topBlock = topMaterial; } underBlock = surfaceConfig.getUnderMaterial(); diff --git a/src/main/java/ru/betterend/world/features/BlueVineFeature.java b/src/main/java/ru/betterend/world/features/BlueVineFeature.java index a5916fdd..568424a5 100644 --- a/src/main/java/ru/betterend/world/features/BlueVineFeature.java +++ b/src/main/java/ru/betterend/world/features/BlueVineFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.bclib.util.BlocksHelper; @@ -7,11 +9,9 @@ import ru.bclib.util.MHelper; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class BlueVineFeature extends ScatterFeature { private boolean small; - + public BlueVineFeature() { super(5); } diff --git a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java index df2435d0..839f6120 100644 --- a/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java +++ b/src/main/java/ru/betterend/world/features/CavePumpkinFeature.java @@ -1,8 +1,10 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -10,14 +12,10 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.EndBlockProperties; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class CavePumpkinFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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/CharniaFeature.java b/src/main/java/ru/betterend/world/features/CharniaFeature.java index 57636909..c8022a39 100644 --- a/src/main/java/ru/betterend/world/features/CharniaFeature.java +++ b/src/main/java/ru/betterend/world/features/CharniaFeature.java @@ -6,7 +6,7 @@ public class CharniaFeature extends UnderwaterPlantFeature { public CharniaFeature(Block plant) { super(plant, 6); } - + @Override protected int getChance() { return 3; diff --git a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java index 248bbb9f..4be8dfdd 100644 --- a/src/main/java/ru/betterend/world/features/CrashedShipFeature.java +++ b/src/main/java/ru/betterend/world/features/CrashedShipFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.LevelReader; @@ -8,7 +10,7 @@ import net.minecraft.world.level.block.Blocks; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; 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; @@ -24,8 +26,6 @@ import ru.bclib.util.StructureHelper; import ru.bclib.world.features.NBTStructureFeature; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class CrashedShipFeature extends NBTStructureFeature { private static final StructureProcessor REPLACER; private static final String STRUCTURE_PATH = "/data/minecraft/structures/end_city/ship.nbt"; @@ -75,10 +75,8 @@ public class CrashedShipFeature extends NBTStructureFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, + NoneFeatureConfiguration featureConfig) { center = new BlockPos(((center.getX() >> 4) << 4) | 8, 128, ((center.getZ() >> 4) << 4) | 8); center = getGround(world, center); BoundingBox bounds = makeBox(center); @@ -90,7 +88,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(new BlockPos(structure.getSize()), mirror, rotation, BlockPos.ZERO); + BlockPos offset = StructureTemplate.transform(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); @@ -99,10 +97,10 @@ public class CrashedShipFeature extends NBTStructureFeature { bounds = StructureHelper.intersectBoxes(bounds, structB); addStructureData(placementData); - structure.placeInWorld(world, center, center, placementData.setBoundingBox(bounds), random, 2); + structure.placeInWorldChunk(world, center, placementData.setBoundingBox(bounds), random); StructureHelper.erodeIntense(world, bounds, random); - BlockFixer.fixBlocks(world, new BlockPos(bounds.minX(), bounds.minY(), bounds.minZ()), new BlockPos(bounds.maxX(), bounds.maxY(), bounds.maxZ())); + BlockFixer.fixBlocks(world, new BlockPos(bounds.x0, bounds.y0, bounds.z0), new BlockPos(bounds.x1, bounds.y1, bounds.z1)); return true; } @@ -116,8 +114,8 @@ public class CrashedShipFeature extends NBTStructureFeature { REPLACER = new StructureProcessor() { @Override public StructureBlockInfo processBlock(LevelReader worldView, BlockPos pos, BlockPos blockPos, - StructureBlockInfo structureBlockInfo, StructureBlockInfo structureBlockInfo2, - StructurePlaceSettings structurePlacementData) { + StructureBlockInfo structureBlockInfo, StructureBlockInfo structureBlockInfo2, + StructurePlaceSettings structurePlacementData) { BlockState state = structureBlockInfo2.state; if (state.is(Blocks.SPAWNER) || state.getMaterial().equals(Material.WOOL)) { return new StructureBlockInfo(structureBlockInfo2.pos, AIR, null); diff --git a/src/main/java/ru/betterend/world/features/DoublePlantFeature.java b/src/main/java/ru/betterend/world/features/DoublePlantFeature.java index 1a811cc9..f98b1beb 100644 --- a/src/main/java/ru/betterend/world/features/DoublePlantFeature.java +++ b/src/main/java/ru/betterend/world/features/DoublePlantFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; @@ -8,19 +10,17 @@ import ru.bclib.blocks.BaseDoublePlantBlock; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; -import java.util.Random; - public class DoublePlantFeature extends ScatterFeature { private final Block smallPlant; private final Block largePlant; private Block plant; - + public DoublePlantFeature(Block smallPlant, Block largePlant, int radius) { super(radius); this.smallPlant = smallPlant; this.largePlant = largePlant; } - + @Override public boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, float radius) { float d = MHelper.length(center.getX() - blockPos.getX(), center.getZ() - blockPos.getZ()) / radius * 0.6F + random.nextFloat() * 0.4F; diff --git a/src/main/java/ru/betterend/world/features/EndLilyFeature.java b/src/main/java/ru/betterend/world/features/EndLilyFeature.java index d505742a..4ecbd3cf 100644 --- a/src/main/java/ru/betterend/world/features/EndLilyFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLilyFeature.java @@ -1,12 +1,12 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.betterend.blocks.EndLilySeedBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class EndLilyFeature extends UnderwaterPlantScatter { public EndLilyFeature(int radius) { super(radius); @@ -17,7 +17,7 @@ public class EndLilyFeature extends UnderwaterPlantScatter { EndLilySeedBlock seed = (EndLilySeedBlock) EndBlocks.END_LILY_SEED; seed.grow(world, random, blockPos); } - + @Override protected int getChance() { return 15; diff --git a/src/main/java/ru/betterend/world/features/EndLotusFeature.java b/src/main/java/ru/betterend/world/features/EndLotusFeature.java index b0d65d6a..dc65d14a 100644 --- a/src/main/java/ru/betterend/world/features/EndLotusFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLotusFeature.java @@ -1,12 +1,12 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.betterend.blocks.EndLotusSeedBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class EndLotusFeature extends UnderwaterPlantScatter { public EndLotusFeature(int radius) { super(radius); @@ -17,7 +17,7 @@ public class EndLotusFeature extends UnderwaterPlantScatter { EndLotusSeedBlock seed = (EndLotusSeedBlock) EndBlocks.END_LOTUS_SEED; seed.grow(world, random, blockPos); } - + @Override protected int getChance() { return 15; diff --git a/src/main/java/ru/betterend/world/features/EndLotusLeafFeature.java b/src/main/java/ru/betterend/world/features/EndLotusLeafFeature.java index 239d0648..e166e2b2 100644 --- a/src/main/java/ru/betterend/world/features/EndLotusLeafFeature.java +++ b/src/main/java/ru/betterend/world/features/EndLotusLeafFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -11,8 +13,6 @@ import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.EndLotusLeafBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class EndLotusLeafFeature extends ScatterFeature { public EndLotusLeafFeature(int radius) { super(radius); @@ -24,41 +24,41 @@ public class EndLotusLeafFeature extends ScatterFeature { generateLeaf(world, blockPos); } } - + @Override protected int getChance() { return 15; } - + @Override protected BlockPos getCenterGround(WorldGenLevel world, BlockPos pos) { return getPosOnSurface(world, pos); } - + private void generateLeaf(WorldGenLevel world, BlockPos pos) { MutableBlockPos p = new MutableBlockPos(); BlockState leaf = EndBlocks.END_LOTUS_LEAF.defaultBlockState(); BlocksHelper.setWithoutUpdate(world, pos, leaf.setValue(EndLotusLeafBlock.SHAPE, TripleShape.BOTTOM)); - for (Direction move : BlocksHelper.HORIZONTAL) { + for (Direction move: BlocksHelper.HORIZONTAL) { BlocksHelper.setWithoutUpdate(world, p.set(pos).move(move), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, move).setValue(EndLotusLeafBlock.SHAPE, TripleShape.MIDDLE)); } - for (int i = 0; i < 4; i++) { + for (int i = 0; i < 4; i ++) { Direction d1 = BlocksHelper.HORIZONTAL[i]; Direction d2 = BlocksHelper.HORIZONTAL[(i + 1) & 3]; BlocksHelper.setWithoutUpdate(world, p.set(pos).move(d1).move(d2), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, d1).setValue(EndLotusLeafBlock.SHAPE, TripleShape.TOP)); } } - + private boolean canGenerate(WorldGenLevel world, BlockPos pos) { MutableBlockPos p = new MutableBlockPos(); p.setY(pos.getY()); int count = 0; - for (int x = -1; x < 2; x++) { + for (int x = -1; x < 2; x ++) { p.setX(pos.getX() + x); - for (int z = -1; z < 2; z++) { + for (int z = -1; z < 2; z ++) { p.setZ(pos.getZ() + z); if (world.isEmptyBlock(p) && world.getBlockState(p.below()).is(Blocks.WATER)) - count++; + count ++; } } return count == 9; diff --git a/src/main/java/ru/betterend/world/features/FilaluxFeature.java b/src/main/java/ru/betterend/world/features/FilaluxFeature.java index e3ac1ad8..32eee7fe 100644 --- a/src/main/java/ru/betterend/world/features/FilaluxFeature.java +++ b/src/main/java/ru/betterend/world/features/FilaluxFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -11,8 +13,6 @@ import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class FilaluxFeature extends SkyScatterFeature { public FilaluxFeature() { super(10); @@ -24,7 +24,7 @@ public class FilaluxFeature extends SkyScatterFeature { BlockState wings = EndBlocks.FILALUX_WINGS.defaultBlockState(); BlocksHelper.setWithoutUpdate(world, blockPos, EndBlocks.FILALUX_LANTERN); BlocksHelper.setWithoutUpdate(world, blockPos.above(), wings.setValue(BlockStateProperties.FACING, Direction.UP)); - for (Direction dir : BlocksHelper.HORIZONTAL) { + for (Direction dir: BlocksHelper.HORIZONTAL) { BlocksHelper.setWithoutUpdate(world, blockPos.relative(dir), wings.setValue(BlockStateProperties.FACING, dir)); } int length = MHelper.randRange(1, 3, random); diff --git a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java index 02b4735f..9912e3be 100644 --- a/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/FullHeightScatterFeature.java @@ -1,17 +1,17 @@ package ru.betterend.world.features; +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.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; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public abstract class FullHeightScatterFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); private final int radius; @@ -21,15 +21,13 @@ public abstract class FullHeightScatterFeature extends DefaultFeature { } public abstract boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, - float radius); + float radius); public abstract void generate(WorldGenLevel world, Random random, BlockPos blockPos); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, + NoneFeatureConfiguration featureConfig) { 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/GlowPillarFeature.java b/src/main/java/ru/betterend/world/features/GlowPillarFeature.java index 851ce83e..b8a1d6f2 100644 --- a/src/main/java/ru/betterend/world/features/GlowPillarFeature.java +++ b/src/main/java/ru/betterend/world/features/GlowPillarFeature.java @@ -1,12 +1,12 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class GlowPillarFeature extends ScatterFeature { public GlowPillarFeature() { super(9); @@ -22,7 +22,7 @@ public class GlowPillarFeature extends ScatterFeature { EndPlantWithAgeBlock seed = ((EndPlantWithAgeBlock) EndBlocks.GLOWING_PILLAR_SEED); seed.growAdult(world, random, blockPos); } - + @Override protected int getChance() { return 10; diff --git a/src/main/java/ru/betterend/world/features/HydraluxFeature.java b/src/main/java/ru/betterend/world/features/HydraluxFeature.java index fc92fc56..73d6b4ec 100644 --- a/src/main/java/ru/betterend/world/features/HydraluxFeature.java +++ b/src/main/java/ru/betterend/world/features/HydraluxFeature.java @@ -1,12 +1,12 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.betterend.blocks.HydraluxSaplingBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class HydraluxFeature extends UnderwaterPlantScatter { public HydraluxFeature(int radius) { super(radius); @@ -17,7 +17,7 @@ public class HydraluxFeature extends UnderwaterPlantScatter { HydraluxSaplingBlock seed = (HydraluxSaplingBlock) EndBlocks.HYDRALUX_SAPLING; seed.grow(world, random, blockPos); } - + @Override protected int getChance() { return 15; diff --git a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java index cd847402..c0807972 100644 --- a/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/InvertedScatterFeature.java @@ -1,17 +1,17 @@ package ru.betterend.world.features; +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.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; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public abstract class InvertedScatterFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); private final int radius; @@ -21,15 +21,13 @@ public abstract class InvertedScatterFeature extends DefaultFeature { } public abstract boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, - float radius); + float radius); public abstract void generate(WorldGenLevel world, Random random, BlockPos blockPos); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, + NoneFeatureConfiguration featureConfig) { 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/LanceleafFeature.java b/src/main/java/ru/betterend/world/features/LanceleafFeature.java index d35a27c9..5800a71f 100644 --- a/src/main/java/ru/betterend/world/features/LanceleafFeature.java +++ b/src/main/java/ru/betterend/world/features/LanceleafFeature.java @@ -1,12 +1,12 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class LanceleafFeature extends ScatterFeature { public LanceleafFeature() { super(7); @@ -22,7 +22,7 @@ public class LanceleafFeature extends ScatterFeature { EndPlantWithAgeBlock seed = ((EndPlantWithAgeBlock) EndBlocks.LANCELEAF_SEED); seed.growAdult(world, random, blockPos); } - + @Override protected int getChance() { return 5; diff --git a/src/main/java/ru/betterend/world/features/MengerSpongeFeature.java b/src/main/java/ru/betterend/world/features/MengerSpongeFeature.java index f79076b6..d5f9c5fd 100644 --- a/src/main/java/ru/betterend/world/features/MengerSpongeFeature.java +++ b/src/main/java/ru/betterend/world/features/MengerSpongeFeature.java @@ -1,5 +1,8 @@ package ru.betterend.world.features; +import java.util.Random; +import java.util.function.Function; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -7,12 +10,9 @@ import net.minecraft.world.level.block.state.BlockState; import ru.bclib.util.BlocksHelper; import ru.betterend.registry.EndBlocks; -import java.util.Random; -import java.util.function.Function; - public class MengerSpongeFeature extends UnderwaterPlantScatter { private static final Function REPLACE; - + public MengerSpongeFeature(int radius) { super(radius); } @@ -21,7 +21,7 @@ public class MengerSpongeFeature extends UnderwaterPlantScatter { public void generate(WorldGenLevel world, Random random, BlockPos blockPos) { BlocksHelper.setWithoutUpdate(world, blockPos, EndBlocks.MENGER_SPONGE_WET); if (random.nextBoolean()) { - for (Direction dir : BlocksHelper.DIRECTIONS) { + for (Direction dir: BlocksHelper.DIRECTIONS) { BlockPos pos = blockPos.relative(dir); if (REPLACE.apply(world.getBlockState(pos))) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.MENGER_SPONGE_WET); @@ -29,7 +29,7 @@ public class MengerSpongeFeature extends UnderwaterPlantScatter { } } } - + static { REPLACE = (state) -> { if (state.is(EndBlocks.END_LOTUS_STEM)) { diff --git a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java index 02701406..523e4dac 100644 --- a/src/main/java/ru/betterend/world/features/NeonCactusFeature.java +++ b/src/main/java/ru/betterend/world/features/NeonCactusFeature.java @@ -1,27 +1,24 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.NeonCactusPlantBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class NeonCactusFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { BlockState ground = world.getBlockState(pos.below()); if (!ground.is(EndBlocks.ENDSTONE_DUST) && !ground.is(EndBlocks.END_MOSS)) { return false; } - + NeonCactusPlantBlock cactus = ((NeonCactusPlantBlock) EndBlocks.NEON_CACTUS); cactus.growPlant(world, pos, random); diff --git a/src/main/java/ru/betterend/world/features/ScatterFeature.java b/src/main/java/ru/betterend/world/features/ScatterFeature.java index fa0d7b3c..620be106 100644 --- a/src/main/java/ru/betterend/world/features/ScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/ScatterFeature.java @@ -1,17 +1,17 @@ package ru.betterend.world.features; +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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public abstract class ScatterFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); private final int radius; @@ -21,7 +21,7 @@ public abstract class ScatterFeature extends DefaultFeature { } public abstract boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, - float radius); + float radius); public abstract void generate(WorldGenLevel world, Random random, BlockPos blockPos); @@ -32,8 +32,7 @@ public abstract class ScatterFeature extends DefaultFeature { protected boolean canSpawn(WorldGenLevel world, BlockPos pos) { if (pos.getY() < 5) { return false; - } - else if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { + } else if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) { return false; } return true; @@ -57,10 +56,8 @@ public abstract class ScatterFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, + NoneFeatureConfiguration featureConfig) { 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 60a5ce6d..25ca6aed 100644 --- a/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java +++ b/src/main/java/ru/betterend/world/features/SilkMothNestFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -7,16 +9,14 @@ import net.minecraft.tags.BlockTags; 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.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; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class SilkMothNestFeature extends DefaultFeature { private static final MutableBlockPos POS = new MutableBlockPos(); @@ -34,10 +34,8 @@ public class SilkMothNestFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, + NoneFeatureConfiguration featureConfig) { 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/SingleInvertedScatterFeature.java b/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java index 8b354840..053f33c3 100644 --- a/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/SingleInvertedScatterFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -9,11 +11,9 @@ import net.minecraft.world.level.block.state.properties.BlockStateProperties; import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.util.BlocksHelper; -import java.util.Random; - public class SingleInvertedScatterFeature extends InvertedScatterFeature { private final Block block; - + public SingleInvertedScatterFeature(Block block, int radius) { super(radius); this.block = block; diff --git a/src/main/java/ru/betterend/world/features/SinglePlantFeature.java b/src/main/java/ru/betterend/world/features/SinglePlantFeature.java index 87106c37..b663c2dc 100644 --- a/src/main/java/ru/betterend/world/features/SinglePlantFeature.java +++ b/src/main/java/ru/betterend/world/features/SinglePlantFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; @@ -9,41 +11,39 @@ import ru.bclib.blocks.BaseDoublePlantBlock; import ru.bclib.util.BlocksHelper; import ru.betterend.blocks.basis.EndPlantWithAgeBlock; -import java.util.Random; - public class SinglePlantFeature extends ScatterFeature { private final Block plant; private final boolean rawHeightmap; private final int chance; - + public SinglePlantFeature(Block plant, int radius) { this(plant, radius, true, 1); } - + public SinglePlantFeature(Block plant, int radius, int chance) { this(plant, radius, true, chance); } - + public SinglePlantFeature(Block plant, int radius, boolean rawHeightmap) { this(plant, radius, rawHeightmap, 1); } - + public SinglePlantFeature(Block plant, int radius, boolean rawHeightmap, int chance) { super(radius); this.plant = plant; this.rawHeightmap = rawHeightmap; this.chance = chance; } - + protected int getChance() { return chance; } - + @Override protected BlockPos getCenterGround(WorldGenLevel world, BlockPos pos) { return rawHeightmap ? getPosOnSurfaceWG(world, pos) : getPosOnSurface(world, pos); } - + @Override public boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, float radius) { return plant.canSurvive(plant.defaultBlockState(), world, blockPos); diff --git a/src/main/java/ru/betterend/world/features/SkyScatterFeature.java b/src/main/java/ru/betterend/world/features/SkyScatterFeature.java index 60da3899..d14dbd3a 100644 --- a/src/main/java/ru/betterend/world/features/SkyScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/SkyScatterFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.Direction; @@ -7,13 +9,11 @@ import net.minecraft.world.level.WorldGenLevel; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; -import java.util.Random; - public abstract class SkyScatterFeature extends ScatterFeature { public SkyScatterFeature(int radius) { super(radius); } - + @Override protected int getChance() { return 10; @@ -24,29 +24,29 @@ public abstract class SkyScatterFeature extends ScatterFeature { if (!world.isEmptyBlock(blockPos)) { return false; } - - for (Direction dir : BlocksHelper.HORIZONTAL) { + + for (Direction dir: BlocksHelper.HORIZONTAL) { if (!world.isEmptyBlock(blockPos.relative(dir))) { return false; } } - + int maxD = getYOffset() + 2; int maxV = getYOffset() - 2; - + return BlocksHelper.upRay(world, blockPos, maxD) > maxV && BlocksHelper.downRay(world, blockPos, maxD) > maxV; } - + @Override protected boolean canSpawn(WorldGenLevel world, BlockPos pos) { return true; } - + @Override protected BlockPos getCenterGround(WorldGenLevel world, BlockPos pos) { return new BlockPos(pos.getX(), MHelper.randRange(32, 192, world.getRandom()), pos.getZ()); } - + protected boolean getGroundPlant(WorldGenLevel world, MutableBlockPos pos) { pos.setY(pos.getY() + MHelper.randRange(-getYOffset(), getYOffset(), world.getRandom())); return true; diff --git a/src/main/java/ru/betterend/world/features/UnderwaterPlantFeature.java b/src/main/java/ru/betterend/world/features/UnderwaterPlantFeature.java index 1da85b42..a31a36dd 100644 --- a/src/main/java/ru/betterend/world/features/UnderwaterPlantFeature.java +++ b/src/main/java/ru/betterend/world/features/UnderwaterPlantFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; @@ -7,16 +9,14 @@ import net.minecraft.world.level.block.state.BlockState; import ru.bclib.blocks.BaseDoublePlantBlock; import ru.bclib.util.BlocksHelper; -import java.util.Random; - public class UnderwaterPlantFeature extends UnderwaterPlantScatter { private final Block plant; - + public UnderwaterPlantFeature(Block plant, int radius) { super(radius); this.plant = plant; } - + @Override public boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, float radius) { return super.canSpawn(world, blockPos) && plant.canSurvive(plant.defaultBlockState(), world, blockPos); diff --git a/src/main/java/ru/betterend/world/features/UnderwaterPlantScatter.java b/src/main/java/ru/betterend/world/features/UnderwaterPlantScatter.java index 6fac8d50..c97f15df 100644 --- a/src/main/java/ru/betterend/world/features/UnderwaterPlantScatter.java +++ b/src/main/java/ru/betterend/world/features/UnderwaterPlantScatter.java @@ -1,19 +1,19 @@ package ru.betterend.world.features; +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 java.util.Random; - public abstract class UnderwaterPlantScatter extends ScatterFeature { private static final MutableBlockPos POS = new MutableBlockPos(); - + public UnderwaterPlantScatter(int radius) { super(radius); } - + @Override protected BlockPos getCenterGround(WorldGenLevel world, BlockPos pos) { POS.setX(pos.getX()); @@ -21,32 +21,32 @@ public abstract class UnderwaterPlantScatter extends ScatterFeature { POS.setY(0); return getGround(world, POS).immutable(); } - + @Override public boolean canGenerate(WorldGenLevel world, Random random, BlockPos center, BlockPos blockPos, float radius) { return world.getBlockState(blockPos).is(Blocks.WATER); } - + @Override protected boolean canSpawn(WorldGenLevel world, BlockPos pos) { return world.getBlockState(pos).is(Blocks.WATER); } - + @Override protected boolean getGroundPlant(WorldGenLevel world, MutableBlockPos pos) { return getGround(world, pos).getY() < 128; } - + @Override protected int getYOffset() { return -5; } - + @Override protected int getChance() { return 5; } - + private BlockPos getGround(WorldGenLevel world, MutableBlockPos pos) { while (pos.getY() < 128 && world.getFluidState(pos).isEmpty()) { pos.setY(pos.getY() + 1); diff --git a/src/main/java/ru/betterend/world/features/VineFeature.java b/src/main/java/ru/betterend/world/features/VineFeature.java index 7e5beb3d..1d2d083f 100644 --- a/src/main/java/ru/betterend/world/features/VineFeature.java +++ b/src/main/java/ru/betterend/world/features/VineFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; @@ -9,13 +11,11 @@ import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.util.BlocksHelper; -import java.util.Random; - public class VineFeature extends InvertedScatterFeature { private final Block vineBlock; private final int maxLength; private final boolean vine; - + public VineFeature(Block vineBlock, int maxLength) { super(6); this.vineBlock = vineBlock; @@ -43,7 +43,7 @@ public class VineFeature extends InvertedScatterFeature { BlocksHelper.setWithoutUpdate(world, blockPos.below(h), bottom); } } - + private boolean canPlaceBlock(BlockState state, WorldGenLevel world, BlockPos blockPos) { if (vine) { return ((BaseVineBlock) vineBlock).canGenerate(state, world, blockPos); @@ -52,17 +52,17 @@ public class VineFeature extends InvertedScatterFeature { return vineBlock.canSurvive(state, world, blockPos); } } - + private BlockState getTopState() { BlockState state = vineBlock.defaultBlockState(); return vine ? state.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.TOP) : state; } - + private BlockState getMiggleState() { BlockState state = vineBlock.defaultBlockState(); return vine ? state.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.MIDDLE) : state; } - + private BlockState getBottomState() { BlockState state = vineBlock.defaultBlockState(); return vine ? state.setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.BOTTOM) : state; diff --git a/src/main/java/ru/betterend/world/features/WallPlantFeature.java b/src/main/java/ru/betterend/world/features/WallPlantFeature.java index 0e219ee1..b218a663 100644 --- a/src/main/java/ru/betterend/world/features/WallPlantFeature.java +++ b/src/main/java/ru/betterend/world/features/WallPlantFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -10,11 +12,9 @@ import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.blocks.BaseWallPlantBlock; import ru.bclib.util.BlocksHelper; -import java.util.Random; - public class WallPlantFeature extends WallScatterFeature { private final Block block; - + public WallPlantFeature(Block block, int radius) { super(radius); this.block = block; diff --git a/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java b/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java index a8b4f6e0..7ca5cb1e 100644 --- a/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java +++ b/src/main/java/ru/betterend/world/features/WallPlantOnLogFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.tags.BlockTags; @@ -7,8 +9,6 @@ import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockState; -import java.util.Random; - public class WallPlantOnLogFeature extends WallPlantFeature { public WallPlantOnLogFeature(Block block, int radius) { super(block, radius); diff --git a/src/main/java/ru/betterend/world/features/WallScatterFeature.java b/src/main/java/ru/betterend/world/features/WallScatterFeature.java index 951af5ba..d9dee786 100644 --- a/src/main/java/ru/betterend/world/features/WallScatterFeature.java +++ b/src/main/java/ru/betterend/world/features/WallScatterFeature.java @@ -1,18 +1,18 @@ package ru.betterend.world.features; +import java.util.Random; + 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.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; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public abstract class WallScatterFeature extends DefaultFeature { private static final Direction[] DIR = BlocksHelper.makeHorizontal(); private final int radius; @@ -26,10 +26,7 @@ public abstract class WallScatterFeature extends DefaultFeature { public abstract void generate(WorldGenLevel world, Random random, BlockPos pos, Direction dir); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos center = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos center, NoneFeatureConfiguration featureConfig) { 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 a97c5d2f..d3a78ecc 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushFeature.java @@ -1,12 +1,15 @@ package ru.betterend.world.features.bushes; +import java.util.Random; +import java.util.function.Function; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,9 +24,6 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Random; -import java.util.function.Function; - public class BushFeature extends DefaultFeature { private static final Function REPLACE; private final Block leaves; @@ -35,12 +35,10 @@ public class BushFeature extends DefaultFeature { } @Override - 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) - && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) + 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)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); @@ -61,8 +59,7 @@ public class BushFeature extends DefaultFeature { int distance = info.getPos().distManhattan(pos); if (distance < 7) { return info.getState().setValue(LeavesBlock.DISTANCE, distance); - } - else { + } else { return AIR; } } @@ -76,8 +73,7 @@ public class BushFeature extends DefaultFeature { if (leaves instanceof LeavesBlock) { BlocksHelper.setWithoutUpdate(world, p, leaves.defaultBlockState().setValue(LeavesBlock.DISTANCE, 1)); - } - else { + } else { BlocksHelper.setWithoutUpdate(world, p, leaves.defaultBlockState()); } } 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 2c840d9b..67daa795 100644 --- a/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/BushWithOuterFeature.java @@ -1,5 +1,8 @@ package ru.betterend.world.features.bushes; +import java.util.Random; +import java.util.function.Function; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -7,7 +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.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -22,9 +25,6 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Random; -import java.util.function.Function; - public class BushWithOuterFeature extends DefaultFeature { private static final Direction[] DIRECTIONS = Direction.values(); private static final Function REPLACE; @@ -39,12 +39,10 @@ public class BushWithOuterFeature extends DefaultFeature { } @Override - 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) - && !world.getBlockState(pos.above()).is(TagAPI.END_GROUND)) + 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)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); @@ -65,8 +63,7 @@ public class BushWithOuterFeature extends DefaultFeature { int distance = info.getPos().distManhattan(pos); if (distance < 7) { return info.getState().setValue(LeavesBlock.DISTANCE, distance); - } - else { + } else { return AIR; } } @@ -91,8 +88,7 @@ public class BushWithOuterFeature extends DefaultFeature { if (leaves instanceof LeavesBlock) { BlocksHelper.setWithoutUpdate(world, p, leaves.defaultBlockState().setValue(LeavesBlock.DISTANCE, 1)); - } - else { + } else { BlocksHelper.setWithoutUpdate(world, p, leaves.defaultBlockState()); } } 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 cef4abcf..a3c8018a 100644 --- a/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/LargeAmaranitaFeature.java @@ -1,11 +1,13 @@ package ru.betterend.world.features.bushes; +import java.util.Random; + 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.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.blocks.BlockProperties; @@ -15,15 +17,11 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class LargeAmaranitaFeature extends DefaultFeature { @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().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 2f4aab60..ec9b0682 100644 --- a/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java +++ b/src/main/java/ru/betterend/world/features/bushes/Lumecorn.java @@ -1,11 +1,13 @@ package ru.betterend.world.features.bushes; +import java.util.Random; + 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.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -15,15 +17,11 @@ import ru.betterend.blocks.EndBlockProperties.LumecornShape; import ru.betterend.blocks.LumecornBlock; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class Lumecorn extends DefaultFeature { @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; int height = MHelper.randRange(4, 7, random); @@ -53,8 +51,7 @@ public class Lumecorn extends DefaultFeature { if (random.nextBoolean()) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.LUMECORN.defaultBlockState().setValue(LumecornBlock.SHAPE, LumecornShape.BOTTOM_SMALL)); - } - else { + } else { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.LUMECORN.defaultBlockState().setValue(LumecornBlock.SHAPE, LumecornShape.BOTTOM_BIG)); BlocksHelper.setWithoutUpdate(world, mut.move(Direction.UP), 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 9b1bb218..21e7d95e 100644 --- a/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java +++ b/src/main/java/ru/betterend/world/features/bushes/TenaneaBushFeature.java @@ -1,13 +1,18 @@ package ru.betterend.world.features.bushes; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + import com.google.common.collect.Lists; + 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -26,10 +31,6 @@ 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 TenaneaBushFeature extends DefaultFeature { private static final Function REPLACE; private static final Direction[] DIRECTIONS = Direction.values(); @@ -38,11 +39,9 @@ public class TenaneaBushFeature extends DefaultFeature { } @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; float radius = MHelper.randRange(1.8F, 3.5F, random); @@ -76,8 +75,7 @@ public class TenaneaBushFeature extends DefaultFeature { } return info.getState().setValue(LeavesBlock.DISTANCE, distance); - } - else { + } else { return AIR; } } @@ -111,8 +109,7 @@ public class TenaneaBushFeature extends DefaultFeature { mut.setY(mut.getY() - 1); if (world.isEmptyBlock(mut.below())) { BlocksHelper.setWithoutUpdate(world, mut, middle); - } - else { + } else { break; } } 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 87385f7a..5ccdefe2 100644 --- a/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/BigAuroraCrystalFeature.java @@ -1,9 +1,12 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -15,14 +18,10 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class BigAuroraCrystalFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 c4e889a7..7724bae3 100644 --- a/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/DesertLakeFeature.java @@ -1,11 +1,13 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -17,18 +19,13 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; - public class DesertLakeFeature extends DefaultFeature { private static final BlockState END_STONE = Blocks.END_STONE.defaultBlockState(); private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(15152); private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos blockPos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { 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); @@ -166,7 +163,7 @@ public class DesertLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -208,6 +205,7 @@ 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.WATER_PLANT) + || state.getMaterial().equals(Material.CORAL); } } 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 3a0e2c25..55075fcb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/EndLakeFeature.java @@ -1,11 +1,13 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.Material; @@ -17,18 +19,13 @@ 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); private static final MutableBlockPos POS = new MutableBlockPos(); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos blockPos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, NoneFeatureConfiguration featureConfig) { 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); @@ -166,7 +163,7 @@ public class EndLakeFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, POS, state); } pos = POS.below(); - if (world.getBlockState(pos).is(TagAPI.GEN_TERRAIN)) { + if (world.getBlockState(pos).getBlock().is(TagAPI.GEN_TERRAIN)) { BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.ENDSTONE_DUST.defaultBlockState()); } pos = POS.above(); @@ -202,6 +199,7 @@ 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.WATER_PLANT) + || state.getMaterial().equals(Material.CORAL); } } 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 532a158f..f0b9e545 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FallenPillarFeature.java @@ -1,11 +1,14 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -19,14 +22,9 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class FallenPillarFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { 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 c0734595..af955ffe 100644 --- a/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/FloatingSpireFeature.java @@ -1,12 +1,15 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Random; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; 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; @@ -17,16 +20,10 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; - public class FloatingSpireFeature extends SpireFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); - final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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); @@ -57,8 +54,7 @@ public class FloatingSpireFeature extends SpireFeature { support.add(info.getPos().above()); } return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); - } - else if (info.getState(Direction.UP, 3).isAir()) { + } else if (info.getState(Direction.UP, 3).isAir()) { return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig() .getUnderMaterial(); } @@ -68,7 +64,7 @@ public class FloatingSpireFeature extends SpireFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + EndFeatures.TENANEA_BUSH.getFeature().place(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 596b71b1..61da80ad 100644 --- a/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/GeyserFeature.java @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain; +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; @@ -10,7 +14,6 @@ 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; @@ -37,9 +40,6 @@ import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndFeatures; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.function.Function; - public class GeyserFeature extends DefaultFeature { protected static final Function REPLACE1; protected static final Function REPLACE2; @@ -47,11 +47,9 @@ public class GeyserFeature extends DefaultFeature { private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - 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(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 10) { return false; @@ -243,7 +241,7 @@ public class GeyserFeature extends DefaultFeature { } } - EndFeatures.SULPHURIC_LAKE.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, pos, null)); + EndFeatures.SULPHURIC_LAKE.getFeature().place(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 c7f5e69c..c76424ff 100644 --- a/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/IceStarFeature.java @@ -1,10 +1,15 @@ package ru.betterend.world.features.terrain; +import java.util.ArrayList; +import java.util.List; +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.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRotation; @@ -15,10 +20,6 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - public class IceStarFeature extends DefaultFeature { private final float minSize; private final float maxSize; @@ -33,10 +34,8 @@ public class IceStarFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { float size = MHelper.randRange(minSize, maxSize, random); int count = MHelper.randRange(minCount, maxCount, random); List points = getFibonacciPoints(count); @@ -51,8 +50,7 @@ public class IceStarFeature extends DefaultFeature { if (angle > 0.01F && angle < 3.14F) { Vector3f axis = MHelper.normalize(MHelper.cross(Vector3f.YP, point)); rotated = new SDFRotation().setRotation(axis, angle).setSource(spike); - } - else if (angle > 1) { + } else if (angle > 1) { rotated = new SDFRotation().setRotation(Vector3f.YP, (float) Math.PI).setSource(spike); } sdf = (sdf == null) ? rotated : new SDFUnion().setSourceA(sdf).setSourceB(rotated); @@ -82,11 +80,9 @@ public class IceStarFeature extends DefaultFeature { + random.nextFloat() * randScale; if (distance < ancientRadius) { return ancient; - } - else if (distance < denseRadius) { + } else if (distance < denseRadius) { return dense; - } - else if (distance < iceRadius) { + } else if (distance < iceRadius) { return ice; } return info.getState(); 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 1b5e85bd..840f53f1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianBoulderFeature.java @@ -1,10 +1,12 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -17,14 +19,10 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class ObsidianBoulderFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 2c4db528..3106db14 100644 --- a/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/ObsidianPillarBasementFeature.java @@ -1,11 +1,14 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -21,14 +24,9 @@ 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(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { 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 d47fbc44..0bbb70ea 100644 --- a/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/OreLayerFeature.java @@ -1,10 +1,12 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFCoordModify; @@ -14,8 +16,6 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Random; - public class OreLayerFeature extends DefaultFeature { private static final SDFSphere SPHERE; private static final SDFCoordModify NOISE; @@ -35,10 +35,8 @@ public class OreLayerFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 e7bcd5b0..8fceba8d 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SingleBlockFeature.java @@ -1,18 +1,18 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.world.level.WorldGenLevel; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public class SingleBlockFeature extends DefaultFeature { private final Block block; @@ -21,10 +21,7 @@ public class SingleBlockFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { 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 1dcf48bd..447138b1 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SmaragdantCrystalFeature.java @@ -1,11 +1,13 @@ 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.block.state.properties.BlockStateProperties; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -13,14 +15,10 @@ import ru.bclib.util.MHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class SmaragdantCrystalFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 e96165eb..bf14a674 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SpireFeature.java @@ -1,6 +1,11 @@ package ru.betterend.world.features.terrain; +import java.util.List; +import java.util.Random; +import java.util.function.Function; + import com.google.common.collect.Lists; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.level.WorldGenLevel; @@ -8,7 +13,6 @@ 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; @@ -24,19 +28,12 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndFeatures; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class SpireFeature extends DefaultFeature { protected static final Function REPLACE; @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); - final ChunkGenerator chunkGenerator = featureConfig.chunkGenerator(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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)) { @@ -62,8 +59,7 @@ public class SpireFeature extends DefaultFeature { support.add(info.getPos().above()); } return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); - } - else if (info.getState(Direction.UP, 3).isAir()) { + } else if (info.getState(Direction.UP, 3).isAir()) { return world.getBiome(info.getPos()).getGenerationSettings().getSurfaceBuilderConfig() .getUnderMaterial(); } @@ -72,7 +68,7 @@ public class SpireFeature extends DefaultFeature { support.forEach((bpos) -> { if (BiomeAPI.getFromBiome(world.getBiome(bpos)) == EndBiomes.BLOSSOMING_SPIRES) { - EndFeatures.TENANEA_BUSH.getFeature().place(new FeaturePlaceContext<>(world, chunkGenerator, random, bpos, null)); + EndFeatures.TENANEA_BUSH.getFeature().place(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 19979332..06e5bcfb 100644 --- a/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/StalactiteFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.util.Mth; @@ -7,15 +9,13 @@ import net.minecraft.world.level.WorldGenLevel; 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.blocks.StalactiteBlock; import ru.bclib.util.BlocksHelper; import ru.bclib.world.features.DefaultFeature; -import java.util.Random; - public class StalactiteFeature extends DefaultFeature { private final boolean ceiling; private final Block[] ground; @@ -28,10 +28,8 @@ public class StalactiteFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 53266cbc..eefaf3e7 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphurHillFeature.java @@ -1,12 +1,14 @@ package ru.betterend.world.features.terrain; +import java.util.Random; + 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.blocks.BlockProperties; import ru.bclib.util.BlocksHelper; @@ -15,14 +17,10 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.Random; - public class SulphurHillFeature extends DefaultFeature { @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { pos = getPosOnSurfaceWG(world, pos); if (pos.getY() < 57 || pos.getY() > 70) { return false; @@ -79,8 +77,7 @@ public class SulphurHillFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, mut, rock); mut.move(Direction.DOWN); } - } - else if (d < r1 * r1) { + } else if (d < r1 * r1) { BlocksHelper.setWithoutUpdate(world, mut, brimstone); mut.move(Direction.DOWN); state = world.getBlockState(mut); 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 214441cc..a314095b 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricCaveFeature.java @@ -1,6 +1,10 @@ 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; @@ -8,8 +12,8 @@ import net.minecraft.world.level.WorldGenLevel; 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.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; @@ -22,19 +26,14 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.util.BlockFixer; -import java.util.Random; -import java.util.Set; - public class SulphuricCaveFeature extends DefaultFeature { private static final BlockState CAVE_AIR = Blocks.CAVE_AIR.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); private static final Direction[] HORIZONTAL = BlocksHelper.makeHorizontal(); @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { int radius = MHelper.randRange(10, 30, random); int top = world.getHeight(Heightmap.Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); @@ -102,16 +101,14 @@ public class SulphuricCaveFeature extends DefaultFeature { if (isReplaceable(state)) { BlocksHelper.setWithoutUpdate(world, mut, y < waterLevel ? WATER : CAVE_AIR); } - } - else if (dist < r2 * r2) { + } else if (dist < r2 * r2) { state = world.getBlockState(mut); if (state.is(TagAPI.GEN_TERRAIN) || state.is(Blocks.AIR)) { double v = noise.eval(x * 0.1, y * 0.1, z * 0.1) + noise.eval(x * 0.03, y * 0.03, z * 0.03) * 0.5; if (v > 0.4) { brimstone.add(mut.immutable()); - } - else { + } else { BlocksHelper.setWithoutUpdate(world, mut, rock); } } 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 2e81d139..07d49e00 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SulphuricLakeFeature.java @@ -1,13 +1,17 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Fluids; import ru.bclib.api.TagAPI; @@ -19,18 +23,13 @@ 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(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos blockPos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, + NoneFeatureConfiguration featureConfig) { blockPos = getPosOnSurfaceWG(world, blockPos); if (blockPos.getY() < 57) { @@ -71,8 +70,7 @@ public class SulphuricLakeFeature extends DefaultFeature { brimstone.add(POS.below(2)); } } - } - else { + } else { if (!isAbsoluteBorder(world, POS)) { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); world.getLiquidTicks().scheduleTick(POS, Fluids.WATER, 0); @@ -83,16 +81,14 @@ public class SulphuricLakeFeature extends DefaultFeature { brimstone.add(POS.below(3)); } } - } - else { + } else { brimstone.add(POS.immutable()); if (random.nextBoolean()) { brimstone.add(POS.below()); } } } - } - else { + } else { BlocksHelper.setWithoutUpdate(world, POS, Blocks.WATER); brimstone.remove(POS); for (Direction dir : BlocksHelper.HORIZONTAL) { @@ -120,8 +116,7 @@ public class SulphuricLakeFeature extends DefaultFeature { } } } - } - else if (dist < r2) { + } else if (dist < r2) { POS.setY(getYOnSurface(world, x, z) - 1); if (world.getBlockState(POS).is(TagAPI.GEN_TERRAIN)) { brimstone.add(POS.immutable()); 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 e3b98484..61bdc174 100644 --- a/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java +++ b/src/main/java/ru/betterend/world/features/terrain/SurfaceVentFeature.java @@ -1,10 +1,12 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; @@ -13,14 +15,10 @@ 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(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { 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 a1ed2856..00d5f28a 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 @@ -1,14 +1,19 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Random; +import java.util.Set; +import java.util.function.Supplier; + import com.google.common.collect.Sets; + 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.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; @@ -16,10 +21,6 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.util.BlockFixer; import ru.betterend.world.biome.cave.EndCaveBiome; -import java.util.Random; -import java.util.Set; -import java.util.function.Supplier; - public class CaveChunkPopulatorFeature extends DefaultFeature { private Supplier supplier; @@ -28,10 +29,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { } @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { Set floorPositions = Sets.newHashSet(); Set ceilPositions = Sets.newHashSet(); int sx = (pos.getX() >> 4) << 4; @@ -48,7 +46,7 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { } protected void fillSets(int sx, int sz, ChunkAccess chunk, Set floorPositions, - Set ceilPositions, MutableBlockPos min, MutableBlockPos max) { + Set ceilPositions, MutableBlockPos min, MutableBlockPos max) { MutableBlockPos mut = new MutableBlockPos(); MutableBlockPos mut2 = new MutableBlockPos(); MutableBlockPos mut3 = new MutableBlockPos(); @@ -106,14 +104,14 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { } protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set floorPositions, Random random, - BlockState surfaceBlock) { + BlockState surfaceBlock) { float density = biome.getFloorDensity(); floorPositions.forEach((pos) -> { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(); + Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(world, null, random, pos.above(), null); } } }); @@ -127,9 +125,9 @@ public class CaveChunkPopulatorFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(); + Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(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 db692501..964fa6b3 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,7 +1,12 @@ 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; @@ -10,9 +15,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; @@ -25,10 +30,6 @@ 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(); @@ -36,10 +37,7 @@ public abstract class EndCaveFeature extends DefaultFeature { private static final Vec3i[] SPHERE; @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { if (pos.getX() * pos.getX() + pos.getZ() * pos.getZ() <= 2500) { return false; } @@ -60,17 +58,19 @@ public abstract class EndCaveFeature extends DefaultFeature { if (!caveBlocks.isEmpty()) { if (biome != null) { setBiomes(world, biome, caveBlocks); - 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); + 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()); } - side = bpos.above(); - if (world.getBlockState(side).is(TagAPI.GEN_TERRAIN)) { - ceilPositions.add(side); + mut.setY(bpos.getY() + 1); + if (world.getBlockState(mut).is(TagAPI.GEN_TERRAIN)) { + ceilPositions.add(mut.immutable()); } } }); @@ -94,9 +94,9 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(); + Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(world, null, random, pos.above(), null); } } }); @@ -110,21 +110,21 @@ public abstract class EndCaveFeature extends DefaultFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(); + Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(world, null, random, pos.below(), null); } } }); } - + protected void placeWalls(WorldGenLevel world, EndCaveBiome biome, Set positions, Random random) { Set placed = Sets.newHashSet(); positions.forEach(pos -> { if (random.nextInt(4) == 0 && hasOpenSide(pos, positions)) { BlockState wallBlock = biome.getWall(pos); if (wallBlock != null) { - for (Vec3i offset : SPHERE) { + for (Vec3i offset: SPHERE) { BlockPos wallPos = pos.offset(offset); if (!positions.contains(wallPos) && !placed.contains(wallPos) && world.getBlockState(wallPos).is(TagAPI.GEN_TERRAIN)) { wallBlock = biome.getWall(wallPos); @@ -136,9 +136,9 @@ public abstract class EndCaveFeature extends DefaultFeature { } }); } - + private boolean hasOpenSide(BlockPos pos, Set positions) { - for (Direction dir : BlocksHelper.DIRECTIONS) { + for (Direction dir: BlocksHelper.DIRECTIONS) { if (!positions.contains(pos.relative(dir))) { return true; } @@ -225,7 +225,7 @@ public abstract class EndCaveFeature extends DefaultFeature { } return false; } - + protected boolean biomeMissingCaves(WorldGenLevel world, BlockPos pos) { for (int x = -2; x < 3; x++) { for (int z = -2; z < 3; z++) { @@ -239,7 +239,7 @@ public abstract class EndCaveFeature extends DefaultFeature { } return false; } - + static { List prePos = Lists.newArrayList(); int radius = 5; @@ -256,6 +256,6 @@ public abstract class EndCaveFeature extends DefaultFeature { } } } - SPHERE = prePos.toArray(new Vec3i[]{}); + SPHERE = prePos.toArray(new Vec3i[] {}); } } 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 e3a582bb..58364bd6 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 @@ -1,6 +1,10 @@ package ru.betterend.world.features.terrain.caves; +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.world.level.WorldGenLevel; @@ -11,68 +15,66 @@ import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - public class RoundCaveFeature extends EndCaveFeature { @Override protected Set generate(WorldGenLevel world, BlockPos center, int radius, Random random) { OpenSimplexNoise noise = new OpenSimplexNoise(MHelper.getSeed(534, center.getX(), center.getZ())); - + int x1 = center.getX() - radius - 5; int z1 = center.getZ() - radius - 5; int x2 = center.getX() + radius + 5; int z2 = center.getZ() + radius + 5; int y1 = MHelper.floor(center.getY() - (radius + 5) / 1.6); int y2 = MHelper.floor(center.getY() + (radius + 5) / 1.6); - + double hr = radius * 0.75; double nr = radius * 0.25; - - 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; + + BlockState state; + MutableBlockPos bpos = new MutableBlockPos(); + Set blocks = Sets.newHashSet(); + for (int x = x1; x <= x2; x++) { + int xsq = x - center.getX(); + xsq *= xsq; bpos.setX(x); - 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) { + 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.setY(y); - 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); + 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); + } } } } } - }); - blocks.forEach(bpos -> BlocksHelper.setWithoutUpdate(world, bpos, CAVE_AIR)); - + } + return blocks; } - + private boolean isReplaceable(BlockState state) { return state.is(TagAPI.GEN_TERRAIN) || state.getMaterial().isReplaceable() 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 b5c1d6e8..ed518538 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,33 +1,29 @@ package ru.betterend.world.features.terrain.caves; +import java.util.Map; +import java.util.Random; +import java.util.Set; + 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; 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.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; 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; -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; @@ -35,66 +31,52 @@ 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.newConcurrentHashSet(); - - 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; - - 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); - float density = 1 - Mth.lerp(dz, da, db); - if (density < 0.5) { - for (int y = 0; y < wheight; y++) { + + Set positions = Sets.newHashSet(); + MutableBlockPos pos = new MutableBlockPos(); + for (int x = x1; x < x2; x++) { + pos.setX(x); + for (int z = z1; z < z2; z++) { + pos.setZ(z); + for (int y = 0; y < y2; y++) { pos.setY(y); - float gradient = 1 - Mth.clamp((wheight - y) * 0.1F, 0F, 1F); - 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)) { + 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)) { + 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; } - + private boolean noWaterNear(WorldGenLevel world, BlockPos pos) { BlockPos above1 = pos.above(); BlockPos above2 = pos.above(2); if (!world.getFluidState(above1).isEmpty() || !world.getFluidState(above2).isEmpty()) { return false; } - for (Direction dir : BlocksHelper.HORIZONTAL) { + for (Direction dir: BlocksHelper.HORIZONTAL) { if (!world.getFluidState(above1.relative(dir)).isEmpty()) { return false; } @@ -104,12 +86,9 @@ public class TunelCaveFeature extends EndCaveFeature { } return true; } - + @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { if (pos.getX() * pos.getX() + pos.getZ() * pos.getZ() <= 2500) { return false; } @@ -117,12 +96,12 @@ public class TunelCaveFeature extends EndCaveFeature { if (biomeMissingCaves(world, pos)) { return false; } - + Set caveBlocks = generate(world, pos, random); if (caveBlocks.isEmpty()) { return false; } - + Map> floorSets = Maps.newHashMap(); Map> ceilSets = Maps.newHashMap(); MutableBlockPos mut = new MutableBlockPos(); @@ -157,11 +136,11 @@ public class TunelCaveFeature extends EndCaveFeature { } }); caveBlocks.removeAll(remove); - + if (caveBlocks.isEmpty()) { return true; } - + floorSets.forEach((biome, floorPositions) -> { BlockState surfaceBlock = biome.getBiome().getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); placeFloor(world, biome, floorPositions, random, surfaceBlock); @@ -180,7 +159,7 @@ public class TunelCaveFeature extends EndCaveFeature { protected Set generate(WorldGenLevel world, BlockPos center, int radius, Random random) { return null; } - + @Override protected void placeFloor(WorldGenLevel world, EndCaveBiome biome, Set floorPositions, Random random, BlockState surfaceBlock) { float density = biome.getFloorDensity() * 0.2F; @@ -189,9 +168,9 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, surfaceBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getFloorFeature(); + Feature feature = biome.getFloorFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.above(), null)); + feature.place(world, null, random, pos.above(), null); } } }); @@ -206,24 +185,11 @@ public class TunelCaveFeature extends EndCaveFeature { BlocksHelper.setWithoutUpdate(world, pos, ceilBlock); } if (density > 0 && random.nextFloat() <= density) { - Feature feature = biome.getCeilFeature(); + Feature feature = biome.getCeilFeature(random); if (feature != null) { - feature.place(new FeaturePlaceContext<>(world, null, random, pos.below(), null)); + feature.place(world, null, random, pos.below(), null); } } }); } - - 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); - } } 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 c3abb2ee..b03576fe 100644 --- a/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/DragonTreeFeature.java @@ -1,14 +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.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -27,10 +32,6 @@ 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 DragonTreeFeature extends DefaultFeature { private static final Function REPLACE; private static final Function IGNORE; @@ -41,11 +42,9 @@ public class DragonTreeFeature extends DefaultFeature { private static final List ROOT; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().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 2e3c7937..849cb05e 100644 --- a/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/GiganticAmaranitaFeature.java @@ -1,6 +1,11 @@ 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; @@ -9,7 +14,7 @@ import net.minecraft.core.Direction.AxisDirection; import net.minecraft.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -22,21 +27,15 @@ import ru.bclib.util.SplineHelper; import ru.bclib.world.features.DefaultFeature; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class GiganticAmaranitaFeature extends DefaultFeature { private static final Function REPLACE; private static final Function IGNORE; private static final Function POST; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(5, 10, random); @@ -128,8 +127,7 @@ public class GiganticAmaranitaFeature extends DefaultFeature { } } } - } - else if (radius < 4) { + } else if (radius < 4) { pos = pos.offset(-1, 0, -1); for (int i = -2; i < 2; i++) { mut.set(pos).move(Direction.NORTH, 2).move(Direction.WEST, i); @@ -200,8 +198,7 @@ public class GiganticAmaranitaFeature extends DefaultFeature { } } } - } - else { + } else { for (int i = -2; i < 3; i++) { mut.set(pos).move(Direction.NORTH, 3).move(Direction.EAST, i); if (world.getBlockState(mut).getMaterial().isReplaceable()) { @@ -316,8 +313,7 @@ public class GiganticAmaranitaFeature extends DefaultFeature { && world.getBlockState(mut).getMaterial().isReplaceable()) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.AMARANITA_CAP); } - } - else { + } else { if ((x == 0 || z == 0) && (Math.abs(x) < 2 && Math.abs(z) < 2) && world.getBlockState(mut).getMaterial().isReplaceable()) { BlocksHelper.setWithoutUpdate(world, mut, EndBlocks.AMARANITA_CAP); 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 b7bb9d23..038ae0fc 100644 --- a/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/HelixTreeFeature.java @@ -1,12 +1,18 @@ package ru.betterend.world.features.trees; +import java.util.ArrayList; +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.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.phys.AABB; import ru.bclib.api.TagAPI; @@ -24,20 +30,13 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.HelixTreeLeavesBlock; import ru.betterend.registry.EndBlocks; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class HelixTreeFeature extends DefaultFeature { private static final Function POST; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; BlocksHelper.setWithoutUpdate(world, pos, AIR); @@ -124,8 +123,7 @@ public class HelixTreeFeature extends DefaultFeature { if (ax > az) { start.set(start.x(), start.y(), start.z() + az > 0 ? 1 : -1); end.set(end.x(), end.y(), end.z() + az > 0 ? 1 : -1); - } - else { + } else { start.set(start.x() + ax > 0 ? 1 : -1, start.y(), start.z()); end.set(end.x() + ax > 0 ? 1 : -1, end.y(), end.z()); } @@ -152,7 +150,7 @@ public class HelixTreeFeature extends DefaultFeature { } private void fillLine(Vector3f start, Vector3f end, WorldGenLevel world, BlockState state, BlockPos pos, - int offset) { + int offset) { float dx = end.x() - start.x(); float dy = end.y() - start.y(); float dz = end.z() - start.z(); 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 0c5f55c5..3680e707 100644 --- a/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/JellyshroomFeature.java @@ -1,12 +1,17 @@ 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.util.Mth; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -23,20 +28,14 @@ import ru.bclib.world.features.DefaultFeature; import ru.betterend.blocks.JellyshroomCapBlock; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; -import java.util.function.Function; - public class JellyshroomFeature extends DefaultFeature { private static final Function REPLACE; private static final List ROOT; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; BlockState bark = EndBlocks.JELLYSHROOM.bark.defaultBlockState(); @@ -65,8 +64,7 @@ public class JellyshroomFeature extends DefaultFeature { && EndBlocks.JELLYSHROOM.isTreeLog(info.getStateDown())) { return EndBlocks.JELLYSHROOM.log.defaultBlockState(); } - } - else if (info.getState().is(EndBlocks.JELLYSHROOM_CAP_PURPLE)) { + } else if (info.getState().is(EndBlocks.JELLYSHROOM_CAP_PURPLE)) { float dx = info.getPos().getX() - pos.getX() - last.x(); float dz = info.getPos().getZ() - pos.getZ() - last.z(); float distance = MHelper.length(dx, dz) / membraneRadius * 7F; 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 39655815..9485d5ce 100644 --- a/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LacugroveFeature.java @@ -1,13 +1,18 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -24,20 +29,14 @@ 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 LacugroveFeature extends DefaultFeature { private static final Function REPLACE; private static final Function IGNORE; private static final Function POST; @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { if (!world.getBlockState(pos.below()).is(TagAPI.END_GROUND)) return false; @@ -97,8 +96,7 @@ public class LacugroveFeature extends DefaultFeature { || state.is(TagAPI.END_GROUND)) { BlocksHelper.setWithoutUpdate(world, mut, y == top ? EndBlocks.LACUGROVE.bark : EndBlocks.LACUGROVE.log); - } - else { + } else { break; } } 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 3982a8ca..b8a8ffc6 100644 --- a/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/LucerniaFeature.java @@ -1,14 +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.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -29,10 +34,6 @@ 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; @@ -41,12 +42,9 @@ public class LucerniaFeature extends DefaultFeature { private static final List ROOT; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(12, 20, random); @@ -72,7 +70,7 @@ public class LucerniaFeature extends DefaultFeature { } private void leavesBall(WorldGenLevel world, BlockPos pos, float radius, Random random, OpenSimplexNoise noise, - boolean natural) { + boolean natural) { SDF sphere = new SDFSphere().setRadius(radius) .setBlock(EndBlocks.LUCERNIA_LEAVES.defaultBlockState().setValue(LeavesBlock.DISTANCE, 6)); SDF sub = new SDFScale().setScale(5).setSource(sphere); @@ -164,8 +162,7 @@ public class LucerniaFeature extends DefaultFeature { mut.setY(mut.getY() - 1); if (world.isEmptyBlock(mut.below())) { BlocksHelper.setWithoutUpdate(world, mut, middle); - } - else { + } else { break; } } 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 c6eafe0c..fd076dbc 100644 --- a/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/MossyGlowshroomFeature.java @@ -1,11 +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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -31,10 +36,6 @@ 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(); @@ -48,10 +49,8 @@ public class MossyGlowshroomFeature extends DefaultFeature { private static final SDFPrimitive ROOTS; @Override - public boolean place(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos blockPos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, + NoneFeatureConfiguration featureConfig) { 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 a31da107..178bc53c 100644 --- a/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/PythadendronTreeFeature.java @@ -1,13 +1,18 @@ 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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -25,20 +30,13 @@ 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(FeaturePlaceContext featureConfig) { - final Random random = featureConfig.random(); - final BlockPos pos = featureConfig.origin(); - final WorldGenLevel world = featureConfig.level(); + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, NoneFeatureConfiguration config) { if (world.getBlockState(pos.below()).getBlock() != EndBlocks.CHORUS_NYLIUM) { return false; } @@ -65,7 +63,7 @@ public class PythadendronTreeFeature extends DefaultFeature { } private void branch(float x, float y, float z, float size, float angle, Random random, int depth, - WorldGenLevel world, BlockPos pos) { + WorldGenLevel world, BlockPos pos) { if (depth == 0) return; 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 05c3a0f1..7f9c7ecb 100644 --- a/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/TenaneaFeature.java @@ -1,14 +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.world.level.WorldGenLevel; import net.minecraft.world.level.block.LeavesBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -29,10 +34,6 @@ 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; @@ -40,11 +41,9 @@ public class TenaneaFeature extends DefaultFeature { private static final List SPLINE; @Override - 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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; float size = MHelper.randRange(7, 10, random); @@ -160,8 +159,7 @@ public class TenaneaFeature extends DefaultFeature { mut.setY(mut.getY() - 1); if (world.isEmptyBlock(mut.below())) { BlocksHelper.setWithoutUpdate(world, mut, middle); - } - else { + } else { break; } } 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 34df39c0..f2f7366e 100644 --- a/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java +++ b/src/main/java/ru/betterend/world/features/trees/UmbrellaTreeFeature.java @@ -1,14 +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.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import net.minecraft.world.level.material.Material; import ru.bclib.api.TagAPI; @@ -29,22 +34,15 @@ 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(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)) + public boolean place(WorldGenLevel world, ChunkGenerator chunkGenerator, Random random, BlockPos pos, + NoneFeatureConfiguration config) { + if (!world.getBlockState(pos.below()).getBlock().is(TagAPI.END_GROUND)) return false; BlockState wood = EndBlocks.UMBRELLA_TREE.bark.defaultBlockState(); @@ -112,8 +110,7 @@ public class UmbrellaTreeFeature extends DefaultFeature { if (EndBlocks.UMBRELLA_TREE.isTreeLog(info.getStateUp()) && EndBlocks.UMBRELLA_TREE.isTreeLog(info.getStateDown())) { return EndBlocks.UMBRELLA_TREE.log.defaultBlockState(); - } - else if (info.getState().equals(membrane)) { + } else if (info.getState().equals(membrane)) { Center min = centers.get(0); double d = Double.MAX_VALUE; BlockPos bpos = info.getPos(); diff --git a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java index 1c20fc72..602a095b 100644 --- a/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java +++ b/src/main/java/ru/betterend/world/generator/BetterEndBiomeSource.java @@ -1,8 +1,11 @@ package ru.betterend.world.generator; +import java.util.List; + import com.google.common.collect.Lists; import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; + import net.minecraft.core.Registry; import net.minecraft.resources.RegistryLookupCodec; import net.minecraft.world.level.biome.Biome; @@ -21,8 +24,6 @@ import ru.betterend.registry.EndTags; import ru.betterend.util.FeaturesHelper; import ru.betterend.world.biome.EndBiome; -import java.util.List; - public class BetterEndBiomeSource extends BiomeSource { public static final Codec CODEC = RecordCodecBuilder.create((instance) -> { return instance.group(RegistryLookupCodec.create(Registry.BIOME_REGISTRY).forGetter((theEndBiomeSource) -> { @@ -42,14 +43,14 @@ public class BetterEndBiomeSource extends BiomeSource { public BetterEndBiomeSource(Registry biomeRegistry, long seed) { super(getBiomes(biomeRegistry)); - + this.mapLand = new BiomeMap(seed, GeneratorOptions.getBiomeSizeLand(), EndBiomes.LAND_BIOMES); this.mapVoid = new BiomeMap(seed, GeneratorOptions.getBiomeSizeVoid(), EndBiomes.VOID_BIOMES); this.centerBiome = biomeRegistry.getOrThrow(Biomes.THE_END); this.barrens = biomeRegistry.getOrThrow(Biomes.END_BARRENS); this.biomeRegistry = biomeRegistry; this.seed = seed; - + WorldgenRandom chunkRandom = new WorldgenRandom(seed); chunkRandom.consumeCount(17292); this.noise = new SimplexNoise(chunkRandom); @@ -58,12 +59,11 @@ public class BetterEndBiomeSource extends BiomeSource { EndTags.addTerrainTags(biomeRegistry); FeaturesHelper.addFeatures(biomeRegistry); } - + private static List getBiomes(Registry biomeRegistry) { List list = Lists.newArrayList(); biomeRegistry.forEach((biome) -> { - BCLBiome bclBiome = BiomeAPI.getBiome(biomeRegistry.getKey(biome)); - if (bclBiome instanceof EndBiome) { + if (EndBiomes.hasBiome(biomeRegistry.getKey(biome))) { list.add(biome); } }); @@ -75,7 +75,7 @@ public class BetterEndBiomeSource extends BiomeSource { boolean hasVoid = !GeneratorOptions.useNewGenerator() || !GeneratorOptions.noRingVoid(); long i = (long) biomeX * (long) biomeX; long j = (long) biomeZ * (long) biomeZ; - + long dist = i + j; if (hasVoid) { if (dist <= 65536L) return this.centerBiome; @@ -86,12 +86,12 @@ public class BetterEndBiomeSource extends BiomeSource { return this.centerBiome; } } - + if (biomeX == 0 && biomeZ == 0) { mapLand.clearCache(); mapVoid.clearCache(); } - + BCLBiome endBiome = null; if (GeneratorOptions.useNewGenerator()) { if (TerrainGenerator.isLand(biomeX, biomeZ)) { @@ -106,22 +106,22 @@ public class BetterEndBiomeSource extends BiomeSource { } else { float height = TheEndBiomeSource.getHeightValue(noise, (biomeX >> 1) + 1, (biomeZ >> 1) + 1) + (float) SMALL_NOISE.eval(biomeX, biomeZ) * 5; - + if (height > -20F && height < -5F) { return barrens; } - + endBiome = height < -10F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2); } - + return BiomeAPI.getActualBiome(endBiome); } - + public Biome getLandBiome(int biomeX, int biomeY, int biomeZ) { boolean hasVoid = !GeneratorOptions.useNewGenerator() || !GeneratorOptions.noRingVoid(); long i = (long) biomeX * (long) biomeX; long j = (long) biomeZ * (long) biomeZ; - + long dist = i + j; if (hasVoid) { if (dist <= 65536L) return this.centerBiome; diff --git a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java index 521c5407..346dd2a7 100644 --- a/src/main/java/ru/betterend/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/betterend/world/generator/GeneratorOptions.java @@ -30,7 +30,7 @@ public class GeneratorOptions { private static long islandDistBlock; private static int islandDistChunk; private static boolean directSpikeHeight; - + public static void init() { biomeSizeLand = Configs.GENERATOR_CONFIG.getInt("biomeMap", "biomeSizeLand", 256); biomeSizeVoid = Configs.GENERATOR_CONFIG.getInt("biomeMap", "biomeSizeVoid", 256); @@ -51,9 +51,9 @@ public class GeneratorOptions { smallOptions = new LayerOptions("customGenerator.layers.smallIslands", Configs.GENERATOR_CONFIG, 60, 50, 70, 30, false); changeSpawn = Configs.GENERATOR_CONFIG.getBoolean("spawn", "changeSpawn", false); spawn = new BlockPos( - Configs.GENERATOR_CONFIG.getInt("spawn.point", "x", 20), - Configs.GENERATOR_CONFIG.getInt("spawn.point", "y", 65), - Configs.GENERATOR_CONFIG.getInt("spawn.point", "z", 0) + Configs.GENERATOR_CONFIG.getInt("spawn.point", "x", 20), + Configs.GENERATOR_CONFIG.getInt("spawn.point", "y", 65), + Configs.GENERATOR_CONFIG.getInt("spawn.point", "z", 0) ); replacePortal = Configs.GENERATOR_CONFIG.getBoolean("portal", "customEndPortal", true); replacePillars = Configs.GENERATOR_CONFIG.getBoolean("spikes", "customObsidianSpikes", true); @@ -65,11 +65,11 @@ public class GeneratorOptions { public static int getBiomeSizeLand() { return Mth.clamp(biomeSizeLand, 1, 8192); } - + public static int getBiomeSizeVoid() { return Mth.clamp(biomeSizeVoid, 1, 8192); } - + public static int getBiomeSizeCaves() { return Mth.clamp(biomeSizeCaves, 1, 8192); } @@ -77,15 +77,15 @@ public class GeneratorOptions { public static boolean hasPortal() { return hasPortal; } - + public static boolean hasPillars() { return hasPillars; } - + public static boolean hasDragonFights() { return hasDragonFights; } - + public static boolean swapOverworldToEnd() { return swapOverworldToEnd; } @@ -97,23 +97,23 @@ public class GeneratorOptions { public static boolean removeChorusFromVanillaBiomes() { return removeChorusFromVanillaBiomes; } - + public static boolean noRingVoid() { return noRingVoid; } - + public static boolean useNewGenerator() { return newGenerator; } - + public static boolean hasCentralIsland() { return generateCentralIsland; } - + public static boolean generateObsidianPlatform() { return generateObsidianPlatform; } - + public static int getEndCityFailChance() { return endCityFailChance; } @@ -133,11 +133,11 @@ public class GeneratorOptions { public static void setPortalPos(BlockPos portal) { GeneratorOptions.portal = portal; } - + public static boolean replacePortal() { return replacePortal; } - + public static boolean replacePillars() { return replacePillars; } @@ -149,11 +149,11 @@ public class GeneratorOptions { public static int getIslandDistChunk() { return islandDistChunk; } - + public static void setDirectSpikeHeight() { directSpikeHeight = true; } - + public static boolean isDirectSpikeHeight() { boolean height = directSpikeHeight; directSpikeHeight = false; diff --git a/src/main/java/ru/betterend/world/generator/IslandLayer.java b/src/main/java/ru/betterend/world/generator/IslandLayer.java index 178fd625..d7858317 100644 --- a/src/main/java/ru/betterend/world/generator/IslandLayer.java +++ b/src/main/java/ru/betterend/world/generator/IslandLayer.java @@ -1,6 +1,12 @@ package ru.betterend.world.generator; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; import ru.bclib.sdf.SDF; import ru.bclib.sdf.operator.SDFRadialNoiseMap; @@ -11,16 +17,11 @@ import ru.bclib.sdf.primitive.SDFCappedCone; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Random; - public class IslandLayer { private static final Random RANDOM = new Random(); private final SDFRadialNoiseMap noise; private final SDF island; - + private final List positions = new ArrayList(9); private final Map islands = Maps.newHashMap(); private final OpenSimplexNoise density; @@ -28,33 +29,33 @@ public class IslandLayer { private int lastX = Integer.MIN_VALUE; private int lastZ = Integer.MIN_VALUE; private final LayerOptions options; - + public IslandLayer(int seed, LayerOptions options) { this.density = new OpenSimplexNoise(seed); this.options = options; this.seed = seed; - + SDF cone1 = makeCone(0, 0.4F, 0.2F, -0.3F); SDF cone2 = makeCone(0.4F, 0.5F, 0.1F, -0.1F); SDF cone3 = makeCone(0.5F, 0.45F, 0.03F, 0.0F); SDF cone4 = makeCone(0.45F, 0, 0.02F, 0.03F); - + SDF coneBottom = new SDFSmoothUnion().setRadius(0.02F).setSourceA(cone1).setSourceB(cone2); SDF coneTop = new SDFSmoothUnion().setRadius(0.02F).setSourceA(cone3).setSourceB(cone4); noise = (SDFRadialNoiseMap) new SDFRadialNoiseMap().setSeed(seed).setRadius(0.5F).setIntensity(0.2F).setSource(coneTop); island = new SDFSmoothUnion().setRadius(0.01F).setSourceA(noise).setSourceB(coneBottom); } - + private int getSeed(int x, int z) { int h = seed + x * 374761393 + z * 668265263; h = (h ^ (h >> 13)) * 1274126177; return h ^ (h >> 16); } - + public void updatePositions(double x, double z) { int ix = MHelper.floor(x / options.distance); int iz = MHelper.floor(z / options.distance); - + if (lastX != ix || lastZ != iz) { lastX = ix; lastZ = iz; @@ -77,7 +78,7 @@ public class IslandLayer { } } } - + if (GeneratorOptions.hasCentralIsland() && Math.abs(ix) < GeneratorOptions.getIslandDistChunk() && Math.abs(iz) < GeneratorOptions.getIslandDistChunk()) { int count = positions.size(); for (int n = 0; n < count; n++) { @@ -94,7 +95,7 @@ public class IslandLayer { } } } - + private SDF getIsland(BlockPos pos) { SDF island = islands.get(pos); if (island == null) { @@ -110,40 +111,40 @@ public class IslandLayer { noise.setOffset(pos.getX(), pos.getZ()); return island; } - + private float getRelativeDistance(SDF sdf, BlockPos center, double px, double py, double pz) { float x = (float) (px - center.getX()) / options.scale; float y = (float) (py - center.getY()) / options.scale; float z = (float) (pz - center.getZ()) / options.scale; return sdf.getDistance(x, y, z); } - + private float calculateSDF(double x, double y, double z) { float distance = 10; - for (BlockPos pos : positions) { + for (BlockPos pos: positions) { SDF island = getIsland(pos); float dist = getRelativeDistance(island, pos, x, y, z); distance = MHelper.min(distance, dist); } return distance; } - + public float getDensity(double x, double y, double z) { return -calculateSDF(x, y, z); } - + public float getDensity(double x, double y, double z, float height) { noise.setIntensity(height); noise.setRadius(0.5F / (1 + height)); return -calculateSDF(x, y, z); } - + public void clearCache() { if (islands.size() > 128) { islands.clear(); } } - + private static SDF makeCone(float radiusBottom, float radiusTop, float height, float minY) { float hh = height * 0.5F; SDF sdf = new SDFCappedCone().setHeight(hh).setRadius1(radiusBottom).setRadius2(radiusTop); diff --git a/src/main/java/ru/betterend/world/generator/LayerOptions.java b/src/main/java/ru/betterend/world/generator/LayerOptions.java index 58241d87..03c6ecab 100644 --- a/src/main/java/ru/betterend/world/generator/LayerOptions.java +++ b/src/main/java/ru/betterend/world/generator/LayerOptions.java @@ -13,7 +13,7 @@ public class LayerOptions { public final int maxY; public final long centerDist; public final boolean hasCentralIsland; - + public LayerOptions(String name, PathConfig config, float distance, float scale, int center, int heightVariation, boolean hasCentral) { this.distance = clampDistance(config.getFloat(name, "distance[1-8192]", distance)); this.scale = clampScale(config.getFloat(name, "scale[0.1-1024]", scale)); @@ -25,23 +25,23 @@ public class LayerOptions { this.centerDist = Mth.floor(1000 / this.distance); this.hasCentralIsland = config.getBoolean(name, "hasCentralIsland", hasCentral); } - + private float clampDistance(float value) { return Mth.clamp(value, 1, 8192); } - + private float clampScale(float value) { return Mth.clamp(value, 0.1F, 1024); } - + private float clampCoverage(float value) { return 0.9999F - Mth.clamp(value, 0, 1) * 2; } - + private int clampCenter(int value) { return Mth.clamp(value, 0, 255); } - + private int clampVariation(int value) { return Mth.clamp(value, 0, 255); } diff --git a/src/main/java/ru/betterend/world/generator/TerrainBoolCache.java b/src/main/java/ru/betterend/world/generator/TerrainBoolCache.java deleted file mode 100644 index 3afe6529..00000000 --- a/src/main/java/ru/betterend/world/generator/TerrainBoolCache.java +++ /dev/null @@ -1,21 +0,0 @@ -package ru.betterend.world.generator; - -public class TerrainBoolCache { - private byte[] data = new byte[16384]; - - public static int scaleCoordinate(int value) { - return value >> 7; - } - - private int getIndex(int x, int z) { - return x << 7 | z; - } - - public void setData(int x, int z, byte value) { - data[getIndex(x & 127, z & 127)] = value; - } - - public byte getData(int x, int z) { - return data[getIndex(x & 127, z & 127)]; - } -} diff --git a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java index 0e0cd530..1214b56b 100644 --- a/src/main/java/ru/betterend/world/generator/TerrainGenerator.java +++ b/src/main/java/ru/betterend/world/generator/TerrainGenerator.java @@ -1,37 +1,35 @@ package ru.betterend.world.generator; +import java.awt.Point; +import java.util.List; +import java.util.Random; +import java.util.concurrent.locks.ReentrantLock; + import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import net.minecraft.core.BlockPos; -import net.minecraft.core.BlockPos.MutableBlockPos; + import net.minecraft.util.Mth; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.BiomeSource; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.awt.Point; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.IntStream; - public class TerrainGenerator { - private static final Map TERRAIN_BOOL_CACHE_MAP = Maps.newHashMap(); private static final ReentrantLock LOCKER = new ReentrantLock(); - private static final Point POS = new Point(); private static final double SCALE_XZ = 8.0; private static final double SCALE_Y = 4.0; private static final float[] COEF; private static final Point[] OFFS; - + private static IslandLayer largeIslands; private static IslandLayer mediumIslands; private static IslandLayer smallIslands; private static OpenSimplexNoise noise1; private static OpenSimplexNoise noise2; - + + /*public static boolean canGenerate(int x, int z) { + return GeneratorOptions.noRingVoid() || (long) x + (long) z > CENTER; + }*/ + public static void initNoise(long seed) { Random random = new Random(seed); largeIslands = new IslandLayer(random.nextInt(), GeneratorOptions.bigOptions); @@ -39,27 +37,26 @@ public class TerrainGenerator { smallIslands = new IslandLayer(random.nextInt(), GeneratorOptions.smallOptions); noise1 = new OpenSimplexNoise(random.nextInt()); noise2 = new OpenSimplexNoise(random.nextInt()); - TERRAIN_BOOL_CACHE_MAP.clear(); } - + public static void fillTerrainDensity(double[] buffer, int x, int z, BiomeSource biomeSource) { LOCKER.lock(); - + largeIslands.clearCache(); mediumIslands.clearCache(); smallIslands.clearCache(); - + double distortion1 = noise1.eval(x * 0.1, z * 0.1) * 20 + noise2.eval(x * 0.2, z * 0.2) * 10 + noise1.eval(x * 0.4, z * 0.4) * 5; double distortion2 = noise2.eval(x * 0.1, z * 0.1) * 20 + noise1.eval(x * 0.2, z * 0.2) * 10 + noise2.eval(x * 0.4, z * 0.4) * 5; double px = (double) x * SCALE_XZ + distortion1; double pz = (double) z * SCALE_XZ + distortion2; - + largeIslands.updatePositions(px, pz); mediumIslands.updatePositions(px, pz); smallIslands.updatePositions(px, pz); - + float height = getAverageDepth(biomeSource, x << 1, z << 1) * 0.5F; - + for (int y = 0; y < buffer.length; y++) { double py = (double) y * SCALE_Y; float dist = largeIslands.getDensity(px, py, pz, height); @@ -72,10 +69,10 @@ public class TerrainGenerator { } buffer[y] = dist; } - + LOCKER.unlock(); } - + private static float getAverageDepth(BiomeSource biomeSource, int x, int z) { if (getBiome(biomeSource, x, z).getDepth() < 0.1F) { return 0F; @@ -88,54 +85,34 @@ public class TerrainGenerator { } return depth; } - + private static Biome getBiome(BiomeSource biomeSource, int x, int z) { if (biomeSource instanceof BetterEndBiomeSource) { return ((BetterEndBiomeSource) biomeSource).getLandBiome(x, 0, z); } return biomeSource.getNoiseBiome(x, 0, z); } - + /** * Check if this is land - * * @param x - biome pos x * @param z - biome pos z */ public static boolean isLand(int x, int z) { - int sectionX = TerrainBoolCache.scaleCoordinate(x); - int sectionZ = TerrainBoolCache.scaleCoordinate(z); - LOCKER.lock(); - POS.setLocation(sectionX, sectionZ); - - TerrainBoolCache section = TERRAIN_BOOL_CACHE_MAP.get(POS); - if (section == null) { - if (TERRAIN_BOOL_CACHE_MAP.size() > 64) { - TERRAIN_BOOL_CACHE_MAP.clear(); - } - section = new TerrainBoolCache(); - TERRAIN_BOOL_CACHE_MAP.put(new Point(POS.x, POS.y), section); - } - byte value = section.getData(x, z); - if (value > 0) { - LOCKER.unlock(); - return value > 1; - } - + double px = (x >> 1) + 0.5; double pz = (z >> 1) + 0.5; - + double distortion1 = noise1.eval(px * 0.1, pz * 0.1) * 20 + noise2.eval(px * 0.2, pz * 0.2) * 10 + noise1.eval(px * 0.4, pz * 0.4) * 5; double distortion2 = noise2.eval(px * 0.1, pz * 0.1) * 20 + noise1.eval(px * 0.2, pz * 0.2) * 10 + noise2.eval(px * 0.4, pz * 0.4) * 5; px = px * SCALE_XZ + distortion1; pz = pz * SCALE_XZ + distortion2; - + largeIslands.updatePositions(px, pz); mediumIslands.updatePositions(px, pz); smallIslands.updatePositions(px, pz); - - boolean result = false; + for (int y = 0; y < 32; y++) { double py = (double) y * SCALE_Y; float dist = largeIslands.getDensity(px, py, pz); @@ -147,38 +124,35 @@ public class TerrainGenerator { dist += noise1.eval(px * 0.1, py * 0.1, pz * 0.1) * 0.005 + 0.005; } if (dist > -0.01) { - result = true; - break; + LOCKER.unlock(); + return true; } } - - section.setData(x, z, (byte) (result ? 2 : 1)); + LOCKER.unlock(); - - return result; + return false; } - + /** * Get something like height - * * @param x - block pos x * @param z - block pos z */ public static int getHeight(int x, int z) { LOCKER.lock(); - + double px = (double) x / 8.0; double pz = (double) z / 8.0; - + double distortion1 = noise1.eval(px * 0.1, pz * 0.1) * 20 + noise2.eval(px * 0.2, pz * 0.2) * 10 + noise1.eval(px * 0.4, pz * 0.4) * 5; double distortion2 = noise2.eval(px * 0.1, pz * 0.1) * 20 + noise1.eval(px * 0.2, pz * 0.2) * 10 + noise2.eval(px * 0.4, pz * 0.4) * 5; px = (double) x * SCALE_XZ + distortion1; pz = (double) z * SCALE_XZ + distortion2; - + largeIslands.updatePositions(px, pz); mediumIslands.updatePositions(px, pz); smallIslands.updatePositions(px, pz); - + for (int y = 32; y >= 0; y--) { double py = (double) y * SCALE_Y; float dist = largeIslands.getDensity(px, py, pz); @@ -194,11 +168,11 @@ public class TerrainGenerator { return Mth.floor(Mth.clamp(y + dist, y, y + 1) * SCALE_Y); } } - + LOCKER.unlock(); return 0; } - + static { float sum = 0; List coef = Lists.newArrayList(); @@ -213,7 +187,7 @@ public class TerrainGenerator { } } } - OFFS = pos.toArray(new Point[]{}); + OFFS = pos.toArray(new Point[] {}); COEF = new float[coef.size()]; for (int i = 0; i < COEF.length; i++) { COEF[i] = coef.get(i) / sum; diff --git a/src/main/java/ru/betterend/world/structures/EndStructureFeature.java b/src/main/java/ru/betterend/world/structures/EndStructureFeature.java index 3881eccd..396fc2a1 100644 --- a/src/main/java/ru/betterend/world/structures/EndStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/EndStructureFeature.java @@ -1,5 +1,7 @@ package ru.betterend.world.structures; +import java.util.Random; + import net.fabricmc.fabric.api.structure.v1.FabricStructureBuilder; import net.minecraft.data.BuiltinRegistries; import net.minecraft.resources.ResourceLocation; @@ -9,25 +11,23 @@ import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; import ru.betterend.BetterEnd; -import java.util.Random; - public class EndStructureFeature { private static final Random RANDOM = new Random(354); private final StructureFeature structure; private final ConfiguredStructureFeature featureConfigured; private final GenerationStep.Decoration featureStep; - + public EndStructureFeature(String name, StructureFeature structure, GenerationStep.Decoration step, int spacing, int separation) { ResourceLocation id = BetterEnd.makeID(name); - + this.featureStep = step; this.structure = FabricStructureBuilder.create(id, structure) - .step(step) - .defaultConfig(spacing, separation, RANDOM.nextInt(8192)) - .register(); + .step(step) + .defaultConfig(spacing, separation, RANDOM.nextInt(8192)) + .register(); this.featureConfigured = this.structure.configured(NoneFeatureConfiguration.NONE); - + BuiltinRegistries.register(BuiltinRegistries.CONFIGURED_STRUCTURE_FEATURE, id, this.featureConfigured); } 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 0706e607..f67a71d4 100644 --- a/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/EternalPortalStructure.java @@ -4,7 +4,6 @@ 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; @@ -13,6 +12,7 @@ import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; @@ -24,41 +24,39 @@ import ru.betterend.world.structures.piece.NBTPiece; public class EternalPortalStructure extends FeatureBaseStructure { private static final ResourceLocation STRUCTURE_ID = BetterEnd.makeID("portal/eternal_portal"); private static final StructureTemplate STRUCTURE = StructureHelper.readStructure(STRUCTURE_ID); - + @Override - protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, ChunkPos pos, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig, LevelHeightAccessor levelHeightAccessor) { + protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig) { 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(pos.getBlockX(8), pos.getBlockX(8), Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor) < 10) { + if (chunkGenerator.getBaseHeight((chunkX << 4) | 8, (chunkZ << 4) | 8, Heightmap.Types.WORLD_SURFACE_WG) < 10) { return false; } - return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, pos, biome, chunkPos, featureConfig, levelHeightAccessor); + return super.isFeatureChunk(chunkGenerator, biomeSource, worldSeed, chunkRandom, chunkX, chunkZ, biome, chunkPos, featureConfig); } - + @Override public StructureFeature.StructureStartFactory getStartFactory() { return PortalStructureStart::new; } - + public static class PortalStructureStart extends StructureStart { - public PortalStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); + public PortalStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } - @Override - 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); + 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); if (y > 4) { this.pieces.add(new NBTPiece(STRUCTURE_ID, STRUCTURE, new BlockPos(x, y - 4, z), random.nextInt(5), true, random)); } - //bbox is calculated lazy on get - //this.calculateBoundingBox(); + 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 10f78d2c..219ec6f5 100644 --- a/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/FeatureBaseStructure.java @@ -1,7 +1,8 @@ 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; @@ -13,42 +14,38 @@ import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import java.util.Random; - public abstract class FeatureBaseStructure extends StructureFeature { protected static final BlockState AIR = Blocks.AIR.defaultBlockState(); - + public FeatureBaseStructure() { super(NoneFeatureConfiguration.CODEC); } - + @Override - 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; + protected boolean isFeatureChunk(ChunkGenerator chunkGenerator, BiomeSource biomeSource, long worldSeed, WorldgenRandom chunkRandom, int chunkX, int chunkZ, Biome biome, ChunkPos chunkPos, NoneFeatureConfiguration featureConfig) { + return getGenerationHeight(chunkX, chunkZ, chunkGenerator) >= 20; } - private static int getGenerationHeight(ChunkPos chunkPos, ChunkGenerator chunkGenerator, LevelHeightAccessor levelHeightAccessor) { - Random random = new Random((long) (chunkPos.x + chunkPos.z * 10387313)); + private static int getGenerationHeight(int chunkX, int chunkZ, ChunkGenerator chunkGenerator) { + Random random = new Random((long) (chunkX + chunkZ * 10387313)); Rotation blockRotation = Rotation.getRandom(random); int i = 5; int j = 5; if (blockRotation == Rotation.CLOCKWISE_90) { i = -5; - } - else if (blockRotation == Rotation.CLOCKWISE_180) { + } else if (blockRotation == Rotation.CLOCKWISE_180) { i = -5; j = -5; - } - else if (blockRotation == Rotation.COUNTERCLOCKWISE_90) { + } else if (blockRotation == Rotation.COUNTERCLOCKWISE_90) { j = -5; } - int k = chunkPos.getBlockX(7); - int l = chunkPos.getBlockZ(7); - int m = chunkGenerator.getFirstOccupiedHeight(k, l, Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor); - int n = chunkGenerator.getFirstOccupiedHeight(k, l + j, Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor); - int o = chunkGenerator.getFirstOccupiedHeight(k + i, l, Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor); - int p = chunkGenerator.getFirstOccupiedHeight(k + i, l + j, Heightmap.Types.WORLD_SURFACE_WG, levelHeightAccessor); + int k = (chunkX << 4) + 7; + int l = (chunkZ << 4) + 7; + int m = chunkGenerator.getFirstOccupiedHeight(k, l, Heightmap.Types.WORLD_SURFACE_WG); + int n = chunkGenerator.getFirstOccupiedHeight(k, l + j, Heightmap.Types.WORLD_SURFACE_WG); + int o = chunkGenerator.getFirstOccupiedHeight(k + i, l, Heightmap.Types.WORLD_SURFACE_WG); + int p = chunkGenerator.getFirstOccupiedHeight(k + i, l + j, Heightmap.Types.WORLD_SURFACE_WG); return Math.min(Math.min(m, n), Math.min(o, p)); } } diff --git a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java index 09f032c1..b60dac4a 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantIceStarStructure.java @@ -1,15 +1,19 @@ package ru.betterend.world.structures.features; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; + 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.state.BlockState; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.sdf.SDF; @@ -21,16 +25,12 @@ import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - public class GiantIceStarStructure extends SDFStructureFeature { private final float minSize = 20; private final float maxSize = 35; private final int minCount = 25; private final int maxCount = 40; - + @Override protected SDF getSDF(BlockPos pos, Random random) { float size = MHelper.randRange(minSize, maxSize, random); @@ -39,7 +39,7 @@ public class GiantIceStarStructure extends SDFStructureFeature { SDF sdf = null; SDF spike = new SDFCappedCone().setRadius1(3 + (size - 5) * 0.2F).setRadius2(0).setHeight(size).setBlock(EndBlocks.DENSE_SNOW); spike = new SDFTranslate().setTranslate(0, size - 0.5F, 0).setSource(spike); - for (Vector3f point : points) { + for (Vector3f point: points) { SDF rotated = spike; point = MHelper.normalize(point); float angle = MHelper.angle(Vector3f.YP, point); @@ -52,18 +52,18 @@ public class GiantIceStarStructure extends SDFStructureFeature { } sdf = (sdf == null) ? rotated : new SDFUnion().setSourceA(sdf).setSourceB(rotated); } - + final float ancientRadius = size * 0.7F; final float denseRadius = size * 0.9F; final float iceRadius = size < 7 ? size * 5 : size * 1.3F; final float randScale = size * 0.3F; - + final BlockPos center = pos; final BlockState ice = EndBlocks.EMERALD_ICE.defaultBlockState(); final BlockState dense = EndBlocks.DENSE_EMERALD_ICE.defaultBlockState(); final BlockState ancient = EndBlocks.ANCIENT_EMERALD_ICE.defaultBlockState(); final SDF sdfCopy = sdf; - + return sdf.addPostProcess((info) -> { BlockPos bpos = info.getPos(); float px = bpos.getX() - center.getX(); @@ -82,7 +82,7 @@ public class GiantIceStarStructure extends SDFStructureFeature { return info.getState(); }); } - + private List getFibonacciPoints(int count) { float max = count - 1; List result = new ArrayList(count); @@ -96,28 +96,25 @@ public class GiantIceStarStructure extends SDFStructureFeature { } return result; } - + @Override public StructureFeature.StructureStartFactory getStartFactory() { return StarStructureStart::new; } - + public static class StarStructureStart extends StructureStart { - public StarStructureStart(StructureFeature feature, ChunkPos pos, int references, long seed) { - super(feature, pos, references, seed); + public StarStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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)); + 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); 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()); + 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/GiantMossyGlowshroomStructure.java b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java index abb29c87..e24626db 100644 --- a/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/GiantMossyGlowshroomStructure.java @@ -1,6 +1,10 @@ package ru.betterend.world.structures.features; +import java.util.List; +import java.util.Random; + import com.mojang.math.Vector3f; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import ru.bclib.sdf.SDF; @@ -25,9 +29,6 @@ import ru.betterend.blocks.basis.FurBlock; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; -import java.util.List; -import java.util.Random; - public class GiantMossyGlowshroomStructure extends SDFStructureFeature { @Override protected SDF getSDF(BlockPos center, Random random) { @@ -38,39 +39,39 @@ public class GiantMossyGlowshroomStructure extends SDFStructureFeature { SDF upCone = new SDFSubtraction().setSourceA(posedCone2).setSourceB(posedCone3); SDF wave = new SDFFlatWave().setRaysCount(12).setIntensity(1.3F).setSource(upCone); SDF cones = new SDFSmoothUnion().setRadius(3).setSourceA(cone1).setSourceB(wave); - + SDF innerCone = new SDFTranslate().setTranslate(0, 1.25F, 0).setSource(upCone); innerCone = new SDFScale3D().setScale(1.2F, 1F, 1.2F).setSource(innerCone); cones = new SDFUnion().setSourceA(cones).setSourceB(innerCone); - + SDF glowCone = new SDFCappedCone().setHeight(3F).setRadius1(2F).setRadius2(12.5F); SDFPrimitive priGlowCone = (SDFPrimitive) glowCone; glowCone = new SDFTranslate().setTranslate(0, 4.25F, 0).setSource(glowCone); glowCone = new SDFSubtraction().setSourceA(glowCone).setSourceB(posedCone3); - + cones = new SDFUnion().setSourceA(cones).setSourceB(glowCone); - + OpenSimplexNoise noise = new OpenSimplexNoise(1234); cones = new SDFCoordModify().setFunction((pos) -> { float dist = MHelper.length(pos.x(), pos.z()); float y = pos.y() + (float) noise.eval(pos.x() * 0.1 + center.getX(), pos.z() * 0.1 + center.getZ()) * dist * 0.3F - dist * 0.15F; pos.set(pos.x(), y, pos.z()); }).setSource(cones); - + SDFTranslate HEAD_POS = (SDFTranslate) new SDFTranslate().setSource(new SDFTranslate().setTranslate(0, 2.5F, 0).setSource(cones)); - + SDF roots = new SDFSphere().setRadius(4F); SDFPrimitive primRoots = (SDFPrimitive) roots; roots = new SDFScale3D().setScale(1, 0.7F, 1).setSource(roots); SDFFlatWave rotRoots = (SDFFlatWave) new SDFFlatWave().setRaysCount(5).setIntensity(1.5F).setSource(roots); - + SDFBinary function = new SDFSmoothUnion().setRadius(4).setSourceB(new SDFUnion().setSourceA(HEAD_POS).setSourceB(rotRoots)); - + cone1.setBlock(EndBlocks.MOSSY_GLOWSHROOM_CAP); cone2.setBlock(EndBlocks.MOSSY_GLOWSHROOM_CAP); priGlowCone.setBlock(EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE); primRoots.setBlock(EndBlocks.MOSSY_GLOWSHROOM.bark); - + float height = MHelper.randRange(10F, 25F, random); int count = MHelper.floor(height / 4); List spline = SplineHelper.makeSpline(0, 0, 0, 0, height, 0, count); @@ -80,11 +81,11 @@ public class GiantMossyGlowshroomStructure extends SDFStructureFeature { }); Vector3f pos = spline.get(spline.size() - 1); float scale = MHelper.randRange(2F, 3.5F, random); - + HEAD_POS.setTranslate(pos.x(), pos.y(), pos.z()); rotRoots.setAngle(random.nextFloat() * MHelper.PI2); function.setSourceA(sdf); - + return new SDFRound().setRadius(1.5F).setSource(new SDFScale() .setScale(scale) .setSource(function)) @@ -104,17 +105,17 @@ public class GiantMossyGlowshroomStructure extends SDFStructureFeature { info.setState(EndBlocks.MOSSY_GLOWSHROOM_CAP.defaultBlockState().setValue(MossyGlowshroomCapBlock.TRANSITION, true)); return info.getState(); } - + info.setState(EndBlocks.MOSSY_GLOWSHROOM_CAP.defaultBlockState()); return info.getState(); } else if (info.getState().getBlock() == EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { - for (Direction dir : BlocksHelper.HORIZONTAL) { + for (Direction dir: BlocksHelper.HORIZONTAL) { if (info.getState(dir) == AIR) { info.setBlockPos(info.getPos().relative(dir), EndBlocks.MOSSY_GLOWSHROOM_FUR.defaultBlockState().setValue(FurBlock.FACING, dir)); } } - + if (info.getStateDown().getBlock() != EndBlocks.MOSSY_GLOWSHROOM_HYMENOPHORE) { info.setBlockPos(info.getPos().below(), EndBlocks.MOSSY_GLOWSHROOM_FUR.defaultBlockState().setValue(FurBlock.FACING, Direction.DOWN)); } 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 1f2c525d..d4397767 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeSmallStructure.java @@ -2,13 +2,12 @@ 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; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.util.MHelper; @@ -19,25 +18,24 @@ public class MegaLakeSmallStructure extends FeatureBaseStructure { public StructureFeature.StructureStartFactory getStartFactory() { return SDFStructureStart::new; } - + public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); + public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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); + 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); 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 6c557318..2d554d4c 100644 --- a/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MegaLakeStructure.java @@ -2,13 +2,12 @@ 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; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.util.MHelper; @@ -19,25 +18,24 @@ public class MegaLakeStructure extends FeatureBaseStructure { public StructureFeature.StructureStartFactory getStartFactory() { return SDFStructureStart::new; } - + public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); + public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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); + 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); 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 cfec9fb6..a968c7d1 100644 --- a/src/main/java/ru/betterend/world/structures/features/MountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/MountainStructure.java @@ -2,13 +2,12 @@ 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; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.util.MHelper; @@ -19,25 +18,24 @@ public class MountainStructure extends FeatureBaseStructure { public StructureFeature.StructureStartFactory getStartFactory() { return SDFStructureStart::new; } - + public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); + public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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); + 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); 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 83af1b97..cbb6735a 100644 --- a/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java +++ b/src/main/java/ru/betterend/world/structures/features/PaintedMountainStructure.java @@ -2,8 +2,6 @@ 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; @@ -11,6 +9,7 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.util.MHelper; @@ -19,22 +18,22 @@ import ru.betterend.world.structures.piece.PaintedMountainPiece; public class PaintedMountainStructure extends FeatureBaseStructure { private static final BlockState[] VARIANTS; - + @Override public StructureFeature.StructureStartFactory getStartFactory() { return SDFStructureStart::new; } - + public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); + public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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); + 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); if (y > 50) { float radius = MHelper.randRange(50, 100, random); float height = radius * MHelper.randRange(0.4F, 0.6F, random); @@ -43,15 +42,14 @@ public class PaintedMountainStructure extends FeatureBaseStructure { for (int i = 0; i < count; i++) { slises[i] = VARIANTS[random.nextInt(VARIANTS.length)]; } - this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises)); + this.pieces.add(new PaintedMountainPiece(new BlockPos(x, y, z), radius, height, random, biome, slises )); } - - //this.calculateBoundingBox(); + this.calculateBoundingBox(); } } - + static { - VARIANTS = new BlockState[]{ + VARIANTS = new BlockState[] { Blocks.END_STONE.defaultBlockState(), EndBlocks.FLAVOLITE.stone.defaultBlockState(), EndBlocks.VIOLECITE.stone.defaultBlockState(), 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 9932ea06..40e28a3c 100644 --- a/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java +++ b/src/main/java/ru/betterend/world/structures/features/SDFStructureFeature.java @@ -1,50 +1,46 @@ package ru.betterend.world.structures.features; +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; import net.minecraft.world.level.levelgen.feature.StructureFeature; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.levelgen.structure.BoundingBox; import net.minecraft.world.level.levelgen.structure.StructureStart; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.sdf.SDF; import ru.bclib.util.MHelper; import ru.betterend.world.structures.piece.VoxelPiece; -import java.util.Random; - public abstract class SDFStructureFeature extends FeatureBaseStructure { - + protected abstract SDF getSDF(BlockPos pos, Random random); - + @Override public StructureFeature.StructureStartFactory getStartFactory() { return SDFStructureStart::new; } - + public static class SDFStructureStart extends StructureStart { - public SDFStructureStart(StructureFeature feature, ChunkPos chunkPos, int references, long seed) { - super(feature, chunkPos, references, seed); + public SDFStructureStart(StructureFeature feature, int chunkX, int chunkZ, BoundingBox box, int references, long seed) { + super(feature, chunkX, chunkZ, box, references, seed); } @Override - 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); + 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); 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()); + 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/piece/BasePiece.java b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java index bc594164..b5ce64f8 100644 --- a/src/main/java/ru/betterend/world/structures/piece/BasePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/BasePiece.java @@ -2,18 +2,17 @@ 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, BoundingBox boundingBox) { - super(type, i, boundingBox); + protected BasePiece(StructurePieceType type, int i) { + super(type, i); } protected BasePiece(StructurePieceType type, CompoundTag tag) { super(type, tag); fromNbt(tag); } - + protected abstract void fromNbt(CompoundTag tag); } \ No newline at end of file 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 39cde6db..a964e0e7 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CavePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CavePiece.java @@ -1,51 +1,51 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + 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; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.api.TagAPI; import ru.bclib.util.BlocksHelper; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CavePiece extends BasePiece { private OpenSimplexNoise noise; private BlockPos center; private float radius; - + public CavePiece(BlockPos center, float radius, int id) { - super(EndStructures.CAVE_PIECE, id, null); + super(EndStructures.CAVE_PIECE, id); this.center = center; this.radius = radius; this.noise = new OpenSimplexNoise(MHelper.getSeed(534, center.getX(), center.getZ())); makeBoundingBox(); } - public CavePiece(ServerLevel serverLevel, CompoundTag tag) { + public CavePiece(StructureManager manager, CompoundTag tag) { super(EndStructures.CAVE_PIECE, tag); makeBoundingBox(); } - + @Override public boolean postProcess(WorldGenLevel world, StructureFeatureManager arg, ChunkGenerator chunkGenerator, Random random, BoundingBox blockBox, ChunkPos chunkPos, BlockPos blockPos) { - 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(); - + 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; + double hr = radius * 0.75; double nr = radius * 0.25; MutableBlockPos pos = new MutableBlockPos(); @@ -78,12 +78,12 @@ public class CavePiece extends BasePiece { } } } - + return true; } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); } @@ -94,7 +94,7 @@ public class CavePiece extends BasePiece { radius = tag.getFloat("radius"); noise = new OpenSimplexNoise(MHelper.getSeed(534, center.getX(), center.getZ())); } - + private void makeBoundingBox() { int minX = MHelper.floor(center.getX() - radius); int minY = MHelper.floor(center.getY() - radius); 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 63d859e5..e7a77628 100644 --- a/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/CrystalMountainPiece.java @@ -1,9 +1,10 @@ package ru.betterend.world.structures.piece; +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; @@ -16,24 +17,23 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; import ru.bclib.util.MHelper; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class CrystalMountainPiece extends MountainPiece { private BlockState top; - + public CrystalMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome) { super(EndStructures.MOUNTAIN_PIECE, center, radius, height, random, biome); top = biome.getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); } - public CrystalMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.MOUNTAIN_PIECE, serverLevel, tag); + public CrystalMountainPiece(StructureManager manager, CompoundTag tag) { + super(EndStructures.MOUNTAIN_PIECE, manager, tag); } @Override @@ -91,9 +91,9 @@ public class CrystalMountainPiece extends MountainPiece { } } } - + map = chunk.getOrCreateHeightmapUnprimed(Types.WORLD_SURFACE); - + // Big crystals int count = (map.getFirstAvailable(8, 8) - (center.getY() + 24)) / 7; count = Mth.clamp(count, 0, 8); @@ -111,7 +111,7 @@ public class CrystalMountainPiece extends MountainPiece { } } } - + // Small crystals count = (map.getFirstAvailable(8, 8) - (center.getY() + 24)) / 2; count = Mth.clamp(count, 4, 8); @@ -129,10 +129,10 @@ public class CrystalMountainPiece extends MountainPiece { } } } - + return true; } - + private void crystal(ChunkAccess chunk, BlockPos pos, int radius, int height, float fill, Random random) { MutableBlockPos mut = new MutableBlockPos(); int max = MHelper.floor(fill * radius + radius + 0.5F); 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 2955ea83..b304d42e 100644 --- a/src/main/java/ru/betterend/world/structures/piece/LakePiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/LakePiece.java @@ -1,14 +1,16 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + 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; @@ -20,6 +22,7 @@ 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.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import net.minecraft.world.level.material.FluidState; import ru.bclib.api.BiomeAPI; import ru.bclib.api.TagAPI; @@ -29,9 +32,6 @@ import ru.betterend.noise.OpenSimplexNoise; import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndStructures; -import java.util.Map; -import java.util.Random; - public class LakePiece extends BasePiece { private static final BlockState ENDSTONE = Blocks.END_STONE.defaultBlockState(); private static final BlockState WATER = Blocks.WATER.defaultBlockState(); @@ -42,11 +42,11 @@ public class LakePiece extends BasePiece { private float aspect; private float depth; private int seed; - + private ResourceLocation biomeID; - + public LakePiece(BlockPos center, float radius, float depth, Random random, Biome biome) { - super(EndStructures.LAKE_PIECE, random.nextInt(), null); + super(EndStructures.LAKE_PIECE, random.nextInt()); this.center = center; this.radius = radius; this.depth = depth; @@ -57,13 +57,13 @@ public class LakePiece extends BasePiece { makeBoundingBox(); } - public LakePiece(ServerLevel serverLevel, CompoundTag tag) { + public LakePiece(StructureManager manager, CompoundTag tag) { super(EndStructures.LAKE_PIECE, tag); makeBoundingBox(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("depth", depth); @@ -84,10 +84,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.minY(); - int maxY = this.boundingBox.maxY(); - int sx = SectionPos.sectionToBlockCoord(chunkPos.x); - int sz = SectionPos.sectionToBlockCoord(chunkPos.z); + int minY = this.boundingBox.y0; + int maxY = this.boundingBox.y1; + int sx = chunkPos.x << 4; + int sz = chunkPos.z << 4; MutableBlockPos mut = new MutableBlockPos(); ChunkAccess chunk = world.getChunk(chunkPos.x, chunkPos.z); for (int x = 0; x < 16; x++) { @@ -102,11 +102,11 @@ public class LakePiece extends BasePiece { int z2 = wz - center.getZ(); float clamp = getHeightClamp(world, 8, wx, wz); if (clamp < 0.01) continue; - + double n = noise.eval(nx, nz) * 1.5 + 1.5; double x3 = MHelper.sqr(x2 + noise.eval(nx, nz, 100) * 10); double z3 = MHelper.sqr(z2 + noise.eval(nx, nz, -100) * 10); - + for (int y = minY; y <= maxY; y++) { mut.setY((int) (y + n)); double y2 = MHelper.sqr((y - center.getY()) * aspect); @@ -142,10 +142,10 @@ public class LakePiece extends BasePiece { fixWater(world, chunk, mut, random, sx, sz); return true; } - + private void fixWater(WorldGenLevel world, ChunkAccess chunk, MutableBlockPos mut, Random random, int sx, int sz) { - int minY = this.boundingBox.minY(); - int maxY = this.boundingBox.maxY(); + int minY = this.boundingBox.y0; + int maxY = this.boundingBox.y1; for (int x = 0; x < 16; x++) { mut.setX(x); for (int z = 0; z < 16; z++) { @@ -157,7 +157,7 @@ public class LakePiece extends BasePiece { mut.setY(y - 1); if (chunk.getBlockState(mut).isAir()) { mut.setY(y + 1); - + BlockState bState = chunk.getBlockState(mut); if (bState.isAir()) { bState = random.nextBoolean() ? ENDSTONE : world.getBiome(mut.offset(sx, 0, sz)).getGenerationSettings().getSurfaceBuilderConfig().getTopMaterial(); @@ -165,14 +165,14 @@ public class LakePiece extends BasePiece { else { bState = bState.getFluidState().isEmpty() ? ENDSTONE : EndBlocks.ENDSTONE_DUST.defaultBlockState(); } - + mut.setY(y); - + makeEndstonePillar(chunk, mut, bState); } else if (x > 1 && x < 15 && z > 1 && z < 15) { mut.setY(y); - for (Direction dir : BlocksHelper.HORIZONTAL) { + for (Direction dir: BlocksHelper.HORIZONTAL) { BlockPos wPos = mut.offset(dir.getStepX(), 0, dir.getStepZ()); if (chunk.getBlockState(wPos).isAir()) { mut.setY(y + 1); @@ -197,7 +197,7 @@ public class LakePiece extends BasePiece { } } } - + private void makeEndstonePillar(ChunkAccess chunk, MutableBlockPos mut, BlockState terrain) { chunk.setBlockState(mut, terrain, false); mut.setY(mut.getY() - 1); @@ -206,27 +206,27 @@ public class LakePiece extends BasePiece { mut.setY(mut.getY() - 1); } } - + private int getHeight(WorldGenLevel world, BlockPos pos) { int p = ((pos.getX() & 2047) << 11) | (pos.getZ() & 2047); int h = heightmap.getOrDefault(p, Byte.MIN_VALUE); if (h > Byte.MIN_VALUE) { return h; } - + if (!BiomeAPI.getBiomeID(world.getBiome(pos)).equals(biomeID)) { heightmap.put(p, (byte) 0); return 0; } - + h = world.getHeight(Types.WORLD_SURFACE_WG, pos.getX(), pos.getZ()); h = Mth.abs(h - center.getY()); h = h < 8 ? 1 : 0; - + heightmap.put(p, (byte) h); return h; } - + private float getHeightClamp(WorldGenLevel world, int radius, int posX, int posZ) { MutableBlockPos mut = new MutableBlockPos(); int r2 = radius * radius; @@ -248,7 +248,7 @@ public class LakePiece extends BasePiece { height /= max; return Mth.clamp(height, 0, 1); } - + private void makeBoundingBox() { int minX = MHelper.floor(center.getX() - radius - 8); int minY = MHelper.floor(center.getY() - depth - 8); 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 6c9fccf8..bc2ef668 100644 --- a/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/MountainPiece.java @@ -1,25 +1,26 @@ package ru.betterend.world.structures.piece; +import java.util.Map; +import java.util.Random; + import com.google.common.collect.Maps; + import net.minecraft.core.BlockPos; 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; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.feature.StructurePieceType; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.api.BiomeAPI; import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Map; -import java.util.Random; - public abstract class MountainPiece extends BasePiece { protected Map heightmap = Maps.newHashMap(); protected OpenSimplexNoise noise1; @@ -31,9 +32,9 @@ public abstract class MountainPiece extends BasePiece { protected ResourceLocation biomeID; protected int seed1; protected int seed2; - + public MountainPiece(StructurePieceType type, BlockPos center, float radius, float height, Random random, Biome biome) { - super(type, random.nextInt(), null); + super(type, random.nextInt()); this.center = center; this.radius = radius; this.height = height; @@ -46,13 +47,13 @@ public abstract class MountainPiece extends BasePiece { makeBoundingBox(); } - public MountainPiece(StructurePieceType type, ServerLevel serverLevel, CompoundTag tag) { + public MountainPiece(StructurePieceType type, StructureManager manager, CompoundTag tag) { super(type, tag); makeBoundingBox(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("center", NbtUtils.writeBlockPos(center)); tag.putFloat("radius", radius); tag.putFloat("height", height); @@ -73,14 +74,14 @@ public abstract class MountainPiece extends BasePiece { noise1 = new OpenSimplexNoise(seed1); noise2 = new OpenSimplexNoise(seed2); } - + private int getHeight(WorldGenLevel world, BlockPos pos) { int p = ((pos.getX() & 2047) << 11) | (pos.getZ() & 2047); int h = heightmap.getOrDefault(p, Integer.MIN_VALUE); if (h > Integer.MIN_VALUE) { return h; } - + if (!BiomeAPI.getBiomeID(world.getBiome(pos)).equals(biomeID)) { heightmap.put(p, -10); return -10; @@ -92,19 +93,19 @@ public abstract class MountainPiece extends BasePiece { heightmap.put(p, h); return h; } - + h = MHelper.floor(noise2.eval(pos.getX() * 0.01, pos.getZ() * 0.01) * noise2.eval(pos.getX() * 0.002, pos.getZ() * 0.002) * 8 + 8); - + if (h < 0) { heightmap.put(p, 0); return 0; } - + heightmap.put(p, h); - + return h; } - + protected float getHeightClamp(WorldGenLevel world, int radius, int posX, int posZ) { MutableBlockPos mut = new MutableBlockPos(); float height = 0; @@ -125,14 +126,12 @@ public abstract class MountainPiece extends BasePiece { height /= max; return Mth.clamp(height / radius, 0, 1); } - + 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, minY, minZ, maxX, maxY, maxZ); + this.boundingBox = new BoundingBox(minX, minZ, maxX, 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 c0c731d4..bc5388f3 100644 --- a/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/NBTPiece.java @@ -1,11 +1,11 @@ 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; -import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.StructureFeatureManager; import net.minecraft.world.level.WorldGenLevel; @@ -13,14 +13,13 @@ import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import ru.bclib.util.MHelper; import ru.bclib.util.StructureHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class NBTPiece extends BasePiece { private ResourceLocation structureID; private Rotation rotation; @@ -29,9 +28,9 @@ public class NBTPiece extends BasePiece { private BlockPos pos; private int erosion; private boolean cover; - + public NBTPiece(ResourceLocation structureID, StructureTemplate structure, BlockPos pos, int erosion, boolean cover, Random random) { - super(EndStructures.NBT_PIECE, random.nextInt(), null); + super(EndStructures.NBT_PIECE, random.nextInt()); this.structureID = structureID; this.structure = structure; this.rotation = Rotation.getRandom(random); @@ -42,13 +41,13 @@ public class NBTPiece extends BasePiece { makeBoundingBox(); } - public NBTPiece(ServerLevel serverLevel, CompoundTag tag) { + public NBTPiece(StructureManager manager, CompoundTag tag) { super(EndStructures.NBT_PIECE, tag); makeBoundingBox(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.putString("structureID", structureID.toString()); tag.putInt("rotation", rotation.ordinal()); tag.putInt("mirror", mirror.ordinal()); @@ -70,18 +69,16 @@ 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 = BoundingBox.fromCorners( - new Vec3i(blockBox.minX(), this.boundingBox.minY(), blockBox.minZ()), - new Vec3i(blockBox.maxX(), this.boundingBox.maxX(), blockBox.maxZ()) - ); + BoundingBox bounds = new BoundingBox(blockBox); + bounds.y1 = this.boundingBox.y1; + bounds.y0 = this.boundingBox.y0; StructurePlaceSettings placementData = new StructurePlaceSettings().setRotation(rotation).setMirror(mirror).setBoundingBox(bounds); - structure.placeInWorld(world, pos, pos, placementData, random, 2); + structure.placeInWorldChunk(world, pos, placementData, random); if (erosion > 0) { - 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)); + 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); StructureHelper.erode(world, bounds, erosion, random); } if (cover) { @@ -89,7 +86,7 @@ public class NBTPiece extends BasePiece { } return true; } - + private void makeBoundingBox() { this.boundingBox = StructureHelper.getStructureBounds(pos, structure, rotation, mirror); } 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 a17512f8..cbbaa91d 100644 --- a/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/PaintedMountainPiece.java @@ -1,11 +1,12 @@ package ru.betterend.world.structures.piece; +import java.util.Random; + import net.minecraft.core.BlockPos; 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; @@ -16,28 +17,26 @@ import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.level.levelgen.Heightmap.Types; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.util.MHelper; import ru.betterend.registry.EndStructures; -import java.util.Random; - public class PaintedMountainPiece extends MountainPiece { private BlockState[] slises; - public PaintedMountainPiece(BlockPos center, float radius, float height, Random random, Biome biome, BlockState[] slises) { super(EndStructures.PAINTED_MOUNTAIN_PIECE, center, radius, height, random, biome); this.slises = slises; } - public PaintedMountainPiece(ServerLevel serverLevel, CompoundTag tag) { - super(EndStructures.PAINTED_MOUNTAIN_PIECE, serverLevel, tag); + public PaintedMountainPiece(StructureManager manager, CompoundTag tag) { + super(EndStructures.PAINTED_MOUNTAIN_PIECE, manager, tag); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { - super.addAdditionalSaveData(serverLevel, tag); + protected void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); ListTag slise = new ListTag(); - for (BlockState state : slises) { + for (BlockState state: slises) { slise.add(NbtUtils.writeBlockState(state)); } tag.put("slises", slise); @@ -77,7 +76,7 @@ public class PaintedMountainPiece extends MountainPiece { int minY = map.getFirstAvailable(x, z); pos.setY(minY - 1); while (chunk.getBlockState(pos).isAir() && pos.getY() > 50) { - pos.setY(minY--); + pos.setY(minY --); } minY = pos.getY(); minY = Math.max(minY, map2.getFirstAvailable(x, z)); @@ -98,7 +97,7 @@ public class PaintedMountainPiece extends MountainPiece { } } } - + return true; } } 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 40e4a46e..08a4a100 100644 --- a/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java +++ b/src/main/java/ru/betterend/world/structures/piece/VoxelPiece.java @@ -1,36 +1,36 @@ package ru.betterend.world.structures.piece; +import java.util.Random; +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; import net.minecraft.world.level.chunk.ChunkGenerator; import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureManager; import ru.bclib.world.structures.StructureWorld; import ru.betterend.registry.EndStructures; -import java.util.Random; -import java.util.function.Consumer; - public class VoxelPiece extends BasePiece { private StructureWorld world; - + public VoxelPiece(Consumer function, int id) { - super(EndStructures.VOXEL_PIECE, id, null); + super(EndStructures.VOXEL_PIECE, id); world = new StructureWorld(); function.accept(world); this.boundingBox = world.getBounds(); } - public VoxelPiece(ServerLevel level, CompoundTag tag) { + public VoxelPiece(StructureManager manager, CompoundTag tag) { super(EndStructures.VOXEL_PIECE, tag); this.boundingBox = world.getBounds(); } @Override - protected void addAdditionalSaveData(ServerLevel serverLevel, CompoundTag tag) { + protected void addAdditionalSaveData(CompoundTag tag) { tag.put("world", world.toBNT()); } diff --git a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java index 88eaab88..90841b95 100644 --- a/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java +++ b/src/main/java/ru/betterend/world/surface/SulphuricSurfaceBuilder.java @@ -1,5 +1,7 @@ package ru.betterend.world.surface; +import java.util.Random; + import net.minecraft.core.Registry; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.block.state.BlockState; @@ -9,32 +11,30 @@ import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderBaseConf import ru.bclib.util.MHelper; import ru.betterend.noise.OpenSimplexNoise; -import java.util.Random; - public class SulphuricSurfaceBuilder extends SurfaceBuilder { private static final OpenSimplexNoise NOISE = new OpenSimplexNoise(5123); - + public SulphuricSurfaceBuilder() { super(SurfaceBuilderBaseConfiguration.CODEC); } @Override - public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, int seed, long n, SurfaceBuilderBaseConfiguration surfaceBlocks) { + public void apply(Random random, ChunkAccess chunk, Biome biome, int x, int z, int height, double noise, BlockState defaultBlock, BlockState defaultFluid, int seaLevel, long seed, SurfaceBuilderBaseConfiguration surfaceBlocks) { double value = NOISE.eval(x * 0.03, z * 0.03) + NOISE.eval(x * 0.1, z * 0.1) * 0.3 + MHelper.randRange(-0.1, 0.1, MHelper.RANDOM); if (value < -0.6) { - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, n, SurfaceBuilders.DEFAULT_END_CONFIG); + SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, SurfaceBuilders.DEFAULT_END_CONFIG); } else if (value < -0.3) { - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, n, SurfaceBuilders.FLAVOLITE_CONFIG); + SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, SurfaceBuilders.FLAVOLITE_CONFIG); } else if (value < 0.5) { - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, n, SurfaceBuilders.SULFURIC_ROCK_CONFIG); + SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, SurfaceBuilders.SULFURIC_ROCK_CONFIG); } else { - SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, n, SurfaceBuilders.BRIMSTONE_CONFIG); + SurfaceBuilder.DEFAULT.apply(random, chunk, biome, x, z, height, noise, defaultBlock, defaultFluid, seaLevel, seed, SurfaceBuilders.BRIMSTONE_CONFIG); } } - + public static SulphuricSurfaceBuilder register(String name) { return Registry.register(Registry.SURFACE_BUILDER, name, new SulphuricSurfaceBuilder()); } diff --git a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java b/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java index 424487ca..b00b12ca 100644 --- a/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java +++ b/src/main/java/ru/betterend/world/surface/SurfaceBuilders.java @@ -13,18 +13,17 @@ public class SurfaceBuilders { public static final SurfaceBuilderBaseConfiguration FLAVOLITE_CONFIG = makeSimpleConfig(EndBlocks.FLAVOLITE.stone); public static final SurfaceBuilderBaseConfiguration BRIMSTONE_CONFIG = makeSimpleConfig(EndBlocks.BRIMSTONE); public static final SurfaceBuilderBaseConfiguration SULFURIC_ROCK_CONFIG = makeSimpleConfig(EndBlocks.SULPHURIC_ROCK.stone); - + public static final SurfaceBuilder SULPHURIC_SURFACE = register("sulphuric_surface", new SulphuricSurfaceBuilder()); - + private static SurfaceBuilder register(String name, SurfaceBuilder builder) { return Registry.register(Registry.SURFACE_BUILDER, name, builder); } - + private static SurfaceBuilderBaseConfiguration makeSimpleConfig(Block block) { BlockState state = block.defaultBlockState(); return new SurfaceBuilderBaseConfiguration(state, state, state); } - - public static void register() { - } + + public static void register() {} } 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 deleted file mode 100644 index 1c86ce0c..00000000 --- a/src/main/java/shadow/fabric/api/client/rendering/v1/ArmorRenderingRegistry.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * 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 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; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import shadow.fabric.impl.client.rendering.ArmorRenderingRegistryImpl; - -import java.util.Arrays; - -/** - * 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 deleted file mode 100644 index c0917653..00000000 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorProviderExtensions.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 org.jetbrains.annotations.Nullable; -import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; - -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 deleted file mode 100644 index 35815179..00000000 --- a/src/main/java/shadow/fabric/impl/client/rendering/ArmorRenderingRegistryImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * 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 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; -import org.jetbrains.annotations.Nullable; -import shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; - -import java.util.Objects; - -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 deleted file mode 100644 index 88b00048..00000000 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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 net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -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; -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 shadow.fabric.api.client.rendering.v1.ArmorRenderingRegistry; - -import java.util.Map; -import java.util.Objects; - -@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 deleted file mode 100644 index b08dc5a5..00000000 --- a/src/main/java/shadow/fabric/mixin/client/rendering/MixinItem.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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/assets/betterend/blockstates/smaragdant_crystal.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal.json new file mode 100644 index 00000000..2d3e15ba --- /dev/null +++ b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal.json @@ -0,0 +1,7 @@ +{ + "variants": { + "axis=x": { "model": "betterend:block/smaragdant_crystal", "x": 90, "y": 90 }, + "axis=y": { "model": "betterend:block/smaragdant_crystal" }, + "axis=z": { "model": "betterend:block/smaragdant_crystal", "x": 90 } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_stairs.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_stairs.json deleted file mode 100644 index 61ea29d6..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_stairs.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "y": 180 }, - "facing=south,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "y": 90 }, - "facing=north,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "y": 270 }, - "facing=east,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer" }, - "facing=west,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 180 }, - "facing=south,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 90 }, - "facing=north,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 270 }, - "facing=east,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 270 }, - "facing=west,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 90 }, - "facing=south,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer" }, - "facing=north,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "y": 180 }, - "facing=east,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 180 }, - "facing=south,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 90 }, - "facing=north,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 270 }, - "facing=east,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 270 }, - "facing=west,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 90 }, - "facing=south,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "y": 180 }, - "facing=east,half=top,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "x": 180 }, - "facing=west,half=top,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "x": 180, "y": 180 }, - "facing=south,half=top,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "x": 180, "y": 90 }, - "facing=north,half=top,shape=straight": { "model": "betterend:block/smaragdant_bricks_stairs", "x": 180, "y": 270 }, - "facing=east,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 90 }, - "facing=west,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 270 }, - "facing=south,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 180 }, - "facing=north,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180 }, - "facing=east,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180 }, - "facing=west,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 180 }, - "facing=south,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 90 }, - "facing=north,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_bricks_stairs_outer", "x": 180, "y": 270 }, - "facing=east,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 90 }, - "facing=west,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 270 }, - "facing=south,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 180 }, - "facing=north,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180 }, - "facing=east,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180 }, - "facing=west,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 180 }, - "facing=south,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 90 }, - "facing=north,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_bricks_stairs_inner", "x": 180, "y": 270 } - } -} diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_wall.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_wall.json deleted file mode 100644 index b68ce3e7..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_bricks_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "when": { - "up": "true" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_post" - } - }, - { - "when": { - "north": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side", - "uvlock": true - } - }, - { - "when": { - "east": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side", - "y": 270, - "uvlock": true - } - }, - { - "when": { - "north": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side_tall", - "uvlock": true - } - }, - { - "when": { - "east": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side_tall", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side_tall", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_bricks_wall_side_tall", - "y": 270, - "uvlock": true - } - } - ] -} diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_pedestal.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_pedestal.json deleted file mode 100644 index f199dcf1..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_pedestal.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "variants": { - "state=default": { - "model": "betterend:block/smaragdant_pedestal_default" - }, - "state=column": { - "model": "betterend:block/smaragdant_pedestal_column" - }, - "state=column_top": { - "model": "betterend:block/smaragdant_pedestal_column_top" - }, - "state=pedestal_top": { - "model": "betterend:block/smaragdant_pedestal_top" - }, - "state=bottom": { - "model": "betterend:block/smaragdant_pedestal_bottom" - }, - "state=pillar": { - "model": "betterend:block/smaragdant_pedestal_pillar" - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_slab.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_slab.json deleted file mode 100644 index e944b672..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_slab.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "variants": { - "type=bottom": { - "model": "betterend:block/smaragdant_slab" - }, - "type=top": { - "model": "betterend:block/smaragdant_slab", - "x": 180, - "uvlock": true - }, - "type=double": { - "model": "betterend:block/smaragdant_crystal" - } - } -} diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_stairs.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_stairs.json deleted file mode 100644 index 2d3fc25c..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_stairs.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "variants": { - "facing=east,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_stairs" }, - "facing=west,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_stairs", "y": 180 }, - "facing=south,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_stairs", "y": 90 }, - "facing=north,half=bottom,shape=straight": { "model": "betterend:block/smaragdant_stairs", "y": 270 }, - "facing=east,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer" }, - "facing=west,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "y": 180 }, - "facing=south,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "y": 90 }, - "facing=north,half=bottom,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "y": 270 }, - "facing=east,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "y": 270 }, - "facing=west,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "y": 90 }, - "facing=south,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer" }, - "facing=north,half=bottom,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "y": 180 }, - "facing=east,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner" }, - "facing=west,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "y": 180 }, - "facing=south,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "y": 90 }, - "facing=north,half=bottom,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "y": 270 }, - "facing=east,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "y": 270 }, - "facing=west,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "y": 90 }, - "facing=south,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner" }, - "facing=north,half=bottom,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "y": 180 }, - "facing=east,half=top,shape=straight": { "model": "betterend:block/smaragdant_stairs", "x": 180 }, - "facing=west,half=top,shape=straight": { "model": "betterend:block/smaragdant_stairs", "x": 180, "y": 180 }, - "facing=south,half=top,shape=straight": { "model": "betterend:block/smaragdant_stairs", "x": 180, "y": 90 }, - "facing=north,half=top,shape=straight": { "model": "betterend:block/smaragdant_stairs", "x": 180, "y": 270 }, - "facing=east,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 90 }, - "facing=west,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 270 }, - "facing=south,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 180 }, - "facing=north,half=top,shape=outer_right": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180 }, - "facing=east,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180 }, - "facing=west,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 180 }, - "facing=south,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 90 }, - "facing=north,half=top,shape=outer_left": { "model": "betterend:block/smaragdant_stairs_outer", "x": 180, "y": 270 }, - "facing=east,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 90 }, - "facing=west,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 270 }, - "facing=south,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 180 }, - "facing=north,half=top,shape=inner_right": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180 }, - "facing=east,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180 }, - "facing=west,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 180 }, - "facing=south,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 90 }, - "facing=north,half=top,shape=inner_left": { "model": "betterend:block/smaragdant_stairs_inner", "x": 180, "y": 270 } - } -} diff --git a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_wall.json b/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_wall.json deleted file mode 100644 index 3232369d..00000000 --- a/src/main/resources/assets/betterend/blockstates/smaragdant_crystal_wall.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "multipart": [ - { - "when": { - "up": "true" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_post" - } - }, - { - "when": { - "north": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side", - "uvlock": true - } - }, - { - "when": { - "east": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "low" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side", - "y": 270, - "uvlock": true - } - }, - { - "when": { - "north": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side_tall", - "uvlock": true - } - }, - { - "when": { - "east": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side_tall", - "y": 90, - "uvlock": true - } - }, - { - "when": { - "south": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side_tall", - "y": 180, - "uvlock": true - } - }, - { - "when": { - "west": "tall" - }, - "apply": { - "model": "betterend:block/smaragdant_crystal_wall_side_tall", - "y": 270, - "uvlock": true - } - } - ] -} diff --git a/src/main/resources/assets/betterend/lang/de_de.json b/src/main/resources/assets/betterend/lang/de_de.json index b3392c2c..7341d5c0 100644 --- a/src/main/resources/assets/betterend/lang/de_de.json +++ b/src/main/resources/assets/betterend/lang/de_de.json @@ -188,7 +188,7 @@ "block.betterend.granite_pedestal": "Granitsockel", "block.betterend.purpur_pedestal": "Purpursockel", "block.betterend.quartz_pedestal": "Quarzsockel", - "block.betterend.infusion_pedestal": "Elementarsockel", + "block.betterend.infusion_pedestal": "Infusionssockel", "block.betterend.end_lotus_seed": "Endlotussamen", "block.betterend.end_lotus_stem": "Endlotusstamm", @@ -227,7 +227,7 @@ "block.betterend.flavolite_runed": "Flavolitrune", "block.betterend.end_portal_block": "Endportal", - "block.betterend.eternal_pedestal": "Ewiger Sockel", + "block.betterend.eternal_pedestal": "Ewiges Sockel", "block.betterend.flavolite_runed_eternal": "Ewige Flavolitrune", "item.betterend.eternal_crystal": "Ewiger Kristall", diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index df012d66..32e011b0 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -598,7 +598,6 @@ "item.betterend.silk_fiber": "Silk Fiber", "item.betterend.spawn_egg_silk_moth": "Silk Moth Spawn Egg", - "item.betterend.thallasium_raw": "Raw Thallasium", "block.betterend.thallasium_ore": "Thallasium Ore", "item.betterend.thallasium_axe": "Thallasium Axe", "item.betterend.thallasium_hoe": "Thallasium Hoe", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index de2fb5b4..1db5508b 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -618,7 +618,6 @@ "item.betterend.silk_fiber": "Шёлковое волокно", "item.betterend.spawn_egg_silk_moth": "Яйцо призыва шелковичной моли", - "item.betterend.thallasium_raw": "Необработанный талласий", "block.betterend.thallasium_ore": "Талласиевая руда", "item.betterend.thallasium_axe": "Талласиевый топор", "item.betterend.thallasium_hoe": "Талласиевая мотыга", diff --git a/src/main/resources/assets/betterend/materialmaps/block/smaragdant_crystal_shard.json b/src/main/resources/assets/betterend/materialmaps/block/smaragdant_crystal_shard.json deleted file mode 100644 index c2b812b6..00000000 --- a/src/main/resources/assets/betterend/materialmaps/block/smaragdant_crystal_shard.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "defaultMaterial": "betterend:glow_all" -} diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_bottom.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_bottom.json deleted file mode 100644 index 747e639b..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_bottom.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#base" - }, - "elements": [ - { - "__comment": "basin_1", - "from": [ 0, 0, 0 ], - "to": [ 16, 3, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "west": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "east": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" } - } - }, - { - "__comment": "basin_2", - "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "shade": false, - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#bottom" }, - "north": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "south": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "west": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "east": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" } - } - }, - { - "__comment": "pillar", - "from": [ 3, 4, 3 ], - "to": [ 13, 16, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 4, 13, 16 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 4, 13, 16 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 4, 13, 16 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 4, 13, 16 ], "texture": "#pillar" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_column.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_column.json deleted file mode 100644 index 651265cd..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_column.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#base" - }, - "elements": [ - { - "__comment": "basin_1", - "from": [ 0, 0, 0 ], - "to": [ 16, 3, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "west": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "east": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" } - } - }, - { - "__comment": "basin_2", - "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "shade": false, - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#bottom" }, - "north": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "south": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "west": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "east": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" } - } - }, - { - "__comment": "pillar", - "from": [ 3, 4, 3 ], - "to": [ 13, 13, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 4, 13, 14 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 4, 13, 14 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 4, 13, 14 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 4, 13, 14 ], "texture": "#pillar" } - } - }, - { - "__comment": "top", - "from": [ 2, 13, 2 ], - "to": [ 14, 14, 14 ], - "shade": false, - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#base" }, - "north": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "south": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "west": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "east": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" } - } - }, - { - "__comment": "top", - "from": [ 1, 14, 1 ], - "to": [ 15, 16, 15 ], - "shade": false, - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#base" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#base", "cullface": "up" }, - "north": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_column_top.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_column_top.json deleted file mode 100644 index 3a88e975..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_column_top.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#base" - }, - "elements": [ - { - "__comment": "pillar", - "from": [ 3, 0, 3 ], - "to": [ 13, 13, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 0, 13, 14 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 0, 13, 14 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 0, 13, 14 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 0, 13, 14 ], "texture": "#pillar" } - } - }, - { - "__comment": "top", - "from": [ 2, 13, 2 ], - "to": [ 14, 14, 14 ], - "shade": false, - "faces": { - "down": { "uv": [ 2, 2, 14, 14 ], "texture": "#base" }, - "north": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "south": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "west": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" }, - "east": { "uv": [ 2, 13, 14, 14 ], "texture": "#base" } - } - }, - { - "__comment": "top", - "from": [ 1, 14, 1 ], - "to": [ 15, 16, 15 ], - "shade": false, - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#base" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#base", "cullface": "up" }, - "north": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "south": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "west": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" }, - "east": { "uv": [ 1, 14, 15, 16 ], "texture": "#base" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_default.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_default.json deleted file mode 100644 index b4dfd5e7..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_default.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#base" - }, - "elements": [ - { - "__comment": "basin_1", - "from": [ 0, 0, 0 ], - "to": [ 16, 3, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom" }, - "north": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "south": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "west": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" }, - "east": { "uv": [ 0, 0, 16, 3 ], "texture": "#bottom" } - } - }, - { - "__comment": "basin_2", - "from": [ 2, 3, 2 ], - "to": [ 14, 4, 14 ], - "shade": false, - "faces": { - "up": { "uv": [ 2, 2, 14, 14 ], "texture": "#bottom" }, - "north": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "south": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "west": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" }, - "east": { "uv": [ 3, 3, 14, 4 ], "texture": "#bottom" } - } - }, - { - "__comment": "pillar", - "from": [ 3, 4, 3 ], - "to": [ 13, 12, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 4, 13, 12 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 4, 13, 12 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 4, 13, 12 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 4, 13, 12 ], "texture": "#pillar" } - } - }, - { - "__comment": "top", - "from": [ 1, 12, 1 ], - "to": [ 15, 14, 15 ], - "shade": false, - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#base" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 12, 15, 14 ], "texture": "#base" }, - "south": { "uv": [ 1, 12, 15, 14 ], "texture": "#base" }, - "west": { "uv": [ 1, 12, 15, 14 ], "texture": "#base" }, - "east": { "uv": [ 1, 12, 15, 14 ], "texture": "#base" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_pillar.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_pillar.json deleted file mode 100644 index 797d66ce..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_pillar.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#pillar" - }, - "elements": [ - { - "__comment": "pillar", - "from": [ 3, 0, 3 ], - "to": [ 13, 16, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 0, 13, 16 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 0, 13, 16 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 0, 13, 16 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 0, 13, 16 ], "texture": "#pillar" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_pedestal_top.json b/src/main/resources/assets/betterend/models/block/lit_pedestal_top.json deleted file mode 100644 index 5886f233..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_pedestal_top.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "parent": "minecraft:block/block", - "textures": { - "particle": "#base" - }, - "elements": [ - { - "__comment": "pillar", - "from": [ 3, 0, 3 ], - "to": [ 13, 8, 13 ], - "shade": false, - "faces": { - "north": { "uv": [ 3, 0, 13, 8 ], "texture": "#pillar" }, - "south": { "uv": [ 3, 0, 13, 8 ], "texture": "#pillar" }, - "west": { "uv": [ 3, 0, 13, 8 ], "texture": "#pillar" }, - "east": { "uv": [ 3, 0, 13, 8 ], "texture": "#pillar" } - } - }, - { - "__comment": "top", - "from": [ 1, 8, 1 ], - "to": [ 15, 10, 15 ], - "shade": false, - "faces": { - "down": { "uv": [ 1, 1, 15, 15 ], "texture": "#base" }, - "up": { "uv": [ 1, 1, 15, 15 ], "texture": "#top" }, - "north": { "uv": [ 1, 8, 15, 10 ], "texture": "#base" }, - "south": { "uv": [ 1, 8, 15, 10 ], "texture": "#base" }, - "west": { "uv": [ 1, 8, 15, 10 ], "texture": "#base" }, - "east": { "uv": [ 1, 8, 15, 10 ], "texture": "#base" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/lit_stairs.json b/src/main/resources/assets/betterend/models/block/lit_stairs.json deleted file mode 100644 index 45326109..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_stairs.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#side" - }, - "display": { - "gui": { - "rotation": [ 30, 135, 0 ], - "translation": [ 0, 0, 0], - "scale":[ 0.625, 0.625, 0.625 ] - }, - "head": { - "rotation": [ 0, -90, 0 ], - "translation": [ 0, 0, 0 ], - "scale": [ 1, 1, 1 ] - }, - "thirdperson_lefthand": { - "rotation": [ 75, -135, 0 ], - "translation": [ 0, 2.5, 0], - "scale": [ 0.375, 0.375, 0.375 ] - } - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 8, 8, 0 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/lit_stairs_inner.json b/src/main/resources/assets/betterend/models/block/lit_stairs_inner.json deleted file mode 100644 index d9ee9b90..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_stairs_inner.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#side" - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 8, 8, 0 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 8, 0, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 16, 8 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 0, 8, 8 ], - "to": [ 8, 16, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 0, 8, 8, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, - "south": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "west" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/lit_stairs_outer.json b/src/main/resources/assets/betterend/models/block/lit_stairs_outer.json deleted file mode 100644 index 13725a18..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_stairs_outer.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#side" - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - }, - { - "from": [ 8, 8, 8 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "up": { "uv": [ 8, 8, 16, 16 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 0, 0, 8, 8 ], "texture": "#side" }, - "south": { "uv": [ 8, 0, 16, 8 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 8, 0, 16, 8 ], "texture": "#side" }, - "east": { "uv": [ 0, 0, 8, 8 ], "texture": "#side", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/lit_wall_post.json b/src/main/resources/assets/betterend/models/block/lit_wall_post.json deleted file mode 100644 index 48859b0c..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_wall_post.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 4, 0, 4 ], - "to": [ 12, 16, 12 ], - "shade": false, - "faces": { - "down": { "texture": "#wall", "cullface": "down" }, - "up": { "texture": "#wall", "cullface": "up" }, - "north": { "texture": "#wall" }, - "south": { "texture": "#wall" }, - "west": { "texture": "#wall" }, - "east": { "texture": "#wall" } - }, - "__comment": "Center post" - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/lit_wall_side.json b/src/main/resources/assets/betterend/models/block/lit_wall_side.json deleted file mode 100644 index 27d8698c..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_wall_side.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 5, 0, 0 ], - "to": [ 11, 14, 8 ], - "shade": false, - "faces": { - "down": { "texture": "#wall", "cullface": "down" }, - "up": { "texture": "#wall" }, - "north": { "texture": "#wall", "cullface": "north" }, - "west": { "texture": "#wall" }, - "east": { "texture": "#wall" } - }, - "__comment": "wall" - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/lit_wall_side_tall.json b/src/main/resources/assets/betterend/models/block/lit_wall_side_tall.json deleted file mode 100644 index ee0dfab1..00000000 --- a/src/main/resources/assets/betterend/models/block/lit_wall_side_tall.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#wall" - }, - "elements": [ - { "from": [ 5, 0, 0 ], - "to": [ 11, 16, 8 ], - "shade": false, - "faces": { - "down": { "texture": "#wall", "cullface": "down" }, - "up": { "texture": "#wall", "cullface": "up"}, - "north": { "texture": "#wall", "cullface": "north" }, - "west": { "texture": "#wall" }, - "east": { "texture": "#wall" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_slab.json b/src/main/resources/assets/betterend/models/block/neon_cactus_slab.json index ccd83a76..22fb196b 100644 --- a/src/main/resources/assets/betterend/models/block/neon_cactus_slab.json +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_slab.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/slab_noshade", + "parent": "block/slab", "textures": { "bottom": "betterend:block/neon_cactus_block_top", "top": "betterend:block/neon_cactus_block_top", diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs.json b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs.json index bae5dffd..0a0df2b2 100644 --- a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs.json +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/lit_stairs", + "parent": "minecraft:block/stairs", "textures": { "bottom": "betterend:block/neon_cactus_block_top", "top": "betterend:block/neon_cactus_block_top", diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_inner.json b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_inner.json index 2eecc8e2..78d80cc5 100644 --- a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_inner.json +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_inner.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/lit_stairs_inner", + "parent": "minecraft:block/inner_stairs", "textures": { "bottom": "betterend:block/neon_cactus_block_top", "top": "betterend:block/neon_cactus_block_top", diff --git a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_outer.json b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_outer.json index ead881f0..01f12961 100644 --- a/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_outer.json +++ b/src/main/resources/assets/betterend/models/block/neon_cactus_stairs_outer.json @@ -1,5 +1,5 @@ { - "parent": "betterend:block/lit_stairs_outer", + "parent": "minecraft:block/outer_stairs", "textures": { "bottom": "betterend:block/neon_cactus_block_top", "top": "betterend:block/neon_cactus_block_top", diff --git a/src/main/resources/assets/betterend/models/block/pillar_noshade.json b/src/main/resources/assets/betterend/models/block/pillar_noshade.json deleted file mode 100644 index cf1bd8de..00000000 --- a/src/main/resources/assets/betterend/models/block/pillar_noshade.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#side" - }, - "elements": [ - { - "from": [ 0, 0, 0 ], - "to": [ 16, 16, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#end", "cullface": "up" }, - "north": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 0, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/slab_noshade.json b/src/main/resources/assets/betterend/models/block/slab_noshade.json deleted file mode 100644 index e629ba9e..00000000 --- a/src/main/resources/assets/betterend/models/block/slab_noshade.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "particle": "#side" - }, - "elements": [ - { "from": [ 0, 0, 0 ], - "to": [ 16, 8, 16 ], - "shade": false, - "faces": { - "down": { "uv": [ 0, 0, 16, 16 ], "texture": "#bottom", "cullface": "down" }, - "up": { "uv": [ 0, 0, 16, 16 ], "texture": "#top" }, - "north": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "north" }, - "south": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "south" }, - "west": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "west" }, - "east": { "uv": [ 0, 8, 16, 16 ], "texture": "#side", "cullface": "east" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs.json b/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs.json deleted file mode 100644 index 6200b8c2..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_bricks", - "top": "betterend:block/smaragdant_crystal_bricks", - "side": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_inner.json b/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_inner.json deleted file mode 100644 index f0ac1df0..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs_inner", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_bricks", - "top": "betterend:block/smaragdant_crystal_bricks", - "side": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_outer.json b/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_outer.json deleted file mode 100644 index ed02dfcd..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_bricks_stairs_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs_outer", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_bricks", - "top": "betterend:block/smaragdant_crystal_bricks", - "side": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_post.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_post.json deleted file mode 100644 index e74131d0..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_post.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "betterend:block/lit_wall_post", - "textures": { - "wall": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side.json deleted file mode 100644 index ad9b2c94..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "betterend:block/lit_wall_side", - "textures": { - "wall": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side_tall.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side_tall.json deleted file mode 100644 index c49dacb0..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_bricks_wall_side_tall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "betterend:block/lit_wall_side_tall", - "textures": { - "wall": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_post.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_post.json deleted file mode 100644 index c5e167df..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_post.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "parent": "block/block", - "textures": { - "side": "betterend:block/smaragdant_crystal_side", - "top": "betterend:block/smaragdant_crystal_top", - "particle": "#side" - }, - "elements": [ - { - "from": [ 4, -0.01, 4 ], - "to": [ 12, 16, 12 ], - "shade": false, - "faces": { - "down": { "uv": [ 4, 4, 12, 12 ], "texture": "#top", "cullface": "down" }, - "up": { "uv": [ 4, 4, 12, 12 ], "texture": "#top", "cullface": "up" }, - "north": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, - "south": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, - "west": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" }, - "east": { "uv": [ 4, 0, 12, 16 ], "texture": "#side" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side.json deleted file mode 100644 index 4bba9abf..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "textures": { - "wall": "betterend:block/smaragdant_crystal_side", - "top": "betterend:block/smaragdant_crystal_top", - "particle": "#wall" - }, - "elements": [ - { - "from": [ 5, 0, 0 ], - "to": [ 11, 14, 8 ], - "shade": false, - "faces": { - "down": { "texture": "#top", "cullface": "down" }, - "up": { "texture": "#top" }, - "north": { "texture": "#wall", "cullface": "north" }, - "west": { "texture": "#wall" }, - "east": { "texture": "#wall" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side_tall.json b/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side_tall.json deleted file mode 100644 index dac2fa44..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_crystal_wall_side_tall.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "textures": { - "wall": "betterend:block/smaragdant_crystal_side", - "top": "betterend:block/smaragdant_crystal_top", - "particle": "#wall" - }, - "elements": [ - { - "from": [ 5, 0, 0 ], - "to": [ 11, 16, 8 ], - "shade": false, - "faces": { - "down": { "texture": "#top", "cullface": "down" }, - "up": { "texture": "#top", "cullface": "up"}, - "north": { "texture": "#wall", "cullface": "north" }, - "west": { "texture": "#wall" }, - "east": { "texture": "#wall" } - } - } - ] -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_bottom.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_bottom.json deleted file mode 100644 index d4f4423b..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_bottom.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_bottom", - "textures": { - "base": "betterend:block/smaragdant_crystal_side", - "pillar": "betterend:block/smaragdant_crystal_pillar_side", - "bottom": "betterend:block/smaragdant_crystal_polished" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column.json deleted file mode 100644 index aba32bf3..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_column", - "textures": { - "base": "betterend:block/smaragdant_crystal_side", - "pillar": "betterend:block/smaragdant_crystal_pillar_side", - "bottom": "betterend:block/smaragdant_crystal_polished" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column_top.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column_top.json deleted file mode 100644 index 2f8a7add..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_column_top.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_column_top", - "textures": { - "base": "betterend:block/smaragdant_crystal_side", - "pillar": "betterend:block/smaragdant_crystal_pillar_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_default.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_default.json deleted file mode 100644 index 07e36ccc..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_default.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_default", - "textures": { - "top": "betterend:block/smaragdant_crystal_polished", - "base": "betterend:block/smaragdant_crystal_side", - "pillar": "betterend:block/smaragdant_crystal_pillar_side", - "bottom": "betterend:block/smaragdant_crystal_polished" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_pillar.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_pillar.json deleted file mode 100644 index 2041fe88..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_pillar.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_pillar", - "textures": { - "pillar": "betterend:block/smaragdant_crystal_pillar_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_top.json b/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_top.json deleted file mode 100644 index 7f586614..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_pedestal_top.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_pedestal_top", - "textures": { - "top": "betterend:block/smaragdant_crystal_polished", - "base": "betterend:block/smaragdant_crystal_side", - "pillar": "betterend:block/smaragdant_crystal_pillar_side" - } -} \ No newline at end of file diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_slab.json b/src/main/resources/assets/betterend/models/block/smaragdant_slab.json deleted file mode 100644 index 19f5cca8..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_slab.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/slab_noshade", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_top", - "top": "betterend:block/smaragdant_crystal_top", - "side": "betterend:block/smaragdant_crystal_side" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_stairs.json b/src/main/resources/assets/betterend/models/block/smaragdant_stairs.json deleted file mode 100644 index 288366da..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_stairs.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_top", - "top": "betterend:block/smaragdant_crystal_top", - "side": "betterend:block/smaragdant_crystal_side" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_stairs_inner.json b/src/main/resources/assets/betterend/models/block/smaragdant_stairs_inner.json deleted file mode 100644 index 2339f001..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_stairs_inner.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs_inner", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_top", - "top": "betterend:block/smaragdant_crystal_top", - "side": "betterend:block/smaragdant_crystal_side" - } -} diff --git a/src/main/resources/assets/betterend/models/block/smaragdant_stairs_outer.json b/src/main/resources/assets/betterend/models/block/smaragdant_stairs_outer.json deleted file mode 100644 index 380d63db..00000000 --- a/src/main/resources/assets/betterend/models/block/smaragdant_stairs_outer.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "parent": "betterend:block/lit_stairs_outer", - "textures": { - "bottom": "betterend:block/smaragdant_crystal_top", - "top": "betterend:block/smaragdant_crystal_top", - "side": "betterend:block/smaragdant_crystal_side" - } -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_stairs.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_stairs.json deleted file mode 100644 index 92b2603b..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "betterend:block/smaragdant_bricks_stairs" -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_wall.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_wall.json deleted file mode 100644 index b89dc3ef..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_bricks_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "betterend:block/smaragdant_crystal_bricks" - } -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_pedestal.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_pedestal.json deleted file mode 100644 index ca50eb45..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_pedestal.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "betterend:block/smaragdant_pedestal_default" -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_slab.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_slab.json deleted file mode 100644 index 1099667b..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_slab.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "betterend:block/smaragdant_slab" -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_stairs.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_stairs.json deleted file mode 100644 index 7af759c0..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_stairs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "betterend:block/smaragdant_stairs" -} diff --git a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_wall.json b/src/main/resources/assets/betterend/models/item/smaragdant_crystal_wall.json deleted file mode 100644 index 4391b325..00000000 --- a/src/main/resources/assets/betterend/models/item/smaragdant_crystal_wall.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "minecraft:block/wall_inventory", - "textures": { - "wall": "betterend:block/smaragdant_crystal_side" - } -} diff --git a/src/main/resources/assets/betterend/sounds.json b/src/main/resources/assets/betterend/sounds.json index d202610d..f0abe0dd 100644 --- a/src/main/resources/assets/betterend/sounds.json +++ b/src/main/resources/assets/betterend/sounds.json @@ -219,15 +219,6 @@ } ] }, - "betterend.ambient.amber_land": { - "category": "ambient", - "sounds": [ - { - "name": "betterend:ambient/amber_land", - "stream": true - } - ] - }, "betterend.entity.dragonfly": { "category": "entity", diff --git a/src/main/resources/assets/betterend/sounds/ambient/amber_land.ogg b/src/main/resources/assets/betterend/sounds/ambient/amber_land.ogg deleted file mode 100644 index 6b830cdb..00000000 Binary files a/src/main/resources/assets/betterend/sounds/ambient/amber_land.ogg and /dev/null differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal.png new file mode 100644 index 00000000..e2981961 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_bricks.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_bricks.png index b14f97d9..b6b4336b 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_bricks.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_bricks.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_side.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_side.png index 448d7de3..6edbb4a2 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_side.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_side.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_top.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_top.png index b4092bca..04973162 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_top.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_pillar_top.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_polished.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_polished.png index 785096b2..9b0a4fab 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_polished.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_polished.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_shard.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_shard.png index cdcfa237..aa1a21fe 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_shard.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_shard.png differ diff --git a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_tiles.png b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_tiles.png index 7e5ab1f1..ad66fdd4 100644 Binary files a/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_tiles.png and b/src/main/resources/assets/betterend/textures/block/smaragdant_crystal_tiles.png differ diff --git a/src/main/resources/assets/betterend/textures/item/thallasium_raw.png b/src/main/resources/assets/betterend/textures/item/thallasium_raw.png deleted file mode 100644 index 5e88bfa3..00000000 Binary files a/src/main/resources/assets/betterend/textures/item/thallasium_raw.png and /dev/null differ diff --git a/src/main/resources/assets/colored_lights/light_colors.json b/src/main/resources/assets/colored_lights/light_colors.json deleted file mode 100644 index 27a890de..00000000 --- a/src/main/resources/assets/colored_lights/light_colors.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "replace": false, - "colors": { - "betterend:smaragdant_crystal": "#17cfbd", - "betterend:smaragdant_crystal_shard": "#17cfbd", - "betterend:smaragdant_crystal_shard": "#17cfbd", - "betterend:smaragdant_crystal_bricks": "#17cfbd", - "betterend:smaragdant_crystal_bricks_slab": "#17cfbd", - "betterend:smaragdant_crystal_bricks_stairs": "#17cfbd", - "betterend:smaragdant_crystal_bricks_wall": "#17cfbd", - "betterend:smaragdant_crystal_pedestal": "#17cfbd", - "betterend:smaragdant_crystal_pillar": "#17cfbd", - "betterend:smaragdant_crystal_polished": "#17cfbd", - "betterend:smaragdant_crystal_slab": "#17cfbd", - "betterend:smaragdant_crystal_stairs": "#17cfbd", - "betterend:smaragdant_crystal_tiles": "#17cfbd", - "betterend:smaragdant_crystal_wall": "#17cfbd", - "betterend:aurora_crystal": "#f74da1", - "betterend:mossy_glowshroom_fur": "#8be6ff", - "betterend:mossy_glowshroom_hymenophore": "#8be6ff", - "betterend:umbrella_tree_cluster": "#c054f9", - "betterend:umbrella_tree_cluster": "#c054f9", - "betterend:umbrella_moss": "#ff943e", - "betterend:umbrella_moss_tall": "#ff943e", - "betterend:creeping_moss": "#0de4fc", - "betterend:twisted_umbrella_moss": "#e045d0", - "betterend:twisted_umbrella_moss_tall": "#e045d0", - "betterend:glowing_pillar_luminophor": "#ffd96c", - "betterend:glowing_pillar_leaves": "#ffd96c", - "betterend:bulb_moss": "#ffd96c", - "betterend:blue_vine_lantern": "#a6effb", - "betterend:blue_vine_fur": "#a6effb", - "betterend:purple_polypore": "#c53aec", - "betterend:aurant_polypore": "#a2d9ff", - "betterend:end_lily": "#c27dff", - "betterend:dense_vine": "#f47ffc", - "betterend:pond_anemone": "#f1f0da", - "betterend:amaranita_lantern": "#baecd9", - "betterend:amaranita_fur": "#baecd9", - - "betterend:neon_cactus": "#86f0e7", - "betterend:neon_cactus_block": "#86f0e7", - "betterend:neon_cactus_stairs": "#86f0e7", - "betterend:neon_cactus_slab": "#86f0e7", - - "betterend:iron_bulb_lantern_orange": "#ff963c", - "betterend:iron_bulb_lantern_magenta": "#d25aff", - "betterend:iron_bulb_lantern_light_blue": "#78b5ff", - "betterend:iron_bulb_lantern_yellow": "#ffff39", - "betterend:iron_bulb_lantern_lime": "#9fff1f", - "betterend:iron_bulb_lantern_pink": "#ff86ae", - "betterend:iron_bulb_lantern_cyan": "#7fd4ff", - "betterend:iron_bulb_lantern_purple": "#b65aff", - "betterend:iron_bulb_lantern_blue": "#496dff", - "betterend:iron_bulb_lantern_brown": "#ffbe80", - "betterend:iron_bulb_lantern_green": "#cdff66", - "betterend:iron_bulb_lantern_red": "#ff5555", - - "betterend:thallasium_bulb_lantern_orange": "#ff963c", - "betterend:thallasium_bulb_lantern_magenta": "#d25aff", - "betterend:thallasium_bulb_lantern_light_blue": "#78b5ff", - "betterend:thallasium_bulb_lantern_yellow": "#ffff39", - "betterend:thallasium_bulb_lantern_lime": "#9fff1f", - "betterend:thallasium_bulb_lantern_pink": "#ff86ae", - "betterend:thallasium_bulb_lantern_cyan": "#7fd4ff", - "betterend:thallasium_bulb_lantern_purple": "#b65aff", - "betterend:thallasium_bulb_lantern_blue": "#496dff", - "betterend:thallasium_bulb_lantern_brown": "#ffbe80", - "betterend:thallasium_bulb_lantern_green": "#cdff66", - "betterend:thallasium_bulb_lantern_red": "#ff5555", - - "betterend:terminite_bulb_lantern_orange": "#ff963c", - "betterend:terminite_bulb_lantern_magenta": "#d25aff", - "betterend:terminite_bulb_lantern_light_blue": "#78b5ff", - "betterend:terminite_bulb_lantern_yellow": "#ffff39", - "betterend:terminite_bulb_lantern_lime": "#9fff1f", - "betterend:terminite_bulb_lantern_pink": "#ff86ae", - "betterend:terminite_bulb_lantern_cyan": "#7fd4ff", - "betterend:terminite_bulb_lantern_purple": "#b65aff", - "betterend:terminite_bulb_lantern_blue": "#496dff", - "betterend:terminite_bulb_lantern_brown": "#ffbe80", - "betterend:terminite_bulb_lantern_green": "#cdff66", - "betterend:terminite_bulb_lantern_red": "#ff5555", - - "betterend:thallasium_chandelier": "#e0fceb", - "betterend:terminite_chandelier": "#e0fceb", - "betterend:iron_chandelier": "#e0fceb", - "betterend:gold_chandelier": "#e0fceb", - "betterend:lumecorn": "#e0fceb" - } -} diff --git a/src/main/resources/betterend.mixins.client.json b/src/main/resources/betterend.mixins.client.json index bb8bed5f..084bbab4 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_16", + "compatibilityLevel": "JAVA_8", "client": [ "AbstractSoundInstanceAccessor", "ClientPlayNetworkHandlerMixin", - "HumanoidMobRendererMixin", - "ArmorStandRendererMixin", + "HumanoidMobRendererMixin", + "ArmorStandRendererMixin", "ClientRecipeBookMixin", "MinecraftClientMixin", - "PlayerRendererMixin", - "LevelRendererMixin", + "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 d53b4518..e4d533ea 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_16", + "compatibilityLevel": "JAVA_8", "mixins": [ "BiomeGenerationSettingsAccessor", "NoiseBasedChunkGeneratorMixin", @@ -17,14 +17,12 @@ "PotionBrewingAccessor", "MinecraftServerMixin", "EndDragonFightMixin", - "ShuffelingListMixin", - "WorldGenRegionMixin", "BlockBehaviourMixin", "DimensionTypeMixin", "CraftingMenuMixin", "LivingEntityMixin", "ServerPlayerMixin", - "SpikeFeatureMixin", + "SpikeFeatureMixin", "ServerLevelMixin", "PlayerListMixin", "AnvilMenuMixin", diff --git a/src/main/resources/betterend.mixins.shadow.json b/src/main/resources/betterend.mixins.shadow.json deleted file mode 100644 index 08955be4..00000000 --- a/src/main/resources/betterend.mixins.shadow.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "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/data/betterend/patchouli_books/guidebook/de_de/categories/biomes.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/biomes.json deleted file mode 100644 index 26fc50b9..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/biomes.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Biome", - "description": "Bald verfügabr...", - "icon": "betterend:end_mycelium" -} \ No newline at end of file diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/crafting.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/crafting.json deleted file mode 100644 index 1b0b44fb..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/crafting.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Crafting", - "description": "Bald verfügabr...", - "icon": "betterend:iron_hammer", - "sortnum": 2 -} \ No newline at end of file diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/end_veil.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/end_veil.json deleted file mode 100644 index fc2d51d3..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/end_veil.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Endschleier", - "description": "Schaue den Enderman ohne Furcht tief in die Augen.", - "icon": "betterend:textures/mob_effect/end_veil.png", - "sortnum": 3 -} \ No newline at end of file diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/rituals.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/rituals.json deleted file mode 100644 index 308b16fc..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/categories/rituals.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Rituale", - "description": "Mystische Künste aus dem End. Diese in der Oberwelt lang vergessenen Rituale eröffnen Dir neue Wege und Möglichkeiten.", - "icon": "betterend:infusion_pedestal", - "sortnum": 1 -} \ No newline at end of file diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/eternal_ritual.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/eternal_ritual.json deleted file mode 100644 index c093f043..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/eternal_ritual.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "Rituale der Ewigkeit", - "icon": "betterend:eternal_pedestal", - "read_by_default": true, - "category": "betterend:rituals", - "pages": [ - { - "type": "text", - "text": "\"Ein steiniger Weg zurück in die Oberwelt.\"$(br2)Auf Deinen Reisen durch das End wirst du gelegentlich alte Ruinen finden.$(br2)Alte Mythen erzählen von einem (vielleicht schon) zerstörten Rahme aus $(bold)Flavolitrune$(), der von sechs Sockeln umringt ist." - }, - { - "type": "image", - "text": "", - "border": false, - "images": [ - "betterend:textures/images/eternal_ritual/portal_structure.png" - ] - }, - { - "type": "text", - "text": "Es sind die letzte überbleibsel eines majestätischen Protals, dass einst eine Pforte zwischen der Oberwelt und dem End bildete.$(br2)Um das Protal wieder zum leben zu erwecken, musst Du zuerst die Teile des Rahmens finden und vervollständigen." - }, - { - "type": "image", - "text": "Platziere dann 6 $(bold)Ewige Kristalle$() auf den Sockeln.", - "border": false, - "images": [ - "betterend:textures/images/eternal_ritual/portal_frame_full.png" - ] - }, - { - "type": "image", - "text": "Sobald der letzte Kirstall paltziert wurde,", - "border": false, - "images": [ - "betterend:textures/images/eternal_ritual/ritual_finished.png" - ] - }, - { - "type": "text", - "text": "wird das Portal aus seinem Schlummer erwachen und die Welten verbinden. Die $(bold)Flavolitrune$() (um den Rahmen zu reparieren) und die $(bold)Ewige Kristalle$() können durch ein $(l:rituals/infusion_ritual)Infusionsritual$(/l) erschaffen werden." - } - ] -} diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/infusion_ritual.json b/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/infusion_ritual.json deleted file mode 100644 index df3583ed..00000000 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/de_de/entries/rituals/infusion_ritual.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "Elementarritual", - "icon": "betterend:infusion_pedestal", - "read_by_default": true, - "category": "betterend:rituals", - "pages": [ - { - "type": "text", - "text": "Hauche deinen Gegenständen die Macht der Elemente ein." - }, - { - "type": "crafting", - "title": "Der Ritualplatz", - "text": "Zuerst musst Du einen $(bold)Elementarsockel$() sowie 8 weitere Sockel eines $(bold)beliebigen$() Typs herstellen.", - "recipe": "betterend:infusion_pedestal" - }, - { - "type": "image", - "text": "Stelle den Elementarsockel umringt von den restlichen Sockeln (Abb. 2) auf.", - "border": true, - "images": [ - "betterend:textures/images/infusion_ritual/infusion_ritual_start.png", - "betterend:textures/images/infusion_ritual/infusion_ritual_full.png" - ] - }, - { - "type": "image", - "title": "Verschmelzen", - "text": "Damit ist der Ritualplatz fertig, und kann verwendet werden.", - "border": false, - "images": [ - "betterend:textures/images/infusion_ritual/ritual_structure.png" - ] - }, - { - "type": "image", - "text": "Setzte den Hauptwirkstoff umringt von den Katalysatoren", - "border": false, - "images": [ - "betterend:textures/images/infusion_ritual/ritual_ready.png" - ] - }, - { - "type": "text", - "text": "auf den $(bold)Elementarsockel$().$(br2)Alle möglichen Rezepte findest du zum Beispiel mit $(l:https://www.curseforge.com/minecraft/mc-mods/roughly-enough-items)REI$(/l).$(br2)Um den Prozess zu starten, plaziere den Hauptwirkstoff zuletzt oder klicke den $(bold)Elementarsockel$() mit der rechten Moustaste an." - }, - { - "type": "image", - "text": "Die Sockel verschmelzen nun die Zutaten. ", - "border": false, - "images": [ - "betterend:textures/images/infusion_ritual/ritual_started.png" - ] - }, - { - "type": "image", - "text": "Nach einer kurzen Zeit sind die Katalysatoren verbraucht und das Ritual ist beendet.", - "border": false, - "images": [ - "betterend:textures/images/infusion_ritual/ritual_finished.png" - ] - } - ] -} \ No newline at end of file diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/eternal_ritual.json b/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/eternal_ritual.json index 596563f9..dc587602 100644 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/eternal_ritual.json +++ b/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/eternal_ritual.json @@ -2,7 +2,7 @@ "name": "Eternal Ritual", "icon": "betterend:eternal_pedestal", "read_by_default": true, - "category": "betterend:rituals", + "category": "rituals", "pages": [ { "type": "text", diff --git a/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/infusion_ritual.json b/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/infusion_ritual.json index da553170..a588ebf8 100644 --- a/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/infusion_ritual.json +++ b/src/main/resources/data/betterend/patchouli_books/guidebook/en_us/entries/rituals/infusion_ritual.json @@ -2,7 +2,7 @@ "name": "Infusion Ritual", "icon": "betterend:infusion_pedestal", "read_by_default": true, - "category": "betterend:rituals", + "category": "rituals", "pages": [ { "type": "text", diff --git a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json b/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json deleted file mode 100644 index 538c9e24..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/axe.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "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 deleted file mode 100644 index b90eeee2..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/hoe.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "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 deleted file mode 100644 index a6e13734..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/pickaxe.json +++ /dev/null @@ -1,251 +0,0 @@ -{ - "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 deleted file mode 100644 index 31f7636d..00000000 --- a/src/main/resources/data/minecraft/tags/blocks/mineable/shovel.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": "false", - "values": [ - "betterend:endstone_dust" - ] -} \ No newline at end of file diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index ff7e882c..b880fc77 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -11,8 +11,7 @@ "Edos (building)", "Yuki (art)", "Seaward (art)", - "Firel (music)", - "Frank (code porting & bugfixes)" + "Firel (music)" ], "contact": { "homepage": "https://www.curseforge.com/minecraft/mc-mods/betterend", @@ -32,20 +31,22 @@ "ru.betterend.client.BetterEndClient" ], "rei_plugins": [ - "ru.betterend.integration.rei.REIPlugin" - ] + "ru.betterend.integration.rei.REIPlugin" + ], + "rei_containers": [ + "ru.betterend.integration.rei.REIContainer" + ] }, "mixins": [ "betterend.mixins.common.json", - "betterend.mixins.client.json", - "betterend.mixins.shadow.json" + "betterend.mixins.client.json" ], "depends": { - "fabricloader": ">=0.11.6", - "fabric": ">=0.36.0", - "minecraft": ">=1.17", - "bclib": ">=0.2.0" + "fabricloader": ">=0.11.0", + "fabric": ">=0.32.0", + "minecraft": ">=1.16.4", + "bclib": ">=0.1.38" }, "suggests": { "byg": ">=1.1.3",