Compare commits

..

No commits in common. "1.0.1" and "1.16.5" have entirely different histories.

1780 changed files with 13495 additions and 23311 deletions

6
.gitignore vendored
View file

@ -27,9 +27,5 @@ bin/
# fabric # fabric
run/ run/
run-client/
output/ output/
*.getBlock("log") *.log
Convert.class
ModelPart.class
libs/

View file

@ -1,161 +0,0 @@
class ModelPart {
static java.util.ArrayList<ModelPart> 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 + "\");");
}
}
}
ModelPart.print();
}
void setRotationAngle(ModelPart p, float x, float y, float z){
p.setRotationAngle(x, y, z);
}
public void c (){
float scale = 1;
ModelPart[] SHARDS = new ModelPart[4];
SHARDS[0] = new ModelPart(16, 16, 2, 4, "SHARDS[0]").addBox(-5.0F, 1.0F, -3.0F, 2.0F, 8.0F, 2.0F);
SHARDS[1] = new ModelPart(16, 16, 2, 4, "SHARDS[1]").addBox(3.0F, -1.0F, -1.0F, 2.0F, 8.0F, 2.0F);
SHARDS[2] = new ModelPart(16, 16, 2, 4, "SHARDS[2]").addBox(-1.0F, 0.0F, -5.0F, 2.0F, 4.0F, 2.0F);
SHARDS[3] = new ModelPart(16, 16, 2, 4, "SHARDS[3]").addBox(0.0F, 3.0F, 4.0F, 2.0F, 6.0F, 2.0F);
ModelPart CORE = new ModelPart(16, 16, 0, 0, "CORE");
CORE.addBox(-2.0F, -2.0F, -2.0F, 4.0F, 12.0F, 4.0F);
}
}

View file

