├── .gitignore ├── LICENSE ├── README.md ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle └── src └── main ├── java └── safro │ └── oxidized │ ├── Oxidized.java │ ├── OxidizedClient.java │ ├── block │ ├── CopperButtonBlock.java │ ├── CopperKilnBlock.java │ ├── CopperPanBlock.java │ ├── CopperRailBlock.java │ ├── CopperTrapBlock.java │ ├── entity │ │ └── CopperKilnBlockEntity.java │ └── screen │ │ ├── CopperKilnScreen.java │ │ └── CopperKilnScreenHandler.java │ ├── config │ └── OxidizedConfig.java │ ├── entity │ ├── CopperGolemEntity.java │ ├── CopperGolemEntityModel.java │ ├── CopperGolemEntityRenderer.java │ └── goal │ │ ├── MoveToLightningRodGoal.java │ │ └── UseButtonGoal.java │ ├── item │ ├── BarometerItem.java │ ├── CopperPulsarItem.java │ └── RoseGoldMaterial.java │ ├── mixin │ ├── LightningRodBlockMixin.java │ ├── LivingEntityMixin.java │ ├── MinecartEntityAccessor.java │ ├── MinecartRailMixin.java │ └── ServerWorldAccessor.java │ ├── recipe │ ├── CopperKilnRecipe.java │ └── CopperKilnRecipeBook.java │ ├── registry │ ├── BlockRegistry.java │ ├── EntityRegistry.java │ └── ItemRegistry.java │ ├── rei │ ├── KilnSmeltingDisplay.java │ └── OxidizedREIPlugin.java │ └── util │ ├── MinecartHandler.java │ └── TrapDamageSource.java └── resources ├── assets └── oxidized │ ├── blockstates │ ├── copper_button.json │ ├── copper_kiln.json │ ├── copper_lantern.json │ ├── copper_pan.json │ ├── copper_rail.json │ ├── copper_trap.json │ ├── vertical_cut_copper.json │ ├── vertical_exposed_cut_copper.json │ ├── vertical_oxidized_cut_copper.json │ ├── vertical_weathered_cut_copper.json │ ├── waxed_vertical_cut_copper.json │ ├── waxed_vertical_exposed_cut_copper.json │ ├── waxed_vertical_oxidized_cut_copper.json │ └── waxed_vertical_weathered_cut_copper.json │ ├── icon.png │ ├── lang │ ├── en_us.json │ ├── es_es.json │ ├── ru_ru.json │ └── zh_cn.json │ ├── models │ ├── block │ │ ├── copper_button.json │ │ ├── copper_button_inventory.json │ │ ├── copper_button_pressed.json │ │ ├── copper_kiln_off.json │ │ ├── copper_kiln_on.json │ │ ├── copper_lantern.json │ │ ├── copper_lantern_hanging.json │ │ ├── copper_pan.json │ │ ├── copper_rail.json │ │ ├── copper_rail_on.json │ │ ├── copper_rail_raised_ne.json │ │ ├── copper_rail_raised_on_ne.json │ │ ├── copper_rail_raised_on_sw.json │ │ ├── copper_rail_raised_sw.json │ │ ├── copper_trap.json │ │ ├── copper_trap_closed.json │ │ ├── vertical_cut_copper.json │ │ ├── vertical_exposed_cut_copper.json │ │ ├── vertical_oxidized_cut_copper.json │ │ └── vertical_weathered_cut_copper.json │ └── item │ │ ├── copper_barometer.json │ │ ├── copper_button.json │ │ ├── copper_golem_spawn_egg.json │ │ ├── copper_kiln.json │ │ ├── copper_lantern.json │ │ ├── copper_nugget.json │ │ ├── copper_pan.json │ │ ├── copper_pulsar.json │ │ ├── copper_rail.json │ │ ├── copper_trap.json │ │ ├── rose_gold_axe.json │ │ ├── rose_gold_hoe.json │ │ ├── rose_gold_pickaxe.json │ │ ├── rose_gold_shovel.json │ │ ├── rose_gold_sword.json │ │ ├── rose_gold_upgrade_template.json │ │ ├── vertical_cut_copper.json │ │ ├── vertical_exposed_cut_copper.json │ │ ├── vertical_oxidized_cut_copper.json │ │ ├── vertical_weathered_cut_copper.json │ │ ├── waxed_vertical_cut_copper.json │ │ ├── waxed_vertical_exposed_cut_copper.json │ │ ├── waxed_vertical_oxidized_cut_copper.json │ │ └── waxed_vertical_weathered_cut_copper.json │ └── textures │ ├── block │ ├── copper_lantern.png │ ├── copper_lantern.png.mcmeta │ ├── copper_lantern_hanging.png │ ├── copper_lantern_hanging.png.mcmeta │ ├── copper_pan.png │ ├── copper_rail.png │ ├── copper_rail_on.png │ ├── copper_trap.png │ ├── kiln_fire_off.png │ ├── kiln_fire_on.png │ ├── vertical_cut_copper_block.png │ ├── vertical_cut_exposed_copper_block.png │ ├── vertical_cut_oxidized_copper_block.png │ └── vertical_cut_weathered_copper_block.png │ ├── entity │ ├── copper_golem.png │ ├── exposed_copper_golem.png │ ├── oxidized_copper_golem.png │ └── weathered_copper_golem.png │ └── item │ ├── copper_barometer.png │ ├── copper_lantern.png │ ├── copper_nugget.png │ ├── copper_pan.png │ ├── copper_pulsar.png │ ├── rose_gold_axe.png │ ├── rose_gold_hoe.png │ ├── rose_gold_pickaxe.png │ ├── rose_gold_shovel.png │ ├── rose_gold_sword.png │ └── rose_gold_upgrade_template.png ├── data ├── c │ └── tags │ │ └── item │ │ └── copper_nuggets.json ├── minecraft │ └── tags │ │ └── block │ │ ├── mineable │ │ └── pickaxe.json │ │ ├── needs_stone_tool.json │ │ └── rails.json └── oxidized │ ├── advancement │ └── recipes │ │ ├── copper_barometer.json │ │ ├── copper_button.json │ │ ├── copper_kiln.json │ │ ├── copper_lantern.json │ │ ├── copper_nugget.json │ │ ├── copper_pan.json │ │ ├── copper_pulsar.json │ │ ├── copper_rail.json │ │ ├── copper_trap.json │ │ ├── vertical_cut_copper.json │ │ ├── vertical_exposed_cut_copper.json │ │ ├── vertical_oxidized_cut_copper.json │ │ └── vertical_weathered_cut_copper.json │ ├── damage_type │ └── trap.json │ ├── loot_table │ └── blocks │ │ ├── copper_kiln.json │ │ ├── copper_lantern.json │ │ ├── copper_pan.json │ │ ├── copper_rail.json │ │ ├── copper_trap.json │ │ ├── vertical_cut_copper.json │ │ ├── vertical_exposed_cut_copper.json │ │ ├── vertical_oxidized_cut_copper.json │ │ ├── vertical_weathered_cut_copper.json │ │ ├── waxed_vertical_cut_copper.json │ │ ├── waxed_vertical_exposed_cut_copper.json │ │ ├── waxed_vertical_oxidized_cut_copper.json │ │ └── waxed_vertical_weathered_cut_copper.json │ └── recipe │ ├── black_glazed_terracotta_smelting.json │ ├── blue_glazed_terracotta_smelting.json │ ├── brick_kiln_smelting.json │ ├── brown_glazed_terracotta_smelting.json │ ├── charcoal_kiln_smelting.json │ ├── copper_barometer.json │ ├── copper_button.json │ ├── copper_kiln.json │ ├── copper_lantern.json │ ├── copper_nugget.json │ ├── copper_pan.json │ ├── copper_pulsar.json │ ├── copper_rail.json │ ├── copper_trap.json │ ├── coppper_ingot_from_nuggets.json │ ├── cracked_deepslate_bricks_smelting.json │ ├── cracked_deepslate_tiles_smelting.json │ ├── cracked_nether_bricks_smelting.json │ ├── cracked_polished_blackstone_bricks_smelting.json │ ├── cracked_stone_bricks_smelting.json │ ├── cyan_glazed_terracotta_smelting.json │ ├── deepslate_smelting.json │ ├── glass_kiln_smelting.json │ ├── gray_glazed_terracotta_smelting.json │ ├── green_glazed_terracotta_smelting.json │ ├── light_blue_glazed_terracotta_smelting.json │ ├── light_gray_glazed_terracotta_smelting.json │ ├── lime_glazed_terracotta_smelting.json │ ├── magenta_glazed_terracotta_smelting.json │ ├── nether_brick_smelting.json │ ├── orange_glazed_terracotta_smelting.json │ ├── pink_glazed_terracotta_smelting.json │ ├── purple_glazed_terracotta_smelting.json │ ├── red_glazed_terracotta_smelting.json │ ├── rose_gold_axe.json │ ├── rose_gold_hoe.json │ ├── rose_gold_pickaxe.json │ ├── rose_gold_shovel.json │ ├── rose_gold_sword.json │ ├── rose_gold_upgrade_template.json │ ├── smooth_basalt_smelting.json │ ├── smooth_quartz_smelting.json │ ├── smooth_red_sandstone_smelting.json │ ├── smooth_sandstone_smelting.json │ ├── smooth_stone_kiln_smelting.json │ ├── stone_kiln_smelting.json │ ├── terracotta_kiln_smelting.json │ ├── vertical_cut_copper.json │ ├── vertical_exposed_cut_copper.json │ ├── vertical_oxidized_cut_copper.json │ ├── vertical_weathered_cut_copper.json │ ├── white_glazed_terracotta_smelting.json │ └── yellow_glazed_terracotta_smelting.json ├── fabric.mod.json ├── oxidized.accesswidener └── oxidized.mixins.json /.gitignore: -------------------------------------------------------------------------------- 1 | # gradle 2 | 3 | .gradle/ 4 | build/ 5 | out/ 6 | classes/ 7 | 8 | # eclipse 9 | 10 | *.launch 11 | 12 | # idea 13 | 14 | .idea/ 15 | *.iml 16 | *.ipr 17 | *.iws 18 | 19 | # vscode 20 | 21 | .settings/ 22 | .vscode/ 23 | bin/ 24 | .classpath 25 | .project 26 | 27 | # macos 28 | 29 | *.DS_Store 30 | 31 | # fabric 32 | 33 | run/ 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Oxidized 2 | 3 | Oxidized is a Minecraft mod for the Fabric mod loader that aims to provide more uses for vanilla copper. 4 | 5 | ## Links 6 | * [Curseforge](https://www.curseforge.com/minecraft/mc-mods/oxidized) 7 | * [Discord](https://discord.gg/muAnYRGXrq) 8 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'fabric-loom' version '1.7-SNAPSHOT' 3 | id 'maven-publish' 4 | } 5 | 6 | version = project.mod_version 7 | group = project.maven_group 8 | 9 | base { 10 | archivesName = project.archives_base_name 11 | } 12 | 13 | repositories { 14 | maven { url 'https://jitpack.io' } 15 | maven { url "https://maven.shedaniel.me" } 16 | maven { url "https://maven.terraformersmc.com" } 17 | 18 | exclusiveContent { 19 | forRepository { 20 | maven { 21 | url = "https://api.modrinth.com/maven" 22 | } 23 | } 24 | filter { 25 | includeGroup "maven.modrinth" 26 | } 27 | } 28 | } 29 | 30 | loom { 31 | accessWidenerPath = file("src/main/resources/oxidized.accesswidener") 32 | } 33 | 34 | dependencies { 35 | minecraft "com.mojang:minecraft:${project.minecraft_version}" 36 | mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" 37 | modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" 38 | modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" 39 | 40 | // REI 41 | modCompileOnly "me.shedaniel:RoughlyEnoughItems-api-fabric:${project.rei_version}" 42 | modRuntimeOnly "me.shedaniel:RoughlyEnoughItems-fabric:${project.rei_version}" 43 | modCompileOnly "me.shedaniel:RoughlyEnoughItems-default-plugin:${project.rei_version}" 44 | 45 | // Mod Menu 46 | modCompileOnly modRuntimeOnly("com.terraformersmc:modmenu:${project.modmenu_version}"), { 47 | exclude(group: "net.fabricmc.fabric-api") 48 | } 49 | 50 | // SafLib 51 | modImplementation include("maven.modrinth:saflib:${project.lib_version}") 52 | } 53 | 54 | processResources { 55 | inputs.property "version", project.version 56 | 57 | filesMatching("fabric.mod.json") { 58 | expand "version": project.version 59 | } 60 | } 61 | 62 | tasks.withType(JavaCompile).configureEach { 63 | 64 | it.options.release = 21 65 | } 66 | 67 | java { 68 | sourceCompatibility = JavaVersion.VERSION_21 69 | targetCompatibility = JavaVersion.VERSION_21 70 | 71 | withSourcesJar() 72 | } 73 | 74 | jar { 75 | from("LICENSE") { 76 | rename { "${it}_${project.archivesBaseName}"} 77 | } 78 | } 79 | 80 | 81 | publishing { 82 | publications { 83 | mavenJava(MavenPublication) { 84 | from components.java 85 | } 86 | } 87 | 88 | repositories { 89 | 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1G 2 | 3 | 4 | minecraft_version=1.21.1 5 | yarn_mappings=1.21.1+build.3 6 | loader_version=0.16.9 7 | 8 | fabric_version=0.107.0+1.21.1 9 | rei_version=16.0.788 10 | modmenu_version=11.0.3 11 | lib_version=1.1.1 12 | 13 | # Mod Properties 14 | mod_version = 1.8.4 15 | maven_group = safro 16 | archives_base_name = oxidized 17 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | maven { 4 | name = 'Fabric' 5 | url = 'https://maven.fabricmc.net/' 6 | } 7 | gradlePluginPortal() 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/Oxidized.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized; 2 | 3 | import net.fabricmc.api.ModInitializer; 4 | import net.fabricmc.loader.api.FabricLoader; 5 | import net.minecraft.item.ItemGroup; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.registry.RegistryKey; 8 | import org.apache.logging.log4j.LogManager; 9 | import org.apache.logging.log4j.Logger; 10 | import safro.oxidized.config.OxidizedConfig; 11 | import safro.oxidized.registry.BlockRegistry; 12 | import safro.oxidized.registry.EntityRegistry; 13 | import safro.oxidized.registry.ItemRegistry; 14 | import safro.oxidized.util.TrapDamageSource; 15 | import safro.saflib.SafLib; 16 | 17 | import java.io.File; 18 | import java.util.ArrayList; 19 | 20 | public class Oxidized implements ModInitializer { 21 | public static RegistryKey ITEMGROUP = SafLib.createGroup("oxidized"); 22 | public static final Logger LOGGER = LogManager.getLogger("oxidized"); 23 | public static OxidizedConfig CONFIG; 24 | 25 | @Override 26 | public void onInitialize() { 27 | CONFIG = OxidizedConfig.loadConfig(new File(FabricLoader.getInstance().getConfigDir() + "/oxidized_config.json")); 28 | 29 | TrapDamageSource.init(); 30 | BlockRegistry.init(); 31 | ItemRegistry.init(); 32 | EntityRegistry.init(); 33 | 34 | SafLib.registerAll(ITEMGROUP, BlockRegistry.COPPER_KILN); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/OxidizedClient.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized; 2 | 3 | import net.fabricmc.api.ClientModInitializer; 4 | import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap; 5 | import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry; 6 | import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry; 7 | import net.minecraft.client.gui.screen.ingame.HandledScreens; 8 | import net.minecraft.client.render.RenderLayer; 9 | import net.minecraft.client.render.entity.model.EntityModelLayer; 10 | import net.minecraft.util.Identifier; 11 | import safro.oxidized.block.screen.CopperKilnScreen; 12 | import safro.oxidized.entity.CopperGolemEntityModel; 13 | import safro.oxidized.entity.CopperGolemEntityRenderer; 14 | import safro.oxidized.registry.BlockRegistry; 15 | import safro.oxidized.registry.EntityRegistry; 16 | 17 | public class OxidizedClient implements ClientModInitializer { 18 | public static final EntityModelLayer COPPER_GOLEM_LAYER = new EntityModelLayer(Identifier.of("oxidized", "copper_golem_layer"), "copper_golem_layer"); 19 | 20 | @Override 21 | public void onInitializeClient() { 22 | if (Oxidized.CONFIG.enable_copper_golem) { 23 | EntityModelLayerRegistry.registerModelLayer(COPPER_GOLEM_LAYER, CopperGolemEntityModel::getTexturedModelData); 24 | EntityRendererRegistry.register(EntityRegistry.COPPER_GOLEM, CopperGolemEntityRenderer::new); 25 | } 26 | 27 | BlockRenderLayerMap.INSTANCE.putBlock(BlockRegistry.COPPER_RAIL, RenderLayer.getCutout()); 28 | BlockRenderLayerMap.INSTANCE.putBlock(BlockRegistry.COPPER_KILN, RenderLayer.getCutout()); 29 | BlockRenderLayerMap.INSTANCE.putBlock(BlockRegistry.COPPER_LANTERN, RenderLayer.getCutout()); 30 | BlockRenderLayerMap.INSTANCE.putBlock(BlockRegistry.COPPER_TRAP, RenderLayer.getCutout()); 31 | 32 | HandledScreens.register(BlockRegistry.COPPER_KILN_SCREEN_HANDLER, CopperKilnScreen::new); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/CopperButtonBlock.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block; 2 | 3 | import net.minecraft.block.BlockSetType; 4 | import net.minecraft.block.ButtonBlock; 5 | import net.minecraft.sound.SoundEvents; 6 | 7 | public class CopperButtonBlock extends ButtonBlock { 8 | 9 | public CopperButtonBlock(Settings settings) { 10 | super(BlockSetType.IRON, 20, settings); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/CopperKilnBlock.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block; 2 | 3 | import com.mojang.serialization.MapCodec; 4 | import net.minecraft.block.AbstractFurnaceBlock; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.entity.BlockEntity; 7 | import net.minecraft.block.entity.BlockEntityTicker; 8 | import net.minecraft.block.entity.BlockEntityType; 9 | import net.minecraft.entity.player.PlayerEntity; 10 | import net.minecraft.particle.ParticleTypes; 11 | import net.minecraft.screen.NamedScreenHandlerFactory; 12 | import net.minecraft.sound.SoundCategory; 13 | import net.minecraft.sound.SoundEvents; 14 | import net.minecraft.stat.Stats; 15 | import net.minecraft.util.math.BlockPos; 16 | import net.minecraft.util.math.random.Random; 17 | import net.minecraft.world.World; 18 | import org.jetbrains.annotations.Nullable; 19 | import safro.oxidized.block.entity.CopperKilnBlockEntity; 20 | import safro.oxidized.registry.BlockRegistry; 21 | 22 | public class CopperKilnBlock extends AbstractFurnaceBlock { 23 | public static final MapCodec CODEC = createCodec(CopperKilnBlock::new); 24 | 25 | public CopperKilnBlock(Settings settings) { 26 | super(settings); 27 | } 28 | 29 | @Override 30 | protected MapCodec getCodec() { 31 | return CODEC; 32 | } 33 | 34 | @Override 35 | public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { 36 | return new CopperKilnBlockEntity(pos, state); 37 | } 38 | 39 | @Nullable 40 | @Override 41 | public BlockEntityTicker getTicker(World world, BlockState state, BlockEntityType type) { 42 | return validateTicker(world, type, BlockRegistry.COPPER_KILN_BLOCK_ENTITY); 43 | } 44 | 45 | @Override 46 | public void openScreen(World world, BlockPos pos, PlayerEntity player) { 47 | BlockEntity blockEntity = world.getBlockEntity(pos); 48 | if (blockEntity instanceof CopperKilnBlockEntity) { 49 | player.openHandledScreen((NamedScreenHandlerFactory)blockEntity); 50 | player.incrementStat(Stats.INTERACT_WITH_FURNACE); 51 | } 52 | 53 | } 54 | 55 | @Override 56 | public void randomDisplayTick(BlockState state, World world, BlockPos pos, Random random) { 57 | if (state.get(LIT)) { 58 | double d = (double)pos.getX() + 0.5D; 59 | double e = pos.getY(); 60 | double f = (double)pos.getZ() + 0.5D; 61 | if (random.nextDouble() < 0.1D) { 62 | world.playSound(d, e, f, SoundEvents.BLOCK_SMOKER_SMOKE, SoundCategory.BLOCKS, 1.0F, 1.0F, false); 63 | } 64 | 65 | world.addParticle(ParticleTypes.SMOKE, d, e + 1.1D, f, 0.0D, 0.0D, 0.0D); 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/CopperPanBlock.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block; 2 | 3 | import net.minecraft.block.*; 4 | import net.minecraft.entity.ItemEntity; 5 | import net.minecraft.fluid.FluidState; 6 | import net.minecraft.fluid.Fluids; 7 | import net.minecraft.item.Item; 8 | import net.minecraft.item.ItemPlacementContext; 9 | import net.minecraft.item.ItemStack; 10 | import net.minecraft.item.Items; 11 | import net.minecraft.server.world.ServerWorld; 12 | import net.minecraft.sound.SoundCategory; 13 | import net.minecraft.sound.SoundEvents; 14 | import net.minecraft.state.StateManager; 15 | import net.minecraft.state.property.BooleanProperty; 16 | import net.minecraft.state.property.IntProperty; 17 | import net.minecraft.state.property.Properties; 18 | import net.minecraft.registry.tag.BlockTags; 19 | import net.minecraft.registry.tag.FluidTags; 20 | import net.minecraft.util.math.BlockPos; 21 | import net.minecraft.util.math.Direction; 22 | import net.minecraft.util.math.random.Random; 23 | import net.minecraft.util.shape.VoxelShape; 24 | import net.minecraft.world.BlockView; 25 | import net.minecraft.world.WorldAccess; 26 | import safro.oxidized.Oxidized; 27 | 28 | public class CopperPanBlock extends Block implements Waterloggable { 29 | public static final IntProperty PANNED; 30 | public static final BooleanProperty WATERLOGGED; 31 | private static final VoxelShape SHAPE = Block.createCuboidShape(0.0D, 0.0D, 0.0D, 16.0D, 5.0D, 16.0D); 32 | 33 | public CopperPanBlock(Settings settings) { 34 | super(settings); 35 | this.setDefaultState(this.stateManager.getDefaultState().with(PANNED, 0).with(WATERLOGGED, false)); 36 | } 37 | 38 | @Override 39 | public void randomTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 40 | int i = state.get(PANNED); 41 | float range = 0.55F; 42 | if (state.getFluidState().isIn(FluidTags.WATER) && isSpecialBlockBelow(world, pos)) { 43 | if (i < 2) { 44 | world.setBlockState(pos, state.with(PANNED, i + 1), 2); 45 | } else { 46 | if (Oxidized.CONFIG.enable_copper_pan_sound) world.playSound(null, pos, SoundEvents.ENTITY_FISHING_BOBBER_SPLASH, SoundCategory.BLOCKS, 0.4F, 0.9F + random.nextFloat() * 0.2F); 47 | double d = (double)(world.random.nextFloat() * range) + (1-range)/2; 48 | double e = 0.66000000238418579D; 49 | double g = (double)(world.random.nextFloat() * range) + (1-range)/2; 50 | ItemEntity itemEntity = new ItemEntity(world, (double)pos.getX() + d, (double)pos.getY() + e, (double)pos.getZ() + g, new ItemStack(getPannedItem(random))); 51 | itemEntity.setToDefaultPickupDelay(); 52 | world.spawnEntity(itemEntity); 53 | } 54 | } 55 | } 56 | 57 | public Item getPannedItem(Random random) { 58 | if (random.nextFloat() <= Oxidized.CONFIG.iron_nugget_chance) { 59 | return Items.IRON_NUGGET; 60 | } else if (random.nextFloat() <= Oxidized.CONFIG.gold_nugget_chance) { 61 | return Items.GOLD_NUGGET; 62 | } else if (random.nextFloat() <= Oxidized.CONFIG.sand_chance) { 63 | return Items.SAND; 64 | } else if (random.nextFloat() <= Oxidized.CONFIG.emerald_chance) { 65 | return Items.EMERALD; 66 | } else if (random.nextFloat() <= Oxidized.CONFIG.gravel_chance) { 67 | return Items.GRAVEL; 68 | } 69 | else 70 | return Items.CLAY_BALL; 71 | } 72 | 73 | public static boolean isSpecialBlockBelow(BlockView world, BlockPos pos) { 74 | return isBlock(world, pos.down()); 75 | } 76 | 77 | public static boolean isBlock(BlockView world, BlockPos pos) { 78 | return world.getBlockState(pos).isIn(BlockTags.SAND) || world.getBlockState(pos).isOf(Blocks.GRAVEL); 79 | } 80 | 81 | @Override 82 | public FluidState getFluidState(BlockState state) { 83 | return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : super.getFluidState(state); 84 | } 85 | 86 | @Override 87 | public BlockState getPlacementState(ItemPlacementContext ctx) { 88 | FluidState fluidState = ctx.getWorld().getFluidState(ctx.getBlockPos()); 89 | return this.getDefaultState().with(WATERLOGGED, fluidState.getFluid() == Fluids.WATER); 90 | } 91 | 92 | @Override 93 | public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) { 94 | if (state.get(WATERLOGGED)) { 95 | world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world)); 96 | } 97 | return super.getStateForNeighborUpdate(state, direction, neighborState, world, pos, neighborPos); 98 | } 99 | 100 | @Override 101 | public BlockRenderType getRenderType(BlockState state) { 102 | return BlockRenderType.MODEL; 103 | } 104 | 105 | @Override 106 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 107 | return SHAPE; 108 | } 109 | 110 | @Override 111 | public void appendProperties(StateManager.Builder builder) { 112 | builder.add(PANNED); 113 | builder.add(WATERLOGGED); 114 | super.appendProperties(builder); 115 | } 116 | 117 | static { 118 | PANNED = Properties.HATCH; 119 | WATERLOGGED = Properties.WATERLOGGED; 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/CopperRailBlock.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block; 2 | 3 | import com.mojang.serialization.MapCodec; 4 | import net.minecraft.block.*; 5 | import net.minecraft.block.enums.RailShape; 6 | import net.minecraft.entity.vehicle.AbstractMinecartEntity; 7 | import net.minecraft.state.StateManager; 8 | import net.minecraft.state.property.BooleanProperty; 9 | import net.minecraft.state.property.EnumProperty; 10 | import net.minecraft.state.property.Properties; 11 | import net.minecraft.state.property.Property; 12 | import net.minecraft.util.BlockMirror; 13 | import net.minecraft.util.BlockRotation; 14 | import net.minecraft.util.math.BlockPos; 15 | import net.minecraft.util.math.Vec3d; 16 | import net.minecraft.world.World; 17 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 18 | import safro.oxidized.Oxidized; 19 | import safro.oxidized.mixin.MinecartEntityAccessor; 20 | import safro.oxidized.util.MinecartHandler; 21 | 22 | public class CopperRailBlock extends AbstractRailBlock { 23 | public static final MapCodec CODEC = createCodec(CopperRailBlock::new); 24 | public static final EnumProperty SHAPE; 25 | public static final BooleanProperty POWERED; 26 | 27 | public CopperRailBlock(AbstractBlock.Settings settings) { 28 | super(true, settings); 29 | this.setDefaultState(this.stateManager.getDefaultState().with(SHAPE, RailShape.NORTH_SOUTH).with(POWERED, false).with(WATERLOGGED, false)); 30 | } 31 | 32 | public void onMoveOnRail(BlockPos pos, BlockState state, AbstractMinecartEntity minecart, CallbackInfo info) { 33 | 34 | if (!state.get(POWERED)) { 35 | double slowDownScaler = 0.25D; 36 | minecart.setVelocity(minecart.getVelocity().multiply(slowDownScaler, 1.0D, slowDownScaler)); 37 | return; 38 | } 39 | 40 | RailShape railShape = state.get(getShapeProperty()); 41 | Vec3d velocity = minecart.getVelocity(); 42 | double speed = Math.sqrt(velocity.x * velocity.x + velocity.z * velocity.z); 43 | 44 | if (speed > 0.01D) { 45 | minecart.setVelocity(velocity.normalize().multiply(((MinecartEntityAccessor) minecart).invokeGetMaxOffRailSpeed() * 10D)); 46 | } else { 47 | MinecartHandler.handleBlockHit(pos, minecart, railShape); 48 | } 49 | } 50 | 51 | public boolean isPoweredByOtherRails(World world, BlockPos pos, BlockState state, boolean bl, int distance) { 52 | if (distance >= Oxidized.CONFIG.copper_rail_range) { 53 | return false; 54 | } else { 55 | int i = pos.getX(); 56 | int j = pos.getY(); 57 | int k = pos.getZ(); 58 | boolean bl2 = true; 59 | RailShape railShape = state.get(SHAPE); 60 | switch(railShape) { 61 | case NORTH_SOUTH: 62 | if (bl) { 63 | ++k; 64 | } else { 65 | --k; 66 | } 67 | break; 68 | case EAST_WEST: 69 | if (bl) { 70 | --i; 71 | } else { 72 | ++i; 73 | } 74 | break; 75 | case ASCENDING_EAST: 76 | if (bl) { 77 | --i; 78 | } else { 79 | ++i; 80 | ++j; 81 | bl2 = false; 82 | } 83 | 84 | railShape = RailShape.EAST_WEST; 85 | break; 86 | case ASCENDING_WEST: 87 | if (bl) { 88 | --i; 89 | ++j; 90 | bl2 = false; 91 | } else { 92 | ++i; 93 | } 94 | 95 | railShape = RailShape.EAST_WEST; 96 | break; 97 | case ASCENDING_NORTH: 98 | if (bl) { 99 | ++k; 100 | } else { 101 | --k; 102 | ++j; 103 | bl2 = false; 104 | } 105 | 106 | railShape = RailShape.NORTH_SOUTH; 107 | break; 108 | case ASCENDING_SOUTH: 109 | if (bl) { 110 | ++k; 111 | ++j; 112 | bl2 = false; 113 | } else { 114 | --k; 115 | } 116 | 117 | railShape = RailShape.NORTH_SOUTH; 118 | } 119 | 120 | if (this.isPoweredByOtherRails(world, new BlockPos(i, j, k), bl, distance, railShape)) { 121 | return true; 122 | } else { 123 | return bl2 && this.isPoweredByOtherRails(world, new BlockPos(i, j - 1, k), bl, distance, railShape); 124 | } 125 | } 126 | } 127 | 128 | public boolean isPoweredByOtherRails(World world, BlockPos pos, boolean bl, int distance, RailShape shape) { 129 | BlockState blockState = world.getBlockState(pos); 130 | if (!blockState.isOf(this)) { 131 | return false; 132 | } else { 133 | RailShape railShape = blockState.get(SHAPE); 134 | if (shape == RailShape.EAST_WEST && (railShape == RailShape.NORTH_SOUTH || railShape == RailShape.ASCENDING_NORTH || railShape == RailShape.ASCENDING_SOUTH)) { 135 | return false; 136 | } else if (shape == RailShape.NORTH_SOUTH && (railShape == RailShape.EAST_WEST || railShape == RailShape.ASCENDING_EAST || railShape == RailShape.ASCENDING_WEST)) { 137 | return false; 138 | } else if (blockState.get(POWERED)) { 139 | return world.isReceivingRedstonePower(pos) ? true : this.isPoweredByOtherRails(world, pos, blockState, bl, distance + 1); 140 | } else { 141 | return false; 142 | } 143 | } 144 | } 145 | 146 | @Override 147 | protected MapCodec getCodec() { 148 | return CODEC; 149 | } 150 | 151 | public void updateBlockState(BlockState state, World world, BlockPos pos, Block neighbor) { 152 | boolean bl = state.get(POWERED); 153 | boolean bl2 = world.isReceivingRedstonePower(pos) || this.isPoweredByOtherRails(world, pos, state, true, 0) || this.isPoweredByOtherRails(world, pos, state, false, 0); 154 | if (bl2 != bl) { 155 | world.setBlockState(pos, state.with(POWERED, bl2), Block.NOTIFY_ALL); 156 | world.updateNeighborsAlways(pos.down(), this); 157 | if (state.get(SHAPE).isAscending()) { 158 | world.updateNeighborsAlways(pos.up(), this); 159 | } 160 | } 161 | 162 | } 163 | 164 | public Property getShapeProperty() { 165 | return SHAPE; 166 | } 167 | 168 | public BlockState rotate(BlockState state, BlockRotation rotation) { 169 | switch(rotation) { 170 | case CLOCKWISE_180: 171 | switch(state.get(SHAPE)) { 172 | case ASCENDING_EAST: 173 | return state.with(SHAPE, RailShape.ASCENDING_WEST); 174 | case ASCENDING_WEST: 175 | return state.with(SHAPE, RailShape.ASCENDING_EAST); 176 | case ASCENDING_NORTH: 177 | return state.with(SHAPE, RailShape.ASCENDING_SOUTH); 178 | case ASCENDING_SOUTH: 179 | return state.with(SHAPE, RailShape.ASCENDING_NORTH); 180 | case SOUTH_EAST: 181 | return state.with(SHAPE, RailShape.NORTH_WEST); 182 | case SOUTH_WEST: 183 | return state.with(SHAPE, RailShape.NORTH_EAST); 184 | case NORTH_WEST: 185 | return state.with(SHAPE, RailShape.SOUTH_EAST); 186 | case NORTH_EAST: 187 | return state.with(SHAPE, RailShape.SOUTH_WEST); 188 | } 189 | case COUNTERCLOCKWISE_90: 190 | switch(state.get(SHAPE)) { 191 | case NORTH_SOUTH: 192 | return state.with(SHAPE, RailShape.EAST_WEST); 193 | case EAST_WEST: 194 | return state.with(SHAPE, RailShape.NORTH_SOUTH); 195 | case ASCENDING_EAST: 196 | return state.with(SHAPE, RailShape.ASCENDING_NORTH); 197 | case ASCENDING_WEST: 198 | return state.with(SHAPE, RailShape.ASCENDING_SOUTH); 199 | case ASCENDING_NORTH: 200 | return state.with(SHAPE, RailShape.ASCENDING_WEST); 201 | case ASCENDING_SOUTH: 202 | return state.with(SHAPE, RailShape.ASCENDING_EAST); 203 | case SOUTH_EAST: 204 | return state.with(SHAPE, RailShape.NORTH_EAST); 205 | case SOUTH_WEST: 206 | return state.with(SHAPE, RailShape.SOUTH_EAST); 207 | case NORTH_WEST: 208 | return state.with(SHAPE, RailShape.SOUTH_WEST); 209 | case NORTH_EAST: 210 | return state.with(SHAPE, RailShape.NORTH_WEST); 211 | } 212 | case CLOCKWISE_90: 213 | switch(state.get(SHAPE)) { 214 | case NORTH_SOUTH: 215 | return state.with(SHAPE, RailShape.EAST_WEST); 216 | case EAST_WEST: 217 | return state.with(SHAPE, RailShape.NORTH_SOUTH); 218 | case ASCENDING_EAST: 219 | return state.with(SHAPE, RailShape.ASCENDING_SOUTH); 220 | case ASCENDING_WEST: 221 | return state.with(SHAPE, RailShape.ASCENDING_NORTH); 222 | case ASCENDING_NORTH: 223 | return state.with(SHAPE, RailShape.ASCENDING_EAST); 224 | case ASCENDING_SOUTH: 225 | return state.with(SHAPE, RailShape.ASCENDING_WEST); 226 | case SOUTH_EAST: 227 | return state.with(SHAPE, RailShape.SOUTH_WEST); 228 | case SOUTH_WEST: 229 | return state.with(SHAPE, RailShape.NORTH_WEST); 230 | case NORTH_WEST: 231 | return state.with(SHAPE, RailShape.NORTH_EAST); 232 | case NORTH_EAST: 233 | return state.with(SHAPE, RailShape.SOUTH_EAST); 234 | } 235 | default: 236 | return state; 237 | } 238 | } 239 | 240 | public BlockState mirror(BlockState state, BlockMirror mirror) { 241 | RailShape railShape = state.get(SHAPE); 242 | switch(mirror) { 243 | case LEFT_RIGHT: 244 | switch(railShape) { 245 | case ASCENDING_NORTH: 246 | return state.with(SHAPE, RailShape.ASCENDING_SOUTH); 247 | case ASCENDING_SOUTH: 248 | return state.with(SHAPE, RailShape.ASCENDING_NORTH); 249 | case SOUTH_EAST: 250 | return state.with(SHAPE, RailShape.NORTH_EAST); 251 | case SOUTH_WEST: 252 | return state.with(SHAPE, RailShape.NORTH_WEST); 253 | case NORTH_WEST: 254 | return state.with(SHAPE, RailShape.SOUTH_WEST); 255 | case NORTH_EAST: 256 | return state.with(SHAPE, RailShape.SOUTH_EAST); 257 | default: 258 | return super.mirror(state, mirror); 259 | } 260 | case FRONT_BACK: 261 | switch(railShape) { 262 | case ASCENDING_EAST: 263 | return state.with(SHAPE, RailShape.ASCENDING_WEST); 264 | case ASCENDING_WEST: 265 | return state.with(SHAPE, RailShape.ASCENDING_EAST); 266 | case ASCENDING_NORTH: 267 | case ASCENDING_SOUTH: 268 | default: 269 | break; 270 | case SOUTH_EAST: 271 | return state.with(SHAPE, RailShape.SOUTH_WEST); 272 | case SOUTH_WEST: 273 | return state.with(SHAPE, RailShape.SOUTH_EAST); 274 | case NORTH_WEST: 275 | return state.with(SHAPE, RailShape.NORTH_EAST); 276 | case NORTH_EAST: 277 | return state.with(SHAPE, RailShape.NORTH_WEST); 278 | } 279 | } 280 | 281 | return super.mirror(state, mirror); 282 | } 283 | 284 | public void appendProperties(StateManager.Builder builder) { 285 | builder.add(SHAPE, POWERED, WATERLOGGED); 286 | } 287 | 288 | static { 289 | SHAPE = Properties.STRAIGHT_RAIL_SHAPE; 290 | POWERED = Properties.POWERED; 291 | } 292 | } 293 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/CopperTrapBlock.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.block.BlockState; 5 | import net.minecraft.block.ShapeContext; 6 | import net.minecraft.entity.Entity; 7 | import net.minecraft.entity.LivingEntity; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.ItemPlacementContext; 10 | import net.minecraft.server.world.ServerWorld; 11 | import net.minecraft.sound.SoundCategory; 12 | import net.minecraft.sound.SoundEvents; 13 | import net.minecraft.state.StateManager; 14 | import net.minecraft.state.property.BooleanProperty; 15 | import net.minecraft.util.ActionResult; 16 | import net.minecraft.util.Hand; 17 | import net.minecraft.util.hit.BlockHitResult; 18 | import net.minecraft.util.math.BlockPos; 19 | import net.minecraft.util.math.random.Random; 20 | import net.minecraft.util.shape.VoxelShape; 21 | import net.minecraft.world.BlockView; 22 | import net.minecraft.world.World; 23 | import net.minecraft.world.event.GameEvent; 24 | import safro.oxidized.util.TrapDamageSource; 25 | import safro.saflib.util.DamageSourceUtil; 26 | 27 | public class CopperTrapBlock extends Block { 28 | public static final BooleanProperty CLOSED; 29 | protected static final VoxelShape SHAPE; 30 | 31 | public CopperTrapBlock(Settings settings) { 32 | super(settings); 33 | this.setDefaultState(this.stateManager.getDefaultState().with(CLOSED, false)); 34 | } 35 | 36 | @Override 37 | public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, BlockHitResult hit) { 38 | if (!world.isClient) { 39 | if (state.get(CLOSED)) { 40 | world.setBlockState(pos, state.with(CLOSED, false), 3); 41 | } else { 42 | world.setBlockState(pos, state.with(CLOSED, true), 3); 43 | } 44 | } 45 | world.playSound(null, pos, SoundEvents.BLOCK_COPPER_HIT, SoundCategory.BLOCKS, 1.0F, 1.0F); 46 | world.emitGameEvent(player, GameEvent.BLOCK_CHANGE, pos); 47 | return ActionResult.SUCCESS; 48 | } 49 | 50 | @Override 51 | public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) { 52 | if (entity instanceof LivingEntity && !entity.canAvoidTraps()) { 53 | if (!state.get(CLOSED)) { 54 | if (!world.isClient && (entity.lastRenderX != entity.getX() || entity.lastRenderZ != entity.getZ())) { 55 | double d = Math.abs(entity.getX() - entity.lastRenderX); 56 | double e = Math.abs(entity.getZ() - entity.lastRenderZ); 57 | if (d >= 0.003000000026077032D || e >= 0.003000000026077032D) { 58 | entity.damage(DamageSourceUtil.create(world, TrapDamageSource.TRAP), 5.0F); 59 | } 60 | this.schedule(state, world, pos); 61 | } 62 | } 63 | } 64 | } 65 | 66 | @Override 67 | protected void appendProperties(StateManager.Builder builder) { 68 | builder.add(CLOSED); 69 | super.appendProperties(builder); 70 | } 71 | 72 | @Override 73 | public VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) { 74 | return SHAPE; 75 | } 76 | 77 | public void schedule(BlockState state, World world, BlockPos pos) { 78 | world.setBlockState(pos, state.with(CLOSED, true), 3); 79 | world.scheduleBlockTick(pos, this, 60); 80 | world.updateNeighborsAlways(pos, this); 81 | } 82 | 83 | @Override 84 | public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random) { 85 | if (state.get(CLOSED)) { 86 | world.setBlockState(pos, state.with(CLOSED, false)); 87 | world.updateNeighborsAlways(pos, this); 88 | } 89 | } 90 | 91 | @Override 92 | public BlockState getPlacementState(ItemPlacementContext ctx) { 93 | return this.getDefaultState().with(CLOSED, ctx.getWorld().isReceivingRedstonePower(ctx.getBlockPos())); 94 | } 95 | 96 | @Override 97 | public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify) { 98 | if (!world.isClient) { 99 | world.setBlockState(pos, state.with(CLOSED, world.isReceivingRedstonePower(pos))); 100 | } 101 | } 102 | 103 | public static boolean isClosed(BlockState state) { 104 | return state.get(CLOSED); 105 | } 106 | 107 | static { 108 | CLOSED = BooleanProperty.of("closed"); 109 | SHAPE = Block.createCuboidShape(2, 0, 1, 14, 2, 15); 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/entity/CopperKilnBlockEntity.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block.entity; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.block.entity.AbstractFurnaceBlockEntity; 5 | import net.minecraft.entity.player.PlayerInventory; 6 | import net.minecraft.item.ItemStack; 7 | import net.minecraft.screen.ScreenHandler; 8 | import net.minecraft.text.Text; 9 | import net.minecraft.util.math.BlockPos; 10 | import safro.oxidized.block.screen.CopperKilnScreenHandler; 11 | import safro.oxidized.registry.BlockRegistry; 12 | 13 | public class CopperKilnBlockEntity extends AbstractFurnaceBlockEntity { 14 | 15 | public CopperKilnBlockEntity(BlockPos pos, BlockState state) { 16 | super(BlockRegistry.COPPER_KILN_BLOCK_ENTITY, pos, state, BlockRegistry.COPPER_KILN_RECIPE_TYPE); 17 | } 18 | 19 | protected Text getContainerName() { 20 | return Text.translatable("container.oxidized.copper_kiln"); 21 | } 22 | 23 | protected int getFuelTime(ItemStack fuel) { 24 | return super.getFuelTime(fuel) / 2; 25 | } 26 | 27 | protected ScreenHandler createScreenHandler(int syncId, PlayerInventory playerInventory) { 28 | return new CopperKilnScreenHandler(syncId, playerInventory, this, this.propertyDelegate); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/screen/CopperKilnScreen.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block.screen; 2 | 3 | 4 | import net.minecraft.client.gui.screen.ingame.AbstractFurnaceScreen; 5 | import net.minecraft.entity.player.PlayerInventory; 6 | import net.minecraft.text.Text; 7 | import net.minecraft.util.Identifier; 8 | import safro.oxidized.recipe.CopperKilnRecipeBook; 9 | 10 | public class CopperKilnScreen extends AbstractFurnaceScreen { 11 | private static final Identifier LIT_PROGRESS_TEXTURE = Identifier.ofVanilla("container/furnace/lit_progress"); 12 | private static final Identifier BURN_PROGRESS_TEXTURE = Identifier.ofVanilla("container/furnace/burn_progress"); 13 | private static final Identifier TEXTURE = Identifier.ofVanilla("textures/gui/container/furnace.png"); 14 | 15 | public CopperKilnScreen(CopperKilnScreenHandler handler, PlayerInventory inventory, Text title) { 16 | super(handler, new CopperKilnRecipeBook(), inventory, title, TEXTURE, LIT_PROGRESS_TEXTURE, BURN_PROGRESS_TEXTURE); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/block/screen/CopperKilnScreenHandler.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.block.screen; 2 | 3 | import net.minecraft.entity.player.PlayerInventory; 4 | import net.minecraft.inventory.Inventory; 5 | import net.minecraft.recipe.book.RecipeBookCategory; 6 | import net.minecraft.screen.AbstractFurnaceScreenHandler; 7 | import net.minecraft.screen.PropertyDelegate; 8 | import safro.oxidized.registry.BlockRegistry; 9 | 10 | public class CopperKilnScreenHandler extends AbstractFurnaceScreenHandler { 11 | 12 | public CopperKilnScreenHandler(int syncId, PlayerInventory playerInventory) { 13 | super(BlockRegistry.COPPER_KILN_SCREEN_HANDLER, BlockRegistry.COPPER_KILN_RECIPE_TYPE, RecipeBookCategory.FURNACE, syncId, playerInventory); 14 | } 15 | 16 | public CopperKilnScreenHandler(int syncId, PlayerInventory playerInventory, Inventory inventory, PropertyDelegate propertyDelegate) { 17 | super(BlockRegistry.COPPER_KILN_SCREEN_HANDLER, BlockRegistry.COPPER_KILN_RECIPE_TYPE, RecipeBookCategory.FURNACE, syncId, playerInventory, inventory, propertyDelegate); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/config/OxidizedConfig.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.config; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.GsonBuilder; 5 | 6 | import java.io.*; 7 | import java.nio.charset.StandardCharsets; 8 | 9 | public class OxidizedConfig { 10 | private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); 11 | 12 | public int copper_rail_range = 50; 13 | 14 | public boolean enable_copper_pulsar = true; 15 | public int pulsar_reach = 10; 16 | 17 | public float iron_nugget_chance = 0.15F; 18 | public float gold_nugget_chance = 0.15F; 19 | public float sand_chance = 0.24F; 20 | public float gravel_chance = 0.12F; 21 | public float emerald_chance = 0.02F; 22 | public boolean enable_copper_pan_sound = true; 23 | 24 | public int copper_golem_button_chance = 30; 25 | public boolean enable_copper_golem = true; 26 | 27 | public boolean enable_rose_gold_tools = true; 28 | 29 | public static OxidizedConfig loadConfig(File file) { 30 | OxidizedConfig config; 31 | 32 | if (file.exists() && file.isFile()) { 33 | try ( 34 | FileInputStream fileInputStream = new FileInputStream(file); 35 | InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, StandardCharsets.UTF_8); 36 | BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 37 | ) { 38 | config = GSON.fromJson(bufferedReader, OxidizedConfig.class); 39 | } catch (IOException e) { 40 | throw new RuntimeException("Failed to load config", e); 41 | } 42 | } else { 43 | config = new OxidizedConfig(); 44 | } 45 | 46 | config.saveConfig(file); 47 | 48 | return config; 49 | } 50 | 51 | public void saveConfig(File config) { 52 | try ( 53 | FileOutputStream stream = new FileOutputStream(config); 54 | Writer writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8); 55 | ) { 56 | GSON.toJson(this, writer); 57 | } catch (IOException e) { 58 | throw new RuntimeException("Failed to load config", e); 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/entity/CopperGolemEntity.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.entity; 2 | 3 | import net.minecraft.block.Oxidizable; 4 | import net.minecraft.entity.Entity; 5 | import net.minecraft.entity.EntityType; 6 | import net.minecraft.entity.EquipmentSlot; 7 | import net.minecraft.entity.LightningEntity; 8 | import net.minecraft.entity.ai.goal.LookAroundGoal; 9 | import net.minecraft.entity.ai.goal.LookAtEntityGoal; 10 | import net.minecraft.entity.ai.goal.WanderAroundGoal; 11 | import net.minecraft.entity.attribute.DefaultAttributeContainer; 12 | import net.minecraft.entity.attribute.EntityAttributes; 13 | import net.minecraft.entity.damage.DamageSource; 14 | import net.minecraft.entity.data.DataTracker; 15 | import net.minecraft.entity.data.TrackedData; 16 | import net.minecraft.entity.data.TrackedDataHandlerRegistry; 17 | import net.minecraft.entity.mob.MobEntity; 18 | import net.minecraft.entity.passive.GolemEntity; 19 | import net.minecraft.entity.player.PlayerEntity; 20 | import net.minecraft.item.AxeItem; 21 | import net.minecraft.item.ItemStack; 22 | import net.minecraft.particle.ParticleTypes; 23 | import net.minecraft.particle.ParticleUtil; 24 | import net.minecraft.server.world.ServerWorld; 25 | import net.minecraft.sound.SoundCategory; 26 | import net.minecraft.sound.SoundEvent; 27 | import net.minecraft.sound.SoundEvents; 28 | import net.minecraft.util.ActionResult; 29 | import net.minecraft.util.Hand; 30 | import net.minecraft.util.math.intprovider.UniformIntProvider; 31 | import net.minecraft.world.World; 32 | import safro.oxidized.entity.goal.MoveToLightningRodGoal; 33 | import safro.oxidized.entity.goal.UseButtonGoal; 34 | 35 | public class CopperGolemEntity extends GolemEntity { 36 | private static final TrackedData IS_PRESSING_BUTTONS; 37 | private Oxidizable.OxidationLevel oxidizationLevel; 38 | private int tickOxidization = 0; 39 | 40 | public CopperGolemEntity(EntityType entityType, World world) { 41 | super(entityType, world); 42 | } 43 | 44 | @Override 45 | protected void initGoals() { 46 | this.goalSelector.add(1, new MoveToLightningRodGoal(this, 0.6D)); 47 | this.goalSelector.add(2, new UseButtonGoal(this, 0.8D)); 48 | this.goalSelector.add(3, new WanderAroundGoal(this, 0.4)); 49 | this.goalSelector.add(4, new LookAtEntityGoal(this, PlayerEntity.class, 6.0F)); 50 | this.goalSelector.add(5, new LookAroundGoal(this)); 51 | } 52 | 53 | public static DefaultAttributeContainer.Builder createCopperGolemAttributes() { 54 | return MobEntity.createMobAttributes().add(EntityAttributes.GENERIC_MAX_HEALTH, 15.0D).add(EntityAttributes.GENERIC_MOVEMENT_SPEED, 0.27D).add(EntityAttributes.GENERIC_KNOCKBACK_RESISTANCE, 0.75D); 55 | } 56 | 57 | public void setPressingButtons(boolean pressing) { 58 | this.dataTracker.set(IS_PRESSING_BUTTONS, pressing); 59 | } 60 | 61 | public boolean isPressingButtons() { 62 | return this.dataTracker.get(IS_PRESSING_BUTTONS); 63 | } 64 | 65 | public Oxidizable.OxidationLevel getOxidizationLevel() { 66 | return oxidizationLevel; 67 | } 68 | 69 | public boolean isStatue() { 70 | return oxidizationLevel.equals(Oxidizable.OxidationLevel.OXIDIZED); 71 | } 72 | 73 | @Override 74 | public void tick() { 75 | super.tick(); 76 | this.oxidizationTick(); 77 | if (this.oxidizationLevel != Oxidizable.OxidationLevel.OXIDIZED) { 78 | ++tickOxidization; 79 | } 80 | this.setAiDisabled(this.isStatue()); 81 | } 82 | 83 | protected void oxidizationTick() { 84 | if (tickOxidization == 1200000) { 85 | this.oxidizationLevel = Oxidizable.OxidationLevel.OXIDIZED; 86 | } else if (tickOxidization == 800000) { 87 | this.oxidizationLevel = Oxidizable.OxidationLevel.WEATHERED; 88 | } else if (tickOxidization == 400000) { 89 | this.oxidizationLevel = Oxidizable.OxidationLevel.EXPOSED; 90 | } else if (this.tickOxidization < 400000) { 91 | this.oxidizationLevel = Oxidizable.OxidationLevel.UNAFFECTED; 92 | } 93 | } 94 | 95 | @Override 96 | protected void initDataTracker(DataTracker.Builder builder) { 97 | super.initDataTracker(builder); 98 | builder.add(IS_PRESSING_BUTTONS, false); 99 | } 100 | 101 | @Override 102 | protected ActionResult interactMob(PlayerEntity player, Hand hand) { 103 | World world = player.getWorld(); 104 | ItemStack stack = player.getStackInHand(hand); 105 | if (stack.getItem() instanceof AxeItem && this.oxidizationLevel != Oxidizable.OxidationLevel.UNAFFECTED) { 106 | this.degradeLevel(); 107 | world.playSound(player, player.getBlockPos(), SoundEvents.ITEM_AXE_SCRAPE, SoundCategory.BLOCKS, 1.0F, 1.0F); 108 | world.syncWorldEvent(player, 3005, player.getBlockPos(), 0); 109 | stack.damage(1, player, hand == Hand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); 110 | return ActionResult.SUCCESS; 111 | } 112 | return ActionResult.PASS; 113 | } 114 | 115 | public void degradeLevel() { 116 | if (this.oxidizationLevel == Oxidizable.OxidationLevel.OXIDIZED) { 117 | this.oxidizationLevel = Oxidizable.OxidationLevel.WEATHERED; 118 | } else if (this.oxidizationLevel == Oxidizable.OxidationLevel.WEATHERED) { 119 | this.oxidizationLevel = Oxidizable.OxidationLevel.EXPOSED; 120 | } else if (this.oxidizationLevel == Oxidizable.OxidationLevel.EXPOSED) { 121 | this.oxidizationLevel = Oxidizable.OxidationLevel.UNAFFECTED; 122 | } 123 | } 124 | 125 | @Override 126 | public void onStruckByLightning(ServerWorld world, LightningEntity lightning) { 127 | super.onStruckByLightning(world, lightning); 128 | this.tickOxidization = 0; 129 | this.oxidizationLevel = Oxidizable.OxidationLevel.UNAFFECTED; 130 | ParticleUtil.spawnParticle(this.getMovementDirection().getAxis(), world, this.getBlockPos(), 0.125D, ParticleTypes.ELECTRIC_SPARK, UniformIntProvider.create(1, 2)); 131 | } 132 | 133 | @Override 134 | public boolean damage(DamageSource source, float amount) { 135 | boolean bl = super.damage(source, amount); 136 | if (source.getAttacker() instanceof LightningEntity) { 137 | return false; 138 | } else 139 | return bl; 140 | } 141 | 142 | @Override 143 | protected void pushAway(Entity entity) { 144 | if (entity instanceof PlayerEntity) { 145 | super.pushAway(entity); 146 | } 147 | } 148 | 149 | @Override 150 | protected int getNextAirUnderwater(int air) { 151 | return air; 152 | } 153 | 154 | @Override 155 | protected SoundEvent getHurtSound(DamageSource source) { 156 | return SoundEvents.ENTITY_IRON_GOLEM_HURT; 157 | } 158 | 159 | @Override 160 | protected SoundEvent getDeathSound() { 161 | return SoundEvents.ENTITY_IRON_GOLEM_DEATH; 162 | } 163 | 164 | static { 165 | IS_PRESSING_BUTTONS = DataTracker.registerData(CopperGolemEntity.class, TrackedDataHandlerRegistry.BOOLEAN); 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/entity/CopperGolemEntityModel.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.entity; 2 | 3 | import net.minecraft.client.model.*; 4 | import net.minecraft.client.render.VertexConsumer; 5 | import net.minecraft.client.render.entity.model.CrossbowPosing; 6 | import net.minecraft.client.render.entity.model.EntityModel; 7 | import net.minecraft.client.util.math.MatrixStack; 8 | import net.minecraft.util.math.MathHelper; 9 | 10 | public class CopperGolemEntityModel extends EntityModel { 11 | private final ModelPart right_leg; 12 | private final ModelPart left_leg; 13 | private final ModelPart body; 14 | private final ModelPart head; 15 | private final ModelPart left_arm; 16 | private final ModelPart right_arm; 17 | 18 | public CopperGolemEntityModel(ModelPart root) { 19 | this.right_leg = root.getChild("right_leg"); 20 | this.left_leg = root.getChild("left_leg"); 21 | this.body = root.getChild("body"); 22 | this.left_arm = root.getChild("left_arm"); 23 | this.right_arm = root.getChild("right_arm"); 24 | this.head = root.getChild("head"); 25 | } 26 | 27 | public static TexturedModelData getTexturedModelData() { 28 | ModelData modelData = new ModelData(); 29 | ModelPartData modelPartData = modelData.getRoot(); 30 | modelPartData.addChild("right_leg", ModelPartBuilder.create().uv(16,0).cuboid(-2.2F, -2.0F, -1.0F, 2.0F, 2.0F, 2.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 31 | modelPartData.addChild("left_leg", ModelPartBuilder.create().uv(8,15).cuboid(0.2F, -2.0F, -1.0F, 2.0F, 2.0F, 2.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 32 | modelPartData.addChild("body", ModelPartBuilder.create().uv(0,8).cuboid(-3.0F, -6.0F, -1.5F, 6.0F, 4.0F, 3.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 33 | modelPartData.addChild("left_arm", ModelPartBuilder.create().uv(16,15).cuboid(3.0F, -6.0F, -0.5F, 1.0F, 5.0F, 1.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 34 | modelPartData.addChild("right_arm", ModelPartBuilder.create().uv(18,8).cuboid(-4.0F, -6.0F, -0.5F, 1.0F, 5.0F, 1.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 35 | modelPartData.addChild("head", ModelPartBuilder.create().uv(0,0).cuboid(-3.0F, -10.0F, -2.0F, 6.0F, 4.0F, 4.0F).uv(0,0).cuboid(-0.5F, -7.6F, -3.0F, 1.0F, 2.0F, 1.0F).uv(6,15).cuboid(-0.5F, -11.0F, -0.5F, 1.0F, 1.0F, 1.0F).uv(0,15).cuboid(-1.0F, -13.0F, -1.0F, 2.0F, 2.0F, 2.0F), ModelTransform.pivot(0.0F,24.0F,0.0F)); 36 | return TexturedModelData.of(modelData,32,32); 37 | } 38 | 39 | @Override 40 | public void setAngles(CopperGolemEntity entity, float f, float g, float h, float i, float j){ 41 | this.right_leg.pitch = -1.5F * MathHelper.wrap(f, 13.0F) * g; 42 | this.left_leg.pitch = 1.5F * MathHelper.wrap(f, 13.0F) * g; 43 | this.right_leg.yaw = 0.0F; 44 | this.left_leg.yaw = 0.0F; 45 | if (entity.isPressingButtons()) { 46 | this.right_arm.pivotZ = -0.5F; 47 | this.left_arm.pivotZ = -0.5F; 48 | this.right_arm.pitch = 6.1F; 49 | this.left_arm.pitch = 6.1F; 50 | } else { 51 | this.right_arm.pivotZ = 0F; 52 | this.left_arm.pivotZ = 0F; 53 | this.right_arm.pitch = 0F; 54 | this.left_arm.pitch = 0F; 55 | } 56 | } 57 | 58 | @Override 59 | public void render(MatrixStack matrixStack, VertexConsumer buffer, int packedLight, int packedOverlay, int color) { 60 | left_leg.render(matrixStack, buffer, packedLight, packedOverlay); 61 | right_leg.render(matrixStack, buffer, packedLight, packedOverlay); 62 | body.render(matrixStack, buffer, packedLight, packedOverlay); 63 | left_arm.render(matrixStack, buffer, packedLight, packedOverlay); 64 | right_arm.render(matrixStack, buffer, packedLight, packedOverlay); 65 | head.render(matrixStack, buffer, packedLight, packedOverlay); 66 | } 67 | } -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/entity/CopperGolemEntityRenderer.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.entity; 2 | 3 | import net.minecraft.block.Oxidizable; 4 | import net.minecraft.client.render.entity.EntityRendererFactory; 5 | import net.minecraft.client.render.entity.MobEntityRenderer; 6 | import net.minecraft.util.Identifier; 7 | import safro.oxidized.OxidizedClient; 8 | 9 | public class CopperGolemEntityRenderer extends MobEntityRenderer { 10 | private static final Identifier UNAFFECTED = Identifier.of("oxidized", "textures/entity/copper_golem.png"); 11 | private static final Identifier EXPOSED = Identifier.of("oxidized", "textures/entity/exposed_copper_golem.png"); 12 | private static final Identifier WEATHERED = Identifier.of("oxidized", "textures/entity/weathered_copper_golem.png"); 13 | private static final Identifier OXIDIZED = Identifier.of("oxidized", "textures/entity/oxidized_copper_golem.png"); 14 | 15 | public CopperGolemEntityRenderer(EntityRendererFactory.Context context) { 16 | super(context, new CopperGolemEntityModel(context.getPart(OxidizedClient.COPPER_GOLEM_LAYER)), 0.2F); 17 | } 18 | 19 | public Identifier getTexture(CopperGolemEntity entity) { 20 | if (entity.getOxidizationLevel() == Oxidizable.OxidationLevel.EXPOSED) { 21 | return EXPOSED; 22 | } else if (entity.getOxidizationLevel() == Oxidizable.OxidationLevel.WEATHERED) { 23 | return WEATHERED; 24 | } else if (entity.getOxidizationLevel() == Oxidizable.OxidationLevel.OXIDIZED) { 25 | return OXIDIZED; 26 | } else 27 | return UNAFFECTED; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/entity/goal/MoveToLightningRodGoal.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.entity.goal; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.block.Blocks; 5 | import net.minecraft.entity.ai.goal.MoveToTargetPosGoal; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.world.WorldView; 8 | import safro.oxidized.entity.CopperGolemEntity; 9 | 10 | public class MoveToLightningRodGoal extends MoveToTargetPosGoal { 11 | private final CopperGolemEntity golem; 12 | 13 | public MoveToLightningRodGoal(CopperGolemEntity entity, double speed) { 14 | super(entity, speed, 10); 15 | this.golem = entity; 16 | } 17 | 18 | public boolean canStart() { 19 | return this.golem.getWorld().isThundering() && super.canStart(); 20 | } 21 | 22 | protected boolean isTargetPos(WorldView world, BlockPos pos) { 23 | BlockState state = world.getBlockState(pos); 24 | return state.isOf(Blocks.LIGHTNING_ROD); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/entity/goal/UseButtonGoal.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.entity.goal; 2 | 3 | import net.minecraft.block.BlockState; 4 | import net.minecraft.block.ButtonBlock; 5 | import net.minecraft.entity.ai.goal.MoveToTargetPosGoal; 6 | import net.minecraft.util.math.BlockPos; 7 | import net.minecraft.util.math.MathHelper; 8 | import net.minecraft.world.World; 9 | import net.minecraft.world.WorldView; 10 | import net.minecraft.world.event.GameEvent; 11 | import safro.oxidized.Oxidized; 12 | import safro.oxidized.block.CopperButtonBlock; 13 | import safro.oxidized.entity.CopperGolemEntity; 14 | import safro.oxidized.registry.BlockRegistry; 15 | 16 | public class UseButtonGoal extends MoveToTargetPosGoal { 17 | private final CopperGolemEntity golem; 18 | private BlockState button; 19 | private BlockPos buttonPos; 20 | 21 | public UseButtonGoal(CopperGolemEntity entity, double speed) { 22 | super(entity, speed, 8); 23 | this.golem = entity; 24 | } 25 | 26 | @Override 27 | public boolean canStart() { 28 | return super.canStart(); 29 | } 30 | 31 | @Override 32 | public void start() { 33 | super.start(); 34 | } 35 | 36 | @Override 37 | public void stop() { 38 | super.stop(); 39 | this.golem.setPressingButtons(false); 40 | this.button = null; 41 | this.buttonPos = null; 42 | } 43 | 44 | public void tick() { 45 | if (this.hasReached()) { 46 | // if (this.hasButton(targetPos) && button != null && buttonPos != null) { 47 | this.golem.setPressingButtons(true); 48 | if (MathHelper.nextInt(golem.getRandom(), 1, Oxidized.CONFIG.copper_golem_button_chance) == 2) { 49 | BlockState state = this.golem.getWorld().getBlockState(this.targetPos); 50 | if (!state.get(ButtonBlock.POWERED)) { 51 | ((CopperButtonBlock)state.getBlock()).powerOn(state, this.golem.getWorld(), this.targetPos, null); 52 | } 53 | } 54 | // } 55 | } 56 | super.tick(); 57 | } 58 | 59 | @Override 60 | protected boolean isTargetPos(WorldView world, BlockPos pos) { 61 | BlockState state = world.getBlockState(pos); 62 | return state.isOf(BlockRegistry.COPPER_BUTTON); 63 | } 64 | 65 | @Override 66 | protected BlockPos getTargetPos() { 67 | return this.targetPos; 68 | } 69 | 70 | private BlockPos getStandablePos(BlockPos pos) { 71 | World world = this.golem.getWorld(); 72 | if (isStandable(world, pos.west())) { 73 | return pos.west(); 74 | } else if (isStandable(world, pos.north())) { 75 | return pos.north(); 76 | } else if (isStandable(world, pos.south())) { 77 | return pos.south(); 78 | } else if (isStandable(world, pos.up())) { 79 | return pos.up(); 80 | } else if (isStandable(world, pos.down())) { 81 | return pos.down(); 82 | } else { 83 | return pos.east(); 84 | } 85 | } 86 | 87 | private boolean isStandable(World world, BlockPos pos) { 88 | return world.isAir(pos) && world.getBlockState(pos.down()).hasSolidTopSurface(world, pos, this.golem); 89 | } 90 | 91 | private boolean hasButton(BlockPos pos) { 92 | if (this.golem.getWorld().getBlockState(pos).isOf(BlockRegistry.COPPER_BUTTON)) { 93 | button = this.golem.getWorld().getBlockState(pos); 94 | buttonPos = pos; 95 | return true; 96 | } else if (this.golem.getWorld().getBlockState(pos.down()).isOf(BlockRegistry.COPPER_BUTTON)) { 97 | button = this.golem.getWorld().getBlockState(pos.down()); 98 | buttonPos = pos.down(); 99 | return true; 100 | } else if (this.golem.getWorld().getBlockState(pos.up()).isOf(BlockRegistry.COPPER_BUTTON)) { 101 | button = this.golem.getWorld().getBlockState(pos.up()); 102 | buttonPos = pos.up(); 103 | return true; 104 | } else if (this.golem.getWorld().getBlockState(pos.east()).isOf(BlockRegistry.COPPER_BUTTON)) { 105 | button = this.golem.getWorld().getBlockState(pos.east()); 106 | buttonPos = pos.east(); 107 | return true; 108 | } else if (this.golem.getWorld().getBlockState(pos.west()).isOf(BlockRegistry.COPPER_BUTTON)) { 109 | button = this.golem.getWorld().getBlockState(pos.west()); 110 | buttonPos = pos.west(); 111 | return true; 112 | } else if (this.golem.getWorld().getBlockState(pos.north()).isOf(BlockRegistry.COPPER_BUTTON)) { 113 | button = this.golem.getWorld().getBlockState(pos.north()); 114 | buttonPos = pos.north(); 115 | return true; 116 | } else if (this.golem.getWorld().getBlockState(pos.south()).isOf(BlockRegistry.COPPER_BUTTON)) { 117 | button = this.golem.getWorld().getBlockState(pos.south()); 118 | buttonPos = pos.south(); 119 | return true; 120 | } else 121 | button = null; 122 | buttonPos = null; 123 | return false; 124 | } 125 | 126 | @Override 127 | public double getDesiredDistanceToTarget() { 128 | return 0.75D; 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/item/BarometerItem.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.item; 2 | 3 | import net.minecraft.entity.player.PlayerEntity; 4 | import net.minecraft.item.Item; 5 | import net.minecraft.item.ItemStack; 6 | import net.minecraft.server.world.ServerWorld; 7 | import net.minecraft.text.Text; 8 | import net.minecraft.util.Formatting; 9 | import net.minecraft.util.Hand; 10 | import net.minecraft.util.TypedActionResult; 11 | import net.minecraft.world.World; 12 | import net.minecraft.world.biome.Biome; 13 | import net.minecraft.world.level.ServerWorldProperties; 14 | import safro.oxidized.mixin.ServerWorldAccessor; 15 | 16 | public class BarometerItem extends Item { 17 | 18 | public BarometerItem(Settings settings) { 19 | super(settings); 20 | } 21 | 22 | @Override 23 | public TypedActionResult use(World world, PlayerEntity user, Hand hand) { 24 | ItemStack stack = user.getStackInHand(hand); 25 | if (!world.isClient) { 26 | ServerWorld serverWorld = (ServerWorld) world; 27 | ServerWorldProperties properties = ((ServerWorldAccessor) serverWorld).getWorldProperties(); 28 | Biome biome = serverWorld.getBiome(user.getBlockPos()).value(); 29 | 30 | if (serverWorld.isThundering()) { 31 | user.sendMessage(getTime(properties, false, false), true); 32 | } else if (serverWorld.isRaining()) { 33 | user.sendMessage(getTime(properties, true, biome.isCold(user.getBlockPos())), true); 34 | } else { 35 | user.sendMessage(Text.translatable("text.oxidized.clearweather", properties.getClearWeatherTime() / 20).formatted(Formatting.GOLD), true); 36 | } 37 | } 38 | return TypedActionResult.success(stack, world.isClient()); 39 | } 40 | 41 | private static Text getTime(ServerWorldProperties properties, boolean rain, boolean snow) { 42 | int time = (rain ? properties.getRainTime() : properties.getThunderTime()) / 20; 43 | String key = rain ? "text.oxidized.rain" : "text.oxidized.thunderstorm"; 44 | if (snow) { 45 | key = "text.oxidized.snow"; 46 | } 47 | return Text.translatable(key, time).formatted(Formatting.GOLD); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/item/CopperPulsarItem.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.item; 2 | 3 | import net.minecraft.component.DataComponentTypes; 4 | import net.minecraft.component.type.NbtComponent; 5 | import net.minecraft.entity.Entity; 6 | import net.minecraft.entity.ExperienceOrbEntity; 7 | import net.minecraft.entity.ItemEntity; 8 | import net.minecraft.entity.player.PlayerEntity; 9 | import net.minecraft.item.Item; 10 | import net.minecraft.item.ItemStack; 11 | import net.minecraft.nbt.NbtCompound; 12 | import net.minecraft.predicate.entity.EntityPredicates; 13 | import net.minecraft.server.network.ServerPlayerEntity; 14 | import net.minecraft.text.Text; 15 | import net.minecraft.util.ActionResult; 16 | import net.minecraft.util.Hand; 17 | import net.minecraft.util.TypedActionResult; 18 | import net.minecraft.util.math.Box; 19 | import net.minecraft.world.World; 20 | import safro.oxidized.Oxidized; 21 | 22 | import java.util.List; 23 | 24 | public class CopperPulsarItem extends Item { 25 | 26 | static final String POWERED = "Powered"; 27 | 28 | public CopperPulsarItem(Settings settings) { 29 | super(settings); 30 | } 31 | 32 | @Override 33 | public void inventoryTick(ItemStack stack, World world, Entity entity, int slot, boolean selected) { 34 | if(!world.isClient() && isActive(stack)) { 35 | ServerPlayerEntity player = (ServerPlayerEntity) entity; 36 | Box box = player.getBoundingBox().expand(Oxidized.CONFIG.pulsar_reach); 37 | 38 | List entityItems = player.getWorld().getEntitiesByClass(ItemEntity.class, box, EntityPredicates.VALID_ENTITY); 39 | for (ItemEntity item : entityItems) { 40 | item.onPlayerCollision(player); 41 | } 42 | 43 | List entityXP = player.getWorld().getEntitiesByClass(ExperienceOrbEntity.class, box, EntityPredicates.VALID_ENTITY); 44 | for (ExperienceOrbEntity xp : entityXP) { 45 | xp.onPlayerCollision(player); 46 | } 47 | } 48 | } 49 | 50 | @Override 51 | public TypedActionResult use(World world, PlayerEntity player, Hand hand) { 52 | ItemStack pulsar = player.getStackInHand(hand); 53 | 54 | if (!world.isClient() && !player.isSneaking()) { 55 | this.toggle(pulsar); 56 | String status = this.isActive(pulsar) ? "Active" : "Inactive"; 57 | player.sendMessage(Text.of("§6Pulsar is now: " + status), false); 58 | } 59 | return TypedActionResult.success(pulsar, world.isClient()); 60 | } 61 | 62 | public boolean isActive(ItemStack stack) { 63 | NbtComponent data = stack.get(DataComponentTypes.CUSTOM_DATA); 64 | if (data != null) { 65 | NbtCompound tag = data.copyNbt(); 66 | if (tag.contains("Powered")) { 67 | return tag.getBoolean("Powered"); 68 | } 69 | } 70 | return true; 71 | } 72 | 73 | public void toggle(ItemStack stack) { 74 | boolean active = isActive(stack); 75 | NbtCompound tag = new NbtCompound(); 76 | tag.putBoolean("Powered", !active); 77 | NbtComponent.set(DataComponentTypes.CUSTOM_DATA, stack, tag); 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/item/RoseGoldMaterial.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.item; 2 | 3 | import net.minecraft.block.Block; 4 | import net.minecraft.item.Items; 5 | import net.minecraft.item.ToolMaterial; 6 | import net.minecraft.recipe.Ingredient; 7 | import net.minecraft.registry.tag.BlockTags; 8 | import net.minecraft.registry.tag.TagKey; 9 | 10 | public class RoseGoldMaterial implements ToolMaterial { 11 | public static final RoseGoldMaterial ROSE_GOLD = new RoseGoldMaterial(); 12 | 13 | @Override 14 | public int getDurability() { 15 | return 250; 16 | } 17 | 18 | @Override 19 | public float getMiningSpeedMultiplier() { 20 | return 12.0F; 21 | } 22 | 23 | @Override 24 | public float getAttackDamage() { 25 | return 0.0F; 26 | } 27 | 28 | @Override 29 | public TagKey getInverseTag() { 30 | return BlockTags.INCORRECT_FOR_GOLD_TOOL; 31 | } 32 | 33 | @Override 34 | public int getEnchantability() { 35 | return 22; 36 | } 37 | 38 | @Override 39 | public Ingredient getRepairIngredient() { 40 | return Ingredient.ofItems(Items.COPPER_INGOT); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/mixin/LightningRodBlockMixin.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.mixin; 2 | 3 | import net.minecraft.advancement.criterion.Criteria; 4 | import net.minecraft.block.Block; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.block.Blocks; 7 | import net.minecraft.block.LightningRodBlock; 8 | import net.minecraft.block.pattern.BlockPattern; 9 | import net.minecraft.block.pattern.BlockPatternBuilder; 10 | import net.minecraft.block.pattern.CachedBlockPosition; 11 | import net.minecraft.predicate.block.BlockStatePredicate; 12 | import net.minecraft.server.network.ServerPlayerEntity; 13 | import net.minecraft.util.math.BlockPos; 14 | import net.minecraft.world.World; 15 | import org.jetbrains.annotations.Nullable; 16 | import org.spongepowered.asm.mixin.Mixin; 17 | import org.spongepowered.asm.mixin.Unique; 18 | import org.spongepowered.asm.mixin.injection.At; 19 | import org.spongepowered.asm.mixin.injection.Inject; 20 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 21 | import safro.oxidized.Oxidized; 22 | import safro.oxidized.entity.CopperGolemEntity; 23 | import safro.oxidized.registry.EntityRegistry; 24 | 25 | import java.util.Iterator; 26 | 27 | @Mixin(LightningRodBlock.class) 28 | public class LightningRodBlockMixin { 29 | @Unique 30 | @Nullable 31 | private BlockPattern copperGolemPattern = null; 32 | 33 | @Inject(method = "onBlockAdded", at = @At("TAIL")) 34 | private void checkForGolem(BlockState state, World world, BlockPos pos, BlockState oldState, boolean notify, CallbackInfo ci) { 35 | if (!oldState.isOf(state.getBlock())) { 36 | if (Oxidized.CONFIG.enable_copper_golem) this.trySpawnCopperGolem(world, pos); 37 | } 38 | } 39 | 40 | @Unique 41 | private void trySpawnCopperGolem(World world, BlockPos pos) { 42 | BlockPattern.Result result = this.getCopperGolemPattern().searchAround(world, pos); 43 | int i; 44 | Iterator var6; 45 | ServerPlayerEntity serverPlayerEntity; 46 | int j; 47 | if (result != null) { 48 | for (i = 0; i < this.getCopperGolemPattern().getHeight(); ++i) { 49 | CachedBlockPosition cachedBlockPosition = result.translate(0, i, 0); 50 | world.setBlockState(cachedBlockPosition.getBlockPos(), Blocks.AIR.getDefaultState(), 2); 51 | world.syncWorldEvent(2001, cachedBlockPosition.getBlockPos(), Block.getRawIdFromState(cachedBlockPosition.getBlockState())); 52 | } 53 | 54 | CopperGolemEntity golem = EntityRegistry.COPPER_GOLEM.create(world); 55 | BlockPos blockPos = result.translate(0, 2, 0).getBlockPos(); 56 | golem.refreshPositionAndAngles((double) blockPos.getX() + 0.5D, (double) blockPos.getY() + 0.05D, (double) blockPos.getZ() + 0.5D, 0.0F, 0.0F); 57 | world.spawnEntity(golem); 58 | var6 = world.getNonSpectatingEntities(ServerPlayerEntity.class, golem.getBoundingBox().expand(5.0D)).iterator(); 59 | 60 | while (var6.hasNext()) { 61 | serverPlayerEntity = (ServerPlayerEntity) var6.next(); 62 | Criteria.SUMMONED_ENTITY.trigger(serverPlayerEntity, golem); 63 | } 64 | 65 | for (j = 0; j < this.getCopperGolemPattern().getHeight(); ++j) { 66 | CachedBlockPosition cachedBlockPosition2 = result.translate(0, j, 0); 67 | world.updateNeighbors(cachedBlockPosition2.getBlockPos(), Blocks.AIR); 68 | } 69 | } 70 | } 71 | 72 | @Unique 73 | private BlockPattern getCopperGolemPattern() { 74 | if (this.copperGolemPattern == null) { 75 | this.copperGolemPattern = BlockPatternBuilder.start().aisle("^", "$", "#").where('^', CachedBlockPosition.matchesBlockState(BlockStatePredicate.forBlock(Blocks.LIGHTNING_ROD))).where('$', CachedBlockPosition.matchesBlockState(BlockStatePredicate.forBlock(Blocks.CARVED_PUMPKIN))).where('#', CachedBlockPosition.matchesBlockState(BlockStatePredicate.forBlock(Blocks.COPPER_BLOCK).or(BlockStatePredicate.forBlock(Blocks.CUT_COPPER)))).build(); 76 | } 77 | return this.copperGolemPattern; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/mixin/LivingEntityMixin.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.mixin; 2 | 3 | import net.minecraft.entity.LivingEntity; 4 | import net.minecraft.util.math.Vec3d; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.injection.At; 7 | import org.spongepowered.asm.mixin.injection.Inject; 8 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 9 | import safro.oxidized.block.CopperTrapBlock; 10 | import safro.oxidized.registry.BlockRegistry; 11 | 12 | @Mixin(LivingEntity.class) 13 | public class LivingEntityMixin { 14 | @Inject(method = "tick", at = @At("HEAD")) 15 | private void trapEntity(CallbackInfo ci) { 16 | LivingEntity entity = (LivingEntity) (Object) this; 17 | if (entity.getBlockStateAtPos().isOf(BlockRegistry.COPPER_TRAP)) { 18 | if (CopperTrapBlock.isClosed(entity.getBlockStateAtPos())) { 19 | Vec3d v = entity.getPos(); 20 | entity.teleport(v.getX(), v.getY(), v.getZ(), false); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/mixin/MinecartEntityAccessor.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.mixin; 2 | 3 | import net.minecraft.entity.vehicle.AbstractMinecartEntity; 4 | import net.minecraft.util.math.BlockPos; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Invoker; 7 | 8 | @Mixin(AbstractMinecartEntity.class) 9 | public interface MinecartEntityAccessor { 10 | @Invoker("willHitBlockAt") 11 | boolean invokeWillHitBlockAt(BlockPos pos); 12 | 13 | @Invoker("getMaxSpeed") 14 | double invokeGetMaxOffRailSpeed(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/mixin/MinecartRailMixin.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.mixin; 2 | 3 | 4 | import net.minecraft.block.AbstractRailBlock; 5 | import net.minecraft.block.BlockState; 6 | import net.minecraft.entity.vehicle.AbstractMinecartEntity; 7 | import net.minecraft.util.math.BlockPos; 8 | import org.spongepowered.asm.mixin.Mixin; 9 | import org.spongepowered.asm.mixin.injection.At; 10 | import org.spongepowered.asm.mixin.injection.Inject; 11 | import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; 12 | import safro.oxidized.block.CopperRailBlock; 13 | 14 | @Mixin(AbstractMinecartEntity.class) 15 | public abstract class MinecartRailMixin { 16 | 17 | @SuppressWarnings("ConstantConditions") 18 | @Inject(at = @At("HEAD"), method = "moveOnRail", cancellable = true) 19 | protected void moveOnRail(BlockPos pos, BlockState state, CallbackInfo info) { 20 | AbstractRailBlock railBlock = (AbstractRailBlock) state.getBlock(); 21 | if (railBlock instanceof CopperRailBlock) { 22 | ((CopperRailBlock) railBlock).onMoveOnRail(pos, state, (AbstractMinecartEntity) (Object) this, info); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/mixin/ServerWorldAccessor.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.mixin; 2 | 3 | import net.minecraft.server.world.ServerWorld; 4 | import net.minecraft.world.level.ServerWorldProperties; 5 | import org.spongepowered.asm.mixin.Mixin; 6 | import org.spongepowered.asm.mixin.gen.Accessor; 7 | 8 | @Mixin(ServerWorld.class) 9 | public interface ServerWorldAccessor { 10 | @Accessor 11 | ServerWorldProperties getWorldProperties(); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/recipe/CopperKilnRecipe.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.recipe; 2 | 3 | import net.minecraft.item.ItemStack; 4 | import net.minecraft.recipe.AbstractCookingRecipe; 5 | import net.minecraft.recipe.Ingredient; 6 | import net.minecraft.recipe.RecipeSerializer; 7 | import net.minecraft.recipe.book.CookingRecipeCategory; 8 | import net.minecraft.util.Identifier; 9 | import safro.oxidized.registry.BlockRegistry; 10 | 11 | public class CopperKilnRecipe extends AbstractCookingRecipe { 12 | 13 | public CopperKilnRecipe(String group, CookingRecipeCategory category, Ingredient input, ItemStack output, float experience, int cookTime) { 14 | super(BlockRegistry.COPPER_KILN_RECIPE_TYPE, group, category, input, output, experience, cookTime); 15 | } 16 | 17 | public ItemStack createIcon() { 18 | return new ItemStack(BlockRegistry.COPPER_KILN); 19 | } 20 | 21 | @Override 22 | public RecipeSerializer getSerializer() { 23 | return BlockRegistry.COPPER_KILN_RECIPE_SERIALIZER; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/recipe/CopperKilnRecipeBook.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.recipe; 2 | 3 | import net.minecraft.block.entity.AbstractFurnaceBlockEntity; 4 | import net.minecraft.client.gui.screen.recipebook.AbstractFurnaceRecipeBookScreen; 5 | import net.minecraft.item.Item; 6 | import net.minecraft.text.Text; 7 | 8 | import java.util.Set; 9 | 10 | public class CopperKilnRecipeBook extends AbstractFurnaceRecipeBookScreen { 11 | private static final Text LABEL = Text.translatable("gui.recipebook.toggleRecipes.kiln"); 12 | 13 | protected Text getToggleCraftableButtonText() { 14 | return LABEL; 15 | } 16 | 17 | @Override 18 | protected Set getAllowedFuels() { 19 | return AbstractFurnaceBlockEntity.createFuelTimeMap().keySet(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/registry/BlockRegistry.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.registry; 2 | 3 | import net.fabricmc.fabric.api.registry.OxidizableBlocksRegistry; 4 | import net.minecraft.block.*; 5 | import net.minecraft.block.entity.BlockEntityType; 6 | import net.minecraft.block.piston.PistonBehavior; 7 | import net.minecraft.recipe.CookingRecipeSerializer; 8 | import net.minecraft.recipe.RecipeSerializer; 9 | import net.minecraft.recipe.RecipeType; 10 | import net.minecraft.registry.Registries; 11 | import net.minecraft.registry.Registry; 12 | import net.minecraft.resource.featuretoggle.FeatureFlags; 13 | import net.minecraft.screen.ScreenHandlerType; 14 | import net.minecraft.sound.BlockSoundGroup; 15 | import net.minecraft.state.property.Properties; 16 | import net.minecraft.util.Identifier; 17 | import safro.oxidized.block.*; 18 | import safro.oxidized.block.entity.CopperKilnBlockEntity; 19 | import safro.oxidized.block.screen.CopperKilnScreenHandler; 20 | import safro.oxidized.recipe.CopperKilnRecipe; 21 | import safro.saflib.registry.BaseBlockItemRegistry; 22 | 23 | import java.util.function.ToIntFunction; 24 | 25 | public class BlockRegistry extends BaseBlockItemRegistry { 26 | static { MODID = "oxidized"; } 27 | 28 | public static final Block COPPER_RAIL = register("copper_rail", new CopperRailBlock(AbstractBlock.Settings.create().mapColor(MapColor.CLEAR).nonOpaque().pistonBehavior(PistonBehavior.DESTROY).noCollision().strength(0.7F).sounds(BlockSoundGroup.METAL))); 29 | public static final Block VERTICAL_CUT_COPPER = register("vertical_cut_copper", new OxidizableBlock(Oxidizable.OxidationLevel.UNAFFECTED, AbstractBlock.Settings.create().mapColor(MapColor.ORANGE).sounds(BlockSoundGroup.COPPER).requiresTool().strength(3.0F, 6.0F))); 30 | public static final Block VERTICAL_EXPOSED_CUT_COPPER = register("vertical_exposed_cut_copper", new OxidizableBlock(Oxidizable.OxidationLevel.EXPOSED, AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 31 | public static final Block VERTICAL_WEATHERED_CUT_COPPER = register("vertical_weathered_cut_copper", new OxidizableBlock(Oxidizable.OxidationLevel.WEATHERED, AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 32 | public static final Block VERTICAL_OXIDIZED_CUT_COPPER = register("vertical_oxidized_cut_copper", new OxidizableBlock(Oxidizable.OxidationLevel.OXIDIZED, AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 33 | public static final Block WAXED_VERTICAL_CUT_COPPER = register("waxed_vertical_cut_copper", new Block(AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 34 | public static final Block WAXED_VERTICAL_EXPOSED_CUT_COPPER = register("waxed_vertical_exposed_cut_copper", new Block(AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 35 | public static final Block WAXED_VERTICAL_WEATHERED_CUT_COPPER = register("waxed_vertical_weathered_cut_copper", new Block(AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 36 | public static final Block WAXED_VERTICAL_OXIDIZED_CUT_COPPER = register("waxed_vertical_oxidized_cut_copper", new Block(AbstractBlock.Settings.copy(BlockRegistry.VERTICAL_CUT_COPPER))); 37 | public static final LanternBlock COPPER_LANTERN = register("copper_lantern", new LanternBlock(AbstractBlock.Settings.create().mapColor(MapColor.IRON_GRAY).requiresTool().strength(3.5F).sounds(BlockSoundGroup.LANTERN).luminance((state) -> 15).nonOpaque())); 38 | public static final Block COPPER_PAN = register("copper_pan", new CopperPanBlock(blockWithStrength(3.0F, 6.0F).ticksRandomly())); 39 | public static final Block COPPER_BUTTON = register("copper_button", new CopperButtonBlock(AbstractBlock.Settings.create().mapColor(MapColor.CLEAR).nonOpaque().pistonBehavior(PistonBehavior.DESTROY).noCollision().strength(0.5F).sounds(BlockSoundGroup.COPPER))); 40 | 41 | public static final Block COPPER_KILN = register("copper_kiln", new CopperKilnBlock(blockWithStrength(3.5F, 6.0F).luminance(createLightLevelBlockstate(13)).nonOpaque())); 42 | public static BlockEntityType COPPER_KILN_BLOCK_ENTITY = register("copper_kiln", CopperKilnBlockEntity::new, COPPER_KILN); 43 | public static final ScreenHandlerType COPPER_KILN_SCREEN_HANDLER = Registry.register(Registries.SCREEN_HANDLER, Identifier.of("oxidized", "copper_kiln_screen_handler"), new ScreenHandlerType<>(CopperKilnScreenHandler::new, FeatureFlags.VANILLA_FEATURES)); 44 | public static final RecipeType COPPER_KILN_RECIPE_TYPE = Registry.register(Registries.RECIPE_TYPE, Identifier.of("oxidized", "kiln_smelting"), new RecipeType<>() { 45 | public String toString() { 46 | return "oxidized:kiln_smelting"; 47 | } 48 | }); 49 | public static final RecipeSerializer COPPER_KILN_RECIPE_SERIALIZER = Registry.register(Registries.RECIPE_SERIALIZER, Identifier.of("oxidized", "kiln_smelting"), new CookingRecipeSerializer<>(CopperKilnRecipe::new, 100)); 50 | 51 | public static final Block COPPER_TRAP = register("copper_trap", new CopperTrapBlock(blockWithStrength(2.0F, 3.0F).noCollision())); 52 | 53 | public static void init() { 54 | OxidizableBlocksRegistry.registerOxidizableBlockPair(VERTICAL_CUT_COPPER, VERTICAL_EXPOSED_CUT_COPPER); 55 | OxidizableBlocksRegistry.registerOxidizableBlockPair(VERTICAL_EXPOSED_CUT_COPPER, VERTICAL_WEATHERED_CUT_COPPER); 56 | OxidizableBlocksRegistry.registerOxidizableBlockPair(VERTICAL_WEATHERED_CUT_COPPER, VERTICAL_OXIDIZED_CUT_COPPER); 57 | 58 | OxidizableBlocksRegistry.registerWaxableBlockPair(VERTICAL_CUT_COPPER, WAXED_VERTICAL_CUT_COPPER); 59 | OxidizableBlocksRegistry.registerWaxableBlockPair(VERTICAL_EXPOSED_CUT_COPPER, WAXED_VERTICAL_EXPOSED_CUT_COPPER); 60 | OxidizableBlocksRegistry.registerWaxableBlockPair(VERTICAL_WEATHERED_CUT_COPPER, WAXED_VERTICAL_WEATHERED_CUT_COPPER); 61 | OxidizableBlocksRegistry.registerWaxableBlockPair(VERTICAL_OXIDIZED_CUT_COPPER, WAXED_VERTICAL_OXIDIZED_CUT_COPPER); 62 | } 63 | 64 | private static AbstractBlock.Settings blockWithStrength(float hardness, float resistance) { 65 | return AbstractBlock.Settings.create().mapColor(MapColor.ORANGE).strength(hardness, resistance).requiresTool().sounds(BlockSoundGroup.COPPER); 66 | } 67 | 68 | private static ToIntFunction createLightLevelBlockstate(int litLevel) { 69 | return (state) -> (Boolean)state.get(Properties.LIT) ? litLevel : 0; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/registry/EntityRegistry.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.registry; 2 | 3 | import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry; 4 | import net.fabricmc.fabric.api.object.builder.v1.entity.FabricEntityTypeBuilder; 5 | import net.minecraft.entity.EntityDimensions; 6 | import net.minecraft.entity.EntityType; 7 | import net.minecraft.entity.SpawnGroup; 8 | import net.minecraft.registry.Registries; 9 | import net.minecraft.registry.Registry; 10 | import net.minecraft.util.Identifier; 11 | import safro.oxidized.entity.CopperGolemEntity; 12 | 13 | public class EntityRegistry { 14 | public static final EntityType COPPER_GOLEM = EntityType.Builder.create(CopperGolemEntity::new, SpawnGroup.MISC) 15 | .dimensions(0.5F, 0.9F).makeFireImmune().maxTrackingRange(10).build(); 16 | 17 | public static void init() { 18 | Registry.register(Registries.ENTITY_TYPE, Identifier.of("oxidized", "copper_golem"), COPPER_GOLEM); 19 | 20 | // Attributes 21 | FabricDefaultAttributeRegistry.register(COPPER_GOLEM, CopperGolemEntity.createCopperGolemAttributes()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/registry/ItemRegistry.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.registry; 2 | 3 | import net.minecraft.item.*; 4 | import net.minecraft.text.Text; 5 | import net.minecraft.util.Formatting; 6 | import net.minecraft.util.Identifier; 7 | import safro.oxidized.Oxidized; 8 | import safro.oxidized.item.BarometerItem; 9 | import safro.oxidized.item.CopperPulsarItem; 10 | import safro.oxidized.item.RoseGoldMaterial; 11 | import safro.saflib.registry.BaseBlockItemRegistry; 12 | 13 | import java.util.List; 14 | 15 | public class ItemRegistry extends BaseBlockItemRegistry { 16 | static { MODID = "oxidized"; } 17 | 18 | public static void init() { 19 | if (Oxidized.CONFIG.enable_copper_pulsar) { 20 | register("copper_pulsar", new CopperPulsarItem(settings())); 21 | } 22 | 23 | register("copper_barometer", new BarometerItem(settings().maxCount(1))); 24 | register("copper_nugget", new Item(settings())); 25 | 26 | if (Oxidized.CONFIG.enable_rose_gold_tools) { 27 | register("rose_gold_upgrade_template", createRoseGoldTemplate()); 28 | register("rose_gold_axe", new AxeItem(RoseGoldMaterial.ROSE_GOLD, settings().attributeModifiers(AxeItem.createAttributeModifiers(RoseGoldMaterial.ROSE_GOLD, 6.0F, -3.0F)))); 29 | register("rose_gold_hoe", new HoeItem(RoseGoldMaterial.ROSE_GOLD, settings().attributeModifiers(HoeItem.createAttributeModifiers(RoseGoldMaterial.ROSE_GOLD, 0, -3.0F)))); 30 | register("rose_gold_pickaxe", new PickaxeItem(RoseGoldMaterial.ROSE_GOLD, settings().attributeModifiers(PickaxeItem.createAttributeModifiers(RoseGoldMaterial.ROSE_GOLD, 1, -2.8F)))); 31 | register("rose_gold_shovel", new ShovelItem(RoseGoldMaterial.ROSE_GOLD, settings().attributeModifiers(ShovelItem.createAttributeModifiers(RoseGoldMaterial.ROSE_GOLD, 1.5F, -3.0F)))); 32 | register("rose_gold_sword", new SwordItem(RoseGoldMaterial.ROSE_GOLD, settings().attributeModifiers(SwordItem.createAttributeModifiers(RoseGoldMaterial.ROSE_GOLD, 4, -2.4F)))); 33 | } 34 | 35 | if (Oxidized.CONFIG.enable_copper_golem) { 36 | register("copper_golem_spawn_egg", new SpawnEggItem(EntityRegistry.COPPER_GOLEM, 0x8A4129, 0xC15B36, settings())); 37 | } 38 | } 39 | 40 | private static SmithingTemplateItem createRoseGoldTemplate() { 41 | return new SmithingTemplateItem(Text.translatable("text.oxidized.rose_gold_template_applies").formatted(Formatting.BLUE), 42 | Text.translatable("text.oxidized.rose_gold_template_ingredient").formatted(Formatting.BLUE), 43 | Text.translatable("text.oxidized.rose_gold_template").formatted(Formatting.GRAY), 44 | Text.translatable("text.oxidized.rose_gold_template.base_desc"), 45 | Text.translatable("text.oxidized.rose_gold_template.ing_desc"), 46 | List.of(Identifier.of("item/empty_slot_ingot")), List.of(Identifier.of("item/empty_slot_hoe"), Identifier.of("item/empty_slot_axe"), Identifier.of("item/empty_slot_sword"), Identifier.of("item/empty_slot_shovel"), Identifier.of("item/empty_slot_pickaxe"))); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/rei/KilnSmeltingDisplay.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.rei; 2 | 3 | import me.shedaniel.rei.api.common.category.CategoryIdentifier; 4 | import me.shedaniel.rei.api.common.entry.EntryIngredient; 5 | import me.shedaniel.rei.plugin.common.displays.cooking.DefaultCookingDisplay; 6 | import net.minecraft.nbt.NbtCompound; 7 | import net.minecraft.recipe.RecipeEntry; 8 | import safro.oxidized.recipe.CopperKilnRecipe; 9 | 10 | import java.util.List; 11 | 12 | public class KilnSmeltingDisplay extends DefaultCookingDisplay { 13 | public KilnSmeltingDisplay(RecipeEntry recipe) { 14 | super(recipe); 15 | } 16 | 17 | public KilnSmeltingDisplay(List input, List output, NbtCompound tag) { 18 | super(input, output, tag); 19 | } 20 | 21 | @Override 22 | public CategoryIdentifier getCategoryIdentifier() { 23 | return OxidizedREIPlugin.KILN_SMELTING; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/rei/OxidizedREIPlugin.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.rei; 2 | 3 | import me.shedaniel.math.Rectangle; 4 | import me.shedaniel.rei.api.client.plugins.REIClientPlugin; 5 | import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; 6 | import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; 7 | import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry; 8 | import me.shedaniel.rei.api.common.category.CategoryIdentifier; 9 | import me.shedaniel.rei.api.common.entry.EntryStack; 10 | import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes; 11 | import me.shedaniel.rei.api.common.util.EntryStacks; 12 | import me.shedaniel.rei.plugin.client.categories.cooking.DefaultCookingCategory; 13 | import net.minecraft.item.ItemStack; 14 | import net.minecraft.util.Identifier; 15 | import safro.oxidized.block.screen.CopperKilnScreen; 16 | import safro.oxidized.recipe.CopperKilnRecipe; 17 | import safro.oxidized.registry.BlockRegistry; 18 | 19 | public class OxidizedREIPlugin implements REIClientPlugin { 20 | public static final CategoryIdentifier KILN_SMELTING = CategoryIdentifier.of("oxidized", "plugins/kiln_smelting"); 21 | 22 | @Override 23 | public void registerCategories(CategoryRegistry registry) { 24 | registry.add(new DefaultCookingCategory(KILN_SMELTING, EntryStacks.of(BlockRegistry.COPPER_KILN), "category.oxidized.kiln_smelting")); 25 | registry.addWorkstations(KILN_SMELTING, EntryStacks.of(BlockRegistry.COPPER_KILN)); 26 | registry.addWorkstations(CategoryIdentifier.of(Identifier.of("minecraft", "plugins/fuel")), EntryStack.of(VanillaEntryTypes.ITEM, new ItemStack(BlockRegistry.COPPER_KILN))); 27 | } 28 | 29 | @Override 30 | public void registerDisplays(DisplayRegistry registry) { 31 | registry.registerRecipeFiller(CopperKilnRecipe.class, BlockRegistry.COPPER_KILN_RECIPE_TYPE, KilnSmeltingDisplay::new); 32 | } 33 | 34 | @Override 35 | public void registerScreens(ScreenRegistry registry) { 36 | registry.registerContainerClickArea(new Rectangle(78, 32, 28, 23), CopperKilnScreen.class, KILN_SMELTING); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/util/MinecartHandler.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.util; 2 | 3 | import net.minecraft.block.enums.RailShape; 4 | import net.minecraft.entity.vehicle.AbstractMinecartEntity; 5 | import net.minecraft.entity.vehicle.MinecartEntity; 6 | import net.minecraft.util.math.BlockPos; 7 | import safro.oxidized.mixin.MinecartEntityAccessor; 8 | 9 | public class MinecartHandler { 10 | 11 | public static void handleBlockHit(BlockPos pos, AbstractMinecartEntity minecart, RailShape railShape) { 12 | double x = minecart.getVelocity().x; 13 | double z = minecart.getVelocity().z; 14 | if (railShape == RailShape.EAST_WEST) { 15 | if (((MinecartEntityAccessor) minecart).invokeWillHitBlockAt(pos.west())) { 16 | x = 0.02D; 17 | } else if (((MinecartEntityAccessor) minecart).invokeWillHitBlockAt(pos.east())) { 18 | x = -0.02D; 19 | } 20 | } else if (railShape == RailShape.NORTH_SOUTH) { 21 | if (((MinecartEntityAccessor) minecart).invokeWillHitBlockAt(pos.north())) { 22 | z = 0.02D; 23 | } else if (((MinecartEntityAccessor) minecart).invokeWillHitBlockAt(pos.south())) { 24 | z = -0.02D; 25 | } 26 | } 27 | 28 | minecart.setVelocity(x, minecart.getVelocity().y, z); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/safro/oxidized/util/TrapDamageSource.java: -------------------------------------------------------------------------------- 1 | package safro.oxidized.util; 2 | 3 | import net.minecraft.entity.damage.DamageType; 4 | import net.minecraft.registry.RegistryKey; 5 | import safro.saflib.util.DamageSourceUtil; 6 | 7 | public class TrapDamageSource { 8 | public static final RegistryKey TRAP = DamageSourceUtil.register("oxidized", "trap"); 9 | 10 | public static void init() {} 11 | } 12 | -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_button.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "face=ceiling,facing=east,powered=false": { 4 | "model": "oxidized:block/copper_button", 5 | "y": 270, 6 | "x": 180 7 | }, 8 | "face=ceiling,facing=east,powered=true": { 9 | "model": "oxidized:block/copper_button_pressed", 10 | "y": 270, 11 | "x": 180 12 | }, 13 | "face=ceiling,facing=north,powered=false": { 14 | "model": "oxidized:block/copper_button", 15 | "y": 180, 16 | "x": 180 17 | }, 18 | "face=ceiling,facing=north,powered=true": { 19 | "model": "oxidized:block/copper_button_pressed", 20 | "y": 180, 21 | "x": 180 22 | }, 23 | "face=ceiling,facing=south,powered=false": { 24 | "model": "oxidized:block/copper_button", 25 | "x": 180 26 | }, 27 | "face=ceiling,facing=south,powered=true": { 28 | "model": "oxidized:block/copper_button_pressed", 29 | "x": 180 30 | }, 31 | "face=ceiling,facing=west,powered=false": { 32 | "model": "oxidized:block/copper_button", 33 | "y": 90, 34 | "x": 180 35 | }, 36 | "face=ceiling,facing=west,powered=true": { 37 | "model": "oxidized:block/copper_button_pressed", 38 | "y": 90, 39 | "x": 180 40 | }, 41 | "face=floor,facing=east,powered=false": { 42 | "model": "oxidized:block/copper_button", 43 | "y": 90 44 | }, 45 | "face=floor,facing=east,powered=true": { 46 | "model": "oxidized:block/copper_button_pressed", 47 | "y": 90 48 | }, 49 | "face=floor,facing=north,powered=false": { 50 | "model": "oxidized:block/copper_button" 51 | }, 52 | "face=floor,facing=north,powered=true": { 53 | "model": "oxidized:block/copper_button_pressed" 54 | }, 55 | "face=floor,facing=south,powered=false": { 56 | "model": "oxidized:block/copper_button", 57 | "y": 180 58 | }, 59 | "face=floor,facing=south,powered=true": { 60 | "model": "oxidized:block/copper_button_pressed", 61 | "y": 180 62 | }, 63 | "face=floor,facing=west,powered=false": { 64 | "model": "oxidized:block/copper_button", 65 | "y": 270 66 | }, 67 | "face=floor,facing=west,powered=true": { 68 | "model": "oxidized:block/copper_button_pressed", 69 | "y": 270 70 | }, 71 | "face=wall,facing=east,powered=false": { 72 | "model": "oxidized:block/copper_button", 73 | "y": 90, 74 | "x": 90, 75 | "uvlock": true 76 | }, 77 | "face=wall,facing=east,powered=true": { 78 | "model": "oxidized:block/copper_button_pressed", 79 | "y": 90, 80 | "x": 90, 81 | "uvlock": true 82 | }, 83 | "face=wall,facing=north,powered=false": { 84 | "model": "oxidized:block/copper_button", 85 | "x": 90, 86 | "uvlock": true 87 | }, 88 | "face=wall,facing=north,powered=true": { 89 | "model": "oxidized:block/copper_button_pressed", 90 | "x": 90, 91 | "uvlock": true 92 | }, 93 | "face=wall,facing=south,powered=false": { 94 | "model": "oxidized:block/copper_button", 95 | "y": 180, 96 | "x": 90, 97 | "uvlock": true 98 | }, 99 | "face=wall,facing=south,powered=true": { 100 | "model": "oxidized:block/copper_button_pressed", 101 | "y": 180, 102 | "x": 90, 103 | "uvlock": true 104 | }, 105 | "face=wall,facing=west,powered=false": { 106 | "model": "oxidized:block/copper_button", 107 | "y": 270, 108 | "x": 90, 109 | "uvlock": true 110 | }, 111 | "face=wall,facing=west,powered=true": { 112 | "model": "oxidized:block/copper_button_pressed", 113 | "y": 270, 114 | "x": 90, 115 | "uvlock": true 116 | } 117 | } 118 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_kiln.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "facing=east,lit=false": { 4 | "model": "oxidized:block/copper_kiln_off", 5 | "y": 90 6 | }, 7 | "facing=east,lit=true": { 8 | "model": "oxidized:block/copper_kiln_on", 9 | "y": 90 10 | }, 11 | "facing=north,lit=false": { 12 | "model": "oxidized:block/copper_kiln_off" 13 | }, 14 | "facing=north,lit=true": { 15 | "model": "oxidized:block/copper_kiln_on" 16 | }, 17 | "facing=south,lit=false": { 18 | "model": "oxidized:block/copper_kiln_off", 19 | "y": 180 20 | }, 21 | "facing=south,lit=true": { 22 | "model": "oxidized:block/copper_kiln_on", 23 | "y": 180 24 | }, 25 | "facing=west,lit=false": { 26 | "model": "oxidized:block/copper_kiln_off", 27 | "y": 270 28 | }, 29 | "facing=west,lit=true": { 30 | "model": "oxidized:block/copper_kiln_on", 31 | "y": 270 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "hanging=false": { 4 | "model": "oxidized:block/copper_lantern" 5 | }, 6 | "hanging=true": { 7 | "model": "oxidized:block/copper_lantern_hanging" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/copper_pan" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "powered=false,shape=ascending_east": { 4 | "model": "oxidized:block/copper_rail_raised_ne", 5 | "y": 90 6 | }, 7 | "powered=false,shape=ascending_north": { 8 | "model": "oxidized:block/copper_rail_raised_ne" 9 | }, 10 | "powered=false,shape=ascending_south": { 11 | "model": "oxidized:block/copper_rail_raised_sw" 12 | }, 13 | "powered=false,shape=ascending_west": { 14 | "model": "oxidized:block/copper_rail_raised_sw", 15 | "y": 90 16 | }, 17 | "powered=false,shape=east_west": { 18 | "model": "oxidized:block/copper_rail", 19 | "y": 90 20 | }, 21 | "powered=false,shape=north_south": { 22 | "model": "oxidized:block/copper_rail" 23 | }, 24 | "powered=true,shape=ascending_east": { 25 | "model": "oxidized:block/copper_rail_raised_on_ne", 26 | "y": 90 27 | }, 28 | "powered=true,shape=ascending_north": { 29 | "model": "oxidized:block/copper_rail_raised_on_ne" 30 | }, 31 | "powered=true,shape=ascending_south": { 32 | "model": "oxidized:block/copper_rail_raised_on_sw" 33 | }, 34 | "powered=true,shape=ascending_west": { 35 | "model": "oxidized:block/copper_rail_raised_on_sw", 36 | "y": 90 37 | }, 38 | "powered=true,shape=east_west": { 39 | "model": "oxidized:block/copper_rail_on", 40 | "y": 90 41 | }, 42 | "powered=true,shape=north_south": { 43 | "model": "oxidized:block/copper_rail_on" 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "closed=false": { 4 | "model": "oxidized:block/copper_trap" 5 | }, 6 | "closed=true": { 7 | "model": "oxidized:block/copper_trap_closed" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_exposed_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_oxidized_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_weathered_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/waxed_vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/waxed_vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_exposed_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/waxed_vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_oxidized_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/blockstates/waxed_vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "variants": { 3 | "": { "model": "oxidized:block/vertical_weathered_cut_copper" } 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/icon.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/lang/en_us.json: -------------------------------------------------------------------------------- 1 | { 2 | "item.oxidized.copper_pulsar": "Copper Pulsar", 3 | "item.oxidized.rose_gold_axe": "Rose Gold Axe", 4 | "item.oxidized.rose_gold_pickaxe": "Rose Gold Pickaxe", 5 | "item.oxidized.rose_gold_hoe": "Rose Gold Hoe", 6 | "item.oxidized.rose_gold_shovel": "Rose Gold Shovel", 7 | "item.oxidized.rose_gold_sword": "Rose Gold Sword", 8 | "item.oxidized.copper_nugget": "Copper Nugget", 9 | "item.oxidized.copper_golem_spawn_egg": "Copper Golem Spawn Egg", 10 | "item.oxidized.copper_barometer": "Copper Barometer", 11 | "item.oxidized.rose_gold_upgrade_template": "Rose Gold Upgrade Template", 12 | 13 | "block.oxidized.vertical_cut_copper": "Vertical Cut Copper", 14 | "block.oxidized.vertical_exposed_cut_copper": "Vertical Exposed Cut Copper", 15 | "block.oxidized.vertical_weathered_cut_copper": "Vertical Weathered Cut Copper", 16 | "block.oxidized.vertical_oxidized_cut_copper": "Vertical Oxidized Cut Copper", 17 | "block.oxidized.waxed_vertical_cut_copper": "Waxed Vertical Cut Copper", 18 | "block.oxidized.waxed_vertical_exposed_cut_copper": "Waxed Vertical Exposed Cut Copper", 19 | "block.oxidized.waxed_vertical_weathered_cut_copper": "Waxed Vertical Weathered Cut Copper", 20 | "block.oxidized.waxed_vertical_oxidized_cut_copper": "Waxed Vertical Oxidized Cut Copper", 21 | "block.oxidized.copper_rail": "Copper Rail", 22 | "block.oxidized.copper_kiln": "Copper Kiln", 23 | "block.oxidized.copper_lantern": "Copper Lantern", 24 | "block.oxidized.copper_pan": "Copper Pan", 25 | "block.oxidized.copper_button": "Copper Button", 26 | "block.oxidized.copper_trap": "Copper Trap", 27 | 28 | "entity.oxidized.copper_golem": "Copper Golem", 29 | 30 | "death.attack.trap": "%s was caught in a trap", 31 | 32 | "text.oxidized.rain": "Rain will end in %s seconds", 33 | "text.oxidized.thunderstorm": "Thunderstorm will end in %s seconds", 34 | "text.oxidized.snow": "Snow will end in %s seconds", 35 | "text.oxidized.clearweather": "Precipitation will fall in %s seconds", 36 | "text.oxidized.rose_gold_template": "Rose Gold Upgrade", 37 | "text.oxidized.rose_gold_template_applies": "Golden Equipment", 38 | "text.oxidized.rose_gold_template_ingredient": "Copper Ingot", 39 | "text.oxidized.rose_gold_template.base_desc": "Add golden tool", 40 | "text.oxidized.rose_gold_template.ing_desc": "Add copper ingot", 41 | 42 | "gui.recipebook.toggleRecipes.kiln": "Showing Kiln Recipes", 43 | "itemGroup.oxidized.oxidized": "Oxidized", 44 | "container.oxidized.copper_kiln": "Copper Kiln", 45 | "category.oxidized.kiln_smelting": "Copper Kiln Smelting", 46 | 47 | "tag.item.c.copper_nuggets": "Copper Nuggets" 48 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/lang/es_es.json: -------------------------------------------------------------------------------- 1 | { 2 | "item.oxidized.copper_pulsar": "Copper Pulsar", 3 | "item.oxidized.rose_gold_axe": "Hacha de Oro Rosa", 4 | "item.oxidized.rose_gold_pickaxe": "Pico de Oro Rosa", 5 | "item.oxidized.rose_gold_hoe": "Azada de Oro Rosa", 6 | "item.oxidized.rose_gold_shovel": "Pala de Oro Rosa", 7 | "item.oxidized.rose_gold_sword": "Espada de Oro Rosa", 8 | "item.oxidized.copper_nugget": "Pepita de Cobre", 9 | "item.oxidized.copper_golem_spawn_egg": "Generar Gólem de Cobre", 10 | "item.oxidized.copper_barometer": "Barómetro de Cobre", 11 | "item.oxidized.rose_gold_upgrade_template": "Molde de Mejora de Oro Rosa", 12 | 13 | "block.oxidized.vertical_cut_copper": "Cobre Cortado Verticalmente", 14 | "block.oxidized.vertical_exposed_cut_copper": "Cobre Cortado Verticalmente Expuesto", 15 | "block.oxidized.vertical_weathered_cut_copper": "Cobre Cortado Verticalmente Degradado", 16 | "block.oxidized.vertical_oxidized_cut_copper": "Cobre Cortado Verticalmente Oxidado", 17 | "block.oxidized.waxed_vertical_cut_copper": "Cobre Cortado Verticalmente Encerado", 18 | "block.oxidized.waxed_vertical_exposed_cut_copper": "Cobre Cortado Verticalmente Expuesto Encerado", 19 | "block.oxidized.waxed_vertical_weathered_cut_copper": "Cobre Cortado Verticalmente Degradado Encerado", 20 | "block.oxidized.waxed_vertical_oxidized_cut_copper": "Cobre Cortado Verticalmente Oxidado Encerado", 21 | "block.oxidized.copper_rail": "Raíl de Cobre", 22 | "block.oxidized.copper_kiln": "Horno de Cobre", 23 | "block.oxidized.copper_lantern": "Farol de Cobre", 24 | "block.oxidized.copper_pan": "Sartén de Cobre", 25 | "block.oxidized.copper_button": "Botón de Cobre", 26 | "block.oxidized.copper_trap": "Trampa de Cobre", 27 | 28 | "entity.oxidized.copper_golem": "Gólem de Cobre", 29 | 30 | "death.attack.trap": "%s fue atrapado", 31 | 32 | "text.oxidized.rain": "La lluvia terminará en %s segundos", 33 | "text.oxidized.thunderstorm": "La tormenta terminará en %s segundos", 34 | "text.oxidized.snow": "La nevada terminará en %s segundos", 35 | "text.oxidized.clearweather": "Empezará a llover en %s segundos", 36 | "text.oxidized.rose_gold_template": "Mejora de Oro Rosa", 37 | "text.oxidized.rose_gold_template_applies": "Equipamiento Dorado", 38 | "text.oxidized.rose_gold_template_ingredient": "Lingote de Cobre", 39 | "text.oxidized.rose_gold_template.base_desc": "Añade una herramienta dorada", 40 | "text.oxidized.rose_gold_template.ing_desc": "Añade un lingote de cobre", 41 | 42 | "gui.recipebook.toggleRecipes.kiln": "Mostrando recetas de horno", 43 | "itemGroup.oxidized.oxidized": "Oxidado", 44 | "container.oxidized.copper_kiln": "Horno de Cobre", 45 | "category.oxidized.kiln_smelting": "Fundición de Horno de Cobre", 46 | 47 | "tag.item.c.copper_nuggets": "Pepitas de Cobre" 48 | } 49 | -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/lang/ru_ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "item.oxidized.copper_pulsar": "Медный пульсар", 3 | "item.oxidized.rose_gold_axe": "Топор из розового золота", 4 | "item.oxidized.rose_gold_pickaxe": "Кирка из розового золота", 5 | "item.oxidized.rose_gold_hoe": "Мотыга из розового золота", 6 | "item.oxidized.rose_gold_shovel": "Лопата из розового золота ", 7 | "item.oxidized.rose_gold_sword": "Меч из розового золота", 8 | "item.oxidized.copper_nugget": "Кусочек меди", 9 | "item.oxidized.copper_golem_spawn_egg": "Яйцо призыва медного голема", 10 | "item.oxidized.copper_barometer": "Медный барометр", 11 | 12 | "block.oxidized.vertical_cut_copper": "Вертикальная резная медь", 13 | "block.oxidized.vertical_exposed_cut_copper": "Потемневшая вертикальная резная медь", 14 | "block.oxidized.vertical_weathered_cut_copper": "Состаренная вертикальная резная медь", 15 | "block.oxidized.vertical_oxidized_cut_copper": "Окисленная вертикальная резная медь", 16 | "block.oxidized.waxed_vertical_cut_copper": "Вощёная вертикальная резная медь", 17 | "block.oxidized.waxed_vertical_exposed_cut_copper": "Вощёная потемневшая вертикальная резная медь", 18 | "block.oxidized.waxed_vertical_weathered_cut_copper": "Вощёная состаренная вертикальная резная медь", 19 | "block.oxidized.waxed_vertical_oxidized_cut_copper": "Вощёная окисленная вертикальная резная медь", 20 | "block.oxidized.copper_rail": "Медные рельсы", 21 | "block.oxidized.copper_kiln": "Медная сушильня", 22 | "block.oxidized.copper_lantern": "Медный фонарь", 23 | "block.oxidized.copper_pan": "Медная миска", 24 | "block.oxidized.copper_button": "Медная кнопка", 25 | "block.oxidized.copper_trap": "Медный капкан", 26 | 27 | "entity.oxidized.copper_golem": "Медный голем", 28 | 29 | "death.attack.trap": "%s угодил в капкан", 30 | 31 | "text.oxidized.rain": "Дождь закончится через %s секунд", 32 | "text.oxidized.thunderstorm": "Гроза закончится через %s секунд", 33 | "text.oxidized.snow": "Снег закончится %s секунд", 34 | "text.oxidized.clearweather": "Осадки ожидаются через %s секунд", 35 | "text.oxidized.rose_gold_template": "Улучшение в розовое золото", 36 | "text.oxidized.rose_gold_template_applies": "Золотому снаряжению", 37 | "text.oxidized.rose_gold_template_ingredient": "Медный слиток", 38 | "text.oxidized.rose_gold_template.base_desc": "Поместите золотой доспех, инструмент или оружие", 39 | "text.oxidized.rose_gold_template.ing_desc": "Поместите медный слиток", 40 | 41 | "gui.recipebook.toggleRecipes.kiln": "Показ рецептов для сушильни", 42 | "itemGroup.oxidized.item_group": "Окисленное", 43 | "container.oxidized.copper_kiln": "Медная сушильня", 44 | "category.oxidized.kiln_smelting": "Плавка в медной сушильне" 45 | } 46 | -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "item.oxidized.copper_pulsar": "铜脉冲器", 3 | "item.oxidized.rose_gold_axe": "玫瑰金斧", 4 | "item.oxidized.rose_gold_pickaxe": "玫瑰金镐", 5 | "item.oxidized.rose_gold_hoe": "玫瑰金锄", 6 | "item.oxidized.rose_gold_shovel": "玫瑰金铲", 7 | "item.oxidized.rose_gold_sword": "玫瑰金剑", 8 | "item.oxidized.copper_nugget": "铜粒", 9 | "item.oxidized.copper_golem_spawn_egg": "铜傀儡刷怪蛋", 10 | 11 | "block.oxidized.vertical_cut_copper": "竖纹切制铜块", 12 | "block.oxidized.vertical_exposed_cut_copper": "斑驳的竖纹切制铜块", 13 | "block.oxidized.vertical_weathered_cut_copper": "锈蚀的竖纹切制铜块", 14 | "block.oxidized.vertical_oxidized_cut_copper": "氧化的竖纹切制铜块", 15 | "block.oxidized.waxed_vertical_cut_copper": "涂蜡竖纹切制铜块", 16 | "block.oxidized.waxed_vertical_exposed_cut_copper": "斑驳的涂蜡竖纹切制铜块", 17 | "block.oxidized.waxed_vertical_weathered_cut_copper": "锈蚀的涂蜡竖纹切制铜块", 18 | "block.oxidized.waxed_vertical_oxidized_cut_copper": "氧化的涂蜡竖纹切制铜块", 19 | "block.oxidized.copper_rail": "铜轨", 20 | "block.oxidized.copper_kiln": "铜窑", 21 | "block.oxidized.copper_lantern": "铜灯笼", 22 | "block.oxidized.copper_pan": "铜盘", 23 | "block.oxidized.copper_button": "铜按钮", 24 | "block.oxidized.copper_trap": "铜陷阱", 25 | 26 | "entity.oxidized.copper_golem": "铜傀儡", 27 | 28 | "death.attack.trap": "%s 止步于一处陷阱", 29 | 30 | "gui.recipebook.toggleRecipes.kiln": "显示铜窑配方", 31 | "itemGroup.oxidized.oxidized": "Oxidized", 32 | "container.oxidized.copper_kiln": "铜窑", 33 | "category.oxidized.kiln_smelting": "铜窑烧炼" 34 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_button.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/button", 3 | "textures": { 4 | "texture": "minecraft:block/copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_button_inventory.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/button_inventory", 3 | "textures": { 4 | "texture": "minecraft:block/copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_button_pressed.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/button_pressed", 3 | "textures": { 4 | "texture": "minecraft:block/copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_kiln_off.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "texture_size": [32, 32], 4 | "textures": { 5 | "1": "minecraft:block/copper_block", 6 | "2": "oxidized:block/kiln_fire_off", 7 | "particle": "minecraft:block/copper_block" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [0, 0, 0], 12 | "to": [16, 4, 16], 13 | "faces": { 14 | "north": {"uv": [0, 12, 16, 16], "texture": "#1"}, 15 | "east": {"uv": [0, 12, 16, 16], "texture": "#1"}, 16 | "south": {"uv": [0, 12, 16, 16], "texture": "#1"}, 17 | "west": {"uv": [0, 12, 16, 16], "texture": "#1"}, 18 | "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, 19 | "down": {"uv": [0, 0, 16, 16], "texture": "#1"} 20 | } 21 | }, 22 | { 23 | "from": [1, 4, 1], 24 | "to": [15, 10, 15], 25 | "faces": { 26 | "north": {"uv": [1, 0, 15, 6], "texture": "#1"}, 27 | "east": {"uv": [1, 0, 15, 6], "texture": "#1"}, 28 | "south": {"uv": [1, 0, 15, 6], "texture": "#1"}, 29 | "west": {"uv": [1, 0, 15, 6], "texture": "#1"}, 30 | "up": {"uv": [1, 0, 15, 14], "texture": "#1"}, 31 | "down": {"uv": [1, 1, 15, 15], "texture": "#1"} 32 | } 33 | }, 34 | { 35 | "from": [3, 10, 3], 36 | "to": [13, 16, 13], 37 | "faces": { 38 | "north": {"uv": [5, 4, 15, 10], "texture": "#1"}, 39 | "east": {"uv": [3, 9, 13, 15], "texture": "#1"}, 40 | "south": {"uv": [4, 4, 14, 10], "texture": "#1"}, 41 | "west": {"uv": [2, 1, 12, 7], "texture": "#1"}, 42 | "up": {"uv": [1, 1, 9, 8], "texture": "#1"}, 43 | "down": {"uv": [0, 0, 10, 10], "texture": "#1"} 44 | } 45 | }, 46 | { 47 | "from": [2, 4, 0.5], 48 | "to": [14, 9, 1], 49 | "faces": { 50 | "north": {"uv": [0, 0, 6, 2.5], "texture": "#2"}, 51 | "east": {"uv": [0, 6, 0.5, 8.5], "texture": "#2"}, 52 | "south": {"uv": [0, 2.5, 6, 5], "texture": "#2"}, 53 | "west": {"uv": [6, 0, 6.5, 2.5], "texture": "#2"}, 54 | "up": {"uv": [6, 5.5, 0, 5], "texture": "#2"}, 55 | "down": {"uv": [6, 5.5, 0, 6], "texture": "#2"} 56 | } 57 | } 58 | ], 59 | "display": { 60 | "thirdperson_righthand": { 61 | "translation": [0, 4.5, 0.75], 62 | "scale": [0.55, 0.55, 0.55] 63 | }, 64 | "thirdperson_lefthand": { 65 | "translation": [0, 4.5, 0.75], 66 | "scale": [0.55, 0.55, 0.55] 67 | }, 68 | "firstperson_righthand": { 69 | "translation": [0, -5.75, 1.5], 70 | "scale": [1, 1, 0.66] 71 | }, 72 | "firstperson_lefthand": { 73 | "translation": [0, -5, 1.75], 74 | "scale": [1, 1, 0.6] 75 | }, 76 | "ground": { 77 | "scale": [0.5, 0.5, 0.5] 78 | }, 79 | "gui": { 80 | "rotation": [8.75, 163.25, 0], 81 | "scale": [0.7, 0.7, 0.7] 82 | }, 83 | "fixed": { 84 | "translation": [0, 0, 2] 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_kiln_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "texture_size": [32, 32], 4 | "textures": { 5 | "1": "minecraft:block/copper_block", 6 | "2": "oxidized:block/kiln_fire_on", 7 | "particle": "minecraft:block/copper_block" 8 | }, 9 | "elements": [ 10 | { 11 | "from": [0, 0, 0], 12 | "to": [16, 4, 16], 13 | "faces": { 14 | "north": {"uv": [0, 12, 16, 16], "texture": "#1"}, 15 | "east": {"uv": [0, 12, 16, 16], "texture": "#1"}, 16 | "south": {"uv": [0, 12, 16, 16], "texture": "#1"}, 17 | "west": {"uv": [0, 12, 16, 16], "texture": "#1"}, 18 | "up": {"uv": [0, 0, 16, 16], "texture": "#1"}, 19 | "down": {"uv": [0, 0, 16, 16], "texture": "#1"} 20 | } 21 | }, 22 | { 23 | "from": [1, 4, 1], 24 | "to": [15, 10, 15], 25 | "faces": { 26 | "north": {"uv": [1, 0, 15, 6], "texture": "#1"}, 27 | "east": {"uv": [1, 0, 15, 6], "texture": "#1"}, 28 | "south": {"uv": [1, 0, 15, 6], "texture": "#1"}, 29 | "west": {"uv": [1, 0, 15, 6], "texture": "#1"}, 30 | "up": {"uv": [1, 0, 15, 14], "texture": "#1"}, 31 | "down": {"uv": [1, 1, 15, 15], "texture": "#1"} 32 | } 33 | }, 34 | { 35 | "from": [3, 10, 3], 36 | "to": [13, 16, 13], 37 | "faces": { 38 | "north": {"uv": [5, 4, 15, 10], "texture": "#1"}, 39 | "east": {"uv": [3, 9, 13, 15], "texture": "#1"}, 40 | "south": {"uv": [4, 4, 14, 10], "texture": "#1"}, 41 | "west": {"uv": [2, 1, 12, 7], "texture": "#1"}, 42 | "up": {"uv": [1, 1, 9, 8], "texture": "#1"}, 43 | "down": {"uv": [0, 0, 10, 10], "texture": "#1"} 44 | } 45 | }, 46 | { 47 | "from": [2, 4, 0.5], 48 | "to": [14, 9, 1], 49 | "faces": { 50 | "north": {"uv": [0, 0, 6, 2.5], "texture": "#2"}, 51 | "east": {"uv": [0, 6, 0.5, 8.5], "texture": "#2"}, 52 | "south": {"uv": [0, 2.5, 6, 5], "texture": "#2"}, 53 | "west": {"uv": [6, 0, 6.5, 2.5], "texture": "#2"}, 54 | "up": {"uv": [6, 5.5, 0, 5], "texture": "#2"}, 55 | "down": {"uv": [6, 5.5, 0, 6], "texture": "#2"} 56 | } 57 | } 58 | ], 59 | "display": { 60 | "thirdperson_righthand": { 61 | "translation": [0, 4.5, 0.75], 62 | "scale": [0.55, 0.55, 0.55] 63 | }, 64 | "thirdperson_lefthand": { 65 | "translation": [0, 4.5, 0.75], 66 | "scale": [0.55, 0.55, 0.55] 67 | }, 68 | "firstperson_righthand": { 69 | "translation": [0, -5.75, 1.5], 70 | "scale": [1, 1, 0.66] 71 | }, 72 | "firstperson_lefthand": { 73 | "translation": [0, -5, 1.75], 74 | "scale": [1, 1, 0.6] 75 | }, 76 | "ground": { 77 | "scale": [0.5, 0.5, 0.5] 78 | }, 79 | "gui": { 80 | "rotation": [8.75, 163.25, 0], 81 | "scale": [0.7, 0.7, 0.7] 82 | }, 83 | "fixed": { 84 | "translation": [0, 0, 2] 85 | } 86 | } 87 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_lantern", 3 | "textures": { 4 | "lantern": "oxidized:block/copper_lantern" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_lantern_hanging.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_hanging_lantern", 3 | "textures": { 4 | "lantern": "oxidized:block/copper_lantern_hanging" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/block", 3 | "textures": { 4 | "0": "oxidized:block/copper_pan", 5 | "particle": "oxidized:block/copper_pan" 6 | }, 7 | "elements": [ 8 | { 9 | "from": [15, 1, 0], 10 | "to": [16, 6, 16], 11 | "faces": { 12 | "north": {"uv": [0, 0, 1, 8], "texture": "#0"}, 13 | "east": {"uv": [0, 1, 16, 7], "texture": "#0"}, 14 | "south": {"uv": [0, 0, 1, 8], "texture": "#0"}, 15 | "west": {"uv": [0, 0, 16, 8], "texture": "#0"}, 16 | "up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#0"}, 17 | "down": {"uv": [0, 0, 16, 1], "rotation": 90, "texture": "#0"} 18 | } 19 | }, 20 | { 21 | "from": [0, 1, 0], 22 | "to": [1, 6, 16], 23 | "rotation": {"angle": 0, "axis": "y", "origin": [-7, 8, 8]}, 24 | "faces": { 25 | "north": {"uv": [0, 0, 1, 8], "texture": "#0"}, 26 | "east": {"uv": [0, 0, 16, 8], "texture": "#0"}, 27 | "south": {"uv": [0, 0, 1, 8], "texture": "#0"}, 28 | "west": {"uv": [0, 7, 16, 13], "texture": "#0"}, 29 | "up": {"uv": [0, 0, 16, 1], "rotation": 270, "texture": "#0"}, 30 | "down": {"uv": [0, 0, 16, 1], "rotation": 90, "texture": "#0"} 31 | } 32 | }, 33 | { 34 | "from": [1, 1, 0], 35 | "to": [15, 6, 1], 36 | "rotation": {"angle": 0, "axis": "y", "origin": [8, 8, -7]}, 37 | "faces": { 38 | "north": {"uv": [1, 4, 15, 10], "texture": "#0"}, 39 | "east": {"uv": [0, 0, 1, 8], "texture": "#0"}, 40 | "south": {"uv": [1, 0, 15, 8], "texture": "#0"}, 41 | "west": {"uv": [0, 0, 1, 8], "texture": "#0"}, 42 | "up": {"uv": [0, 1, 1, 15], "rotation": 270, "texture": "#0"}, 43 | "down": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"} 44 | } 45 | }, 46 | { 47 | "from": [1, 1, 15], 48 | "to": [15, 6, 16], 49 | "faces": { 50 | "north": {"uv": [1, 0, 15, 6], "texture": "#0"}, 51 | "east": {"uv": [0, 0, 1, 8], "texture": "#0"}, 52 | "south": {"uv": [1, 2, 15, 7], "texture": "#0"}, 53 | "west": {"uv": [0, 0, 1, 8], "texture": "#0"}, 54 | "up": {"uv": [0, 1, 1, 15], "rotation": 270, "texture": "#0"}, 55 | "down": {"uv": [0, 1, 1, 15], "rotation": 90, "texture": "#0"} 56 | } 57 | }, 58 | { 59 | "from": [0, 0, 0], 60 | "to": [16, 1, 16], 61 | "rotation": {"angle": 0, "axis": "y", "origin": [8, 10, 8]}, 62 | "faces": { 63 | "north": {"uv": [0, 1, 16, 2], "texture": "#0"}, 64 | "east": {"uv": [0, 1, 16, 2], "texture": "#0"}, 65 | "south": {"uv": [0, 1, 16, 2], "texture": "#0"}, 66 | "west": {"uv": [0, 1, 16, 2], "texture": "#0"}, 67 | "up": {"uv": [0, 0, 16, 16], "rotation": 270, "texture": "#0"}, 68 | "down": {"uv": [0, 0, 16, 16], "rotation": 90, "texture": "#0"} 69 | } 70 | } 71 | ] 72 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/rail_flat", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail_on.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/rail_flat", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail_on" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail_raised_ne.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_rail_raised_ne", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail_raised_on_ne.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_rail_raised_ne", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail_on" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail_raised_on_sw.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_rail_raised_sw", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail_on" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_rail_raised_sw.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:block/template_rail_raised_sw", 3 | "textures": { 4 | "rail": "oxidized:block/copper_rail" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "texture_size": [32, 32], 4 | "textures": { 5 | "0": "oxidized:block/copper_trap", 6 | "particle": "oxidized:block/copper_trap" 7 | }, 8 | "elements": [ 9 | { 10 | "from": [2, 0, 7], 11 | "to": [14, 1, 9], 12 | "faces": { 13 | "north": {"uv": [0, 2, 6, 2.5], "texture": "#0"}, 14 | "east": {"uv": [1, 6.5, 2, 7], "texture": "#0"}, 15 | "south": {"uv": [0, 2.5, 6, 3], "texture": "#0"}, 16 | "west": {"uv": [2, 6.5, 3, 7], "texture": "#0"}, 17 | "up": {"uv": [6, 1, 0, 0], "texture": "#0"}, 18 | "down": {"uv": [6, 1, 0, 2], "texture": "#0"} 19 | } 20 | }, 21 | { 22 | "from": [12, 0, 9], 23 | "to": [13, 1, 15], 24 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 9]}, 25 | "faces": { 26 | "north": {"uv": [6, 6.5, 6.5, 7], "texture": "#0"}, 27 | "east": {"uv": [0, 6, 3, 6.5], "texture": "#0"}, 28 | "south": {"uv": [6.5, 6.5, 7, 7], "texture": "#0"}, 29 | "west": {"uv": [6, 0, 9, 0.5], "texture": "#0"}, 30 | "up": {"uv": [3.5, 9, 3, 6], "texture": "#0"}, 31 | "down": {"uv": [4, 6, 3.5, 9], "texture": "#0"} 32 | } 33 | }, 34 | { 35 | "from": [3, 0, 9], 36 | "to": [4, 1, 15], 37 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 9]}, 38 | "faces": { 39 | "north": {"uv": [1, 7, 1.5, 7.5], "texture": "#0"}, 40 | "east": {"uv": [6, 0.5, 9, 1], "texture": "#0"}, 41 | "south": {"uv": [1.5, 7, 2, 7.5], "texture": "#0"}, 42 | "west": {"uv": [6, 1, 9, 1.5], "texture": "#0"}, 43 | "up": {"uv": [4.5, 9, 4, 6], "texture": "#0"}, 44 | "down": {"uv": [5, 6, 4.5, 9], "texture": "#0"} 45 | } 46 | }, 47 | { 48 | "from": [4, 0, 14], 49 | "to": [12, 1, 15], 50 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 9]}, 51 | "faces": { 52 | "north": {"uv": [0, 5, 4, 5.5], "texture": "#0"}, 53 | "east": {"uv": [2, 7, 2.5, 7.5], "texture": "#0"}, 54 | "south": {"uv": [5, 3, 9, 3.5], "texture": "#0"}, 55 | "west": {"uv": [2.5, 7, 3, 7.5], "texture": "#0"}, 56 | "up": {"uv": [9, 4, 5, 3.5], "texture": "#0"}, 57 | "down": {"uv": [8, 5, 4, 5.5], "texture": "#0"} 58 | } 59 | }, 60 | { 61 | "from": [3, 1, 1], 62 | "to": [13, 2, 1], 63 | "faces": { 64 | "north": {"uv": [0, 3, 5, 3.5], "texture": "#0"}, 65 | "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, 66 | "south": {"uv": [0, 3.5, 5, 4], "texture": "#0"}, 67 | "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, 68 | "up": {"uv": [5, 0, 0, 0], "texture": "#0"}, 69 | "down": {"uv": [5, 0, 0, 0], "texture": "#0"} 70 | } 71 | }, 72 | { 73 | "from": [3, 1, 15], 74 | "to": [13, 2, 15], 75 | "faces": { 76 | "north": {"uv": [0, 4, 5, 4.5], "texture": "#0"}, 77 | "east": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, 78 | "south": {"uv": [0, 4.5, 5, 5], "texture": "#0"}, 79 | "west": {"uv": [0, 0, 0, 0.5], "texture": "#0"}, 80 | "up": {"uv": [5, 0, 0, 0], "texture": "#0"}, 81 | "down": {"uv": [5, 0, 0, 0], "texture": "#0"} 82 | } 83 | }, 84 | { 85 | "from": [3, 0, 1], 86 | "to": [4, 1, 7], 87 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 7]}, 88 | "faces": { 89 | "north": {"uv": [6, 7, 6.5, 7.5], "texture": "#0"}, 90 | "east": {"uv": [6, 1.5, 9, 2], "texture": "#0"}, 91 | "south": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"}, 92 | "west": {"uv": [6, 2, 9, 2.5], "texture": "#0"}, 93 | "up": {"uv": [5.5, 9, 5, 6], "texture": "#0"}, 94 | "down": {"uv": [6, 6, 5.5, 9], "texture": "#0"} 95 | } 96 | }, 97 | { 98 | "from": [4, 0, 1], 99 | "to": [12, 1, 2], 100 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 7]}, 101 | "faces": { 102 | "north": {"uv": [5, 4, 9, 4.5], "texture": "#0"}, 103 | "east": {"uv": [1, 7.5, 1.5, 8], "texture": "#0"}, 104 | "south": {"uv": [5, 4.5, 9, 5], "texture": "#0"}, 105 | "west": {"uv": [1.5, 7.5, 2, 8], "texture": "#0"}, 106 | "up": {"uv": [4, 6, 0, 5.5], "texture": "#0"}, 107 | "down": {"uv": [8, 5.5, 4, 6], "texture": "#0"} 108 | } 109 | }, 110 | { 111 | "from": [12, 0, 1], 112 | "to": [13, 1, 7], 113 | "rotation": {"angle": 0, "axis": "x", "origin": [8, 1, 7]}, 114 | "faces": { 115 | "north": {"uv": [7, 6.5, 7.5, 7], "texture": "#0"}, 116 | "east": {"uv": [6, 2.5, 9, 3], "texture": "#0"}, 117 | "south": {"uv": [7, 7, 7.5, 7.5], "texture": "#0"}, 118 | "west": {"uv": [6, 6, 9, 6.5], "texture": "#0"}, 119 | "up": {"uv": [0.5, 9.5, 0, 6.5], "texture": "#0"}, 120 | "down": {"uv": [1, 6.5, 0.5, 9.5], "texture": "#0"} 121 | } 122 | } 123 | ], 124 | "display": { 125 | "thirdperson_righthand": { 126 | "translation": [0, 3.75, 1], 127 | "scale": [0.5, 0.5, 0.5] 128 | }, 129 | "thirdperson_lefthand": { 130 | "translation": [0, 3.75, 0], 131 | "scale": [0.5, 0.5, 0.5] 132 | }, 133 | "firstperson_righthand": { 134 | "translation": [3, 8.25, 1.5] 135 | }, 136 | "firstperson_lefthand": { 137 | "translation": [3, 8.25, 1.5] 138 | }, 139 | "ground": { 140 | "translation": [0, 4, 0] 141 | }, 142 | "gui": { 143 | "rotation": [31.75, 29, 0], 144 | "translation": [0, 5.75, 0] 145 | } 146 | } 147 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/copper_trap_closed.json: -------------------------------------------------------------------------------- 1 | { 2 | "credit": "Made with Blockbench", 3 | "texture_size": [32, 32], 4 | "textures": { 5 | "0": "oxidized:block/copper_trap", 6 | "particle": "oxidized:block/copper_trap" 7 | }, 8 | "elements": [ 9 | { 10 | "from": [2, 0, 7], 11 | "to": [14, 1, 9], 12 | "faces": { 13 | "north": {"uv": [0, 2, 6, 2.5], "texture": "#0"}, 14 | "east": {"uv": [1, 6.5, 2, 7], "texture": "#0"}, 15 | "south": {"uv": [0, 2.5, 6, 3], "texture": "#0"}, 16 | "west": {"uv": [2, 6.5, 3, 7], "texture": "#0"}, 17 | "up": {"uv": [6, 1, 0, 0], "texture": "#0"}, 18 | "down": {"uv": [6, 1, 0, 2], "texture": "#0"} 19 | } 20 | }, 21 | { 22 | "from": [12, 1, 9], 23 | "to": [13, 7, 10], 24 | "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 1, 9]}, 25 | "faces": { 26 | "north": {"uv": [3.5, 9, 3, 6], "rotation": 180, "texture": "#0"}, 27 | "east": {"uv": [0, 6, 3, 6.5], "rotation": 90, "texture": "#0"}, 28 | "south": {"uv": [4, 6, 3.5, 9], "texture": "#0"}, 29 | "west": {"uv": [6, 0, 9, 0.5], "rotation": 270, "texture": "#0"}, 30 | "up": {"uv": [6.5, 6.5, 7, 7], "texture": "#0"}, 31 | "down": {"uv": [6, 6.5, 6.5, 7], "rotation": 180, "texture": "#0"} 32 | } 33 | }, 34 | { 35 | "from": [3, 1, 9], 36 | "to": [4, 7, 10], 37 | "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 1, 9]}, 38 | "faces": { 39 | "north": {"uv": [4.5, 9, 4, 6], "rotation": 180, "texture": "#0"}, 40 | "east": {"uv": [6, 0.5, 9, 1], "rotation": 90, "texture": "#0"}, 41 | "south": {"uv": [5, 6, 4.5, 9], "texture": "#0"}, 42 | "west": {"uv": [6, 1, 9, 1.5], "rotation": 270, "texture": "#0"}, 43 | "up": {"uv": [1.5, 7, 2, 7.5], "texture": "#0"}, 44 | "down": {"uv": [1, 7, 1.5, 7.5], "rotation": 180, "texture": "#0"} 45 | } 46 | }, 47 | { 48 | "from": [4, 6, 9], 49 | "to": [12, 7, 10], 50 | "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 1, 9]}, 51 | "faces": { 52 | "north": {"uv": [9, 4, 5, 3.5], "rotation": 180, "texture": "#0"}, 53 | "east": {"uv": [2, 7, 2.5, 7.5], "rotation": 90, "texture": "#0"}, 54 | "south": {"uv": [8, 5, 4, 5.5], "texture": "#0"}, 55 | "west": {"uv": [2.5, 7, 3, 7.5], "rotation": 270, "texture": "#0"}, 56 | "up": {"uv": [5, 3, 9, 3.5], "texture": "#0"}, 57 | "down": {"uv": [0, 5, 4, 5.5], "rotation": 180, "texture": "#0"} 58 | } 59 | }, 60 | { 61 | "from": [3, 7, 7], 62 | "to": [13, 7, 8], 63 | "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 1, 7]}, 64 | "faces": { 65 | "north": {"uv": [5, 0, 0, 0], "rotation": 180, "texture": "#0"}, 66 | "east": {"uv": [0, 0, 0, 0.5], "rotation": 270, "texture": "#0"}, 67 | "south": {"uv": [5, 0, 0, 0], "texture": "#0"}, 68 | "west": {"uv": [0, 0, 0, 0.5], "rotation": 90, "texture": "#0"}, 69 | "up": {"uv": [0, 3, 5, 3.5], "rotation": 180, "texture": "#0"}, 70 | "down": {"uv": [0, 3.5, 5, 4], "texture": "#0"} 71 | } 72 | }, 73 | { 74 | "from": [3, 7, 8], 75 | "to": [13, 7, 9], 76 | "rotation": {"angle": 22.5, "axis": "x", "origin": [8, 1, 9]}, 77 | "faces": { 78 | "north": {"uv": [5, 0, 0, 0], "rotation": 180, "texture": "#0"}, 79 | "east": {"uv": [0, 0, 0, 0.5], "rotation": 90, "texture": "#0"}, 80 | "south": {"uv": [5, 0, 0, 0], "texture": "#0"}, 81 | "west": {"uv": [0, 0, 0, 0.5], "rotation": 270, "texture": "#0"}, 82 | "up": {"uv": [0, 4.5, 5, 5], "texture": "#0"}, 83 | "down": {"uv": [0, 4, 5, 4.5], "rotation": 180, "texture": "#0"} 84 | } 85 | }, 86 | { 87 | "from": [3, 1, 6], 88 | "to": [4, 7, 7], 89 | "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 1, 7]}, 90 | "faces": { 91 | "north": {"uv": [6, 6, 5.5, 9], "rotation": 180, "texture": "#0"}, 92 | "east": {"uv": [6, 1.5, 9, 2], "rotation": 270, "texture": "#0"}, 93 | "south": {"uv": [5.5, 9, 5, 6], "texture": "#0"}, 94 | "west": {"uv": [6, 2, 9, 2.5], "rotation": 90, "texture": "#0"}, 95 | "up": {"uv": [6, 7, 6.5, 7.5], "rotation": 180, "texture": "#0"}, 96 | "down": {"uv": [6.5, 7, 7, 7.5], "texture": "#0"} 97 | } 98 | }, 99 | { 100 | "from": [4, 6, 6], 101 | "to": [12, 7, 7], 102 | "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 1, 7]}, 103 | "faces": { 104 | "north": {"uv": [8, 5.5, 4, 6], "rotation": 180, "texture": "#0"}, 105 | "east": {"uv": [1, 7.5, 1.5, 8], "rotation": 270, "texture": "#0"}, 106 | "south": {"uv": [4, 6, 0, 5.5], "texture": "#0"}, 107 | "west": {"uv": [1.5, 7.5, 2, 8], "rotation": 90, "texture": "#0"}, 108 | "up": {"uv": [5, 4, 9, 4.5], "rotation": 180, "texture": "#0"}, 109 | "down": {"uv": [5, 4.5, 9, 5], "texture": "#0"} 110 | } 111 | }, 112 | { 113 | "from": [12, 1, 6], 114 | "to": [13, 7, 7], 115 | "rotation": {"angle": -22.5, "axis": "x", "origin": [8, 1, 7]}, 116 | "faces": { 117 | "north": {"uv": [1, 6.5, 0.5, 9.5], "rotation": 180, "texture": "#0"}, 118 | "east": {"uv": [6, 2.5, 9, 3], "rotation": 270, "texture": "#0"}, 119 | "south": {"uv": [0.5, 9.5, 0, 6.5], "texture": "#0"}, 120 | "west": {"uv": [6, 6, 9, 6.5], "rotation": 90, "texture": "#0"}, 121 | "up": {"uv": [7, 6.5, 7.5, 7], "rotation": 180, "texture": "#0"}, 122 | "down": {"uv": [7, 7, 7.5, 7.5], "texture": "#0"} 123 | } 124 | } 125 | ], 126 | "display": { 127 | "thirdperson_righthand": { 128 | "translation": [0, 3.75, 1], 129 | "scale": [0.5, 0.5, 0.5] 130 | }, 131 | "thirdperson_lefthand": { 132 | "translation": [0, 3.75, 0], 133 | "scale": [0.5, 0.5, 0.5] 134 | }, 135 | "firstperson_righthand": { 136 | "translation": [3, 8.25, 1.5] 137 | }, 138 | "firstperson_lefthand": { 139 | "translation": [3, 8.25, 1.5] 140 | }, 141 | "ground": { 142 | "translation": [0, 4, 0] 143 | }, 144 | "gui": { 145 | "rotation": [31.75, 29, 0], 146 | "translation": [0, 5.75, 0] 147 | } 148 | } 149 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_all", 3 | "textures": { 4 | "all": "oxidized:block/vertical_cut_copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_all", 3 | "textures": { 4 | "all": "oxidized:block/vertical_cut_exposed_copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_all", 3 | "textures": { 4 | "all": "oxidized:block/vertical_cut_oxidized_copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/block/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "block/cube_all", 3 | "textures": { 4 | "all": "oxidized:block/vertical_cut_weathered_copper_block" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_barometer.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/copper_barometer" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_button.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/copper_button_inventory" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_golem_spawn_egg.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/template_spawn_egg" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_kiln.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/copper_kiln_off" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/copper_lantern" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_nugget.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/copper_nugget" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/copper_pan" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_pulsar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/copper_pulsar" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:item/generated", 3 | "textures": { 4 | "layer0": "oxidized:block/copper_rail" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/copper_trap" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_axe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_axe" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_hoe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_hoe" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_pickaxe" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_shovel.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_shovel" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_sword.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/handheld", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_sword" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/rose_gold_upgrade_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "item/generated", 3 | "textures": { 4 | "layer0": "oxidized:item/rose_gold_upgrade_template" 5 | } 6 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_exposed_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_oxidized_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_weathered_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/waxed_vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/waxed_vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_exposed_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/waxed_vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_oxidized_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/models/item/waxed_vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "oxidized:block/vertical_weathered_cut_copper" 3 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_lantern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_lantern.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_lantern.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 8 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_lantern_hanging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_lantern_hanging.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_lantern_hanging.png.mcmeta: -------------------------------------------------------------------------------- 1 | { 2 | "animation": { 3 | "frametime": 8 4 | } 5 | } -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_pan.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_rail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_rail.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_rail_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_rail_on.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/copper_trap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/copper_trap.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/kiln_fire_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/kiln_fire_off.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/kiln_fire_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/kiln_fire_on.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/vertical_cut_copper_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/vertical_cut_copper_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/vertical_cut_exposed_copper_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/vertical_cut_exposed_copper_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/vertical_cut_oxidized_copper_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/vertical_cut_oxidized_copper_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/block/vertical_cut_weathered_copper_block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/block/vertical_cut_weathered_copper_block.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/entity/copper_golem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/entity/copper_golem.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/entity/exposed_copper_golem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/entity/exposed_copper_golem.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/entity/oxidized_copper_golem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/entity/oxidized_copper_golem.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/entity/weathered_copper_golem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/entity/weathered_copper_golem.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/copper_barometer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/copper_barometer.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/copper_lantern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/copper_lantern.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/copper_nugget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/copper_nugget.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/copper_pan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/copper_pan.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/copper_pulsar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/copper_pulsar.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_axe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_axe.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_hoe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_hoe.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_pickaxe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_pickaxe.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_shovel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_shovel.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_sword.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_sword.png -------------------------------------------------------------------------------- /src/main/resources/assets/oxidized/textures/item/rose_gold_upgrade_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Safrodev/oxidized/b80ee1fab833ae831071e008fb19f9a34e20e0f2/src/main/resources/assets/oxidized/textures/item/rose_gold_upgrade_template.png -------------------------------------------------------------------------------- /src/main/resources/data/c/tags/item/copper_nuggets.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "oxidized:copper_nugget" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "oxidized:vertical_cut_copper", 5 | "oxidized:vertical_exposed_cut_copper", 6 | "oxidized:vertical_weathered_cut_copper", 7 | "oxidized:vertical_oxidized_cut_copper", 8 | "oxidized:waxed_vertical_cut_copper", 9 | "oxidized:waxed_vertical_exposed_cut_copper", 10 | "oxidized:waxed_vertical_weathered_cut_copper", 11 | "oxidized:waxed_vertical_oxidized_cut_copper", 12 | "oxidized:copper_kiln", 13 | "oxidized:copper_pan", 14 | "oxidized:copper_lantern", 15 | "oxidized:copper_trap" 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/block/needs_stone_tool.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "oxidized:vertical_cut_copper", 5 | "oxidized:vertical_exposed_cut_copper", 6 | "oxidized:vertical_weathered_cut_copper", 7 | "oxidized:vertical_oxidized_cut_copper", 8 | "oxidized:waxed_vertical_cut_copper", 9 | "oxidized:waxed_vertical_exposed_cut_copper", 10 | "oxidized:waxed_vertical_weathered_cut_copper", 11 | "oxidized:waxed_vertical_oxidized_cut_copper", 12 | "oxidized:copper_kiln", 13 | "oxidized:copper_pan", 14 | "oxidized:copper_lantern", 15 | "oxidized:copper_trap" 16 | ] 17 | } -------------------------------------------------------------------------------- /src/main/resources/data/minecraft/tags/block/rails.json: -------------------------------------------------------------------------------- 1 | { 2 | "replace": false, 3 | "values": [ 4 | "oxidized:copper_rail" 5 | ] 6 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_barometer.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_barometer" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:redstone" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_barometer" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_button.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_button" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:copper_block" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_button" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_kiln.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_kiln" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:furnace" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_kiln" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_lantern" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:torch" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_lantern" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_nugget.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_nugget" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:copper_ingot" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_nugget" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_pan" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:copper_ingot" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_pan" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_pulsar.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_pulsar" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:redstone" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_pulsar" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_rail" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:redstone" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_rail" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:copper_trap" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_flint": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:flint" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:copper_trap" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_flint", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:vertical_cut_copper" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:copper_block" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:vertical_cut_copper" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:vertical_exposed_cut_copper" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:exposed_copper" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:vertical_exposed_cut_copper" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:vertical_oxidized_cut_copper" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:oxidized_copper" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:vertical_oxidized_cut_copper" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/advancement/recipes/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "parent": "minecraft:recipes/root", 3 | "rewards": { 4 | "recipes": [ 5 | "oxidized:vertical_weathered_cut_copper" 6 | ] 7 | }, 8 | "criteria": { 9 | "has_copper_block": { 10 | "trigger": "minecraft:inventory_changed", 11 | "conditions": { 12 | "items": [ 13 | { 14 | "items": [ 15 | "minecraft:weathered_copper" 16 | ] 17 | } 18 | ] 19 | } 20 | }, 21 | "has_the_recipe": { 22 | "trigger": "minecraft:recipe_unlocked", 23 | "conditions": { 24 | "recipe": "oxidized:vertical_weathered_cut_copper" 25 | } 26 | } 27 | }, 28 | "requirements": [ 29 | [ 30 | "has_copper_block", 31 | "has_the_recipe" 32 | ] 33 | ] 34 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/damage_type/trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "exhaustion": 0.1, 3 | "message_id": "trap", 4 | "scaling": "when_caused_by_living_non_player" 5 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/copper_kiln.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:copper_kiln" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:copper_lantern" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:copper_pan" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:copper_rail" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:copper_trap" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:vertical_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:vertical_exposed_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:vertical_oxidized_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:vertical_weathered_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/waxed_vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:waxed_vertical_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/waxed_vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:waxed_vertical_exposed_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/waxed_vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:waxed_vertical_oxidized_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/loot_table/blocks/waxed_vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:block", 3 | "pools": [ 4 | { 5 | "rolls": 1, 6 | "entries": [ 7 | { 8 | "type": "minecraft:item", 9 | "name": "oxidized:waxed_vertical_weathered_cut_copper" 10 | } 11 | ], 12 | "conditions": [ 13 | { 14 | "condition": "minecraft:survives_explosion" 15 | } 16 | ] 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/black_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:black_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:black_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/blue_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:blue_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:blue_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/brick_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:clay_ball" 5 | }, 6 | "result": { 7 | "id": "minecraft:brick" 8 | }, 9 | "experience": 0.2, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/brown_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:brown_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:brown_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/charcoal_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "tag": "minecraft:logs_that_burn" 5 | }, 6 | "result": { 7 | "id": "minecraft:charcoal" 8 | }, 9 | "experience": 0.15, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_barometer.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "#G#", 5 | "#R#", 6 | "###" 7 | ], 8 | "key": { 9 | "#": { 10 | "tag": "c:ingots/copper" 11 | }, 12 | "R": { 13 | "item": "minecraft:redstone" 14 | }, 15 | "G": { 16 | "item": "minecraft:glass" 17 | } 18 | }, 19 | "result": { 20 | "id": "oxidized:copper_barometer", 21 | "count": 1 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_button.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "group": "sticks", 4 | "pattern": [ 5 | "##" 6 | ], 7 | "key": { 8 | "#": { 9 | "tag": "c:ingots/copper" 10 | } 11 | }, 12 | "result": { 13 | "id": "oxidized:copper_button", 14 | "count": 1 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_kiln.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | " # ", 5 | "#F#", 6 | "###" 7 | ], 8 | "key": { 9 | "#": { 10 | "tag": "c:ingots/copper" 11 | }, 12 | "F": { 13 | "item": "minecraft:furnace" 14 | } 15 | }, 16 | "result": { 17 | "id": "oxidized:copper_kiln", 18 | "count": 1 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_lantern.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "XXX", 5 | "X#X", 6 | "XXX" 7 | ], 8 | "key": { 9 | "#": { 10 | "item": "minecraft:torch" 11 | }, 12 | "X": { 13 | "tag": "c:copper_nuggets" 14 | } 15 | }, 16 | "result": { 17 | "id": "oxidized:copper_lantern" 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_nugget.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "minecraft:copper_ingot" 6 | } 7 | ], 8 | "result": { 9 | "id": "oxidized:copper_nugget", 10 | "count": 9 11 | } 12 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_pan.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "#G#", 5 | "###" 6 | ], 7 | "key": { 8 | "#": { 9 | "tag": "c:ingots/copper" 10 | }, 11 | "G": { 12 | "item": "minecraft:string" 13 | } 14 | }, 15 | "result": { 16 | "id": "oxidized:copper_pan", 17 | "count": 1 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_pulsar.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "R R", 5 | "# #", 6 | "###" 7 | ], 8 | "key": { 9 | "#": { 10 | "tag": "c:ingots/copper" 11 | }, 12 | "R": { 13 | "item": "minecraft:redstone" 14 | } 15 | }, 16 | "result": { 17 | "id": "oxidized:copper_pulsar", 18 | "count": 1 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_rail.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "X X", 5 | "XSX", 6 | "XRX" 7 | ], 8 | "key": { 9 | "R": { 10 | "item": "minecraft:redstone" 11 | }, 12 | "S": { 13 | "item": "minecraft:stick" 14 | }, 15 | "X": { 16 | "tag": "c:ingots/copper" 17 | } 18 | }, 19 | "result": { 20 | "id": "oxidized:copper_rail", 21 | "count": 6 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/copper_trap.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "F F", 5 | "###", 6 | "###" 7 | ], 8 | "key": { 9 | "#": { 10 | "tag": "c:ingots/copper" 11 | }, 12 | "F": { 13 | "item": "minecraft:flint" 14 | } 15 | }, 16 | "result": { 17 | "id": "oxidized:copper_trap", 18 | "count": 1 19 | } 20 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/coppper_ingot_from_nuggets.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "###", 5 | "###", 6 | "###" 7 | ], 8 | "key": { 9 | "#": { 10 | "tag": "c:copper_nuggets" 11 | } 12 | }, 13 | "result": { 14 | "id": "minecraft:copper_ingot" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cracked_deepslate_bricks_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:deepslate_bricks" 5 | }, 6 | "result": { 7 | "id": "minecraft:cracked_deepslate_bricks" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cracked_deepslate_tiles_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:deepslate_tiles" 5 | }, 6 | "result": { 7 | "id": "minecraft:cracked_deepslate_tiles" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cracked_nether_bricks_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:nether_bricks" 5 | }, 6 | "result": { 7 | "id": "minecraft:cracked_nether_bricks" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cracked_polished_blackstone_bricks_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:polished_blackstone_bricks" 5 | }, 6 | "result": { 7 | "id": "minecraft:cracked_polished_blackstone_bricks" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cracked_stone_bricks_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:stone_bricks" 5 | }, 6 | "result": { 7 | "id": "minecraft:cracked_stone_bricks" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/cyan_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:cyan_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:cyan_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/deepslate_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:cobbled_deepslate" 5 | }, 6 | "result": { 7 | "id": "minecraft:deepslate" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/glass_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "tag": "minecraft:smelts_to_glass" 5 | }, 6 | "result": { 7 | "id": "minecraft:glass" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/gray_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:gray_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:gray_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/green_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:green_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:green_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/light_blue_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:light_blue_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:light_blue_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/light_gray_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:light_gray_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:light_gray_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/lime_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:lime_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:lime_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/magenta_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:magenta_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:magenta_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/nether_brick_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:netherrack" 5 | }, 6 | "result": { 7 | "id": "minecraft:nether_brick" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/orange_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:orange_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:orange_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/pink_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:pink_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:pink_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/purple_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:purple_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:purple_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/red_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:red_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:red_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_axe.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing_transform", 3 | "base": { 4 | "item": "minecraft:golden_axe" 5 | }, 6 | "addition": { 7 | "item": "minecraft:copper_ingot" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "oxidized:rose_gold_axe" 12 | }, 13 | "template": { 14 | "item": "oxidized:rose_gold_upgrade_template" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_hoe.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing_transform", 3 | "base": { 4 | "item": "minecraft:golden_hoe" 5 | }, 6 | "addition": { 7 | "item": "minecraft:copper_ingot" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "oxidized:rose_gold_hoe" 12 | }, 13 | "template": { 14 | "item": "oxidized:rose_gold_upgrade_template" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_pickaxe.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing_transform", 3 | "base": { 4 | "item": "minecraft:golden_pickaxe" 5 | }, 6 | "addition": { 7 | "item": "minecraft:copper_ingot" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "oxidized:rose_gold_pickaxe" 12 | }, 13 | "template": { 14 | "item": "oxidized:rose_gold_upgrade_template" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_shovel.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing_transform", 3 | "base": { 4 | "item": "minecraft:golden_shovel" 5 | }, 6 | "addition": { 7 | "item": "minecraft:copper_ingot" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "oxidized:rose_gold_shovel" 12 | }, 13 | "template": { 14 | "item": "oxidized:rose_gold_upgrade_template" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_sword.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:smithing_transform", 3 | "base": { 4 | "item": "minecraft:golden_sword" 5 | }, 6 | "addition": { 7 | "item": "minecraft:copper_ingot" 8 | }, 9 | "result": { 10 | "count": 1, 11 | "id": "oxidized:rose_gold_sword" 12 | }, 13 | "template": { 14 | "item": "oxidized:rose_gold_upgrade_template" 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/rose_gold_upgrade_template.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shapeless", 3 | "ingredients": [ 4 | { 5 | "item": "oxidized:copper_nugget" 6 | }, 7 | { 8 | "item": "minecraft:gold_nugget" 9 | } 10 | ], 11 | "result": { 12 | "id": "oxidized:rose_gold_upgrade_template", 13 | "count": 1 14 | } 15 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/smooth_basalt_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:basalt" 5 | }, 6 | "result": { 7 | "id": "minecraft:smooth_basalt" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/smooth_quartz_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:quartz_block" 5 | }, 6 | "result": { 7 | "id": "minecraft:smooth_quartz" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/smooth_red_sandstone_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:red_sandstone" 5 | }, 6 | "result": { 7 | "id": "minecraft:smooth_red_sandstone" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/smooth_sandstone_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:sandstone" 5 | }, 6 | "result": { 7 | "id": "minecraft:smooth_sandstone" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/smooth_stone_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:stone" 5 | }, 6 | "result": { 7 | "id": "minecraft:smooth_stone" 8 | }, 9 | "experience": 0.2, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/stone_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:cobblestone" 5 | }, 6 | "result": { 7 | "id": "minecraft:stone" 8 | }, 9 | "experience": 0.2, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/terracotta_kiln_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:clay" 5 | }, 6 | "result": { 7 | "id": "minecraft:terracotta" 8 | }, 9 | "experience": 0.3, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/vertical_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "##", 5 | "##" 6 | ], 7 | "key": { 8 | "#": { 9 | "item": "minecraft:cut_copper" 10 | } 11 | }, 12 | "result": { 13 | "id": "oxidized:vertical_cut_copper", 14 | "count": 4 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/vertical_exposed_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "##", 5 | "##" 6 | ], 7 | "key": { 8 | "#": { 9 | "item": "minecraft:exposed_cut_copper" 10 | } 11 | }, 12 | "result": { 13 | "id": "oxidized:vertical_exposed_cut_copper", 14 | "count": 4 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/vertical_oxidized_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "##", 5 | "##" 6 | ], 7 | "key": { 8 | "#": { 9 | "item": "minecraft:oxidized_cut_copper" 10 | } 11 | }, 12 | "result": { 13 | "id": "oxidized:vertical_oxidized_cut_copper", 14 | "count": 4 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/vertical_weathered_cut_copper.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "minecraft:crafting_shaped", 3 | "pattern": [ 4 | "##", 5 | "##" 6 | ], 7 | "key": { 8 | "#": { 9 | "item": "minecraft:weathered_cut_copper" 10 | } 11 | }, 12 | "result": { 13 | "id": "oxidized:vertical_weathered_cut_copper", 14 | "count": 4 15 | } 16 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/white_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:white_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:white_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/data/oxidized/recipe/yellow_glazed_terracotta_smelting.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "oxidized:kiln_smelting", 3 | "ingredient": { 4 | "item": "minecraft:yellow_terracotta" 5 | }, 6 | "result": { 7 | "id": "minecraft:yellow_glazed_terracotta" 8 | }, 9 | "experience": 0.1, 10 | "cookingtime": 100 11 | } -------------------------------------------------------------------------------- /src/main/resources/fabric.mod.json: -------------------------------------------------------------------------------- 1 | { 2 | "schemaVersion": 1, 3 | "id": "oxidized", 4 | "version": "${version}", 5 | "name": "Oxidized", 6 | "description": "Adds more vanilla+ uses for copper", 7 | "authors": [ 8 | "Safro" 9 | ], 10 | "contact": { 11 | "homepage": "https://www.curseforge.com/minecraft/mc-mods/oxidized", 12 | "sources": "https://github.com/Safrodev/oxidized" 13 | }, 14 | 15 | "license": "GNU General Public License v3.0", 16 | "icon": "assets/oxidized/icon.png", 17 | 18 | "environment": "*", 19 | "entrypoints": { 20 | "main": [ 21 | "safro.oxidized.Oxidized" 22 | ], 23 | "client": [ 24 | "safro.oxidized.OxidizedClient" 25 | ], 26 | "rei_client": [ 27 | "safro.oxidized.rei.OxidizedREIPlugin" 28 | ] 29 | }, 30 | "mixins": [ 31 | "oxidized.mixins.json" 32 | ], 33 | 34 | "depends": { 35 | "fabricloader": ">=0.16.9", 36 | "fabric-api": "*", 37 | "minecraft": "1.21.x", 38 | "java": ">=21" 39 | }, 40 | "accessWidener": "oxidized.accesswidener" 41 | } 42 | -------------------------------------------------------------------------------- /src/main/resources/oxidized.accesswidener: -------------------------------------------------------------------------------- 1 | accessWidener v1 named -------------------------------------------------------------------------------- /src/main/resources/oxidized.mixins.json: -------------------------------------------------------------------------------- 1 | { 2 | "required": true, 3 | "minVersion": "0.8", 4 | "package": "safro.oxidized.mixin", 5 | "compatibilityLevel": "JAVA_21", 6 | "mixins": [ 7 | "MinecartEntityAccessor", 8 | "MinecartRailMixin", 9 | "LightningRodBlockMixin", 10 | "LivingEntityMixin", 11 | "ServerWorldAccessor" 12 | ], 13 | "injectors": { 14 | "defaultRequire": 1 15 | } 16 | } --------------------------------------------------------------------------------