@ -1,19 +1,17 @@
[![](https://jitpack.io/v/paulevsGitch/BetterEnd.svg)](https://jitpack.io/#paulevsGitch/BetterEnd) [![](https://jitpack.io/v/paulevsGitch/BetterEnd.svg)](https://jitpack.io/#paulevsGitch/BetterEnd)
# Better End # Better End
Better End Mod for Fabric, MC 1.16.4
Better End Mod for Fabric, MC 1.18
Importing: Importing:
* Clone repo * Clone repo
* Edit gradle.properties if necessary * Edit gradle.properties if necessary
* Run command line in folder: gradlew genSources idea (or eclipse) * Run command line in folder: gradlew genSources eclipse (or Another-IDE-Name)
* Import project to IDE * Import project to IDE
Building: Building:
* Clone repo * Clone repo
* Run command line in folder: gradlew build * Run command line in folder: gradlew build
* Mod .jar will be in ./build/libs * Mod .jar will be in ./build/libs
Mappings:
* https://modmuss50.me/fabric.html?&version=1.16.4

View file

@ -1,135 +1,114 @@
buildscript { buildscript {
dependencies { dependencies {
classpath 'org.kohsuke:github-api:1.114' classpath 'org.kohsuke:github-api:1.114'
} }
} }
plugins { plugins {
id 'idea' id 'idea'
id 'eclipse' id 'eclipse'
id 'fabric-loom' version "${loom_version}" id 'fabric-loom' version '0.7-SNAPSHOT'
id 'maven-publish' id 'maven-publish'
} }
sourceCompatibility = JavaVersion.VERSION_17 sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_1_8
archivesBaseName = project.archives_base_name archivesBaseName = project.archives_base_name
version = project.mod_version version = project.mod_version
group = project.maven_group group = project.maven_group
def local_bclib = findProject(':BCLib') != null
repositories { repositories {
maven { url "https://maven.dblsaiko.net/" } maven { url "https://maven.dblsaiko.net/" }
maven { url "https://maven.fabricmc.net/" } maven { url "https://server.bbkr.space:8081/artifactory/libs-release/" }
maven { url 'https://maven.blamejared.com' } maven { url "https://maven.fabricmc.net/" }
maven { url "https://maven.shedaniel.me/" } maven { url 'https://maven.blamejared.com' }
maven { url 'https://jitpack.io' } maven { url "https://maven.shedaniel.me/" }
maven { url 'https://maven.terraformersmc.com/releases' } maven { url 'https://jitpack.io' }
flatDir {
dirs 'libs'
}
}
loom {
accessWidenerPath = file("src/main/resources/betterend.accesswidener")
} }
dependencies { dependencies {
minecraft "com.mojang:minecraft:${project.minecraft_version}" minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings loom.officialMojangMappings() mappings minecraft.officialMojangMappings()
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
useApi "vazkii.patchouli:Patchouli:1.16.4-${project.patchouli_version}"
useApi "com.github.paulevsGitch:BCLib:${project.bclib_version}"
// useApi "vazkii.patchouli:Patchouli:1.17-${project.patchouli_version}" useOptional "me.shedaniel:RoughlyEnoughItems:${project.rei_version}"
println "Using local BCLib: ${local_bclib}" useOptional "me.shedaniel:RoughlyEnoughItems-api:${project.rei_version}"
if (local_bclib){ //useOptional "grondag:canvas-mc116:${project.canvas_version}"
implementation( project(path:":BCLib", configuration: 'dev') )
} else {
modImplementation "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 "grondag:canvas-mc116:${project.canvas_version}"
} }
def useOptional(String dep) { def useOptional(String dep) {
dependencies.modRuntime(dep) { dependencies.modRuntime (dep) {
exclude group: 'net.fabricmc.fabric-api' exclude group: "net.fabricmc.fabric-api"
exclude group: 'net.fabricmc' exclude group: "net.fabricmc"
if (!dep.contains("me.shedaniel")) { if (!dep.contains("me.shedaniel")) {
exclude group: 'me.shedaniel.cloth' exclude group: "me.shedaniel"
exclude group: 'me.shedaniel' }
} }
} dependencies.modCompileOnly (dep) {
dependencies.modCompileOnly(dep) { exclude group: "net.fabricmc.fabric-api"
exclude group: 'net.fabricmc.fabric-api' exclude group: "net.fabricmc"
exclude group: 'net.fabricmc' if (!dep.contains("me.shedaniel")) {
if (!dep.contains("me.shedaniel")) { exclude group: "me.shedaniel"
exclude group: 'me.shedaniel.cloth' }
exclude group: 'me.shedaniel' }
}
}
} }
def useApi(String dep) { def useApi(String dep) {
dependencies.modApi(dep) { dependencies.modApi (dep) {
exclude group: 'net.fabricmc.fabric-api' exclude group: "net.fabricmc.fabric-api"
exclude group: 'net.fabricmc' exclude group: "net.fabricmc"
exclude group: 'com.terraformersmc' if (!dep.contains("me.shedaniel")) {
if (!dep.contains("me.shedaniel")) { exclude group: "me.shedaniel"
exclude group: 'me.shedaniel.cloth' }
exclude group: 'me.shedaniel' }
}
}
} }
processResources { processResources {
inputs.property "version", project.version inputs.property "version", project.version
duplicatesStrategy = 'WARN' duplicatesStrategy = 'WARN'
from(sourceSets.main.resources.srcDirs) { from(sourceSets.main.resources.srcDirs) {
include "fabric.mod.json" include "fabric.mod.json"
expand "version": project.version 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 // ensure that the encoding is set to UTF-8, no matter what the system default is
// this fixes some edge cases with special characters not displaying correctly // this fixes some edge cases with special characters not displaying correctly
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
tasks.withType(JavaCompile) { tasks.withType(JavaCompile) {
options.encoding = "UTF-8" options.encoding = "UTF-8"
} }
javadoc { javadoc {
options.tags = ["reason"] options.tags = ["reason"]
} }
task javadocJar(type: Jar, dependsOn: javadoc) { task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc' classifier = 'javadoc'
from javadoc.destinationDir from javadoc.destinationDir
} }
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// if it is present. // if it is present.
// If you remove this task, sources will not be generated. // If you remove this task, sources will not be generated.
task sourcesJar(type: Jar, dependsOn: classes) { task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources' classifier = 'sources'
from sourceSets.main.allSource from sourceSets.main.allSource
} }
jar { jar {
from "LICENSE" from "LICENSE"
} }
artifacts { artifacts {
archives sourcesJar archives sourcesJar
archives javadocJar archives javadocJar
} }
def env = System.getenv() def env = System.getenv()
@ -138,24 +117,24 @@ import org.kohsuke.github.GHReleaseBuilder
import org.kohsuke.github.GitHub import org.kohsuke.github.GitHub
task release(dependsOn: [remapJar, sourcesJar, javadocJar]) { task release(dependsOn: [remapJar, sourcesJar, javadocJar]) {
onlyIf { onlyIf {
env.GITHUB_TOKEN env.GITHUB_TOKEN
} }
doLast { doLast {
def github = GitHub.connectUsingOAuth(env.GITHUB_TOKEN as String) def github = GitHub.connectUsingOAuth(env.GITHUB_TOKEN as String)
def repository = github.getRepository("paulevsGitch/BetterEnd") def repository = github.getRepository("paulevsGitch/BetterEnd")
def releaseBuilder = new GHReleaseBuilder(repository, version as String) def releaseBuilder = new GHReleaseBuilder(repository, version as String)
releaseBuilder.name("${archivesBaseName}-${version}") releaseBuilder.name("${archivesBaseName}-${version}")
releaseBuilder.body("A changelog can be found at https://github.com/paulevsGitch/BetterEnd/commits") releaseBuilder.body("A changelog can be found at https://github.com/paulevsGitch/BetterEnd/commits")
releaseBuilder.commitish("master") releaseBuilder.commitish("master")
def ghRelease = releaseBuilder.create() def ghRelease = releaseBuilder.create()
ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"), "application/java-archive"); ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}.jar"), "application/java-archive");
ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}-sources.jar"), "application/java-archive"); ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}-sources.jar"), "application/java-archive");
ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}-javadoc.jar"), "application/java-archive"); ghRelease.uploadAsset(file("${project.buildDir}/libs/${archivesBaseName}-${version}-javadoc.jar"), "application/java-archive");
} }
} }
// configure the maven publication // configure the maven publication
@ -176,4 +155,4 @@ task release(dependsOn: [remapJar, sourcesJar, javadocJar]) {
// // uncomment to publish to the local maven // // uncomment to publish to the local maven
// // mavenLocal() // // mavenLocal()
// } // }
//} //}

View file

@ -1,24 +1,21 @@
# Done to increase the memory available to gradle. # Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx2G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
minecraft_version=1.18.1 minecraft_version=1.16.5
fabric_version = 0.44.0+1.18 yarn_mappings=6
loader_version=0.12.12 loader_version=0.11.3
#Loom # Mod Properties
loom_version=0.10-SNAPSHOT mod_version = 0.9.8-pre
maven_group = ru.betterend
# Mod Properties archives_base_name = better-end
mod_version=1.0.1
maven_group=ru.betterend # Dependencies
archives_base_name=better-end # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
patchouli_version = 50-FABRIC
# Dependencies fabric_version = 0.32.9+1.16
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api canvas_version = 1.0.+
bclib_version = 0.1.38
patchouli_version = 55-FABRIC-SNAPSHOT rei_version = 5.8.10
bclib_version = 1.2.5
rei_version = 7.0.343
canvas_version = 1.0.+

Binary file not shown.

View file

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

259
gradlew vendored
View file

@ -1,7 +1,7 @@
#!/bin/sh #!/usr/bin/env sh
# #
# Copyright © 2015-2021 the original authors. # Copyright 2015 the original author or authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@ -17,113 +17,78 @@
# #
############################################################################## ##############################################################################
# ##
# Gradle start up script for POSIX generated by Gradle. ## Gradle start up script for UN*X
# ##
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
############################################################################## ##############################################################################
# Attempt to set APP_HOME # Attempt to set APP_HOME
# Resolve links: $0 may be a link # Resolve links: $0 may be a link
app_path=$0 PRG="$0"
# Need this for relative symlinks.
# Need this for daisy-chained symlinks. while [ -h "$PRG" ] ; do
while ls=`ls -ld "$PRG"`
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path link=`expr "$ls" : '.*-> \(.*\)$'`
[ -h "$app_path" ] if expr "$link" : '/.*' > /dev/null; then
do PRG="$link"
ls=$( ls -ld "$app_path" ) else
link=${ls#*' -> '} PRG=`dirname "$PRG"`"/$link"
case $link in #( fi
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done done
SAVED="`pwd`"
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle" APP_NAME="Gradle"
APP_BASE_NAME=${0##*/} APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum MAX_FD="maximum"
warn () { warn () {
echo "$*" echo "$*"
} >&2 }
die () { die () {
echo echo
echo "$*" echo "$*"
echo echo
exit 1 exit 1
} >&2 }
# OS specific support (must be 'true' or 'false'). # OS specific support (must be 'true' or 'false').
cygwin=false cygwin=false
msys=false msys=false
darwin=false darwin=false
nonstop=false nonstop=false
case "$( uname )" in #( case "`uname`" in
CYGWIN* ) cygwin=true ;; #( CYGWIN* )
Darwin* ) darwin=true ;; #( cygwin=true
MSYS* | MINGW* ) msys=true ;; #( ;;
NONSTOP* ) nonstop=true ;; Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables # IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java JAVACMD="$JAVA_HOME/jre/sh/java"
else else
JAVACMD=$JAVA_HOME/bin/java JAVACMD="$JAVA_HOME/bin/java"
fi fi
if [ ! -x "$JAVACMD" ] ; then if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -132,7 +97,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
else else
JAVACMD=java JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
@ -140,95 +105,79 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
case $MAX_FD in #( MAX_FD_LIMIT=`ulimit -H -n`
max*) if [ $? -eq 0 ] ; then
MAX_FD=$( ulimit -H -n ) || if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
warn "Could not query maximum file descriptor limit" MAX_FD="$MAX_FD_LIMIT"
esac fi
case $MAX_FD in #( ulimit -n $MAX_FD
'' | soft) :;; #( if [ $? -ne 0 ] ; then
*) warn "Could not set maximum file descriptor limit: $MAX_FD"
ulimit -n "$MAX_FD" || fi
warn "Could not set maximum file descriptor limit to $MAX_FD" else
esac warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi fi
# Collect all arguments for the java command, stacking in reverse order: # For Darwin, add options to specify how the application appears in the dock
# * args from the command line if $darwin; then
# * the main class name GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
# * -classpath fi
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java # For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
JAVACMD=$( cygpath --unix "$JAVACMD" ) # We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
# Now convert the arguments - kludge to limit ourselves to /bin/sh SEP=""
for arg do for dir in $ROOTDIRSRAW ; do
if ROOTDIRS="$ROOTDIRS$SEP$dir"
case $arg in #( SEP="|"
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi fi
# Collect all arguments for the java command; # Escape application args
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of save () {
# shell script including quotes and variable substitutions, so put them in for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
# double quotes to make sure that they get re-expanded; and echo " "
# * put everything else in single quotes, so that it's not re-expanded. }
APP_ARGS=`save "$@"`
set -- \ # Collect all arguments for the java command, following the shell quoting and substitution rules
"-Dorg.gradle.appname=$APP_BASE_NAME" \ eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@" exec "$JAVACMD" "$@"

22
gradlew.bat vendored
View file

@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute if "%ERRORLEVEL%" == "0" goto init
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@ -54,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute if exist "%JAVA_EXE%" goto init
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@ -64,14 +64,28 @@ echo location of your Java installation.
goto fail goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

View file

@ -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 17.0.1-tem
- sdk use java 17.0.1-tem

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/cube_all", "parent": "block/cube_all",
"textures": { "textures": {
"all": "betterend:block/%name%" "all": "betterend:block/%name%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/slab", "parent": "block/slab",
"textures": { "textures": {
"bottom": "betterend:block/%name%_bricks", "bottom": "betterend:block/%name%_bricks",
"side": "betterend:block/%name%_bricks", "side": "betterend:block/%name%_bricks",
"top": "betterend:block/%name%_bricks" "top": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/inner_stairs", "parent": "block/inner_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%_bricks", "bottom": "betterend:block/%name%_bricks",
"side": "betterend:block/%name%_bricks", "side": "betterend:block/%name%_bricks",
"top": "betterend:block/%name%_bricks" "top": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/outer_stairs", "parent": "block/outer_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%_bricks", "bottom": "betterend:block/%name%_bricks",
"side": "betterend:block/%name%_bricks", "side": "betterend:block/%name%_bricks",
"top": "betterend:block/%name%_bricks" "top": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/stairs", "parent": "block/stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%_bricks", "bottom": "betterend:block/%name%_bricks",
"side": "betterend:block/%name%_bricks", "side": "betterend:block/%name%_bricks",
"top": "betterend:block/%name%_bricks" "top": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/wall_inventory", "parent": "minecraft:block/wall_inventory",
"textures": { "textures": {
"wall": "betterend:block/%name%_bricks" "wall": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_post", "parent": "minecraft:block/template_wall_post",
"textures": { "textures": {
"wall": "betterend:block/%name%_bricks" "wall": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side", "parent": "minecraft:block/template_wall_side",
"textures": { "textures": {
"wall": "betterend:block/%name%_bricks" "wall": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side_tall", "parent": "minecraft:block/template_wall_side_tall",
"textures": { "textures": {
"wall": "betterend:block/%name%_bricks" "wall": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/cube_all", "parent": "block/cube_all",
"textures": { "textures": {
"all": "betterend:block/%name%_bricks" "all": "betterend:block/%name%_bricks"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/button", "parent": "block/button",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/button_inventory", "parent": "block/button_inventory",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/button_pressed", "parent": "block/button_pressed",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%name%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/slab", "parent": "block/slab",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%name%",
"side": "betterend:block/%name%", "side": "betterend:block/%name%",
"top": "betterend:block/%name%" "top": "betterend:block/%name%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/inner_stairs", "parent": "block/inner_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%name%",
"side": "betterend:block/%name%", "side": "betterend:block/%name%",
"top": "betterend:block/%name%" "top": "betterend:block/%name%"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/outer_stairs", "parent": "block/outer_stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%name%",
"side": "betterend:block/%name%", "side": "betterend:block/%name%",
"top": "betterend:block/%name%" "top": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/pressure_plate_down", "parent": "block/pressure_plate_down",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/pressure_plate_up", "parent": "block/pressure_plate_up",
"textures": { "textures": {
"texture": "betterend:block/%name%" "texture": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/cube_all", "parent": "block/cube_all",
"textures": { "textures": {
"all": "betterend:block/%name%_small_tiles" "all": "betterend:block/%name%_small_tiles"
} }
} }

View file

@ -1,8 +1,8 @@
{ {
"parent": "block/stairs", "parent": "block/stairs",
"textures": { "textures": {
"bottom": "betterend:block/%name%", "bottom": "betterend:block/%name%",
"side": "betterend:block/%name%", "side": "betterend:block/%name%",
"top": "betterend:block/%name%" "top": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "block/cube_all", "parent": "block/cube_all",
"textures": { "textures": {
"all": "betterend:block/%name%_tile" "all": "betterend:block/%name%_tile"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/wall_inventory", "parent": "minecraft:block/wall_inventory",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_post", "parent": "minecraft:block/template_wall_post",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side", "parent": "minecraft:block/template_wall_side",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%name%"
} }
} }

View file

@ -1,6 +1,6 @@
{ {
"parent": "minecraft:block/template_wall_side_tall", "parent": "minecraft:block/template_wall_side_tall",
"textures": { "textures": {
"wall": "betterend:block/%name%" "wall": "betterend:block/%name%"
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "betterend:block/%name%" "model": "betterend:block/%name%"
} }
} }
} }

View file

@ -1,15 +1,15 @@
{ {
"variants": { "variants": {
"type=bottom": { "type=bottom": {
"model": "betterend:block/%name%_brick_half_slab" "model": "betterend:block/%name%_brick_half_slab"
}, },
"type=double": { "type=double": {
"model": "betterend:block/%name%_bricks" "model": "betterend:block/%name%_bricks"
}, },
"type=top": { "type=top": {
"model": "betterend:block/%name%_brick_half_slab", "model": "betterend:block/%name%_brick_half_slab",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
} }
} }
} }

View file

@ -1,209 +1,209 @@
{ {
"variants": { "variants": {
"facing=east,half=bottom,shape=inner_left": { "facing=east,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=inner_right": { "facing=east,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs" "model": "betterend:block/%name%_brick_inner_stairs"
}, },
"facing=east,half=bottom,shape=outer_left": { "facing=east,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=outer_right": { "facing=east,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs" "model": "betterend:block/%name%_brick_outer_stairs"
}, },
"facing=east,half=bottom,shape=straight": { "facing=east,half=bottom,shape=straight": {
"model": "betterend:block/%name%_brick_stairs" "model": "betterend:block/%name%_brick_stairs"
}, },
"facing=east,half=top,shape=inner_left": { "facing=east,half=top,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=inner_right": { "facing=east,half=top,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=outer_left": { "facing=east,half=top,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=outer_right": { "facing=east,half=top,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=straight": { "facing=east,half=top,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=bottom,shape=inner_left": { "facing=north,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=inner_right": { "facing=north,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=outer_left": { "facing=north,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=outer_right": { "facing=north,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=straight": { "facing=north,half=bottom,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_left": { "facing=north,half=top,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_right": { "facing=north,half=top,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=outer_left": { "facing=north,half=top,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=outer_right": { "facing=north,half=top,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=straight": { "facing=north,half=top,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=south,half=bottom,shape=inner_left": { "facing=south,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs" "model": "betterend:block/%name%_brick_inner_stairs"
}, },
"facing=south,half=bottom,shape=inner_right": { "facing=south,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=outer_left": { "facing=south,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs" "model": "betterend:block/%name%_brick_outer_stairs"
}, },
"facing=south,half=bottom,shape=outer_right": { "facing=south,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=straight": { "facing=south,half=bottom,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_left": { "facing=south,half=top,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_right": { "facing=south,half=top,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=outer_left": { "facing=south,half=top,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=outer_right": { "facing=south,half=top,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=straight": { "facing=south,half=top,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_left": { "facing=west,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_right": { "facing=west,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=outer_left": { "facing=west,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=outer_right": { "facing=west,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=straight": { "facing=west,half=bottom,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_left": { "facing=west,half=top,shape=inner_left": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_right": { "facing=west,half=top,shape=inner_right": {
"model": "betterend:block/%name%_brick_inner_stairs", "model": "betterend:block/%name%_brick_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=outer_left": { "facing=west,half=top,shape=outer_left": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=outer_right": { "facing=west,half=top,shape=outer_right": {
"model": "betterend:block/%name%_brick_outer_stairs", "model": "betterend:block/%name%_brick_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=straight": { "facing=west,half=top,shape=straight": {
"model": "betterend:block/%name%_brick_stairs", "model": "betterend:block/%name%_brick_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
} }
} }
} }

View file

@ -1,90 +1,90 @@
{ {
"multipart": [ "multipart": [
{ {
"when": { "when": {
"up": "true" "up": "true"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_post" "model": "betterend:block/%name%_brick_wall_post"
} }
}, },
{ {
"when": { "when": {
"north": "low" "north": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side", "model": "betterend:block/%name%_brick_wall_side",
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"east": "low" "east": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side", "model": "betterend:block/%name%_brick_wall_side",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"south": "low" "south": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side", "model": "betterend:block/%name%_brick_wall_side",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"west": "low" "west": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side", "model": "betterend:block/%name%_brick_wall_side",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"north": "tall" "north": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side_tall", "model": "betterend:block/%name%_brick_wall_side_tall",
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"east": "tall" "east": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side_tall", "model": "betterend:block/%name%_brick_wall_side_tall",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"south": "tall" "south": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side_tall", "model": "betterend:block/%name%_brick_wall_side_tall",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"west": "tall" "west": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_brick_wall_side_tall", "model": "betterend:block/%name%_brick_wall_side_tall",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }
} }
] ]
} }

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "betterend:block/%name%_bricks" "model": "betterend:block/%name%_bricks"
} }
} }
} }

View file

@ -1,118 +1,118 @@
{ {
"variants": { "variants": {
"face=ceiling,facing=east,powered=false": { "face=ceiling,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"face=ceiling,facing=east,powered=true": { "face=ceiling,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"face=ceiling,facing=north,powered=false": { "face=ceiling,facing=north,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"face=ceiling,facing=north,powered=true": { "face=ceiling,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"face=ceiling,facing=south,powered=false": { "face=ceiling,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"x": 180 "x": 180
}, },
"face=ceiling,facing=south,powered=true": { "face=ceiling,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"x": 180 "x": 180
}, },
"face=ceiling,facing=west,powered=false": { "face=ceiling,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"face=ceiling,facing=west,powered=true": { "face=ceiling,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"face=floor,facing=east,powered=false": { "face=floor,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"y": 90 "y": 90
}, },
"face=floor,facing=east,powered=true": { "face=floor,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"y": 90 "y": 90
}, },
"face=floor,facing=north,powered=false": { "face=floor,facing=north,powered=false": {
"model": "betterend:block/%name%_button" "model": "betterend:block/%name%_button"
}, },
"face=floor,facing=north,powered=true": { "face=floor,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed" "model": "betterend:block/%name%_button_pressed"
}, },
"face=floor,facing=south,powered=false": { "face=floor,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"y": 180 "y": 180
}, },
"face=floor,facing=south,powered=true": { "face=floor,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"y": 180 "y": 180
}, },
"face=floor,facing=west,powered=false": { "face=floor,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"y": 270 "y": 270
}, },
"face=floor,facing=west,powered=true": { "face=floor,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"y": 270 "y": 270
}, },
"face=wall,facing=east,powered=false": { "face=wall,facing=east,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 90 "y": 90
}, },
"face=wall,facing=east,powered=true": { "face=wall,facing=east,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 90 "y": 90
}, },
"face=wall,facing=north,powered=false": { "face=wall,facing=north,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"uvlock": true, "uvlock": true,
"x": 90 "x": 90
}, },
"face=wall,facing=north,powered=true": { "face=wall,facing=north,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"uvlock": true, "uvlock": true,
"x": 90 "x": 90
}, },
"face=wall,facing=south,powered=false": { "face=wall,facing=south,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 180 "y": 180
}, },
"face=wall,facing=south,powered=true": { "face=wall,facing=south,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 180 "y": 180
}, },
"face=wall,facing=west,powered=false": { "face=wall,facing=west,powered=false": {
"model": "betterend:block/%name%_button", "model": "betterend:block/%name%_button",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 270 "y": 270
}, },
"face=wall,facing=west,powered=true": { "face=wall,facing=west,powered=true": {
"model": "betterend:block/%name%_button_pressed", "model": "betterend:block/%name%_button_pressed",
"uvlock": true, "uvlock": true,
"x": 90, "x": 90,
"y": 270 "y": 270
} }
} }
} }

View file

@ -1,16 +1,7 @@
{ {
"variants": { "variants": {
"axis=x": { "axis=x": { "model": "betterend:block/%name%_pillar", "x": 90, "y": 90 },
"model": "betterend:block/%name%_pillar", "axis=y": { "model": "betterend:block/%name%_pillar" },
"x": 90, "axis=z": { "model": "betterend:block/%name%_pillar", "x": 90 }
"y": 90 }
},
"axis=y": {
"model": "betterend:block/%name%_pillar"
},
"axis=z": {
"model": "betterend:block/%name%_pillar",
"x": 90
}
}
} }

View file

@ -1,10 +1,10 @@
{ {
"variants": { "variants": {
"powered=false": { "powered=false": {
"model": "betterend:block/%name%_pressure_plate_up" "model": "betterend:block/%name%_pressure_plate_up"
}, },
"powered=true": { "powered=true": {
"model": "betterend:block/%name%_pressure_plate_down" "model": "betterend:block/%name%_pressure_plate_down"
} }
} }
} }

View file

@ -1,15 +1,15 @@
{ {
"variants": { "variants": {
"type=bottom": { "type=bottom": {
"model": "betterend:block/%name%_half_slab" "model": "betterend:block/%name%_half_slab"
}, },
"type=double": { "type=double": {
"model": "betterend:block/%name%" "model": "betterend:block/%name%"
}, },
"type=top": { "type=top": {
"model": "betterend:block/%name%_half_slab", "model": "betterend:block/%name%_half_slab",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
} }
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "betterend:block/%name%_small_tiles" "model": "betterend:block/%name%_small_tiles"
} }
} }
} }

View file

@ -1,209 +1,209 @@
{ {
"variants": { "variants": {
"facing=east,half=bottom,shape=inner_left": { "facing=east,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=inner_right": { "facing=east,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs" "model": "betterend:block/%name%_inner_stairs"
}, },
"facing=east,half=bottom,shape=outer_left": { "facing=east,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=east,half=bottom,shape=outer_right": { "facing=east,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs" "model": "betterend:block/%name%_outer_stairs"
}, },
"facing=east,half=bottom,shape=straight": { "facing=east,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs" "model": "betterend:block/%name%_stairs"
}, },
"facing=east,half=top,shape=inner_left": { "facing=east,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=inner_right": { "facing=east,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=outer_left": { "facing=east,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=east,half=top,shape=outer_right": { "facing=east,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=east,half=top,shape=straight": { "facing=east,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=bottom,shape=inner_left": { "facing=north,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=inner_right": { "facing=north,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=outer_left": { "facing=north,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=north,half=bottom,shape=outer_right": { "facing=north,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=bottom,shape=straight": { "facing=north,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_left": { "facing=north,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=inner_right": { "facing=north,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=outer_left": { "facing=north,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=north,half=top,shape=outer_right": { "facing=north,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180 "x": 180
}, },
"facing=north,half=top,shape=straight": { "facing=north,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=south,half=bottom,shape=inner_left": { "facing=south,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs" "model": "betterend:block/%name%_inner_stairs"
}, },
"facing=south,half=bottom,shape=inner_right": { "facing=south,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=outer_left": { "facing=south,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs" "model": "betterend:block/%name%_outer_stairs"
}, },
"facing=south,half=bottom,shape=outer_right": { "facing=south,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=bottom,shape=straight": { "facing=south,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_left": { "facing=south,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=inner_right": { "facing=south,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=outer_left": { "facing=south,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=south,half=top,shape=outer_right": { "facing=south,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=south,half=top,shape=straight": { "facing=south,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_left": { "facing=west,half=bottom,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=inner_right": { "facing=west,half=bottom,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=outer_left": { "facing=west,half=bottom,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 90 "y": 90
}, },
"facing=west,half=bottom,shape=outer_right": { "facing=west,half=bottom,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=bottom,shape=straight": { "facing=west,half=bottom,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_left": { "facing=west,half=top,shape=inner_left": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=inner_right": { "facing=west,half=top,shape=inner_right": {
"model": "betterend:block/%name%_inner_stairs", "model": "betterend:block/%name%_inner_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=outer_left": { "facing=west,half=top,shape=outer_left": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
}, },
"facing=west,half=top,shape=outer_right": { "facing=west,half=top,shape=outer_right": {
"model": "betterend:block/%name%_outer_stairs", "model": "betterend:block/%name%_outer_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 270 "y": 270
}, },
"facing=west,half=top,shape=straight": { "facing=west,half=top,shape=straight": {
"model": "betterend:block/%name%_stairs", "model": "betterend:block/%name%_stairs",
"uvlock": true, "uvlock": true,
"x": 180, "x": 180,
"y": 180 "y": 180
} }
} }
} }

View file

@ -1,7 +1,7 @@
{ {
"variants": { "variants": {
"": { "": {
"model": "betterend:block/%name%_tile" "model": "betterend:block/%name%_tile"
} }
} }
} }

View file

@ -1,90 +1,90 @@
{ {
"multipart": [ "multipart": [
{ {
"when": { "when": {
"up": "true" "up": "true"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_post" "model": "betterend:block/%name%_wall_post"
} }
}, },
{ {
"when": { "when": {
"north": "low" "north": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:block/%name%_wall_side",
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"east": "low" "east": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:block/%name%_wall_side",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"south": "low" "south": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:block/%name%_wall_side",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"west": "low" "west": "low"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side", "model": "betterend:block/%name%_wall_side",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"north": "tall" "north": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:block/%name%_wall_side_tall",
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"east": "tall" "east": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:block/%name%_wall_side_tall",
"y": 90, "y": 90,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"south": "tall" "south": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:block/%name%_wall_side_tall",
"y": 180, "y": 180,
"uvlock": true "uvlock": true
} }
}, },
{ {
"when": { "when": {
"west": "tall" "west": "tall"
}, },
"apply": { "apply": {
"model": "betterend:block/%name%_wall_side_tall", "model": "betterend:block/%name%_wall_side_tall",
"y": 270, "y": 270,
"uvlock": true "uvlock": true
} }
} }
] ]
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%" "parent": "betterend:block/%name%"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_brick_half_slab" "parent": "betterend:block/%name%_brick_half_slab"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_brick_stairs" "parent": "betterend:block/%name%_brick_stairs"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_brick_wall_inventory" "parent": "betterend:block/%name%_brick_wall_inventory"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_bricks" "parent": "betterend:block/%name%_bricks"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_button_inventory" "parent": "betterend:block/%name%_button_inventory"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_pillar" "parent": "betterend:block/%name%_pillar"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_pressure_plate_up" "parent": "betterend:block/%name%_pressure_plate_up"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_half_slab" "parent": "betterend:block/%name%_half_slab"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_small_tiles" "parent": "betterend:block/%name%_small_tiles"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_stairs" "parent": "betterend:block/%name%_stairs"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_tile" "parent": "betterend:block/%name%_tile"
} }

View file

@ -1,3 +1,3 @@
{ {
"parent": "betterend:block/%name%_wall_inventory" "parent": "betterend:block/%name%_wall_inventory"
} }

View file

@ -1,6 +1,5 @@
pluginManagement { pluginManagement {
repositories { repositories {
jcenter()
maven { maven {
name = 'Fabric' name = 'Fabric'
url = 'https://maven.fabricmc.net/' url = 'https://maven.fabricmc.net/'
@ -8,39 +7,3 @@ pluginManagement {
gradlePluginPortal() gradlePluginPortal()
} }
} }
// #### Custom Settings ####
//Change the next line to disable local BCLib loading
def allowLocalLibUse = true
//When true, the local BCLib is also used in commandline builds
def allowLocalLibInConsoleMode = true
//The path were to look for the local BCLib
def BCLibPath = '../BCLib'
// #### Logic ####
def isIDE = properties.containsKey('android.injected.invoked.from.ide')
|| (System.getenv("XPC_SERVICE_NAME") ?: "").contains("intellij")
|| (System.getenv("XPC_SERVICE_NAME") ?: "").contains(".idea")
|| System.getenv("IDEA_INITIAL_DIRECTORY") != null
println "IntelliJ: ${isIDE}"
def BCLibFolder = new File( BCLibPath )
if( allowLocalLibUse && (isIDE || allowLocalLibInConsoleMode) && BCLibFolder.exists() ) {
println "Using local BCLib from '${BCLibFolder}' in IntelliJ"
println "If you do not want to load the local version of BClib"
println "either rename the Folder containing BCLib to something"
println "else, or set 'allowLocalLibUse' in settings.gradle"
println "to false."
println ""
println "If you receive version-errors when launching minecraft"
println "in IntelliJ, make sure you have set up gradle instead"
println "of IntelliJ to compile and run."
include ':BCLib'
project(":BCLib").projectDir = BCLibFolder
project(':BCLib').buildFileName = './bclib-composit.gradle'
}

View file

@ -3,12 +3,11 @@ package ru.betterend;
import net.fabricmc.api.ModInitializer; import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.biome.Biomes;
import ru.bclib.api.WorldDataAPI; import ru.bclib.api.WorldDataAPI;
import ru.bclib.api.biomes.BiomeAPI;
import ru.bclib.util.Logger; import ru.bclib.util.Logger;
import ru.betterend.api.BetterEndPlugin; import ru.betterend.api.BetterEndPlugin;
import ru.betterend.config.Configs; import ru.betterend.config.Configs;
import ru.betterend.effects.EndEnchantments;
import ru.betterend.effects.EndPotions; import ru.betterend.effects.EndPotions;
import ru.betterend.integration.Integrations; import ru.betterend.integration.Integrations;
import ru.betterend.recipe.AlloyingRecipes; import ru.betterend.recipe.AlloyingRecipes;
@ -19,7 +18,6 @@ import ru.betterend.recipe.InfusionRecipes;
import ru.betterend.recipe.SmithingRecipes; import ru.betterend.recipe.SmithingRecipes;
import ru.betterend.registry.EndBiomes; import ru.betterend.registry.EndBiomes;
import ru.betterend.registry.EndBlockEntities; import ru.betterend.registry.EndBlockEntities;
import ru.betterend.registry.EndEnchantments;
import ru.betterend.registry.EndEntities; import ru.betterend.registry.EndEntities;
import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndFeatures;
import ru.betterend.registry.EndPortals; import ru.betterend.registry.EndPortals;
@ -28,14 +26,14 @@ import ru.betterend.registry.EndStructures;
import ru.betterend.registry.EndTags; import ru.betterend.registry.EndTags;
import ru.betterend.util.BonemealPlants; import ru.betterend.util.BonemealPlants;
import ru.betterend.util.LootTableUtil; import ru.betterend.util.LootTableUtil;
import ru.betterend.world.generator.BetterEndBiomeSource;
import ru.betterend.world.generator.GeneratorOptions; import ru.betterend.world.generator.GeneratorOptions;
import ru.betterend.world.generator.TerrainGenerator; import ru.betterend.world.surface.SurfaceBuilders;
public class BetterEnd implements ModInitializer { public class BetterEnd implements ModInitializer {
public static final String MOD_ID = "betterend"; public static final String MOD_ID = "betterend";
public static final Logger LOGGER = new Logger(MOD_ID); public static final Logger LOGGER = new Logger(MOD_ID);
public static final boolean RUNS_FALL_FLYING_LIB = FabricLoader.getInstance().getModContainer("fallflyinglib").isPresent();
@Override @Override
public void onInitialize() { public void onInitialize() {
WorldDataAPI.registerModCache(MOD_ID); WorldDataAPI.registerModCache(MOD_ID);
@ -44,7 +42,9 @@ public class BetterEnd implements ModInitializer {
EndBlockEntities.register(); EndBlockEntities.register();
EndFeatures.register(); EndFeatures.register();
EndEntities.register(); EndEntities.register();
SurfaceBuilders.register();
EndBiomes.register(); EndBiomes.register();
BetterEndBiomeSource.register();
EndTags.register(); EndTags.register();
EndEnchantments.register(); EndEnchantments.register();
EndPotions.register(); EndPotions.register();
@ -61,22 +61,17 @@ public class BetterEnd implements ModInitializer {
FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register); FabricLoader.getInstance().getEntrypoints("betterend", BetterEndPlugin.class).forEach(BetterEndPlugin::register);
Integrations.init(); Integrations.init();
Configs.saveConfigs(); Configs.saveConfigs();
if (GeneratorOptions.useNewGenerator()) {
ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock());
ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y));
}
BiomeAPI.registerEndBiomeModification((biomeID, biome) -> {
if (!biomeID.equals(Biomes.THE_VOID.location())) {
EndStructures.addBiomeStructures(biomeID, biome);
EndFeatures.addBiomeFeatures(biomeID, biome);
}
});
} }
public static ResourceLocation makeID(String path) { public static ResourceLocation makeID(String path) {
return new ResourceLocation(MOD_ID, path); return new ResourceLocation(MOD_ID, path);
} }
public static String getStringId(String id) {
return String.format("%s:%s", MOD_ID, id);
}
public static boolean isModId(ResourceLocation id) {
return id.getNamespace().equals(MOD_ID);
}
} }

View file

@ -2,31 +2,27 @@ package ru.betterend.api;
public interface BetterEndPlugin { public interface BetterEndPlugin {
/** /**
* Alloying recipes registration. * Alloying recipes registration.
* See AlloyingRecipe.Builder for details. * See AlloyingRecipe.Builder for details.
*/ */
default void registerAlloyingRecipes() { default void registerAlloyingRecipes() {}
}
/** /**
* Smithing recipes registration. * Smithing recipes registration.
* See AnvilSmithingRecipe.Builder for details. * See AnvilSmithingRecipe.Builder for details.
*/ */
default void registerSmithingRecipes() { default void registerSmithingRecipes() {}
}
/** /**
* Additional biomes registration. * Additional biomes registration.
* See BiomeRegistry.registerBiome for details. * See BiomeRegistry.registerBiome for details.
*/ */
default void registerEndBiomes() { default void registerEndBiomes() {}
}
/** /**
* Register other mod stuff, for example, EndITEM_HAMMERS. * Register other mod stuff, for example, EndHammers.
*/ */
default void registerOthers() { default void registerOthers() {}
}
public static void register(BetterEndPlugin plugin) { public static void register(BetterEndPlugin plugin) {

View file

@ -1,16 +1,33 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.state.properties.IntegerProperty;
import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.item.EndAnvilItem;
import ru.betterend.item.material.EndToolMaterial; import ru.betterend.item.material.EndToolMaterial;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems;
public class AeterniumAnvil extends EndAnvilBlock { public class AeterniumAnvil extends EndAnvilBlock {
protected final Item anvilItem;
public AeterniumAnvil() { public AeterniumAnvil() {
super(EndBlocks.AETERNIUM_BLOCK.defaultMaterialColor(), EndToolMaterial.AETERNIUM.getLevel()); super(EndBlocks.AETERNIUM_BLOCK.defaultMaterialColor(), EndToolMaterial.AETERNIUM.getLevel());
this.anvilItem = EndItems.registerEndItem("aeternuim_anvil_item", new EndAnvilItem(this));
} }
@Override @Override
public int getMaxDurability() { public IntegerProperty getDurability() {
return 8; if (durability == null) {
this.maxDurability = 8;
this.durability = IntegerProperty.create("durability", 0, maxDurability);
}
return durability;
}
@Override
public Item asItem() {
return anvilItem;
} }
} }

View file

@ -12,15 +12,15 @@ import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
public class AeterniumBlock extends BaseBlock { public class AeterniumBlock extends BaseBlock {
public AeterniumBlock() { public AeterniumBlock() {
super(FabricBlockSettings.of(Material.METAL, MaterialColor.COLOR_GRAY) super(FabricBlockSettings.of(Material.METAL, MaterialColor.COLOR_GRAY)
.hardness(65F) .hardness(65F)
.resistance(1200F) .resistance(1200F)
.requiresCorrectToolForDrops() .requiresCorrectToolForDrops()
.sound(SoundType.NETHERITE_BLOCK)); .sound(SoundType.NETHERITE_BLOCK));
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public int getColor(BlockState state, BlockGetter world, BlockPos pos) { public int getColor(BlockState state, BlockGetter world, BlockPos pos) {
return 0xFF657A7A; return 0xFF657A7A;

View file

@ -6,13 +6,13 @@ import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
public class AmaranitaHymenophoreBlock extends BaseBlock implements RenderLayerProvider { public class AmaranitaHymenophoreBlock extends BaseBlock implements IRenderTyped {
public AmaranitaHymenophoreBlock() { public AmaranitaHymenophoreBlock() {
super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).sound(SoundType.WOOD)); super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).sound(SoundType.WOOD));
} }
@Override @Override
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.CUTOUT; return BCLRenderLayer.CUTOUT;

View file

@ -7,6 +7,6 @@ import ru.bclib.blocks.BaseRotatedPillarBlock;
public class AmaranitaStemBlock extends BaseRotatedPillarBlock { public class AmaranitaStemBlock extends BaseRotatedPillarBlock {
public AmaranitaStemBlock() { public AmaranitaStemBlock() {
super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).mapColor(MaterialColor.COLOR_LIGHT_GREEN)); super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).materialColor(MaterialColor.COLOR_LIGHT_GREEN));
} }
} }

View file

@ -7,6 +7,6 @@ import ru.bclib.blocks.BaseBlock;
public class AmberBlock extends BaseBlock { public class AmberBlock extends BaseBlock {
public AmberBlock() { public AmberBlock() {
super(FabricBlockSettings.copyOf(Blocks.DIAMOND_BLOCK).mapColor(MaterialColor.COLOR_YELLOW)); super(FabricBlockSettings.copyOf(Blocks.DIAMOND_BLOCK).materialColor(MaterialColor.COLOR_YELLOW));
} }
} }

View file

@ -1,14 +1,16 @@
package ru.betterend.blocks; 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.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
@ -19,17 +21,12 @@ import ru.bclib.util.MHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndParticles;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class AncientEmeraldIceBlock extends BaseBlock { public class AncientEmeraldIceBlock extends BaseBlock {
public AncientEmeraldIceBlock() { public AncientEmeraldIceBlock() {
super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).randomTicks()); super(FabricBlockSettings.copyOf(Blocks.BLUE_ICE).randomTicks());
} }
@Override @Override
@SuppressWarnings("deprecation")
public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) {
Direction dir = BlocksHelper.randomDirection(random); Direction dir = BlocksHelper.randomDirection(random);
@ -57,17 +54,7 @@ public class AncientEmeraldIceBlock extends BaseBlock {
} }
private void makeParticles(ServerLevel world, BlockPos pos, Random random) { private void makeParticles(ServerLevel world, BlockPos pos, Random random) {
world.sendParticles( world.sendParticles(EndParticles.SNOWFLAKE, pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5, 20, 0.5, 0.5, 0.5, 0);
EndParticles.SNOWFLAKE,
pos.getX() + 0.5,
pos.getY() + 0.5,
pos.getZ() + 0.5,
20,
0.5,
0.5,
0.5,
0
);
} }
@Override @Override
@ -80,10 +67,4 @@ public class AncientEmeraldIceBlock extends BaseBlock {
return Collections.emptyList(); return Collections.emptyList();
} }
} }
@Override
public void stepOn(Level level, BlockPos blockPos, BlockState blockState, Entity entity) {
super.stepOn(level, blockPos, blockState, entity);
entity.setIsInPowderSnow(true);
}
} }

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.block.BlockColor;
@ -11,56 +14,43 @@ import net.minecraft.util.Mth;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.block.AbstractGlassBlock; import net.minecraft.world.level.block.AbstractGlassBlock;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.api.TagAPI;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.CustomColorProvider; import ru.bclib.interfaces.IColorProvider;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.util.ColorUtil; import ru.bclib.util.ColorUtil;
import ru.bclib.util.MHelper; import ru.bclib.util.MHelper;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
import ru.betterend.registry.EndTags;
import java.util.List; public class AuroraCrystalBlock extends AbstractGlassBlock implements IRenderTyped, IColorProvider {
public class AuroraCrystalBlock extends AbstractGlassBlock implements RenderLayerProvider, CustomColorProvider {
public static final Vec3i[] COLORS; public static final Vec3i[] COLORS;
private static final int MIN_DROP = 1; private static final int MIN_DROP = 1;
private static final int MAX_DROP = 4; private static final int MAX_DROP = 4;
public AuroraCrystalBlock() { public AuroraCrystalBlock() {
super(FabricBlockSettings super(FabricBlockSettings.of(Material.GLASS)
.of(Material.GLASS) .breakByTool(FabricToolTags.PICKAXES)
.breakByTool(FabricToolTags.PICKAXES) .breakByTool(EndTags.HAMMERS)
.breakByTool(TagAPI.ITEM_HAMMERS) .hardness(1F)
.hardness(1F) .resistance(1F)
.resistance(1F) .luminance(15)
.luminance(15) .noOcclusion()
.noOcclusion() .isSuffocating((state, world, pos) -> false)
.isSuffocating((state, world, pos) -> false) .sound(SoundType.GLASS));
.sound(SoundType.GLASS));
} }
@Override
@Deprecated
public VoxelShape getVisualShape(BlockState blockState, BlockGetter blockGetter, BlockPos blockPos, CollisionContext collisionContext) {
return this.getCollisionShape(blockState, blockGetter, blockPos, collisionContext);
}
@Override @Override
public BlockColor getProvider() { public BlockColor getProvider() {
return (state, world, pos, tintIndex) -> { return (state, world, pos, tintIndex) -> {
if (pos == null) { if (pos == null) {
pos = BlockPos.ZERO; pos = BlockPos.ZERO;
} };
;
long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ(); long i = (long) pos.getX() + (long) pos.getY() + (long) pos.getZ();
double delta = i * 0.1; double delta = i * 0.1;
@ -79,21 +69,20 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements RenderLaye
return ColorUtil.color(r, g, b); return ColorUtil.color(r, g, b);
}; };
} }
@Override @Override
public ItemColor getItemProvider() { public ItemColor getItemProvider() {
return (stack, tintIndex) -> { return (stack, tintIndex) -> {
return ColorUtil.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ()); return ColorUtil.color(COLORS[3].getX(), COLORS[3].getY(), COLORS[3].getZ());
}; };
} }
@Override @Override
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.TRANSLUCENT; return BCLRenderLayer.TRANSLUCENT;
} }
@Override @Override
@SuppressWarnings("deprecation")
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
ItemStack tool = builder.getParameter(LootContextParams.TOOL); ItemStack tool = builder.getParameter(LootContextParams.TOOL);
if (tool != null && tool.isCorrectToolForDrops(state)) { if (tool != null && tool.isCorrectToolForDrops(state)) {
@ -110,8 +99,7 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements RenderLaye
return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, max)); return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, max));
} }
count = MHelper.randRange(min, max, MHelper.RANDOM); count = MHelper.randRange(min, max, MHelper.RANDOM);
} } else {
else {
count = MHelper.randRange(MIN_DROP, MAX_DROP, MHelper.RANDOM); count = MHelper.randRange(MIN_DROP, MAX_DROP, MHelper.RANDOM);
} }
return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, count)); return Lists.newArrayList(new ItemStack(EndItems.CRYSTAL_SHARDS, count));
@ -121,10 +109,10 @@ public class AuroraCrystalBlock extends AbstractGlassBlock implements RenderLaye
static { static {
COLORS = new Vec3i[] { COLORS = new Vec3i[] {
new Vec3i(247, 77, 161), new Vec3i(247, 77, 161),
new Vec3i(120, 184, 255), new Vec3i(120, 184, 255),
new Vec3i(120, 255, 168), new Vec3i(120, 255, 168),
new Vec3i(243, 58, 255) new Vec3i(243, 58, 255)
}; };
} }
} }

View file

@ -21,21 +21,16 @@ public class BlueVineLanternBlock extends BaseBlock {
public static final BooleanProperty NATURAL = BlockProperties.NATURAL; public static final BooleanProperty NATURAL = BlockProperties.NATURAL;
public BlueVineLanternBlock() { public BlueVineLanternBlock() {
super(FabricBlockSettings.of(Material.WOOD) super(FabricBlockSettings.of(Material.WOOD).breakByTool(FabricToolTags.AXES).luminance(15).sound(SoundType.WART_BLOCK));
.breakByTool(FabricToolTags.AXES)
.luminance(15)
.sound(SoundType.WART_BLOCK));
this.registerDefaultState(this.stateDefinition.any().setValue(NATURAL, false)); this.registerDefaultState(this.stateDefinition.any().setValue(NATURAL, false));
} }
@Override @Override
@SuppressWarnings("deprecation")
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
return !state.getValue(NATURAL) || world.getBlockState(pos.below()).getBlock() == EndBlocks.BLUE_VINE; return !state.getValue(NATURAL) || world.getBlockState(pos.below()).getBlock() == EndBlocks.BLUE_VINE;
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
if (!canSurvive(state, world, pos)) { if (!canSurvive(state, world, pos)) {
return Blocks.AIR.defaultBlockState(); return Blocks.AIR.defaultBlockState();

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.world.level.WorldGenLevel; 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.blocks.basis.FurBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class BlueVineSeedBlock extends EndPlantWithAgeBlock { public class BlueVineSeedBlock extends EndPlantWithAgeBlock {
@Override @Override
public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { public void growAdult(WorldGenLevel world, Random random, BlockPos pos) {
@ -22,51 +22,24 @@ public class BlueVineSeedBlock extends EndPlantWithAgeBlock {
if (h < height + 1) { if (h < height + 1) {
return; return;
} }
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.BLUE_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.BOTTOM));
world,
pos,
EndBlocks.BLUE_VINE.defaultBlockState()
.setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.BOTTOM)
);
for (int i = 1; i < height; i++) { for (int i = 1; i < height; i++) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos.above(i), EndBlocks.BLUE_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.MIDDLE));
world,
pos.above(i),
EndBlocks.BLUE_VINE.defaultBlockState()
.setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.MIDDLE)
);
} }
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos.above(height), EndBlocks.BLUE_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP));
world,
pos.above(height),
EndBlocks.BLUE_VINE.defaultBlockState()
.setValue(BlockProperties.TRIPLE_SHAPE, BlockProperties.TripleShape.TOP)
);
placeLantern(world, pos.above(height + 1)); placeLantern(world, pos.above(height + 1));
} }
private void placeLantern(WorldGenLevel world, BlockPos pos) { private void placeLantern(WorldGenLevel world, BlockPos pos) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.BLUE_VINE_LANTERN.defaultBlockState().setValue(BlueVineLanternBlock.NATURAL, true));
world, for (Direction dir: BlocksHelper.HORIZONTAL) {
pos,
EndBlocks.BLUE_VINE_LANTERN.defaultBlockState().setValue(BlueVineLanternBlock.NATURAL, true)
);
for (Direction dir : BlocksHelper.HORIZONTAL) {
BlockPos p = pos.relative(dir); BlockPos p = pos.relative(dir);
if (world.isEmptyBlock(p)) { if (world.isEmptyBlock(p)) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, p, EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, dir));
world,
p,
EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, dir)
);
} }
} }
if (world.isEmptyBlock(pos.above())) { if (world.isEmptyBlock(pos.above())) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos.above(), EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, Direction.UP));
world,
pos.above(),
EndBlocks.BLUE_VINE_FUR.defaultBlockState().setValue(FurBlock.FACING, Direction.UP)
);
} }
} }

View file

@ -1,6 +1,10 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import java.util.Random;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
@ -14,9 +18,6 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.blocks.basis.EndPlantBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.List;
import java.util.Random;
public class BoluxMushroomBlock extends EndPlantBlock { public class BoluxMushroomBlock extends EndPlantBlock {
private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 9, 15); private static final VoxelShape SHAPE = Block.box(1, 0, 1, 15, 9, 15);
@ -33,7 +34,7 @@ public class BoluxMushroomBlock extends EndPlantBlock {
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return SHAPE; return SHAPE;
} }
@Override @Override
public BlockBehaviour.OffsetType getOffsetType() { public BlockBehaviour.OffsetType getOffsetType() {
return BlockBehaviour.OffsetType.NONE; return BlockBehaviour.OffsetType.NONE;
@ -43,7 +44,7 @@ public class BoluxMushroomBlock extends EndPlantBlock {
public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) {
return false; return false;
} }
@Override @Override
public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) {
return false; return false;

View file

@ -1,5 +1,9 @@
package ru.betterend.blocks; 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.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -16,19 +20,16 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.Fluids;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import org.jetbrains.annotations.Nullable;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class BrimstoneBlock extends BaseBlock { public class BrimstoneBlock extends BaseBlock {
public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE; public static final BooleanProperty ACTIVATED = BlockProperties.ACTIVE;
public BrimstoneBlock() { public BrimstoneBlock() {
super(FabricBlockSettings.copyOf(Blocks.END_STONE).mapColor(MaterialColor.COLOR_BROWN).randomTicks()); super(FabricBlockSettings.copyOf(Blocks.END_STONE).materialColor(MaterialColor.COLOR_BROWN).randomTicks());
registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false)); registerDefaultState(stateDefinition.any().setValue(ACTIVATED, false));
} }
@ -36,7 +37,7 @@ public class BrimstoneBlock extends BaseBlock {
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> stateManager) { protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> stateManager) {
stateManager.add(ACTIVATED); stateManager.add(ACTIVATED);
} }
@Override @Override
public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) { public void setPlacedBy(Level world, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack itemStack) {
if (world.isClientSide()) { if (world.isClientSide()) {
@ -64,10 +65,9 @@ public class BrimstoneBlock extends BaseBlock {
} }
@Override @Override
@SuppressWarnings("deprecation")
public void tick(BlockState state, ServerLevel world, BlockPos pos, Random random) { public void tick(BlockState state, ServerLevel world, BlockPos pos, Random random) {
boolean deactivate = true; boolean deactivate = true;
for (Direction dir : BlocksHelper.DIRECTIONS) { for (Direction dir: BlocksHelper.DIRECTIONS) {
if (world.getFluidState(pos.relative(dir)).getType().equals(Fluids.WATER)) { if (world.getFluidState(pos.relative(dir)).getType().equals(Fluids.WATER)) {
deactivate = false; deactivate = false;
break; break;
@ -89,9 +89,9 @@ public class BrimstoneBlock extends BaseBlock {
} }
else if (sideState.getFluidState().getType() == Fluids.WATER) { else if (sideState.getFluidState().getType() == Fluids.WATER) {
BlockState crystal = EndBlocks.SULPHUR_CRYSTAL.defaultBlockState() BlockState crystal = EndBlocks.SULPHUR_CRYSTAL.defaultBlockState()
.setValue(SulphurCrystalBlock.FACING, dir) .setValue(SulphurCrystalBlock.FACING, dir)
.setValue(SulphurCrystalBlock.WATERLOGGED, true) .setValue(SulphurCrystalBlock.WATERLOGGED, true)
.setValue(SulphurCrystalBlock.AGE, 0); .setValue(SulphurCrystalBlock.AGE, 0);
world.setBlockAndUpdate(side, crystal); world.setBlockAndUpdate(side, crystal);
} }
} }

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@ -17,25 +19,23 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import ru.betterend.blocks.basis.EndUnderwaterPlantBlock; import ru.betterend.blocks.basis.EndUnderwaterPlantBlock;
import java.util.Random;
public class BubbleCoralBlock extends EndUnderwaterPlantBlock { public class BubbleCoralBlock extends EndUnderwaterPlantBlock {
private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 14, 16); private static final VoxelShape SHAPE = Block.box(0, 0, 0, 16, 14, 16);
public BubbleCoralBlock() { public BubbleCoralBlock() {
super(FabricBlockSettings.of(Material.WATER_PLANT) super(FabricBlockSettings.of(Material.WATER_PLANT)
.breakByTool(FabricToolTags.SHEARS) .breakByTool(FabricToolTags.SHEARS)
.breakByHand(true) .breakByHand(true)
.sound(SoundType.CORAL_BLOCK) .sound(SoundType.CORAL_BLOCK)
.noCollission()); .noCollission());
} }
@Override @Override
public BlockBehaviour.OffsetType getOffsetType() { public BlockBehaviour.OffsetType getOffsetType() {
return BlockBehaviour.OffsetType.NONE; return BlockBehaviour.OffsetType.NONE;
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { public void animateTick(BlockState state, Level world, BlockPos pos, Random random) {
double x = pos.getX() + random.nextDouble(); double x = pos.getX() + random.nextDouble();
@ -53,7 +53,7 @@ public class BubbleCoralBlock extends EndUnderwaterPlantBlock {
public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) {
return false; return false;
} }
@Override @Override
public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) {
return false; return false;

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
@ -13,8 +16,6 @@ import ru.bclib.util.MHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
import java.util.List;
public class BulbVineBlock extends BaseVineBlock { public class BulbVineBlock extends BaseVineBlock {
public BulbVineBlock() { public BulbVineBlock() {
super(15, true); super(15, true);
@ -41,7 +42,6 @@ public class BulbVineBlock extends BaseVineBlock {
@Override @Override
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
boolean canPlace = super.canSurvive(state, world, pos); boolean canPlace = super.canSurvive(state, world, pos);
return (state.is(this) && state.getValue(SHAPE) == TripleShape.BOTTOM) ? canPlace : canPlace && world.getBlockState( return (state.is(this) && state.getValue(SHAPE) == TripleShape.BOTTOM) ? canPlace : canPlace && world.getBlockState(pos.below()).is(this);
pos.below()).is(this);
} }
} }

View file

@ -1,8 +1,12 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Map;
import java.util.Optional;
import org.jetbrains.annotations.Nullable;
import com.google.common.collect.Maps; 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.object.builder.v1.block.FabricBlockSettings;
import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags; import net.fabricmc.fabric.api.tool.attribute.v1.FabricToolTags;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
@ -16,30 +20,26 @@ import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape; 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.models.ModelsHelper;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.interfaces.RenderLayerProvider;
import ru.betterend.blocks.basis.EndLanternBlock; import ru.betterend.blocks.basis.EndLanternBlock;
import ru.betterend.client.models.Patterns; import ru.betterend.client.models.Patterns;
import java.util.Map; public class BulbVineLanternBlock extends EndLanternBlock implements IRenderTyped, BlockModelProvider {
import java.util.Optional;
public class BulbVineLanternBlock extends EndLanternBlock implements RenderLayerProvider, BlockModelProvider {
private static final VoxelShape SHAPE_CEIL = Block.box(4, 4, 4, 12, 16, 12); 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); private static final VoxelShape SHAPE_FLOOR = Block.box(4, 0, 4, 12, 12, 12);
public BulbVineLanternBlock() { public BulbVineLanternBlock() {
this(FabricBlockSettings.of(Material.METAL) this(FabricBlockSettings.of(Material.METAL)
.hardness(1) .hardness(1)
.resistance(1) .resistance(1)
.breakByTool(FabricToolTags.PICKAXES) .breakByTool(FabricToolTags.PICKAXES)
.mapColor(MaterialColor.COLOR_LIGHT_GRAY) .materialColor(MaterialColor.COLOR_LIGHT_GRAY)
.luminance(15) .luminance(15)
.requiresCorrectToolForDrops() .requiresCorrectToolForDrops()
.sound(SoundType.LANTERN)); .sound(SoundType.LANTERN));
} }
public BulbVineLanternBlock(Properties settings) { public BulbVineLanternBlock(Properties settings) {
@ -47,26 +47,23 @@ public class BulbVineLanternBlock extends EndLanternBlock implements RenderLayer
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL; return state.getValue(IS_FLOOR) ? SHAPE_FLOOR : SHAPE_CEIL;
} }
@Override @Override
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.CUTOUT; return BCLRenderLayer.CUTOUT;
} }
@Override @Override
@Environment(EnvType.CLIENT)
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
Map<String, String> textures = Maps.newHashMap(); Map<String, String> textures = Maps.newHashMap();
textures.put("%glow%", getGlowTexture()); textures.put("%glow%", getGlowTexture());
textures.put("%metal%", getMetalTexture(resourceLocation)); textures.put("%metal%", getMetalTexture(resourceLocation));
Optional<String> pattern = blockState.getValue(IS_FLOOR) ? Patterns.createJson( Optional<String> pattern = blockState.getValue(IS_FLOOR) ?
Patterns.BLOCK_BULB_LANTERN_FLOOR, Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_FLOOR, textures) :
textures Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, textures);
) : Patterns.createJson(Patterns.BLOCK_BULB_LANTERN_CEIL, textures);
return ModelsHelper.fromPattern(pattern); return ModelsHelper.fromPattern(pattern);
} }
@ -79,5 +76,5 @@ public class BulbVineLanternBlock extends EndLanternBlock implements RenderLayer
protected String getGlowTexture() { protected String getGlowTexture() {
return "bulb_vine_lantern_bulb"; return "bulb_vine_lantern_bulb";
} }
} }

View file

@ -3,20 +3,20 @@ package ru.betterend.blocks;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.color.block.BlockColor; import net.minecraft.client.color.block.BlockColor;
import net.minecraft.client.color.item.ItemColor; import net.minecraft.client.color.item.ItemColor;
import ru.bclib.interfaces.CustomColorProvider; import ru.bclib.interfaces.IColorProvider;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.bclib.util.ColorUtil; import ru.bclib.util.ColorUtil;
public class BulbVineLanternColoredBlock extends BulbVineLanternBlock implements CustomColorProvider { public class BulbVineLanternColoredBlock extends BulbVineLanternBlock implements IColorProvider {
public BulbVineLanternColoredBlock(FabricBlockSettings settings) { public BulbVineLanternColoredBlock(FabricBlockSettings settings) {
super(settings); super(settings);
} }
@Override @Override
public BlockColor getProvider() { public BlockColor getProvider() {
return (state, world, pos, tintIndex) -> getColor(); return (state, world, pos, tintIndex) -> getColor();
} }
@Override @Override
public ItemColor getItemProvider() { public ItemColor getItemProvider() {
return (stack, tintIndex) -> getColor(); return (stack, tintIndex) -> getColor();

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.tags.BlockTags; import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;
@ -12,37 +14,23 @@ import ru.bclib.util.BlocksHelper;
import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.blocks.basis.EndPlantWithAgeBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class BulbVineSeedBlock extends EndPlantWithAgeBlock { public class BulbVineSeedBlock extends EndPlantWithAgeBlock {
@Override @Override
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
BlockState up = world.getBlockState(pos.above()); BlockState up = world.getBlockState(pos.above());
return up.is(TagAPI.BLOCK_GEN_TERRAIN) || up.is(BlockTags.LOGS) || up.is(BlockTags.LEAVES); return up.is(TagAPI.GEN_TERRAIN) || up.is(BlockTags.LOGS) || up.is(BlockTags.LEAVES);
} }
@Override @Override
public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { public void growAdult(WorldGenLevel world, Random random, BlockPos pos) {
int h = BlocksHelper.downRay(world, pos, random.nextInt(24)) - 1; int h = BlocksHelper.downRay(world, pos, random.nextInt(24)) - 1;
if (h > 2) { if (h > 2) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.TOP));
world,
pos,
EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.TOP)
);
for (int i = 1; i < h; i++) { for (int i = 1; i < h; i++) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos.below(i), EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.MIDDLE));
world,
pos.below(i),
EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.MIDDLE)
);
} }
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos.below(h), EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.BOTTOM));
world,
pos.below(h),
EndBlocks.BULB_VINE.defaultBlockState().setValue(BlockProperties.TRIPLE_SHAPE, TripleShape.BOTTOM)
);
} }
} }
} }

View file

@ -1,5 +1,8 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
@ -16,13 +19,10 @@ import net.minecraft.world.phys.shapes.VoxelShape;
import ru.bclib.blocks.BaseBlockNotFull; import ru.bclib.blocks.BaseBlockNotFull;
import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Collections; public class CavePumpkinBlock extends BaseBlockNotFull implements IRenderTyped {
import java.util.List;
public class CavePumpkinBlock extends BaseBlockNotFull implements RenderLayerProvider {
public static final BooleanProperty SMALL = BlockProperties.SMALL; public static final BooleanProperty SMALL = BlockProperties.SMALL;
private static final VoxelShape SHAPE_SMALL; private static final VoxelShape SHAPE_SMALL;
private static final VoxelShape SHAPE_BIG; private static final VoxelShape SHAPE_BIG;
@ -41,17 +41,15 @@ public class CavePumpkinBlock extends BaseBlockNotFull implements RenderLayerPro
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.CUTOUT; return BCLRenderLayer.CUTOUT;
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) { public VoxelShape getShape(BlockState state, BlockGetter world, BlockPos pos, CollisionContext context) {
return state.getValue(SMALL) ? SHAPE_SMALL : SHAPE_BIG; return state.getValue(SMALL) ? SHAPE_SMALL : SHAPE_BIG;
} }
@Override @Override
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
return state.getValue(SMALL) ? Collections.singletonList(new ItemStack(EndBlocks.CAVE_PUMPKIN_SEED)) : Collections return state.getValue(SMALL) ? Collections.singletonList(new ItemStack(EndBlocks.CAVE_PUMPKIN_SEED)) : Collections.singletonList(new ItemStack(this));
.singletonList(new ItemStack(this));
} }
static { static {
@ -60,7 +58,7 @@ public class CavePumpkinBlock extends BaseBlockNotFull implements RenderLayerPro
VoxelShape top = Block.box(5, 15, 5, 11, 16, 11); VoxelShape top = Block.box(5, 15, 5, 11, 16, 11);
SHAPE_BIG = Shapes.or(lantern, cap, top); 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); cap = Block.box(4, 12, 4, 12, 15, 12);
top = Block.box(6, 15, 6, 10, 16, 10); top = Block.box(6, 15, 6, 10, 16, 10);
SHAPE_SMALL = Shapes.or(lantern, cap, top); SHAPE_SMALL = Shapes.or(lantern, cap, top);

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerLevel;
@ -16,8 +18,6 @@ import ru.bclib.blocks.BlockProperties;
import ru.betterend.blocks.basis.EndPlantWithAgeBlock; import ru.betterend.blocks.basis.EndPlantWithAgeBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class CavePumpkinVineBlock extends EndPlantWithAgeBlock { public class CavePumpkinVineBlock extends EndPlantWithAgeBlock {
private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 16, 12); private static final VoxelShape SHAPE = Block.box(4, 0, 4, 12, 16, 12);
@ -31,26 +31,21 @@ public class CavePumpkinVineBlock extends EndPlantWithAgeBlock {
public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) { public void performBonemeal(ServerLevel world, Random random, BlockPos pos, BlockState state) {
int age = state.getValue(AGE); int age = state.getValue(AGE);
BlockState down = world.getBlockState(pos.below()); BlockState down = world.getBlockState(pos.below());
if (down.getMaterial() if (down.getMaterial().isReplaceable() || (down.is(EndBlocks.CAVE_PUMPKIN) && down.getValue(BlockProperties.SMALL))) {
.isReplaceable() || (down.is(EndBlocks.CAVE_PUMPKIN) && down.getValue(BlockProperties.SMALL))) {
if (age < 3) { if (age < 3) {
world.setBlockAndUpdate(pos, state.setValue(AGE, age + 1)); world.setBlockAndUpdate(pos, state.setValue(AGE, age + 1));
} }
if (age == 2) { if (age == 2) {
world.setBlockAndUpdate( world.setBlockAndUpdate(pos.below(), EndBlocks.CAVE_PUMPKIN.defaultBlockState().setValue(BlockProperties.SMALL, true));
pos.below(),
EndBlocks.CAVE_PUMPKIN.defaultBlockState().setValue(BlockProperties.SMALL, true)
);
} }
else if (age == 3) { else if (age == 3) {
world.setBlockAndUpdate(pos.below(), EndBlocks.CAVE_PUMPKIN.defaultBlockState()); world.setBlockAndUpdate(pos.below(), EndBlocks.CAVE_PUMPKIN.defaultBlockState());
} }
} }
} }
@Override @Override
public void growAdult(WorldGenLevel world, Random random, BlockPos pos) { public void growAdult(WorldGenLevel world, Random random, BlockPos pos) {}
}
@Override @Override
public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { public BlockState updateShape(BlockState state, Direction facing, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) {
@ -63,7 +58,7 @@ public class CavePumpkinVineBlock extends EndPlantWithAgeBlock {
} }
return state; return state;
} }
@Override @Override
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return SHAPE; return SHAPE;

View file

@ -1,8 +1,13 @@
package ru.betterend.blocks; 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 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.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.client.resources.model.BlockModelRotation; import net.minecraft.client.resources.model.BlockModelRotation;
@ -16,27 +21,18 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.Shapes;
import net.minecraft.world.phys.shapes.VoxelShape; import net.minecraft.world.phys.shapes.VoxelShape;
import org.jetbrains.annotations.Nullable;
import ru.bclib.blocks.BaseAttachedBlock; import ru.bclib.blocks.BaseAttachedBlock;
import ru.bclib.client.models.BlockModelProvider;
import ru.bclib.client.models.ModelsHelper; import ru.bclib.client.models.ModelsHelper;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.interfaces.RenderLayerProvider;
import ru.betterend.client.models.Patterns; import ru.betterend.client.models.Patterns;
import java.util.EnumMap; public class ChandelierBlock extends BaseAttachedBlock implements IRenderTyped, BlockModelProvider {
import java.util.Map;
import java.util.Optional;
public class ChandelierBlock extends BaseAttachedBlock implements RenderLayerProvider, BlockModelProvider {
private static final EnumMap<Direction, VoxelShape> BOUNDING_SHAPES = Maps.newEnumMap(Direction.class); private static final EnumMap<Direction, VoxelShape> BOUNDING_SHAPES = Maps.newEnumMap(Direction.class);
public ChandelierBlock(Block source) { public ChandelierBlock(Block source) {
super(FabricBlockSettings.copyOf(source) super(FabricBlockSettings.copyOf(source).luminance(15).noCollission().noOcclusion().requiresCorrectToolForDrops());
.luminance(15)
.noCollission()
.noOcclusion()
.requiresCorrectToolForDrops());
} }
@Override @Override
@ -45,19 +41,16 @@ public class ChandelierBlock extends BaseAttachedBlock implements RenderLayerPro
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return BOUNDING_SHAPES.get(state.getValue(FACING)); return BOUNDING_SHAPES.get(state.getValue(FACING));
} }
@Override @Override
@Environment(EnvType.CLIENT)
public BlockModel getItemModel(ResourceLocation blockId) { public BlockModel getItemModel(ResourceLocation blockId) {
return ModelsHelper.createItemModel(blockId); return ModelsHelper.createItemModel(blockId);
} }
@Override @Override
@Environment(EnvType.CLIENT)
public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) { public @Nullable BlockModel getBlockModel(ResourceLocation resourceLocation, BlockState blockState) {
Optional<String> pattern; Optional<String> pattern;
switch (blockState.getValue(FACING)) { switch (blockState.getValue(FACING)) {
@ -72,9 +65,8 @@ public class ChandelierBlock extends BaseAttachedBlock implements RenderLayerPro
} }
return ModelsHelper.fromPattern(pattern); return ModelsHelper.fromPattern(pattern);
} }
@Override @Override
@Environment(EnvType.CLIENT)
public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) { public UnbakedModel getModelVariant(ResourceLocation stateId, BlockState blockState, Map<ResourceLocation, UnbakedModel> modelCache) {
String state = "_wall"; String state = "_wall";
BlockModelRotation rotation = BlockModelRotation.X0_Y0; BlockModelRotation rotation = BlockModelRotation.X0_Y0;
@ -101,7 +93,7 @@ public class ChandelierBlock extends BaseAttachedBlock implements RenderLayerPro
registerBlockModel(stateId, modelId, blockState, modelCache); registerBlockModel(stateId, modelId, blockState, modelCache);
return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false); return ModelsHelper.createMultiVariant(modelId, rotation.getRotation(), false);
} }
static { static {
BOUNDING_SHAPES.put(Direction.UP, Block.box(5, 0, 5, 11, 13, 11)); BOUNDING_SHAPES.put(Direction.UP, Block.box(5, 0, 5, 11, 13, 11));
BOUNDING_SHAPES.put(Direction.DOWN, Block.box(5, 3, 5, 11, 16, 11)); BOUNDING_SHAPES.put(Direction.DOWN, Block.box(5, 3, 5, 11, 16, 11));

View file

@ -8,7 +8,7 @@ import net.minecraft.world.level.material.Fluids;
import ru.betterend.blocks.basis.EndUnderwaterPlantBlock; import ru.betterend.blocks.basis.EndUnderwaterPlantBlock;
public class CharniaBlock extends EndUnderwaterPlantBlock { public class CharniaBlock extends EndUnderwaterPlantBlock {
@Override @Override
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
return canSupportCenter(world, pos.below(), Direction.UP) && world.getFluidState(pos).getType() == Fluids.WATER; return canSupportCenter(world, pos.below(), Direction.UP) && world.getFluidState(pos).getType() == Fluids.WATER;

View file

@ -1,5 +1,8 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Collections;
import java.util.List;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.item.enchantment.EnchantmentHelper;
@ -10,16 +13,13 @@ import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import java.util.Collections; public class DenseEmeraldIceBlock extends BaseBlock implements IRenderTyped {
import java.util.List;
public class DenseEmeraldIceBlock extends BaseBlock implements RenderLayerProvider {
public DenseEmeraldIceBlock() { public DenseEmeraldIceBlock() {
super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE)); super(FabricBlockSettings.copyOf(Blocks.PACKED_ICE));
} }
@Override @Override
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.TRANSLUCENT; return BCLRenderLayer.TRANSLUCENT;

View file

@ -2,24 +2,24 @@ package ru.betterend.blocks;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import ru.betterend.blocks.basis.PottableFeatureSapling; import net.minecraft.world.level.levelgen.feature.Feature;
import ru.bclib.blocks.FeatureSaplingBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndFeatures; import ru.betterend.registry.EndFeatures;
public class DragonTreeSaplingBlock extends PottableFeatureSapling { public class DragonTreeSaplingBlock extends FeatureSaplingBlock {
public DragonTreeSaplingBlock() { public DragonTreeSaplingBlock() {
super((state)->EndFeatures.DRAGON_TREE.getFeature()); super();
}
@Override
protected Feature<?> getFeature() {
return EndFeatures.DRAGON_TREE.getFeature();
} }
@Override @Override
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
return world.getBlockState(pos.below()).is(EndBlocks.SHADOW_GRASS); return world.getBlockState(pos.below()).is(EndBlocks.SHADOW_GRASS);
} }
@Override
public boolean canPlantOn(Block block) {
return block == EndBlocks.SHADOW_GRASS;
}
} }

View file

@ -1,7 +1,11 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import net.fabricmc.api.EnvType; import java.util.Collections;
import net.fabricmc.api.Environment; 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.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.client.renderer.block.model.BlockModel; import net.minecraft.client.renderer.block.model.BlockModel;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
@ -20,25 +24,20 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; 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.client.render.BCLRenderLayer;
import ru.bclib.interfaces.BlockModelProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.interfaces.RenderLayerProvider;
import java.util.Collections; public class EmeraldIceBlock extends HalfTransparentBlock implements IRenderTyped, BlockModelProvider {
import java.util.List;
import java.util.Random;
public class EmeraldIceBlock extends HalfTransparentBlock implements RenderLayerProvider, BlockModelProvider {
public EmeraldIceBlock() { public EmeraldIceBlock() {
super(FabricBlockSettings.copyOf(Blocks.ICE)); super(FabricBlockSettings.copyOf(Blocks.ICE));
} }
@Override @Override
public BCLRenderLayer getRenderLayer() { public BCLRenderLayer getRenderLayer() {
return BCLRenderLayer.TRANSLUCENT; return BCLRenderLayer.TRANSLUCENT;
} }
@Override @Override
public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) { public void playerDestroy(Level world, Player player, BlockPos pos, BlockState state, @Nullable BlockEntity blockEntity, ItemStack stack) {
super.playerDestroy(world, player, pos, state, blockEntity, stack); super.playerDestroy(world, player, pos, state, blockEntity, stack);
@ -47,24 +46,23 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements RenderLayer
world.removeBlock(pos, false); world.removeBlock(pos, false);
return; return;
} }
Material material = world.getBlockState(pos.below()).getMaterial(); Material material = world.getBlockState(pos.below()).getMaterial();
if (material.blocksMotion() || material.isLiquid()) { if (material.blocksMotion() || material.isLiquid()) {
world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState()); world.setBlockAndUpdate(pos, Blocks.WATER.defaultBlockState());
} }
} }
} }
@Override @Override
@SuppressWarnings("deprecation")
public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) {
if (world.getBrightness(LightLayer.BLOCK, pos) > 11 - state.getLightBlock(world, pos)) { if (world.getBrightness(LightLayer.BLOCK, pos) > 11 - state.getLightBlock(world, pos)) {
this.melt(state, world, pos); this.melt(state, world, pos);
} }
} }
protected void melt(BlockState state, Level world, BlockPos pos) { protected void melt(BlockState state, Level world, BlockPos pos) {
if (world.dimensionType().ultraWarm()) { if (world.dimensionType().ultraWarm()) {
world.removeBlock(pos, false); world.removeBlock(pos, false);
@ -76,7 +74,6 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements RenderLayer
} }
@Override @Override
@SuppressWarnings("deprecation")
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
ItemStack tool = builder.getOptionalParameter(LootContextParams.TOOL); ItemStack tool = builder.getOptionalParameter(LootContextParams.TOOL);
if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) != 0) { if (tool != null && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) != 0) {
@ -86,9 +83,8 @@ public class EmeraldIceBlock extends HalfTransparentBlock implements RenderLayer
return Collections.emptyList(); return Collections.emptyList();
} }
} }
@Override @Override
@Environment(EnvType.CLIENT)
public BlockModel getItemModel(ResourceLocation resourceLocation) { public BlockModel getItemModel(ResourceLocation resourceLocation) {
return getBlockModel(resourceLocation, defaultBlockState()); return getBlockModel(resourceLocation, defaultBlockState());
} }

View file

@ -12,11 +12,8 @@ public class EndBlockProperties extends BlockProperties {
public static final EnumProperty<PedestalState> PEDESTAL_STATE = EnumProperty.create("state", PedestalState.class); public static final EnumProperty<PedestalState> PEDESTAL_STATE = EnumProperty.create("state", PedestalState.class);
public static final EnumProperty<CactusBottom> CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class); public static final EnumProperty<CactusBottom> CACTUS_BOTTOM = EnumProperty.create("bottom", CactusBottom.class);
public static final IntegerProperty PORTAL = IntegerProperty.create("portal", 0, EndPortals.getCount());
public static final IntegerProperty PLANT_ID = IntegerProperty.create("plant_id", 0, 63);
public static final IntegerProperty SOIL_ID = IntegerProperty.create("soil_id", 0, 16);
public static final IntegerProperty POT_LIGHT = IntegerProperty.create("pot_light", 0, 3);
public static final BooleanProperty HAS_ITEM = BooleanProperty.create("has_item"); 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 { public enum PedestalState implements StringRepresentable {
PEDESTAL_TOP("pedestal_top"), PEDESTAL_TOP("pedestal_top"),
@ -31,7 +28,7 @@ public class EndBlockProperties extends BlockProperties {
PedestalState(String name) { PedestalState(String name) {
this.name = name; this.name = name;
} }
@Override @Override
public String getSerializedName() { public String getSerializedName() {
return this.name; return this.name;
@ -58,7 +55,7 @@ public class EndBlockProperties extends BlockProperties {
this.name = name; this.name = name;
this.glow = glow; this.glow = glow;
} }
@Override @Override
public String getSerializedName() { public String getSerializedName() {
return name; return name;
@ -90,7 +87,7 @@ public class EndBlockProperties extends BlockProperties {
this.name = name; this.name = name;
this.light = light; this.light = light;
} }
@Override @Override
public String getSerializedName() { public String getSerializedName() {
return name; return name;
@ -116,7 +113,7 @@ public class EndBlockProperties extends BlockProperties {
CactusBottom(String name) { CactusBottom(String name) {
this.name = name; this.name = name;
} }
@Override @Override
public String getSerializedName() { public String getSerializedName() {
return name; return name;

View file

@ -1,6 +1,11 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@ -32,10 +37,6 @@ import ru.betterend.blocks.basis.EndUnderwaterPlantBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems; import ru.betterend.registry.EndItems;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class EndLilyBlock extends EndUnderwaterPlantBlock { public class EndLilyBlock extends EndUnderwaterPlantBlock {
public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE; public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE;
private static final VoxelShape SHAPE_BOTTOM = Block.box(4, 0, 4, 12, 16, 12); private static final VoxelShape SHAPE_BOTTOM = Block.box(4, 0, 4, 12, 16, 12);
@ -43,11 +44,11 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock {
public EndLilyBlock() { public EndLilyBlock() {
super(FabricBlockSettings.of(Material.WATER_PLANT) super(FabricBlockSettings.of(Material.WATER_PLANT)
.breakByTool(FabricToolTags.SHEARS) .breakByTool(FabricToolTags.SHEARS)
.breakByHand(true) .breakByHand(true)
.sound(SoundType.WET_GRASS) .sound(SoundType.WET_GRASS)
.lightLevel((state) -> state.getValue(SHAPE) == TripleShape.TOP ? 13 : 0) .lightLevel((state) -> state.getValue(SHAPE) == TripleShape.TOP ? 13 : 0)
.noCollission()); .noCollission());
} }
@Override @Override
@ -74,8 +75,7 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock {
@Override @Override
public FluidState getFluidState(BlockState state) { public FluidState getFluidState(BlockState state) {
return state.getValue(SHAPE) == TripleShape.TOP ? Fluids.EMPTY.defaultFluidState() : Fluids.WATER.getSource( return state.getValue(SHAPE) == TripleShape.TOP ? Fluids.EMPTY.defaultFluidState() : Fluids.WATER.getSource(false);
false);
} }
@Override @Override
@ -96,10 +96,7 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock {
@Override @Override
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
if (state.getValue(SHAPE) == TripleShape.TOP) { if (state.getValue(SHAPE) == TripleShape.TOP) {
return Lists.newArrayList( return Lists.newArrayList(new ItemStack(EndItems.END_LILY_LEAF, MHelper.randRange(1, 2, MHelper.RANDOM)), new ItemStack(EndBlocks.END_LILY_SEED, MHelper.randRange(1, 2, MHelper.RANDOM)));
new ItemStack(EndItems.END_LILY_LEAF, MHelper.randRange(1, 2, MHelper.RANDOM)),
new ItemStack(EndBlocks.END_LILY_SEED, MHelper.randRange(1, 2, MHelper.RANDOM))
);
} }
return Collections.emptyList(); return Collections.emptyList();
} }
@ -114,7 +111,7 @@ public class EndLilyBlock extends EndUnderwaterPlantBlock {
public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) { public boolean isValidBonemealTarget(BlockGetter world, BlockPos pos, BlockState state, boolean isClient) {
return false; return false;
} }
@Override @Override
public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) { public boolean isBonemealSuccess(Level world, Random random, BlockPos pos, BlockState state) {
return false; return false;

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
@ -10,31 +12,17 @@ import ru.bclib.blocks.UnderwaterPlantWithAgeBlock;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class EndLilySeedBlock extends UnderwaterPlantWithAgeBlock { public class EndLilySeedBlock extends UnderwaterPlantWithAgeBlock {
@Override @Override
public void grow(WorldGenLevel world, Random random, BlockPos pos) { public void grow(WorldGenLevel world, Random random, BlockPos pos) {
if (canGrow(world, pos)) { if (canGrow(world, pos)) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, pos, EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.BOTTOM));
world,
pos,
EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.BOTTOM)
);
BlockPos up = pos.above(); BlockPos up = pos.above();
while (world.getFluidState(up).isSource()) { while (world.getFluidState(up).isSource()) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, up, EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.MIDDLE));
world,
up,
EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.MIDDLE)
);
up = up.above(); up = up.above();
} }
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, up, EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.TOP));
world,
up,
EndBlocks.END_LILY.defaultBlockState().setValue(EndLilyBlock.SHAPE, TripleShape.TOP)
);
} }
} }
@ -45,9 +33,9 @@ public class EndLilySeedBlock extends UnderwaterPlantWithAgeBlock {
} }
return world.isEmptyBlock(up); return world.isEmptyBlock(up);
} }
@Override @Override
protected boolean isTerrain(BlockState state) { protected boolean isTerrain(BlockState state) {
return state.is(TagAPI.BLOCK_END_GROUND); return state.is(TagAPI.END_GROUND);
} }
} }

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@ -18,8 +21,6 @@ import ru.bclib.util.MHelper;
import ru.betterend.blocks.basis.EndPlantBlock; import ru.betterend.blocks.basis.EndPlantBlock;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.List;
public class EndLotusFlowerBlock extends EndPlantBlock { public class EndLotusFlowerBlock extends EndPlantBlock {
private static final VoxelShape SHAPE_OUTLINE = Block.box(2, 0, 2, 14, 14, 14); 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); private static final VoxelShape SHAPE_COLLISION = Block.box(0, 0, 0, 16, 2, 16);
@ -44,7 +45,6 @@ public class EndLotusFlowerBlock extends EndPlantBlock {
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getCollisionShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getCollisionShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return SHAPE_COLLISION; return SHAPE_COLLISION;
} }

View file

@ -24,11 +24,11 @@ import ru.bclib.blocks.BaseBlockNotFull;
import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties;
import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.blocks.BlockProperties.TripleShape;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
public class EndLotusLeafBlock extends BaseBlockNotFull implements RenderLayerProvider { public class EndLotusLeafBlock extends BaseBlockNotFull implements IRenderTyped {
public static final EnumProperty<Direction> HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING; public static final EnumProperty<Direction> HORIZONTAL_FACING = BlockStateProperties.HORIZONTAL_FACING;
public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE; public static final EnumProperty<TripleShape> SHAPE = BlockProperties.TRIPLE_SHAPE;
private static final VoxelShape VSHAPE = Block.box(0, 0, 0, 16, 1, 16); private static final VoxelShape VSHAPE = Block.box(0, 0, 0, 16, 1, 16);
@ -38,7 +38,6 @@ public class EndLotusLeafBlock extends BaseBlockNotFull implements RenderLayerPr
} }
@Override @Override
@SuppressWarnings("deprecation")
public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) { public boolean canSurvive(BlockState state, LevelReader world, BlockPos pos) {
BlockState down = world.getBlockState(pos.below()); BlockState down = world.getBlockState(pos.below());
return !down.getFluidState().isEmpty() && down.getFluidState().getType() instanceof WaterFluid; return !down.getFluidState().isEmpty() && down.getFluidState().getType() instanceof WaterFluid;
@ -50,19 +49,16 @@ public class EndLotusLeafBlock extends BaseBlockNotFull implements RenderLayerPr
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) {
return VSHAPE; return VSHAPE;
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState rotate(BlockState state, Rotation rotation) { public BlockState rotate(BlockState state, Rotation rotation) {
return BlocksHelper.rotateHorizontal(state, rotation, HORIZONTAL_FACING); return BlocksHelper.rotateHorizontal(state, rotation, HORIZONTAL_FACING);
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState mirror(BlockState state, Mirror mirror) { public BlockState mirror(BlockState state, Mirror mirror) {
return BlocksHelper.mirrorHorizontal(state, mirror, HORIZONTAL_FACING); return BlocksHelper.mirrorHorizontal(state, mirror, HORIZONTAL_FACING);
} }

View file

@ -1,5 +1,7 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Random;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -12,16 +14,12 @@ import ru.bclib.blocks.UnderwaterPlantWithAgeBlock;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import java.util.Random;
public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock { public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock {
@Override @Override
public void grow(WorldGenLevel world, Random random, BlockPos pos) { public void grow(WorldGenLevel world, Random random, BlockPos pos) {
if (canGrow(world, pos)) { if (canGrow(world, pos)) {
BlockState startLeaf = EndBlocks.END_LOTUS_STEM.defaultBlockState().setValue(EndLotusStemBlock.LEAF, true); BlockState startLeaf = EndBlocks.END_LOTUS_STEM.defaultBlockState().setValue(EndLotusStemBlock.LEAF, true);
BlockState roots = EndBlocks.END_LOTUS_STEM.defaultBlockState() BlockState roots = EndBlocks.END_LOTUS_STEM.defaultBlockState().setValue(EndLotusStemBlock.SHAPE, TripleShape.BOTTOM).setValue(EndLotusStemBlock.WATERLOGGED, true);
.setValue(EndLotusStemBlock.SHAPE, TripleShape.BOTTOM)
.setValue(EndLotusStemBlock.WATERLOGGED, true);
BlockState stem = EndBlocks.END_LOTUS_STEM.defaultBlockState(); BlockState stem = EndBlocks.END_LOTUS_STEM.defaultBlockState();
BlockState flower = EndBlocks.END_LOTUS_FLOWER.defaultBlockState(); BlockState flower = EndBlocks.END_LOTUS_FLOWER.defaultBlockState();
@ -39,11 +37,7 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock {
BlockPos leafCenter = bpos.immutable().relative(dir); BlockPos leafCenter = bpos.immutable().relative(dir);
if (hasLeaf(world, leafCenter)) { if (hasLeaf(world, leafCenter)) {
generateLeaf(world, leafCenter); generateLeaf(world, leafCenter);
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, bpos, startLeaf.setValue(EndLotusStemBlock.SHAPE, shape).setValue(EndLotusStemBlock.FACING, dir));
world,
bpos,
startLeaf.setValue(EndLotusStemBlock.SHAPE, shape).setValue(EndLotusStemBlock.FACING, dir)
);
} }
else { else {
BlocksHelper.setWithoutUpdate(world, bpos, stem.setValue(EndLotusStemBlock.SHAPE, shape)); BlocksHelper.setWithoutUpdate(world, bpos, stem.setValue(EndLotusStemBlock.SHAPE, shape));
@ -98,23 +92,13 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock {
MutableBlockPos p = new MutableBlockPos(); MutableBlockPos p = new MutableBlockPos();
BlockState leaf = EndBlocks.END_LOTUS_LEAF.defaultBlockState(); BlockState leaf = EndBlocks.END_LOTUS_LEAF.defaultBlockState();
BlocksHelper.setWithoutUpdate(world, pos, leaf.setValue(EndLotusLeafBlock.SHAPE, TripleShape.BOTTOM)); BlocksHelper.setWithoutUpdate(world, pos, leaf.setValue(EndLotusLeafBlock.SHAPE, TripleShape.BOTTOM));
for (Direction move : BlocksHelper.HORIZONTAL) { for (Direction move: BlocksHelper.HORIZONTAL) {
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, p.set(pos).move(move), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, move).setValue(EndLotusLeafBlock.SHAPE, TripleShape.MIDDLE));
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 d1 = BlocksHelper.HORIZONTAL[i];
Direction d2 = BlocksHelper.HORIZONTAL[(i + 1) & 3]; Direction d2 = BlocksHelper.HORIZONTAL[(i + 1) & 3];
BlocksHelper.setWithoutUpdate( BlocksHelper.setWithoutUpdate(world, p.set(pos).move(d1).move(d2), leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, d1).setValue(EndLotusLeafBlock.SHAPE, TripleShape.TOP));
world,
p.set(pos).move(d1).move(d2),
leaf.setValue(EndLotusLeafBlock.HORIZONTAL_FACING, d1)
.setValue(EndLotusLeafBlock.SHAPE, TripleShape.TOP)
);
} }
} }
@ -122,18 +106,19 @@ public class EndLotusSeedBlock extends UnderwaterPlantWithAgeBlock {
MutableBlockPos p = new MutableBlockPos(); MutableBlockPos p = new MutableBlockPos();
p.setY(pos.getY()); p.setY(pos.getY());
int count = 0; int count = 0;
for (int x = -1; x < 2; x++) { for (int x = -1; x < 2; x ++) {
p.setX(pos.getX() + 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); p.setZ(pos.getZ() + z);
if (world.isEmptyBlock(p) && !world.getFluidState(p.below()).isEmpty()) count++; if (world.isEmptyBlock(p) && !world.getFluidState(p.below()).isEmpty())
count ++;
} }
} }
return count == 9; return count == 9;
} }
@Override @Override
protected boolean isTerrain(BlockState state) { protected boolean isTerrain(BlockState state) {
return state.is(TagAPI.BLOCK_END_GROUND); return state.is(TagAPI.END_GROUND);
} }
} }

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Map;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -26,12 +29,10 @@ import ru.bclib.blocks.BaseBlock;
import ru.bclib.blocks.BlockProperties; import ru.bclib.blocks.BlockProperties;
import ru.bclib.blocks.BlockProperties.TripleShape; import ru.bclib.blocks.BlockProperties.TripleShape;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.bclib.util.BlocksHelper; import ru.bclib.util.BlocksHelper;
import java.util.Map; public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, IRenderTyped {
public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlock, RenderLayerProvider {
public static final EnumProperty<Direction> FACING = BlockStateProperties.FACING; public static final EnumProperty<Direction> FACING = BlockStateProperties.FACING;
public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED; public static final BooleanProperty WATERLOGGED = BlockStateProperties.WATERLOGGED;
public static final BooleanProperty LEAF = BooleanProperty.create("leaf"); public static final BooleanProperty LEAF = BooleanProperty.create("leaf");
@ -40,14 +41,10 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo
public EndLotusStemBlock() { public EndLotusStemBlock() {
super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS)); super(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS));
this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false) this.registerDefaultState(defaultBlockState().setValue(WATERLOGGED, false).setValue(SHAPE, TripleShape.MIDDLE).setValue(LEAF, false).setValue(FACING, Direction.UP));
.setValue(SHAPE, TripleShape.MIDDLE)
.setValue(LEAF, false)
.setValue(FACING, Direction.UP));
} }
@Override @Override
@SuppressWarnings("deprecation")
public VoxelShape getShape(BlockState state, BlockGetter view, BlockPos pos, CollisionContext ePos) { 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()); return state.getValue(LEAF) ? SHAPES.get(Axis.Y) : SHAPES.get(state.getValue(FACING).getAxis());
} }
@ -58,37 +55,31 @@ public class EndLotusStemBlock extends BaseBlock implements SimpleWaterloggedBlo
} }
@Override @Override
@SuppressWarnings("deprecation")
public FluidState getFluidState(BlockState state) { public FluidState getFluidState(BlockState state) {
return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state); return state.getValue(WATERLOGGED) ? Fluids.WATER.getSource(false) : super.getFluidState(state);
} }
@Override @Override
public BlockState getStateForPlacement(BlockPlaceContext ctx) { public BlockState getStateForPlacement(BlockPlaceContext ctx) {
LevelAccessor worldAccess = ctx.getLevel(); LevelAccessor worldAccess = ctx.getLevel();
BlockPos blockPos = ctx.getClickedPos(); BlockPos blockPos = ctx.getClickedPos();
return this.defaultBlockState() return this.defaultBlockState().setValue(WATERLOGGED, worldAccess.getFluidState(blockPos).getType() == Fluids.WATER).setValue(FACING, ctx.getClickedFace());
.setValue(WATERLOGGED, worldAccess.getFluidState(blockPos).getType() == Fluids.WATER)
.setValue(FACING, ctx.getClickedFace());
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState rotate(BlockState state, Rotation rotation) { public BlockState rotate(BlockState state, Rotation rotation) {
return BlocksHelper.rotateHorizontal(state, rotation, FACING); return BlocksHelper.rotateHorizontal(state, rotation, FACING);
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState mirror(BlockState state, Mirror mirror) { public BlockState mirror(BlockState state, Mirror mirror) {
return BlocksHelper.mirrorHorizontal(state, mirror, FACING); return BlocksHelper.mirrorHorizontal(state, mirror, FACING);
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) {
if (state.getValue(WATERLOGGED)) { if (state.getValue(WATERLOGGED)) {
world.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); world.getLiquidTicks().scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(world));
} }
return state; return state;
} }

View file

@ -1,30 +1,33 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import com.google.common.collect.Maps; import java.util.HashMap;
import java.util.Map;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.basis.PedestalBlock; import ru.betterend.blocks.basis.PedestalBlock;
import java.util.Map;
public class EndPedestal extends PedestalBlock { public class EndPedestal extends PedestalBlock {
public EndPedestal(Block parent) { public EndPedestal(Block parent) {
super(parent); super(parent);
} }
@Override @Override
protected Map<String, String> createTexturesMap() { protected Map<String, String> createTexturesMap() {
ResourceLocation blockId = Registry.BLOCK.getKey(parent); ResourceLocation blockId = Registry.BLOCK.getKey(parent);
String name = blockId.getPath(); String name = blockId.getPath();
Map<String, String> textures = Maps.newHashMap(); return new HashMap<String, String>() {
textures.put("%mod%", BetterEnd.MOD_ID); private static final long serialVersionUID = 1L;
textures.put("%top%", name + "_polished"); {
textures.put("%base%", name + "_polished"); put("%mod%", BetterEnd.MOD_ID );
textures.put("%pillar%", name + "_pillar_side"); put("%top%", name + "_polished");
textures.put("%bottom%", name + "_polished"); put("%base%", name + "_polished");
return textures; put("%pillar%", name + "_pillar_side");
put("%bottom%", name + "_polished");
}
};
} }
} }

View file

@ -1,5 +1,9 @@
package ru.betterend.blocks; 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.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@ -29,26 +33,20 @@ import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.IntegerProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty;
import net.minecraft.world.level.dimension.DimensionType; import net.minecraft.world.level.dimension.DimensionType;
import ru.bclib.client.render.BCLRenderLayer; import ru.bclib.client.render.BCLRenderLayer;
import ru.bclib.interfaces.CustomColorProvider; import ru.bclib.interfaces.IColorProvider;
import ru.bclib.interfaces.RenderLayerProvider; import ru.bclib.interfaces.IRenderTyped;
import ru.betterend.interfaces.TeleportingEntity; import ru.betterend.interfaces.TeleportingEntity;
import ru.betterend.registry.EndParticles; import ru.betterend.registry.EndParticles;
import ru.betterend.registry.EndPortals; import ru.betterend.registry.EndPortals;
import ru.betterend.rituals.EternalRitual; import ru.betterend.rituals.EternalRitual;
import java.util.Objects; public class EndPortalBlock extends NetherPortalBlock implements IRenderTyped, IColorProvider {
import java.util.Optional;
import java.util.Random;
public class EndPortalBlock extends NetherPortalBlock implements RenderLayerProvider, CustomColorProvider {
public static final IntegerProperty PORTAL = EndBlockProperties.PORTAL; public static final IntegerProperty PORTAL = EndBlockProperties.PORTAL;
public EndPortalBlock() { public EndPortalBlock() {
super(FabricBlockSettings.copyOf(Blocks.NETHER_PORTAL) super(FabricBlockSettings.copyOf(Blocks.NETHER_PORTAL).resistance(Blocks.BEDROCK.getExplosionResistance()).luminance(15));
.resistance(Blocks.BEDROCK.getExplosionResistance())
.luminance(15));
} }
@Override @Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
super.createBlockStateDefinition(builder); super.createBlockStateDefinition(builder);
@ -59,35 +57,24 @@ public class EndPortalBlock extends NetherPortalBlock implements RenderLayerProv
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public void animateTick(BlockState state, Level world, BlockPos pos, Random random) { public void animateTick(BlockState state, Level world, BlockPos pos, Random random) {
if (random.nextInt(100) == 0) { if (random.nextInt(100) == 0) {
world.playLocalSound( world.playLocalSound(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.PORTAL_AMBIENT, SoundSource.BLOCKS, 0.5F, random.nextFloat() * 0.4F + 0.8F, false);
pos.getX() + 0.5D,
pos.getY() + 0.5D,
pos.getZ() + 0.5D,
SoundEvents.PORTAL_AMBIENT,
SoundSource.BLOCKS,
0.5F,
random.nextFloat() * 0.4F + 0.8F,
false
);
} }
double x = pos.getX() + random.nextDouble(); double x = pos.getX() + random.nextDouble();
double y = pos.getY() + random.nextDouble(); double y = pos.getY() + random.nextDouble();
double z = pos.getZ() + random.nextDouble(); double z = pos.getZ() + random.nextDouble();
int k = random.nextInt(2) * 2 - 1; int k = random.nextInt(2) * 2 - 1;
if (!world.getBlockState(pos.west()).is(this) && !world.getBlockState(pos.east()).is(this)) { if (!world.getBlockState(pos.west()).is(this) && !world.getBlockState(pos.east()).is(this)) {
x = pos.getX() + 0.5D + 0.25D * k; x = pos.getX() + 0.5D + 0.25D * k;
} } else {
else {
z = pos.getZ() + 0.5D + 0.25D * k; z = pos.getZ() + 0.5D + 0.25D * k;
} }
world.addParticle(EndParticles.PORTAL_SPHERE, x, y, z, 0, 0, 0); world.addParticle(EndParticles.PORTAL_SPHERE, x, y, z, 0, 0, 0);
} }
@Override @Override
public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) { public void randomTick(BlockState state, ServerLevel world, BlockPos pos, Random random) {}
}
@Override @Override
public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) { public BlockState updateShape(BlockState state, Direction direction, BlockState newState, LevelAccessor world, BlockPos pos, BlockPos posFrom) {
@ -106,24 +93,18 @@ public class EndPortalBlock extends NetherPortalBlock implements RenderLayerProv
BlockPos exitPos = findExitPos(currentWorld, destination, pos, entity); BlockPos exitPos = findExitPos(currentWorld, destination, pos, entity);
if (exitPos == null) return; if (exitPos == null) return;
if (entity instanceof ServerPlayer && ((ServerPlayer) entity).isCreative()) { if (entity instanceof ServerPlayer && ((ServerPlayer) entity).isCreative()) {
((ServerPlayer) entity).teleportTo( ((ServerPlayer) entity).teleportTo(destination, exitPos.getX() + 0.5, exitPos.getY(),
destination, exitPos.getZ() + 0.5, entity.yRot, entity.xRot);
exitPos.getX() + 0.5, } else {
exitPos.getY(),
exitPos.getZ() + 0.5,
entity.getYRot(),
entity.getXRot()
);
}
else {
((TeleportingEntity) entity).be_setExitPos(exitPos); ((TeleportingEntity) entity).be_setExitPos(exitPos);
Optional<Entity> teleported = Optional.ofNullable(entity.changeDimension(destination)); Optional<Entity> teleported = Optional.ofNullable(entity.changeDimension(destination));
teleported.ifPresent(Entity::setPortalCooldown); teleported.ifPresent(Entity::setPortalCooldown);
} }
} }
private boolean validate(Entity entity) { private boolean validate(Entity entity) {
return !entity.isPassenger() && !entity.isVehicle() && entity.canChangeDimensions() && !entity.isOnPortalCooldown(); return !entity.isPassenger() && !entity.isVehicle() &&
entity.canChangeDimensions() && !entity.isOnPortalCooldown();
} }
@Override @Override
@ -133,28 +114,18 @@ public class EndPortalBlock extends NetherPortalBlock implements RenderLayerProv
private BlockPos findExitPos(ServerLevel currentWorld, ServerLevel targetWorld, BlockPos currentPos, Entity entity) { private BlockPos findExitPos(ServerLevel currentWorld, ServerLevel targetWorld, BlockPos currentPos, Entity entity) {
if (targetWorld == null) return null; if (targetWorld == null) return null;
Registry<DimensionType> registry = targetWorld.registryAccess() Registry<DimensionType> registry = targetWorld.registryAccess().dimensionTypes();
.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
ResourceLocation targetWorldId = targetWorld.dimension().location(); ResourceLocation targetWorldId = targetWorld.dimension().location();
ResourceLocation currentWorldId = currentWorld.dimension().location(); ResourceLocation currentWorldId = currentWorld.dimension().location();
double targetMultiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale(); double targetMultiplier = Objects.requireNonNull(registry.get(targetWorldId)).coordinateScale();
double currentMultiplier = Objects.requireNonNull(registry.get(currentWorldId)).coordinateScale(); double currentMultiplier = Objects.requireNonNull(registry.get(currentWorldId)).coordinateScale();
double multiplier = targetMultiplier > currentMultiplier ? 1.0 / targetMultiplier : currentMultiplier; double multiplier = targetMultiplier > currentMultiplier ? 1.0 / targetMultiplier : currentMultiplier;
MutableBlockPos basePos = currentPos.mutable() MutableBlockPos basePos = currentPos.mutable().set(currentPos.getX() * multiplier, currentPos.getY(), currentPos.getZ() * multiplier);
.set(currentPos.getX() * multiplier,
currentPos.getY(),
currentPos.getZ() * multiplier
);
MutableBlockPos checkPos = basePos.mutable(); MutableBlockPos checkPos = basePos.mutable();
BlockState currentState = currentWorld.getBlockState(currentPos); BlockState currentState = currentWorld.getBlockState(currentPos);
int radius = (EternalRitual.SEARCH_RADIUS >> 4) + 1; int radius = (EternalRitual.SEARCH_RADIUS >> 4) + 1;
checkPos = EternalRitual.findBlockPos( checkPos = EternalRitual.findBlockPos(targetWorld, checkPos, radius, this, state -> state.is(this) &&
targetWorld, state.getValue(PORTAL).equals(currentState.getValue(PORTAL)));
checkPos,
radius,
this,
state -> state.is(this) && state.getValue(PORTAL).equals(currentState.getValue(PORTAL))
);
if (checkPos != null) { if (checkPos != null) {
BlockState checkState = targetWorld.getBlockState(checkPos); BlockState checkState = targetWorld.getBlockState(checkPos);
Axis axis = checkState.getValue(AXIS); Axis axis = checkState.getValue(AXIS);
@ -188,24 +159,21 @@ public class EndPortalBlock extends NetherPortalBlock implements RenderLayerProv
BlockState down = world.getBlockState(pos.below()); BlockState down = world.getBlockState(pos.below());
if (down.is(this)) { if (down.is(this)) {
return findCenter(world, pos.move(Direction.DOWN), axis, step); 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; return pos;
} } else if (right.is(this)) {
else if (right.is(this)) {
return findCenter(world, pos.move(rightDir), axis, ++step); 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 findCenter(world, pos.move(leftDir), axis, ++step);
} }
return pos; return pos;
} }
@Override @Override
public BlockColor getProvider() { public BlockColor getProvider() {
return (state, world, pos, tintIndex) -> EndPortals.getColor(state.getValue(PORTAL)); return (state, world, pos, tintIndex) -> EndPortals.getColor(state.getValue(PORTAL));
} }
@Override @Override
public ItemColor getItemProvider() { public ItemColor getItemProvider() {
return (stack, tintIndex) -> EndPortals.getColor(0); return (stack, tintIndex) -> EndPortals.getColor(0);

View file

@ -1,6 +1,10 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import java.util.Random;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; 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.inventory.AbstractContainerMenu;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.BlockGetter;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.HorizontalDirectionalBlock; 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.Rotation;
import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.SoundType;
import net.minecraft.world.level.block.entity.BlockEntity; 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.BlockState;
import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.StateDefinition;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
@ -35,40 +38,34 @@ import net.minecraft.world.level.material.MaterialColor;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import net.minecraft.world.level.storage.loot.parameters.LootContextParams; import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.BlockHitResult;
import org.jetbrains.annotations.Nullable;
import ru.bclib.blocks.BaseBlockWithEntity; import ru.bclib.blocks.BaseBlockWithEntity;
import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; 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 class EndStoneSmelter extends BaseBlockWithEntity {
public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING; public static final DirectionProperty FACING = HorizontalDirectionalBlock.FACING;
public static final BooleanProperty LIT = BlockStateProperties.LIT; public static final BooleanProperty LIT = BlockStateProperties.LIT;
public static final String ID = "end_stone_smelter"; public static final String ID = "end_stone_smelter";
public EndStoneSmelter() { public EndStoneSmelter() {
super(FabricBlockSettings.of(Material.STONE, MaterialColor.COLOR_GRAY) super(FabricBlockSettings.of(Material.STONE, MaterialColor.COLOR_GRAY)
.luminance(state -> state.getValue(LIT) ? 15 : 0) .hardness(4F)
.hardness(4F) .resistance(100F)
.resistance(100F) .requiresCorrectToolForDrops()
.requiresCorrectToolForDrops() .sound(SoundType.STONE));
.sound(SoundType.STONE)); this.registerDefaultState(this.stateDefinition.any()
registerDefaultState(this.stateDefinition.any().setValue(FACING, Direction.NORTH).setValue(LIT, false)); .setValue(FACING, Direction.NORTH)
.setValue(LIT, false));
} }
@SuppressWarnings("deprecation")
public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { public InteractionResult use(BlockState state, Level world, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) {
if (world.isClientSide) { if (world.isClientSide) {
return InteractionResult.SUCCESS; return InteractionResult.SUCCESS;
} } else {
else {
this.openScreen(world, pos, player); this.openScreen(world, pos, player);
return InteractionResult.CONSUME; return InteractionResult.CONSUME;
} }
} }
private void openScreen(Level world, BlockPos pos, Player player) { private void openScreen(Level world, BlockPos pos, Player player) {
BlockEntity blockEntity = world.getBlockEntity(pos); BlockEntity blockEntity = world.getBlockEntity(pos);
if (blockEntity instanceof EndStoneSmelterBlockEntity) { if (blockEntity instanceof EndStoneSmelterBlockEntity) {
@ -78,12 +75,12 @@ public class EndStoneSmelter extends BaseBlockWithEntity {
@Override @Override
public BlockState getStateForPlacement(BlockPlaceContext ctx) { public BlockState getStateForPlacement(BlockPlaceContext ctx) {
return defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite()); return this.defaultBlockState().setValue(FACING, ctx.getHorizontalDirection().getOpposite());
} }
@Override @Override
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { public BlockEntity newBlockEntity(BlockGetter world) {
return new EndStoneSmelterBlockEntity(blockPos, blockState); return new EndStoneSmelterBlockEntity();
} }
@Override @Override
@ -101,37 +98,33 @@ public class EndStoneSmelter extends BaseBlockWithEntity {
} }
return drop; return drop;
} }
@Override @Override
@SuppressWarnings("deprecation")
public boolean hasAnalogOutputSignal(BlockState state) { public boolean hasAnalogOutputSignal(BlockState state) {
return true; return true;
} }
@Override @Override
@SuppressWarnings("deprecation")
public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) { public int getAnalogOutputSignal(BlockState state, Level world, BlockPos pos) {
//TODO //TODO
return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(world.getBlockEntity(pos)); return AbstractContainerMenu.getRedstoneSignalFromBlockEntity(world.getBlockEntity(pos));
} }
@Override @Override
public RenderShape getRenderShape(BlockState state) { public RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL; return RenderShape.MODEL;
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState rotate(BlockState state, Rotation rotation) { public BlockState rotate(BlockState state, Rotation rotation) {
return state.setValue(FACING, rotation.rotate(state.getValue(FACING))); return state.setValue(FACING, rotation.rotate(state.getValue(FACING)));
} }
@Override @Override
@SuppressWarnings("deprecation")
public BlockState mirror(BlockState state, Mirror mirror) { public BlockState mirror(BlockState state, Mirror mirror) {
return state.rotate(mirror.getRotation(state.getValue(FACING))); return state.rotate(mirror.getRotation(state.getValue(FACING)));
} }
@Override @Override
protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) { protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockState> builder) {
builder.add(FACING, LIT); builder.add(FACING, LIT);
@ -144,18 +137,9 @@ public class EndStoneSmelter extends BaseBlockWithEntity {
double y = pos.getY(); double y = pos.getY();
double z = pos.getZ() + 0.5D; double z = pos.getZ() + 0.5D;
if (random.nextDouble() < 0.1D) { if (random.nextDouble() < 0.1D) {
world.playLocalSound( world.playLocalSound(x, y, z, SoundEvents.BLASTFURNACE_FIRE_CRACKLE, SoundSource.BLOCKS, 1.0F, 1.0F, false);
x,
y,
z,
SoundEvents.BLASTFURNACE_FIRE_CRACKLE,
SoundSource.BLOCKS,
1.0F,
1.0F,
false
);
} }
Direction direction = state.getValue(FACING); Direction direction = state.getValue(FACING);
Direction.Axis axis = direction.getAxis(); Direction.Axis axis = direction.getAxis();
double defOffset = random.nextDouble() * 0.6D - 0.3D; double defOffset = random.nextDouble() * 0.6D - 0.3D;
@ -165,15 +149,4 @@ public class EndStoneSmelter extends BaseBlockWithEntity {
world.addParticle(ParticleTypes.SMOKE, x + offX, y + offY, z + offZ, 0.0D, 0.0D, 0.0D); world.addParticle(ParticleTypes.SMOKE, x + offX, y + offY, z + offZ, 0.0D, 0.0D, 0.0D);
} }
} }
@Override
@Nullable
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(Level level, BlockState blockState, BlockEntityType<T> blockEntityType) {
return level.isClientSide() ? null : createTickerHelper(
blockEntityType,
EndBlockEntities.END_STONE_SMELTER,
EndStoneSmelterBlockEntity::tick
);
}
} }

View file

@ -12,15 +12,15 @@ import net.minecraft.world.level.material.MaterialColor;
import ru.bclib.blocks.BaseBlock; import ru.bclib.blocks.BaseBlock;
public class EnderBlock extends BaseBlock { public class EnderBlock extends BaseBlock {
public EnderBlock() { public EnderBlock() {
super(FabricBlockSettings.of(Material.STONE, MaterialColor.WARPED_WART_BLOCK) super(FabricBlockSettings.of(Material.STONE, MaterialColor.WARPED_WART_BLOCK)
.hardness(5F) .hardness(5F)
.resistance(6F) .resistance(6F)
.requiresCorrectToolForDrops() .requiresCorrectToolForDrops()
.sound(SoundType.STONE)); .sound(SoundType.STONE));
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public int getColor(BlockState state, BlockGetter world, BlockPos pos) { public int getColor(BlockState state, BlockGetter world, BlockPos pos) {
return 0xFF005548; return 0xFF005548;

View file

@ -1,5 +1,8 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.Collections;
import java.util.List;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings; import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
@ -13,27 +16,21 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.storage.loot.LootContext; import net.minecraft.world.level.storage.loot.LootContext;
import ru.bclib.util.ColorUtil; import ru.bclib.util.ColorUtil;
import java.util.Collections;
import java.util.List;
public class EndstoneDustBlock extends FallingBlock { public class EndstoneDustBlock extends FallingBlock {
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
private static final int COLOR = ColorUtil.color(226, 239, 168); private static final int COLOR = ColorUtil.color(226, 239, 168);
public EndstoneDustBlock() { public EndstoneDustBlock() {
super(FabricBlockSettings super(FabricBlockSettings.copyOf(Blocks.SAND)
.copyOf(Blocks.SAND) .breakByTool(FabricToolTags.SHOVELS)
.breakByTool(FabricToolTags.SHOVELS) .materialColor(Blocks.END_STONE.defaultMaterialColor()));
.mapColor(Blocks.END_STONE.defaultMaterialColor())
);
} }
@Override @Override
@SuppressWarnings("deprecation")
public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) { public List<ItemStack> getDrops(BlockState state, LootContext.Builder builder) {
return Collections.singletonList(new ItemStack(this)); return Collections.singletonList(new ItemStack(this));
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public int getDustColor(BlockState state, BlockGetter world, BlockPos pos) { public int getDustColor(BlockState state, BlockGetter world, BlockPos pos) {
return COLOR; return COLOR;

View file

@ -1,6 +1,9 @@
package ru.betterend.blocks; package ru.betterend.blocks;
import java.util.List;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -25,8 +28,6 @@ import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndPortals; import ru.betterend.registry.EndPortals;
import ru.betterend.rituals.EternalRitual; import ru.betterend.rituals.EternalRitual;
import java.util.List;
public class EternalPedestal extends PedestalBlock { public class EternalPedestal extends PedestalBlock {
public static final BooleanProperty ACTIVATED = EndBlockProperties.ACTIVE; public static final BooleanProperty ACTIVATED = EndBlockProperties.ACTIVE;
@ -49,24 +50,21 @@ public class EternalPedestal extends PedestalBlock {
int portalId; int portalId;
if (targetWorld != null) { if (targetWorld != null) {
portalId = EndPortals.getPortalIdByWorld(targetWorld); portalId = EndPortals.getPortalIdByWorld(targetWorld);
} } else {
else {
portalId = EndPortals.getPortalIdByWorld(EndPortals.OVERWORLD_ID); portalId = EndPortals.getPortalIdByWorld(EndPortals.OVERWORLD_ID);
} }
ritual.disablePortal(portalId); ritual.disablePortal(portalId);
} }
} }
world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, false).setValue(HAS_LIGHT, false)); world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, false).setValue(HAS_LIGHT, false));
} } else {
else {
ItemStack itemStack = pedestal.getItem(0); ItemStack itemStack = pedestal.getItem(0);
ResourceLocation id = Registry.ITEM.getKey(itemStack.getItem()); ResourceLocation id = Registry.ITEM.getKey(itemStack.getItem());
if (EndPortals.isAvailableItem(id)) { if (EndPortals.isAvailableItem(id)) {
world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, true).setValue(HAS_LIGHT, true)); world.setBlockAndUpdate(pos, updatedState.setValue(ACTIVATED, true).setValue(HAS_LIGHT, true));
if (pedestal.hasRitual()) { if (pedestal.hasRitual()) {
pedestal.getRitual().checkStructure(); pedestal.getRitual().checkStructure();
} } else {
else {
EternalRitual ritual = new EternalRitual(world, pos); EternalRitual ritual = new EternalRitual(world, pos);
ritual.checkStructure(); ritual.checkStructure();
} }
@ -126,12 +124,12 @@ public class EternalPedestal extends PedestalBlock {
super.createBlockStateDefinition(stateManager); super.createBlockStateDefinition(stateManager);
stateManager.add(ACTIVATED); stateManager.add(ACTIVATED);
} }
@Override @Override
public BlockEntity newBlockEntity(BlockPos blockPos, BlockState blockState) { public BlockEntity newBlockEntity(BlockGetter world) {
return new EternalPedestalEntity(blockPos, blockState); return new EternalPedestalEntity();
} }
@Override @Override
public boolean hasUniqueEntity() { public boolean hasUniqueEntity() {
return true; return true;

Some files were not shown because too many files have changed in this diff Show more